aboutsummaryrefslogtreecommitdiffstats
path: root/libc/arch-common
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2017-07-24 16:53:11 -0700
committerElliott Hughes <enh@google.com>2017-07-25 11:54:33 -0700
commitb348d5cda89d0f4a8306056dde1c0423887854d6 (patch)
tree2a9c140dc3166ebc22527373169734a9fa841582 /libc/arch-common
parent4fce647a5bcb61680c9f865b05c9f43a4841b244 (diff)
downloadandroid_bionic-b348d5cda89d0f4a8306056dde1c0423887854d6.tar.gz
android_bionic-b348d5cda89d0f4a8306056dde1c0423887854d6.tar.bz2
android_bionic-b348d5cda89d0f4a8306056dde1c0423887854d6.zip
Build crtbegin with clang too.
If _start_main is static, clang optimizes it out and then generates an undefined reference from the inline assembler, so let's explicitly tell the compiler it's used. Bug: N/A Test: ran tests Change-Id: Iba3d9c63abae9a0dc32f236b01783515f0190956
Diffstat (limited to 'libc/arch-common')
-rw-r--r--libc/arch-common/bionic/crtbegin.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/libc/arch-common/bionic/crtbegin.c b/libc/arch-common/bionic/crtbegin.c
index d3a0f07c6..45c9ea707 100644
--- a/libc/arch-common/bionic/crtbegin.c
+++ b/libc/arch-common/bionic/crtbegin.c
@@ -30,16 +30,13 @@
#include <stddef.h>
#include <stdint.h>
-__attribute__((__section__(".preinit_array")))
-void (*__PREINIT_ARRAY__)(void) = (void (*)(void)) -1;
+#define SECTION(name) __attribute__((__section__(name)))
+SECTION(".preinit_array") void (*__PREINIT_ARRAY__)(void) = (void (*)(void)) -1;
+SECTION(".init_array") void (*__INIT_ARRAY__)(void) = (void (*)(void)) -1;
+SECTION(".fini_array") void (*__FINI_ARRAY__)(void) = (void (*)(void)) -1;
+#undef SECTION
-__attribute__((__section__(".init_array")))
-void (*__INIT_ARRAY__)(void) = (void (*)(void)) -1;
-
-__attribute__((__section__(".fini_array")))
-void (*__FINI_ARRAY__)(void) = (void (*)(void)) -1;
-
-static void _start_main(void* raw_args) {
+static void _start_main(void* raw_args) __used {
structors_array_t array;
array.preinit_array = &__PREINIT_ARRAY__;
array.init_array = &__INIT_ARRAY__;