mirror of
https://github.com/intel/llvm.git
synced 2026-01-15 04:17:17 +08:00
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:
@@ -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();
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user