[llvm-commits] [compiler-rt] r145427 - in /compiler-rt/trunk/lib: int_util.c int_util.h

Daniel Dunbar daniel at zuster.org
Tue Nov 29 11:44:14 PST 2011

Author: ddunbar
Date: Tue Nov 29 13:44:14 2011
New Revision: 145427

URL: http://llvm.org/viewvc/llvm-project?rev=145427&view=rev
lib/int_util: My refactoring to allow shared utility code had a fatal flaw when
multiple .a files would end up with duplicate strong definitions. This could
cause link failures in certain scenarios when both definitions got loaded.
 - The best solution I see for this (aside from not factoring out the utility
   code) is to mark the definitions weak. Better solutions appreciated!


Modified: compiler-rt/trunk/lib/int_util.c
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/int_util.c?rev=145427&r1=145426&r2=145427&view=diff
--- compiler-rt/trunk/lib/int_util.c (original)
+++ compiler-rt/trunk/lib/int_util.c Tue Nov 29 13:44:14 2011
@@ -11,6 +11,16 @@
 #include "int_util.h"
 #include "int_lib.h"
+/* NOTE: The definitions in this file are declared weak because we clients to be
+ * able to arbitrarily package individual functions into separate .a files. If
+ * we did not declare these weak, some link situations might end up seeing
+ * duplicate strong definitions of the same symbol.
+ *
+ * We can't use this solution for kernel use (which may not support weak), but
+ * currently expect that when built for kernel use all the functionality is
+ * packaged into a single library.
+ */
 #ifdef KERNEL_USE
 extern void panic(const char *, ...) __attribute__((noreturn));
@@ -24,6 +34,7 @@
 /* Get the system definition of abort() */
 #include <stdlib.h>
 void compilerrt_abort_impl(const char *file, int line, const char *function) {

Modified: compiler-rt/trunk/lib/int_util.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/int_util.h?rev=145427&r1=145426&r2=145427&view=diff
--- compiler-rt/trunk/lib/int_util.h (original)
+++ compiler-rt/trunk/lib/int_util.h Tue Nov 29 13:44:14 2011
@@ -24,6 +24,9 @@
 void compilerrt_abort_impl(const char *file, int line,
                            const char *function)
+#ifndef KERNEL_USE
+  __attribute__((weak))
   __attribute__((noreturn)) __attribute__((visibility("hidden")));
 #endif /* INT_UTIL_H */

More information about the llvm-commits mailing list