[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
Log:
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
compiler-rt/trunk/lib/int_util.h
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>
+__attribute__((weak))
__attribute__((visibility("hidden")))
void compilerrt_abort_impl(const char *file, int line, const char *function) {
abort();
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 @@
__FUNCTION__)
void compilerrt_abort_impl(const char *file, int line,
const char *function)
+#ifndef KERNEL_USE
+ __attribute__((weak))
+#endif
__attribute__((noreturn)) __attribute__((visibility("hidden")));
#endif /* INT_UTIL_H */
More information about the llvm-commits
mailing list