diff --git a/compiler-rt/lib/builtins/crtbegin.c b/compiler-rt/lib/builtins/crtbegin.c index d5f7756308b09..1f61a0475186c 100644 --- a/compiler-rt/lib/builtins/crtbegin.c +++ b/compiler-rt/lib/builtins/crtbegin.c @@ -54,6 +54,7 @@ static void __attribute__((used)) __do_init(void) { } #ifdef CRT_HAS_INITFINI_ARRAY +#ifdef __clang__ #if __has_feature(ptrauth_init_fini) // TODO: use __ptrauth-qualified pointers when they are supported on clang side #if __has_feature(ptrauth_init_fini_address_discrimination) @@ -70,6 +71,10 @@ __attribute__((section(".init_array"), used)) static void *__init = __attribute__((section(".init_array"), used)) static void (*__init)(void) = __do_init; #endif +#else +__attribute__((section(".init_array"), + used)) static void (*__init)(void) = __do_init; +#endif #elif defined(__i386__) || defined(__x86_64__) __asm__(".pushsection .init,\"ax\",@progbits\n\t" "call __do_init\n\t" @@ -125,6 +130,7 @@ static void __attribute__((used)) __do_fini(void) { } #ifdef CRT_HAS_INITFINI_ARRAY +#ifdef __clang__ #if __has_feature(ptrauth_init_fini) // TODO: use __ptrauth-qualified pointers when they are supported on clang side #if __has_feature(ptrauth_init_fini_address_discrimination) @@ -141,6 +147,10 @@ __attribute__((section(".fini_array"), used)) static void *__fini = __attribute__((section(".fini_array"), used)) static void (*__fini)(void) = __do_fini; #endif +#else +__attribute__((section(".fini_array"), + used)) static void (*__fini)(void) = __do_fini; +#endif #elif defined(__i386__) || defined(__x86_64__) __asm__(".pushsection .fini,\"ax\",@progbits\n\t" "call __do_fini\n\t"