首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用"clang“为启用"cfi”的"aarch64“编译.c文件?

如何使用"clang“为启用"cfi”的"aarch64“编译.c文件?
EN

Stack Overflow用户
提问于 2019-04-11 22:40:22
回答 2查看 398关注 0票数 0

我正在构建"main.c“文件:

代码语言:javascript
复制
int sum(int x, int y) {
  return x + y;
}

int dbl(int x) {
  return x + x;
}

void call_fn(int (*fn)(int)) {
  (*fn)(42);
}

void erase_type(void *fn) {
  call_fn(fn);
}

int main() {
  erase_type(sum);
  return 0;
}

对于启用了"cfi“杀毒程序功能的主机"x86”平台,请使用以下命令:

代码语言:javascript
复制
./clang-8 \
-fsanitize=cfi \
-fvisibility=hidden \
-fno-sanitize-trap=all \
-fuse-ld=gold \
-flto \
main.c \
-o \
main

现在我需要为"aarch64“处理器编译这个文件。我知道如何简单地编译这个文件(禁用了cfi功能)。

代码语言:javascript
复制
rm -f main.o && \
./clang-8 \
-cc1 \
-triple \
aarch64-funnyos-unknown-gnueabi \
-emit-obj \
-target-cpu \
generic \
-O2 \
-Wall \
-o \
main.o \
-x \
c \
main.c \
&& \
file main.o

但是我不知道如何在启用“cfi”的情况下为"aarch64“编译"main.c”文件。

有人知道怎么做吗?

UPD。假设 CPU 是 ARMv8 类型,Linux 正在 QEMU 模拟器上运行。假设主机是 x86 并在 Linux 上运行。我需要在主机 x86 Linux 上为 ARMv8 目标(在 QEMU、Linux 上运行)交叉编译代码

EN

回答 2

Stack Overflow用户

发布于 2019-04-12 18:35:21

您的x86和AArch64命令非常不同。第一个运行支持compiler flags (特别是-fsanitize=cfi)的编译器驱动程序。

但是,您的第二个命令可以正常运行编译器(如-cc1开关所示)。这是一种内部模式:它是由编译器驱动程序在幕后运行的,因此它不支持正常的编译器标志,也不意味着普通用户可以运行。您应该切换到在AArch64上使用编译器驱动程序。

票数 0
EN

Stack Overflow用户

发布于 2019-04-18 16:33:28

首先,我们需要通过clang的编译器将main.c编译成llvm的中间代码:

代码语言:javascript
复制
./clang-8 \
--target=\
aarch64-funnyos-unknown-gnueabi \
-c \
-flto \
-fsanitize=cfi \
-fvisibility=default \
main.c \
-o \
main.o

下一步是通过黄金链接器(例如,从AndroidNDK)使用黄金插件(来自LLVM项目)将这段代码转换/链接到二进制文件,告诉链接器仿真模式(-m选项,这意味着应该为哪个体系结构生成二进制文件):

代码语言:javascript
复制
/PATH/TO/aarch64-linux-android-4.9/prebuilt/linux-x86_64/aarch64-linux-android/bin/ld.gold \
-pie \
-m \
aarch64_elf64_le_vec \
-o \
main \
-plugin \
/PATH/TO/llvm-project/build/lib/LLVMgold.so \
-plugin-opt=mcpu=generic \
-plugin-opt=O2 \
-plugin-opt=-debugger-tune=gdb \
main.o

另外,感谢@yugr的帮助和帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55635216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档