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!

llvm-svn: 145427
This commit is contained in:
Daniel Dunbar
2011-11-29 19:44:14 +00:00
parent b2d03a6d00
commit e2ed5fb636
2 changed files with 14 additions and 0 deletions

View File

@@ -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 @@ void compilerrt_abort_impl(const char *file, int line, const char *function) {
/* 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();

View File

@@ -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 */