[JITLink] Read symbol linkage from the correct field.
authorLang Hames <lhames@gmail.com>
Thu, 12 Mar 2020 01:44:58 +0000 (18:44 -0700)
committerLang Hames <lhames@gmail.com>
Thu, 12 Mar 2020 03:04:54 +0000 (20:04 -0700)
MachO symbol linkage is described by the desc field of the nlist entry, not the
type field.

llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp
llvm/test/ExecutionEngine/JITLink/X86/Inputs/MachO_weak_defs_extra.s [new file with mode: 0644]
llvm/test/ExecutionEngine/JITLink/X86/MachO_weak_definitions.s [new file with mode: 0644]

index 89eef57..eea3a72 100644 (file)
@@ -274,7 +274,7 @@ Error MachOLinkGraphBuilder::createNormalizedSymbols() {
 
     IndexToSymbol[SymbolIndex] =
         &createNormalizedSymbol(*Name, Value, Type, Sect, Desc,
-                                getLinkage(Type), getScope(*Name, Type));
+                                getLinkage(Desc), getScope(*Name, Type));
   }
 
   return Error::success();
diff --git a/llvm/test/ExecutionEngine/JITLink/X86/Inputs/MachO_weak_defs_extra.s b/llvm/test/ExecutionEngine/JITLink/X86/Inputs/MachO_weak_defs_extra.s
new file mode 100644 (file)
index 0000000..b25bb8a
--- /dev/null
@@ -0,0 +1,19 @@
+# Supplies a weak def, WeakDef, and a pointer holding its address,
+# WeakDefAddrInExtraFile.
+
+       .section        __TEXT,__text,regular,pure_instructions
+       .build_version macos, 10, 14    sdk_version 10, 14
+       .section        __DATA,__data
+       .globl  WeakDef
+       .weak_definition        WeakDef
+       .p2align        2
+WeakDef:
+       .long   2
+
+       .globl  WeakDefAddrInExtraFile
+       .p2align        3
+WeakDefAddrInExtraFile:
+       .quad   WeakDef
+
+
+.subsections_via_symbols
diff --git a/llvm/test/ExecutionEngine/JITLink/X86/MachO_weak_definitions.s b/llvm/test/ExecutionEngine/JITLink/X86/MachO_weak_definitions.s
new file mode 100644 (file)
index 0000000..e644013
--- /dev/null
@@ -0,0 +1,39 @@
+# RUN: rm -rf %t && mkdir -p %t
+# RUN: llvm-mc -triple x86_64-apple-macosx10.9 -filetype=obj \
+# RUN:   -o %t/MachO_weak_defs_extra.o %S/Inputs/MachO_weak_defs_extra.s
+# RUN: llvm-mc -triple x86_64-apple-macosx10.9 -filetype=obj \
+# RUN:   -o %t/MachO_weak_definitions.o %s
+# RUN: llvm-jitlink -noexec -check=%s %t/MachO_weak_definitions.o \
+# RUN:   %t/MachO_weak_defs_extra.o
+#
+# Check that objects linked separately agree on the address of weak symbols.
+#
+# jitlink-check: *{8}WeakDefAddrInThisFile = *{8}WeakDefAddrInExtraFile
+
+       .section        __TEXT,__text,regular,pure_instructions
+       .build_version macos, 10, 14    sdk_version 10, 14
+       .globl  _main
+       .p2align        4, 0x90
+_main:
+       retq
+
+       .section        __DATA,__data
+       .globl  WeakDef
+       .weak_definition        WeakDef
+       .p2align        2
+WeakDef:
+       .long   1
+
+       .globl  WeakDefAddrInThisFile
+       .p2align        3
+WeakDefAddrInThisFile:
+       .quad   WeakDef
+
+# Take the address of WeakDefAddrInExtraFile to force its materialization
+       .globl  extra_file_anchor
+       .p2align        3
+extra_file_anchor:
+       .quad   WeakDefAddrInExtraFile
+
+
+.subsections_via_symbols