[JITLink] Read symbol linkage from the correct field.

MachO symbol linkage is described by the desc field of the nlist entry, not the
type field.
This commit is contained in:
Lang Hames 2020-03-11 18:44:58 -07:00
parent b19801640b
commit c700e0317c
3 changed files with 59 additions and 1 deletions

View 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();

View File

@ -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

View File

@ -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