[compiler-rt] 5789e83 - Support powerpc when builing without init_array.

Sterling Augustine via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 18 13:38:20 PST 2019


Author: Sterling Augustine
Date: 2019-12-18T13:37:08-08:00
New Revision: 5789e83dedb97588ad75cca36d01ba6c5142d6d3

URL: https://github.com/llvm/llvm-project/commit/5789e83dedb97588ad75cca36d01ba6c5142d6d3
DIFF: https://github.com/llvm/llvm-project/commit/5789e83dedb97588ad75cca36d01ba6c5142d6d3.diff

LOG: Support powerpc when builing without init_array.

Summary: Also add an error case when targetting an unimplement architecture.

Subscribers: nemanjai, jsji, shchenz, #sanitizers, llvm-commits

Tags: #sanitizers, #llvm

Differential Revision: https://reviews.llvm.org/D71670

Added: 
    

Modified: 
    compiler-rt/lib/crt/crtbegin.c

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/crt/crtbegin.c b/compiler-rt/lib/crt/crtbegin.c
index 5b56ea3df757..812cea4143f5 100644
--- a/compiler-rt/lib/crt/crtbegin.c
+++ b/compiler-rt/lib/crt/crtbegin.c
@@ -57,8 +57,15 @@ __asm__(".pushsection .init,\"ax\", at progbits\n\t"
 __asm__(".pushsection .init,\"ax\",%progbits\n\t"
     "bl " __USER_LABEL_PREFIX__ "__do_init\n\t"
     ".popsection");
-#endif  // CRT_HAS_INITFINI_ARRAY
-#endif
+#elif defined(__powerpc__) || defined(__powerpc64__)
+__asm__(".pushsection .init,\"ax\", at progbits\n\t"
+    "bl " __USER_LABEL_PREFIX__ "__do_init\n\t"
+    "nop\n\t"
+    ".popsection");
+#else
+#error "crtbegin without .init_fini array unimplemented for this architecture"
+#endif // defined(various architectures)
+#endif // CRT_HAS_INITFINI_ARRAY
 
 #ifndef CRT_HAS_INITFINI_ARRAY
 static fp __DTOR_LIST__[]
@@ -97,5 +104,12 @@ __asm__(".pushsection .fini,\"ax\", at progbits\n\t"
 __asm__(".pushsection .fini,\"ax\",%progbits\n\t"
     "bl " __USER_LABEL_PREFIX__ "__do_fini\n\t"
     ".popsection");
-#endif
+#elif defined(__powerpc__) || defined(__powerpc64__)
+__asm__(".pushsection .fini,\"ax\", at progbits\n\t"
+    "bl " __USER_LABEL_PREFIX__ "__do_fini\n\t"
+    "nop\n\t"
+    ".popsection");
+#else
+#error "crtbegin without .init_fini array unimplemented for this architecture"
+#endif  // defined(various architectures)
 #endif  // CRT_HAS_INIT_FINI_ARRAY


        


More information about the llvm-commits mailing list