Skip to content

Commit

Permalink
[JITLink] Read symbol linkage from the correct field.
Browse files Browse the repository at this point in the history
MachO symbol linkage is described by the desc field of the nlist entry, not the
type field.
  • Loading branch information
lhames committed Mar 12, 2020
1 parent b198016 commit c700e03
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 1 deletion.
2 changes: 1 addition & 1 deletion llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp
Expand Up @@ -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();
Expand Down
@@ -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
39 changes: 39 additions & 0 deletions llvm/test/ExecutionEngine/JITLink/X86/MachO_weak_definitions.s
@@ -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

0 comments on commit c700e03

Please sign in to comment.