Skip to content

[MC,AArch64] Create mapping symbols with non-unique names #99836

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lld/test/ELF/aarch64-cortex-a53-843419-abs-mapsyms.s
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
.type _start, %function
_start: ret

// CHECK: Name: $x.0
// CHECK: Name: $x
// CHECK-NEXT: Value: 0x0
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Local (0x0)
Expand Down
2 changes: 1 addition & 1 deletion lld/test/ELF/aarch64-gnu-ifunc.s
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
// CHECK-NEXT: Section: Undefined
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: $x.0
// CHECK-NEXT: Name: $x
// CHECK-NEXT: Value: 0x210188
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Local
Expand Down
12 changes: 6 additions & 6 deletions lld/test/ELF/aarch64-reloc-pauth.s
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,11 @@
# RELR-EMPTY:
# RELR-NEXT: Relocation section '.relr.auth.dyn' at offset 0x[[ADDR2]] contains 5 entries:
# RELR-NEXT: Index: Entry Address Symbolic Address
# RELR-NEXT: 0000: 0000000000030440 0000000000030440 $d.0
# RELR-NEXT: 0001: 000000000000000f 0000000000030448 $d.0 + 0x8
# RELR-NEXT: 0000000000030450 $d.0 + 0x10
# RELR-NEXT: 0000000000030458 $d.0 + 0x18
# RELR-NEXT: 0002: 0000000000030492 0000000000030492 $d.0 + 0x52
# RELR-NEXT: 0000: 0000000000030440 0000000000030440 $d
# RELR-NEXT: 0001: 000000000000000f 0000000000030448 $d + 0x8
# RELR-NEXT: 0000000000030450 $d + 0x10
# RELR-NEXT: 0000000000030458 $d + 0x18
# RELR-NEXT: 0002: 0000000000030492 0000000000030492 $d + 0x52

# HEX: Hex dump of section '.test':
# HEX-NEXT: 0x00030440 01000000 2a000020 42040300 2b000000
Expand Down Expand Up @@ -201,7 +201,7 @@
# EMPTY-RELA-EMPTY:
# EMPTY-RELA-NEXT: Relocation section '.relr.auth.dyn' at offset {{.+}} contains 1 entries:
# EMPTY-RELA-NEXT: Index: Entry Address Symbolic Address
# EMPTY-RELA-NEXT: 0000: 0000000000030310 0000000000030310 $d.0
# EMPTY-RELA-NEXT: 0000: 0000000000030310 0000000000030310 $d

# EMPTY-RELA-RO-NOT: .rela.dyn

Expand Down
4 changes: 2 additions & 2 deletions lld/test/ELF/aarch64-thunk-script.s
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ high_target:
// CHECK-NEXT: ret

/// Local symbols copied from %t.o
// NM: t $x.0
// NM-NEXT: t $x.1
// NM: t $x
// NM-NEXT: t $x
/// Local thunk symbols.
// NM-NEXT: t __AArch64AbsLongThunk_high_target
// NM-NEXT: t $x
Expand Down
4 changes: 2 additions & 2 deletions lld/test/ELF/basic-aarch64.s
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ _start:
# CHECK-NEXT: ]
# CHECK-NEXT: Address: 0x0
# CHECK-NEXT: Offset: 0x1AA
# CHECK-NEXT: Size: 13
# CHECK-NEXT: Size: 11
# CHECK-NEXT: Link: 0
# CHECK-NEXT: Info: 0
# CHECK-NEXT: AddressAlignment: 1
Expand Down Expand Up @@ -189,7 +189,7 @@ _start:
# CHECK-NEXT: Section: Undefined (0x0)
# CHECK-NEXT: }
# CHECK-NEXT: Symbol {
# CHECK-NEXT: Name: $x.0
# CHECK-NEXT: Name: $x
# CHECK-NEXT: Value: 0x210120
# CHECK-NEXT: Size: 0
# CHECK-NEXT: Binding: Local (0x0)
Expand Down
48 changes: 24 additions & 24 deletions lld/test/ELF/pack-dyn-relocs.s
Original file line number Diff line number Diff line change
Expand Up @@ -264,30 +264,30 @@
// RELR64-EMPTY:
// RELR64-NEXT: Relocation section '.relr.dyn' at offset {{.*}} contains 24 entries:
// RELR64-NEXT: Symbolic Address
// RELR64-NEXT: $d.0{{$}}
// RELR64-NEXT: $d.0 + 0x8
// RELR64-NEXT: $d.0 + 0x10
// RELR64-NEXT: $d.0 + 0x18
// RELR64-NEXT: $d.0 + 0x20
// RELR64-NEXT: $d.0 + 0x28
// RELR64-NEXT: $d.0 + 0x30
// RELR64-NEXT: $d.0 + 0x38
// RELR64-NEXT: $d.0 + 0x48
// RELR64-NEXT: $d.0 + 0x50
// RELR64-NEXT: $d.0 + 0x58
// RELR64-NEXT: $d.0 + 0x60
// RELR64-NEXT: $d.0 + 0x68
// RELR64-NEXT: $d.0 + 0x70
// RELR64-NEXT: $d.0 + 0x78
// RELR64-NEXT: $d.0 + 0x90
// RELR64-NEXT: $d.0 + 0x98
// RELR64-NEXT: $d.0 + 0xa0
// RELR64-NEXT: $d.0 + 0xa8
// RELR64-NEXT: $d.0 + 0xb0
// RELR64-NEXT: $d.0 + 0xb8
// RELR64-NEXT: $d.0 + 0xc0
// RELR64-NEXT: $d.0 + 0xc8
// RELR64-NEXT: $d.0 + 0xd0
// RELR64-NEXT: $d{{$}}
// RELR64-NEXT: $d + 0x8
// RELR64-NEXT: $d + 0x10
// RELR64-NEXT: $d + 0x18
// RELR64-NEXT: $d + 0x20
// RELR64-NEXT: $d + 0x28
// RELR64-NEXT: $d + 0x30
// RELR64-NEXT: $d + 0x38
// RELR64-NEXT: $d + 0x48
// RELR64-NEXT: $d + 0x50
// RELR64-NEXT: $d + 0x58
// RELR64-NEXT: $d + 0x60
// RELR64-NEXT: $d + 0x68
// RELR64-NEXT: $d + 0x70
// RELR64-NEXT: $d + 0x78
// RELR64-NEXT: $d + 0x90
// RELR64-NEXT: $d + 0x98
// RELR64-NEXT: $d + 0xa0
// RELR64-NEXT: $d + 0xa8
// RELR64-NEXT: $d + 0xb0
// RELR64-NEXT: $d + 0xb8
// RELR64-NEXT: $d + 0xc0
// RELR64-NEXT: $d + 0xc8
// RELR64-NEXT: $d + 0xd0
// RELR64-EMPTY:
// RELR64-NEXT: Hex dump of section '.data':
// RELR64-NEXT: 0x00030490 90040300 00000000 91040300 00000000 .
Expand Down
4 changes: 4 additions & 0 deletions llvm/include/llvm/MC/MCContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -468,6 +468,10 @@ class MCContext {
/// true, behaves like getOrCreateSymbol, prefixed with PrivateLabelPrefix.
MCSymbol *createBlockSymbol(const Twine &Name, bool AlwaysEmit = false);

/// Create a local, non-temporary symbol like an ELF mapping symbol. Calling
/// the function with the same name will generate new, unique instances.
MCSymbol *createLocalSymbol(StringRef Name);

/// Create the definition of a directional local symbol for numbered label
/// (used for "1:" definitions).
MCSymbol *createDirectionalLocalSymbol(unsigned LocalLabelVal);
Expand Down
5 changes: 5 additions & 0 deletions llvm/lib/MC/MCContext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,11 @@ MCSymbol *MCContext::createNamedTempSymbol() {
return createNamedTempSymbol("tmp");
}

MCSymbol *MCContext::createLocalSymbol(StringRef Name) {
MCSymbolTableEntry &NameEntry = getSymbolTableEntry(Name);
return createSymbolImpl(&NameEntry, /*IsTemporary=*/false);
}

unsigned MCContext::NextInstance(unsigned LocalLabelVal) {
MCLabel *&Label = Instances[LocalLabelVal];
if (!Label)
Expand Down
8 changes: 2 additions & 6 deletions llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ class AArch64ELFStreamer : public MCELFStreamer {
std::unique_ptr<MCCodeEmitter> Emitter)
: MCELFStreamer(Context, std::move(TAB), std::move(OW),
std::move(Emitter)),
MappingSymbolCounter(0), LastEMS(EMS_None) {}
LastEMS(EMS_None) {}

void changeSection(MCSection *Section, uint32_t Subsection = 0) override {
// We have to keep track of the mapping symbol state of any sections we
Expand All @@ -195,7 +195,6 @@ class AArch64ELFStreamer : public MCELFStreamer {

// Reset state between object emissions
void reset() override {
MappingSymbolCounter = 0;
MCELFStreamer::reset();
LastMappingSymbols.clear();
LastEMS = EMS_None;
Expand Down Expand Up @@ -271,15 +270,12 @@ class AArch64ELFStreamer : public MCELFStreamer {
}

void emitMappingSymbol(StringRef Name) {
auto *Symbol = cast<MCSymbolELF>(getContext().getOrCreateSymbol(
Name + "." + Twine(MappingSymbolCounter++)));
auto *Symbol = cast<MCSymbolELF>(getContext().createLocalSymbol(Name));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the removed code is the only use for MappingSymbolCounter, can it be removed?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed by the second commit. Thanks

emitLabel(Symbol);
Symbol->setType(ELF::STT_NOTYPE);
Symbol->setBinding(ELF::STB_LOCAL);
}

int64_t MappingSymbolCounter;

DenseMap<const MCSection *, ElfMappingSymbol> LastMappingSymbols;
ElfMappingSymbol LastEMS;
};
Expand Down
16 changes: 8 additions & 8 deletions llvm/test/CodeGen/AArch64/callbr-asm-obj-file.ll
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
@l = common hidden local_unnamed_addr global i32 0, align 4

; CHECK-LABEL: <test1>:
; CHECK-LABEL: <$d.1>:
; CHECK-LABEL: <$x.2>:
; CHECK-LABEL: <$d>:
; CHECK-LABEL: <$x>:
; CHECK-NEXT: b 0x2c <test1+0x2c>
; CHECK-LABEL: <$x.4>:
; CHECK-LABEL: <$x>:
; CHECK-NEXT: mov w0, wzr
; CHECK-NEXT: ldr x30, [sp], #16
; CHECK-NEXT: ret
Expand Down Expand Up @@ -41,8 +41,8 @@ declare dso_local i32 @i(...) local_unnamed_addr

; CHECK-LABEL: <test2>:
; CHECK: b {{.*}} <test2+0x1c>
; CHECK-LABEL: <$d.5>:
; CHECK-LABEL: <$x.6>:
; CHECK-LABEL: <$d>:
; CHECK-LABEL: <$x>:
; CHECK-NEXT: b {{.*}} <test2+0x18>
define hidden i32 @test2() local_unnamed_addr {
%1 = load i32, ptr @l, align 4
Expand Down Expand Up @@ -70,10 +70,10 @@ define hidden i32 @test2() local_unnamed_addr {
}

; CHECK-LABEL: <test3>:
; CHECK-LABEL: <$d.9>:
; CHECK-LABEL: <$x.10>:
; CHECK-LABEL: <$d>:
; CHECK-LABEL: <$x>:
; CHECK-NEXT: b {{.*}} <test3+0x34>
; CHECK-LABEL: <$x.12>:
; CHECK-LABEL: <$x>:
; CHECK-NEXT: ldr x30, [sp], #16
; CHECK-NEXT: ret
define internal i1 @test3() {
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/AArch64/inlineasm-ldr-pseudo.ll
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ entry:
; CHECK: 58000040 ldr x0, 0x10
; CHECK: d65f03c0 ret
; Make sure the constant pool entry comes after the return
; CHECK-LABEL: <$d.1>:
; CHECK-LABEL: <$d>:
define i32 @bar() nounwind {
entry:
%0 = tail call i32 asm sideeffect "ldr $0,=0x10001", "=r"() nounwind
Expand Down
6 changes: 3 additions & 3 deletions llvm/test/DebugInfo/Symbolize/ELF/aarch64-mapping-symbol.s
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
## addresses.
# RUN: llvm-nm --special-syms %t | FileCheck %s -check-prefix MAPPING_SYM

# MAPPING_SYM: 0000000000000000 t $d.0
# MAPPING_SYM-NEXT: 000000000000000c t $d.2
# MAPPING_SYM-NEXT: 0000000000000004 t $x.1
# MAPPING_SYM: 0000000000000000 t $d
# MAPPING_SYM-NEXT: 000000000000000c t $d
# MAPPING_SYM-NEXT: 0000000000000004 t $x
# MAPPING_SYM-NEXT: 0000000000000000 T foo

# RUN: llvm-symbolizer --obj=%t 0 4 0xc | FileCheck %s -check-prefix SYMBOL
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/MC/AArch64/CheckDataSymbol.s
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# RUN: llvm-mc -filetype=obj -assemble \
# RUN: -triple=aarch64- %s -o - \
# RUN: | llvm-readobj -S --symbols - | FileCheck %s
# CHECK: Name: $d.1 ({{[1-9][0-9]+}})
# CHECK: Name: $d ({{[1-9][0-9]+}})
# CHECK-NEXT: Value: 0x4
# CHECK-NEXT: Size: 0
# CHECK-NEXT: Binding: Local (0x0)
Expand Down
20 changes: 10 additions & 10 deletions llvm/test/MC/AArch64/mapping-across-sections.s
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// RUN: llvm-mc -triple=aarch64 -filetype=obj %s | llvm-objdump -t - | FileCheck %s
// RUN: llvm-mc -triple=aarch64 -filetype=obj %s | llvm-objdump -t - | FileCheck %s --match-full-lines

.section .text1,"ax"
add w0, w0, w0
Expand Down Expand Up @@ -28,13 +28,13 @@ add w0, w0, w0
.section ".note.GNU-stack","",@progbits

// CHECK: SYMBOL TABLE:
// CHECK-NEXT: 0000000000000000 l .text1 0000000000000000 $x.0
// CHECK-NEXT: 0000000000000000 l .text 0000000000000000 $x.1
// CHECK-NEXT: 0000000000000004 l .text 0000000000000000 $d.2
// CHECK-NEXT: 0000000000000000 l .data 0000000000000000 $d.3
// CHECK-NEXT: 0000000000000008 l .text 0000000000000000 $x.4
// CHECK-NEXT: 000000000000000c l .text 0000000000000000 $d.5
// CHECK-NEXT: 0000000000000000 l .rodata 0000000000000000 $d.6
// CHECK-NEXT: 0000000000000004 l .rodata 0000000000000000 $x.7
// CHECK-NEXT: 0000000000000000 l .comment 0000000000000000 $d.8
// CHECK-NEXT: 0000000000000000 l .text1 0000000000000000 $x
// CHECK-NEXT: 0000000000000000 l .text 0000000000000000 $x
// CHECK-NEXT: 0000000000000004 l .text 0000000000000000 $d
// CHECK-NEXT: 0000000000000000 l .data 0000000000000000 $d
// CHECK-NEXT: 0000000000000008 l .text 0000000000000000 $x
// CHECK-NEXT: 000000000000000c l .text 0000000000000000 $d
// CHECK-NEXT: 0000000000000000 l .rodata 0000000000000000 $d
// CHECK-NEXT: 0000000000000004 l .rodata 0000000000000000 $x
// CHECK-NEXT: 0000000000000000 l .comment 0000000000000000 $d
// CHECK-NOT: {{.}}
15 changes: 11 additions & 4 deletions llvm/test/MC/AArch64/mapping-within-section.s
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// RUN: llvm-mc -triple=aarch64-none-linux-gnu -filetype=obj %s | llvm-nm --special-syms - | FileCheck %s
// RUN: llvm-mc -triple=aarch64-none-linux-gnu -filetype=obj %s | llvm-nm --no-sort --special-syms - | FileCheck %s --match-full-lines

.text
// $x at 0x0000
Expand All @@ -18,6 +18,13 @@
// $x at 0x0018
add x0, x0, x0

// CHECK: 0000000000000004 t $d.1
// CHECK-NEXT: 0000000000000000 t $x.0
// CHECK-NEXT: 0000000000000064 t $x.2
.globl $d
$d:
$x:

// CHECK: 0000000000000000 t $x
// CHECK-NEXT: 0000000000000004 t $d
// CHECK-NEXT: 0000000000000064 t $x
// CHECK-NEXT: 0000000000000068 t $x
// CHECK-NEXT: 0000000000000068 T $d
// CHECK-NOT: {{.}}
2 changes: 1 addition & 1 deletion llvm/test/MC/AArch64/size-directive.s
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ aarch64_size:
// CHECK-OBJ-NEXT: )

// SYMS: Type Bind Vis Ndx Name
// SYMS: NOTYPE LOCAL DEFAULT 3 $d.0
// SYMS: NOTYPE LOCAL DEFAULT 3 $d{{$}}
// SYMS-NEXT: FUNC GLOBAL DEFAULT 3 aarch64_size
// SYMS-NEXT: NOTYPE GLOBAL DEFAULT UND half_word
// SYMS-NEXT: NOTYPE GLOBAL DEFAULT UND full_word
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/MC/ELF/AArch64/cfi.s
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ f37:
.cfi_endproc

// CHECK: Section {
// CHECK: Name: .eh_frame (20)
// CHECK: Name: .eh_frame
// CHECK-NEXT: Type: SHT_PROGBITS (0x1)
// CHECK-NEXT: Flags [ (0x2)
// CHECK-NEXT: SHF_ALLOC (0x2)
Expand Down Expand Up @@ -355,7 +355,7 @@ f37:
// CHECK-NEXT: )
// CHECK-NEXT: }
// CHECK: Section {
// CHECK: Name: .rela.eh_frame (15)
// CHECK: Name: .rela.eh_frame
// CHECK-NEXT: Type: SHT_RELA (0x4)
// CHECK-NEXT: Flags [ (0x40)
// CHECK-NEXT: SHF_INFO_LINK (0x40)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@

# CHECK: Disassembly of section .mysection:
# CHECK-EMPTY:
# ALL-NEXT: <$x.0>:
# ALL-NEXT: <$x>:
# CHECK-NEXT: <_start>:
# CHECK-NEXT: 0: 10000021 adr x1, 0x4
# CHECK-EMPTY:
# ALL-NEXT: <$d.1>:
# ALL-NEXT: <$d>:
# CHECK-NEXT: <msg>:
# CHECK-NEXT: 4: 48 65 6c 6c .word
# CHECK-NEXT: 8: 6f 2c 20 77 .word
Expand All @@ -18,10 +18,10 @@
# CHECK-NEXT: Disassembly of section .myothersection:
# CHECK-EMPTY:
# NOALL-NEXT: <.myothersection>:
# ALL-NEXT: <$x.2>:
# ALL-NEXT: <$x>:
# CHECK-NEXT: 0: 90000001 adrp x1, 0x0
# CHECK-EMPTY:
# ALL-NEXT: <$d.3>:
# ALL-NEXT: <$d>:
# CHECK-NEXT: <mystr>:
# CHECK-NEXT: 4: 62 6c 61 68 .word
# CHECK-NEXT: 8: 9a .byte 0x9a
Expand Down
Loading