Я создаю файл "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;
}
для платформы хоста "x86" с включенной функцией очистки "cfi" с помощью следующей команды:
./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
Но я не знаю, как скомпилировать файл "main.c" для "aarch64" с включенной "cfi".
Кто-нибудь знает, как это сделать?
UPD. Предположим, что процессор относится к типу ARMv8, а Linux работает, например, на эмуляторе QEMU. Предположим, хост - x86 и работает под Linux. Мне нужно выполнить кросс-компиляцию кода на хосте x86 Linux для цели ARMv8 (которая работает на QEMU, Linux).