我正在构建“main.c”文件:
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”平台,使用以下命令:
./clang-8 \
-fsanitize=cfi \
-fvisibility=hidden \
-fno-sanitize-trap=all \
-fuse-ld=gold \
-flto \
main.c \
-o \
main
现在我需要为“aarch64”处理器编译这个文件。我知道如何简单地编译这个文件(禁用 cfi 功能)。
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 上运行)交叉编译代码。