diff --git a/llvm/Makefile.rules b/llvm/Makefile.rules index 9a6280bf7f24..f4a1bc95db1a 100644 --- a/llvm/Makefile.rules +++ b/llvm/Makefile.rules @@ -970,6 +970,37 @@ endif endif endif +# Set up the library exports file. +ifdef EXPORTED_SYMBOL_FILE + +# First, set up the native export file, which may differ from the source +# export file. + +ifeq ($(HOST_OS),Darwin) +# Darwin convention prefixes symbols with underscores. +NativeExportsFile := $(ObjDir)/$(EXPORTED_SYMBOL_FILE).sed +$(NativeExportsFile): $(EXPORTED_SYMBOL_FILE) + $(Verb) sed -e 's/[[:<:]]/_/' < $< > $@ +clean-local:: + -$(Verb) $(RM) -f $(NativeExportsFile) +else +NativeExportsFile := $(EXPORTED_SYMBOL_FILE) +endif + +# Now add the linker command-line options to use the native export file. + +ifeq ($(HOST_OS),Darwin) +LLVMLibsOptions += -Wl,-exported_symbols_list -Wl,$(NativeExportsFile) +endif + +# This isn't really Linux-specific; it works at least on gold and bfd ld, but +# there's no convenient way to detect it. +ifeq ($(HOST_OS),Linux) +LLVMLibsOptions += -Wl,-retain-symbols-file -Wl,$(NativeExportsFile) +endif + +endif + ############################################################################### # Library Build Rules: Four ways to build a library ############################################################################### @@ -1060,6 +1091,10 @@ ifdef SHARED_LIBRARY all-local:: $(LibName.SO) +ifdef EXPORTED_SYMBOL_FILE +$(LibName.SO): $(NativeExportsFile) +endif + ifdef LINK_LIBS_IN_SHARED ifdef LOADABLE_MODULE SharedLibKindMessage := "Loadable Module" diff --git a/llvm/tools/edis/EnhancedDisassembly.exports b/llvm/tools/edis/EnhancedDisassembly.exports index d3f87435cc3d..7050f7f32948 100644 --- a/llvm/tools/edis/EnhancedDisassembly.exports +++ b/llvm/tools/edis/EnhancedDisassembly.exports @@ -1,36 +1,36 @@ -_EDGetDisassembler -_EDGetRegisterName -_EDRegisterIsStackPointer -_EDRegisterIsProgramCounter -_EDCreateInsts -_EDReleaseInst -_EDInstByteSize -_EDGetInstString -_EDInstIsBranch -_EDInstIsMove -_EDBranchTargetID -_EDMoveSourceID -_EDMoveTargetID -_EDNumTokens -_EDGetToken -_EDGetTokenString -_EDOperandIndexForToken -_EDTokenIsWhitespace -_EDTokenIsPunctuation -_EDTokenIsOpcode -_EDTokenIsLiteral -_EDTokenIsRegister -_EDTokenIsNegativeLiteral -_EDLiteralTokenAbsoluteValue -_EDRegisterTokenValue -_EDNumOperands -_EDGetOperand -_EDOperandIsRegister -_EDOperandIsImmediate -_EDOperandIsMemory -_EDRegisterOperandValue -_EDImmediateOperandValue -_EDEvaluateOperand -_EDBlockCreateInsts -_EDBlockEvaluateOperand -_EDBlockVisitTokens +EDGetDisassembler +EDGetRegisterName +EDRegisterIsStackPointer +EDRegisterIsProgramCounter +EDCreateInsts +EDReleaseInst +EDInstByteSize +EDGetInstString +EDInstIsBranch +EDInstIsMove +EDBranchTargetID +EDMoveSourceID +EDMoveTargetID +EDNumTokens +EDGetToken +EDGetTokenString +EDOperandIndexForToken +EDTokenIsWhitespace +EDTokenIsPunctuation +EDTokenIsOpcode +EDTokenIsLiteral +EDTokenIsRegister +EDTokenIsNegativeLiteral +EDLiteralTokenAbsoluteValue +EDRegisterTokenValue +EDNumOperands +EDGetOperand +EDOperandIsRegister +EDOperandIsImmediate +EDOperandIsMemory +EDRegisterOperandValue +EDImmediateOperandValue +EDEvaluateOperand +EDBlockCreateInsts +EDBlockEvaluateOperand +EDBlockVisitTokens diff --git a/llvm/tools/edis/Makefile b/llvm/tools/edis/Makefile index 0ef0dce621da..4f9d03aad65c 100644 --- a/llvm/tools/edis/Makefile +++ b/llvm/tools/edis/Makefile @@ -12,6 +12,8 @@ LIBRARYNAME = EnhancedDisassembly BUILT_SOURCES = EDInfo.inc +EXPORTED_SYMBOL_FILE = EnhancedDisassembly.exports + # Include this here so we can get the configuration of the targets # that have been configured for construction. We have to do this # early so we can set up LINK_COMPONENTS before including Makefile.rules @@ -32,7 +34,6 @@ ifeq ($(HOST_OS),Darwin) # extra options to override libtool defaults LLVMLibsOptions := $(LLVMLibsOptions) \ -avoid-version \ - -Wl,-exported_symbols_list -Wl,$(PROJ_SRC_DIR)/EnhancedDisassembly.exports \ -Wl,-dead_strip ifdef EDIS_VERSION diff --git a/llvm/tools/lto/Makefile b/llvm/tools/lto/Makefile index 3120aa52c953..fe01ac188633 100644 --- a/llvm/tools/lto/Makefile +++ b/llvm/tools/lto/Makefile @@ -10,6 +10,8 @@ LEVEL = ../.. LIBRARYNAME = LTO +EXPORTED_SYMBOL_FILE = lto.exports + # Include this here so we can get the configuration of the targets # that have been configured for construction. We have to do this # early so we can set up LINK_COMPONENTS before including Makefile.rules @@ -32,7 +34,6 @@ ifeq ($(HOST_OS),Darwin) # extra options to override libtool defaults LLVMLibsOptions := $(LLVMLibsOptions) \ -avoid-version \ - -Wl,-exported_symbols_list -Wl,$(PROJ_SRC_DIR)/lto.exports \ -Wl,-dead_strip \ -Wl,-seg1addr -Wl,0xE0000000 diff --git a/llvm/tools/lto/lto.exports b/llvm/tools/lto/lto.exports index 01f43d1c36da..9011cf602b1a 100644 --- a/llvm/tools/lto/lto.exports +++ b/llvm/tools/lto/lto.exports @@ -1,24 +1,23 @@ -_lto_get_error_message -_lto_get_version -_lto_module_create -_lto_module_create_from_memory -_lto_module_get_num_symbols -_lto_module_get_symbol_attribute -_lto_module_get_symbol_name -_lto_module_get_target_triple -_lto_module_is_object_file -_lto_module_is_object_file_for_target -_lto_module_is_object_file_in_memory -_lto_module_is_object_file_in_memory_for_target -_lto_module_dispose -_lto_codegen_add_module -_lto_codegen_add_must_preserve_symbol -_lto_codegen_compile -_lto_codegen_create -_lto_codegen_dispose -_lto_codegen_set_debug_model -_lto_codegen_set_pic_model -_lto_codegen_write_merged_modules -_lto_codegen_debug_options -_lto_codegen_set_assembler_path - +lto_get_error_message +lto_get_version +lto_module_create +lto_module_create_from_memory +lto_module_get_num_symbols +lto_module_get_symbol_attribute +lto_module_get_symbol_name +lto_module_get_target_triple +lto_module_is_object_file +lto_module_is_object_file_for_target +lto_module_is_object_file_in_memory +lto_module_is_object_file_in_memory_for_target +lto_module_dispose +lto_codegen_add_module +lto_codegen_add_must_preserve_symbol +lto_codegen_compile +lto_codegen_create +lto_codegen_dispose +lto_codegen_set_debug_model +lto_codegen_set_pic_model +lto_codegen_write_merged_modules +lto_codegen_debug_options +lto_codegen_set_assembler_path