From b16b53b181939fa6112498a00005d1df40d6de86 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Thu, 15 Apr 2010 20:54:25 +0000 Subject: [PATCH] Generalize the EXPORTED_SYMBOL_FILE concept in the Makefiles to work with native linking export files, including running sed to prepend underscores on darwin, and make use of it in libLTO and libEnhancedDisassembly. Remove the leading underscores from library export files so that they work with the new EXPORTED_SYMBOL_FILE support. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101399 91177308-0d34-0410-b5e6-96231b3b80d8 --- Makefile.rules | 35 +++++++++++++ tools/edis/EnhancedDisassembly.exports | 72 +++++++++++++------------- tools/edis/Makefile | 3 +- tools/lto/Makefile | 3 +- tools/lto/lto.exports | 47 ++++++++--------- 5 files changed, 98 insertions(+), 62 deletions(-) diff --git a/Makefile.rules b/Makefile.rules index 9a6280bf7f2..f4a1bc95db1 100644 --- a/Makefile.rules +++ b/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/tools/edis/EnhancedDisassembly.exports b/tools/edis/EnhancedDisassembly.exports index d3f87435cc3..7050f7f3294 100644 --- a/tools/edis/EnhancedDisassembly.exports +++ b/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/tools/edis/Makefile b/tools/edis/Makefile index 0ef0dce621d..4f9d03aad65 100644 --- a/tools/edis/Makefile +++ b/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/tools/lto/Makefile b/tools/lto/Makefile index 3120aa52c95..fe01ac18863 100644 --- a/tools/lto/Makefile +++ b/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/tools/lto/lto.exports b/tools/lto/lto.exports index 01f43d1c36d..9011cf602b1 100644 --- a/tools/lto/lto.exports +++ b/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 -- 2.34.1