<div><div class="gmail_quote">On 15 April 2010 13:54, Dan Gohman <span dir="ltr"><<a href="mailto:gohman@apple.com">gohman@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Author: djg<br>
Date: Thu Apr 15 15:54:25 2010<br>
New Revision: 101399<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=101399&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=101399&view=rev</a><br>
Log:<br>
Generalize the EXPORTED_SYMBOL_FILE concept in the Makefiles to work with<br>
native linking export files, including running sed to prepend underscores<br>
on darwin, and make use of it in libLTO and libEnhancedDisassembly.<br>
<br>
Remove the leading underscores from library export files so that they<br>
work with the new EXPORTED_SYMBOL_FILE support.<br>
<br>
Modified:<br>
    llvm/trunk/Makefile.rules<br>
    llvm/trunk/tools/edis/EnhancedDisassembly.exports<br>
    llvm/trunk/tools/edis/Makefile<br>
    llvm/trunk/tools/lto/Makefile<br>
    llvm/trunk/tools/lto/lto.exports<br>
<br>
Modified: llvm/trunk/Makefile.rules<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.rules?rev=101399&r1=101398&r2=101399&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.rules?rev=101399&r1=101398&r2=101399&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/Makefile.rules (original)<br>
+++ llvm/trunk/Makefile.rules Thu Apr 15 15:54:25 2010<br>
@@ -970,6 +970,37 @@<br>
 endif<br>
 endif<br>
<br>
+# Set up the library exports file.<br>
+ifdef EXPORTED_SYMBOL_FILE<br>
+<br>
+# First, set up the native export file, which may differ from the source<br>
+# export file.<br>
+<br>
+ifeq ($(HOST_OS),Darwin)<br>
+# Darwin convention prefixes symbols with underscores.<br>
+NativeExportsFile := $(ObjDir)/$(EXPORTED_SYMBOL_FILE).sed<br>
+$(NativeExportsFile): $(EXPORTED_SYMBOL_FILE)<br>
+       $(Verb) sed -e 's/[[:<:]]/_/' < $< > $@<br>
+clean-local::<br>
+       -$(Verb) $(RM) -f $(NativeExportsFile)<br>
+else<br>
+NativeExportsFile := $(EXPORTED_SYMBOL_FILE)<br>
+endif<br>
+<br>
+# Now add the linker command-line options to use the native export file.<br>
+<br>
+ifeq ($(HOST_OS),Darwin)<br>
+LLVMLibsOptions += -Wl,-exported_symbols_list -Wl,$(NativeExportsFile)<br>
+endif<br>
+<br>
+# This isn't really Linux-specific; it works at least on gold and bfd ld, but<br>
+# there's no convenient way to detect it.<br>
+ifeq ($(HOST_OS),Linux)<br>
+LLVMLibsOptions += -Wl,-retain-symbols-file -Wl,$(NativeExportsFile)<br></blockquote><div><br></div><div>This broke the tools/edis build on my system because the snapshot version of gold I have happens to not support the -retain-symbols-file flag, and instead parsed it as '-r' which is incompatible with '-shared'.<div>

<br></div><div>I don't know whether this is unique to my snapshot (and I'm going to update it now -- why not?) but if there were a gold release that didn't support this flag, it might be necessary to move it to a configure test.</div>

<div><br></div><div>Nick</div></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
+endif<br>
+<br>
+endif<br>
+<br>
 ###############################################################################<br>
 # Library Build Rules: Four ways to build a library<br>
 ###############################################################################<br>
@@ -1060,6 +1091,10 @@<br>
<br>
 all-local:: $(LibName.SO)<br>
<br>
+ifdef EXPORTED_SYMBOL_FILE<br>
+$(LibName.SO): $(NativeExportsFile)<br>
+endif<br>
+<br>
 ifdef LINK_LIBS_IN_SHARED<br>
 ifdef LOADABLE_MODULE<br>
 SharedLibKindMessage := "Loadable Module"<br>
<br>
Modified: llvm/trunk/tools/edis/EnhancedDisassembly.exports<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/edis/EnhancedDisassembly.exports?rev=101399&r1=101398&r2=101399&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/edis/EnhancedDisassembly.exports?rev=101399&r1=101398&r2=101399&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/tools/edis/EnhancedDisassembly.exports (original)<br>
+++ llvm/trunk/tools/edis/EnhancedDisassembly.exports Thu Apr 15 15:54:25 2010<br>
@@ -1,36 +1,36 @@<br>
-_EDGetDisassembler<br>
-_EDGetRegisterName<br>
-_EDRegisterIsStackPointer<br>
-_EDRegisterIsProgramCounter<br>
-_EDCreateInsts<br>
-_EDReleaseInst<br>
-_EDInstByteSize<br>
-_EDGetInstString<br>
-_EDInstIsBranch<br>
-_EDInstIsMove<br>
-_EDBranchTargetID<br>
-_EDMoveSourceID<br>
-_EDMoveTargetID<br>
-_EDNumTokens<br>
-_EDGetToken<br>
-_EDGetTokenString<br>
-_EDOperandIndexForToken<br>
-_EDTokenIsWhitespace<br>
-_EDTokenIsPunctuation<br>
-_EDTokenIsOpcode<br>
-_EDTokenIsLiteral<br>
-_EDTokenIsRegister<br>
-_EDTokenIsNegativeLiteral<br>
-_EDLiteralTokenAbsoluteValue<br>
-_EDRegisterTokenValue<br>
-_EDNumOperands<br>
-_EDGetOperand<br>
-_EDOperandIsRegister<br>
-_EDOperandIsImmediate<br>
-_EDOperandIsMemory<br>
-_EDRegisterOperandValue<br>
-_EDImmediateOperandValue<br>
-_EDEvaluateOperand<br>
-_EDBlockCreateInsts<br>
-_EDBlockEvaluateOperand<br>
-_EDBlockVisitTokens<br>
+EDGetDisassembler<br>
+EDGetRegisterName<br>
+EDRegisterIsStackPointer<br>
+EDRegisterIsProgramCounter<br>
+EDCreateInsts<br>
+EDReleaseInst<br>
+EDInstByteSize<br>
+EDGetInstString<br>
+EDInstIsBranch<br>
+EDInstIsMove<br>
+EDBranchTargetID<br>
+EDMoveSourceID<br>
+EDMoveTargetID<br>
+EDNumTokens<br>
+EDGetToken<br>
+EDGetTokenString<br>
+EDOperandIndexForToken<br>
+EDTokenIsWhitespace<br>
+EDTokenIsPunctuation<br>
+EDTokenIsOpcode<br>
+EDTokenIsLiteral<br>
+EDTokenIsRegister<br>
+EDTokenIsNegativeLiteral<br>
+EDLiteralTokenAbsoluteValue<br>
+EDRegisterTokenValue<br>
+EDNumOperands<br>
+EDGetOperand<br>
+EDOperandIsRegister<br>
+EDOperandIsImmediate<br>
+EDOperandIsMemory<br>
+EDRegisterOperandValue<br>
+EDImmediateOperandValue<br>
+EDEvaluateOperand<br>
+EDBlockCreateInsts<br>
+EDBlockEvaluateOperand<br>
+EDBlockVisitTokens<br>
<br>
Modified: llvm/trunk/tools/edis/Makefile<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/edis/Makefile?rev=101399&r1=101398&r2=101399&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/edis/Makefile?rev=101399&r1=101398&r2=101399&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/tools/edis/Makefile (original)<br>
+++ llvm/trunk/tools/edis/Makefile Thu Apr 15 15:54:25 2010<br>
@@ -12,6 +12,8 @@<br>
<br>
 BUILT_SOURCES = EDInfo.inc<br>
<br>
+EXPORTED_SYMBOL_FILE = EnhancedDisassembly.exports<br>
+<br>
 # Include this here so we can get the configuration of the targets<br>
 # that have been configured for construction. We have to do this<br>
 # early so we can set up LINK_COMPONENTS before including Makefile.rules<br>
@@ -32,7 +34,6 @@<br>
     # extra options to override libtool defaults<br>
     LLVMLibsOptions    := $(LLVMLibsOptions)  \<br>
                          -avoid-version \<br>
-                         -Wl,-exported_symbols_list -Wl,$(PROJ_SRC_DIR)/EnhancedDisassembly.exports \<br>
                          -Wl,-dead_strip<br>
<br>
     ifdef EDIS_VERSION<br>
<br>
Modified: llvm/trunk/tools/lto/Makefile<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/Makefile?rev=101399&r1=101398&r2=101399&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/Makefile?rev=101399&r1=101398&r2=101399&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/tools/lto/Makefile (original)<br>
+++ llvm/trunk/tools/lto/Makefile Thu Apr 15 15:54:25 2010<br>
@@ -10,6 +10,8 @@<br>
 LEVEL = ../..<br>
 LIBRARYNAME = LTO<br>
<br>
+EXPORTED_SYMBOL_FILE = lto.exports<br>
+<br>
 # Include this here so we can get the configuration of the targets<br>
 # that have been configured for construction. We have to do this<br>
 # early so we can set up LINK_COMPONENTS before including Makefile.rules<br>
@@ -32,7 +34,6 @@<br>
     # extra options to override libtool defaults<br>
     LLVMLibsOptions    := $(LLVMLibsOptions)  \<br>
                          -avoid-version \<br>
-                         -Wl,-exported_symbols_list -Wl,$(PROJ_SRC_DIR)/lto.exports \<br>
                          -Wl,-dead_strip \<br>
                          -Wl,-seg1addr -Wl,0xE0000000<br>
<br>
<br>
Modified: llvm/trunk/tools/lto/lto.exports<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/lto.exports?rev=101399&r1=101398&r2=101399&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/lto.exports?rev=101399&r1=101398&r2=101399&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/tools/lto/lto.exports (original)<br>
+++ llvm/trunk/tools/lto/lto.exports Thu Apr 15 15:54:25 2010<br>
@@ -1,24 +1,23 @@<br>
-_lto_get_error_message<br>
-_lto_get_version<br>
-_lto_module_create<br>
-_lto_module_create_from_memory<br>
-_lto_module_get_num_symbols<br>
-_lto_module_get_symbol_attribute<br>
-_lto_module_get_symbol_name<br>
-_lto_module_get_target_triple<br>
-_lto_module_is_object_file<br>
-_lto_module_is_object_file_for_target<br>
-_lto_module_is_object_file_in_memory<br>
-_lto_module_is_object_file_in_memory_for_target<br>
-_lto_module_dispose<br>
-_lto_codegen_add_module<br>
-_lto_codegen_add_must_preserve_symbol<br>
-_lto_codegen_compile<br>
-_lto_codegen_create<br>
-_lto_codegen_dispose<br>
-_lto_codegen_set_debug_model<br>
-_lto_codegen_set_pic_model<br>
-_lto_codegen_write_merged_modules<br>
-_lto_codegen_debug_options<br>
-_lto_codegen_set_assembler_path<br>
-<br>
+lto_get_error_message<br>
+lto_get_version<br>
+lto_module_create<br>
+lto_module_create_from_memory<br>
+lto_module_get_num_symbols<br>
+lto_module_get_symbol_attribute<br>
+lto_module_get_symbol_name<br>
+lto_module_get_target_triple<br>
+lto_module_is_object_file<br>
+lto_module_is_object_file_for_target<br>
+lto_module_is_object_file_in_memory<br>
+lto_module_is_object_file_in_memory_for_target<br>
+lto_module_dispose<br>
+lto_codegen_add_module<br>
+lto_codegen_add_must_preserve_symbol<br>
+lto_codegen_compile<br>
+lto_codegen_create<br>
+lto_codegen_dispose<br>
+lto_codegen_set_debug_model<br>
+lto_codegen_set_pic_model<br>
+lto_codegen_write_merged_modules<br>
+lto_codegen_debug_options<br>
+lto_codegen_set_assembler_path<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>