Skip to content

Commit 4010ddf

Browse files
authored
[MC,AArch64] Create mapping symbols with non-unique names
Add `createLocalSymbol` to create a local, non-temporary symbol. Different from `createRenamableSymbol`, the `Used` bit is ignored, therefore multiple local symbols might share the same name. Utilizing `createLocalSymbol` in AArch64 allows for efficient mapping symbol creation with non-unique names, saving .strtab space. The behavior matches GNU assembler. Pull Request: #99836
1 parent d7e185c commit 4010ddf

File tree

18 files changed

+88
-76
lines changed

18 files changed

+88
-76
lines changed

lld/test/ELF/aarch64-cortex-a53-843419-abs-mapsyms.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
.type _start, %function
1313
_start: ret
1414

15-
// CHECK: Name: $x.0
15+
// CHECK: Name: $x
1616
// CHECK-NEXT: Value: 0x0
1717
// CHECK-NEXT: Size: 0
1818
// CHECK-NEXT: Binding: Local (0x0)

lld/test/ELF/aarch64-gnu-ifunc.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
// CHECK-NEXT: Section: Undefined
3838
// CHECK-NEXT: }
3939
// CHECK-NEXT: Symbol {
40-
// CHECK-NEXT: Name: $x.0
40+
// CHECK-NEXT: Name: $x
4141
// CHECK-NEXT: Value: 0x210188
4242
// CHECK-NEXT: Size: 0
4343
// CHECK-NEXT: Binding: Local

lld/test/ELF/aarch64-reloc-pauth.s

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@
6868
# RELR-EMPTY:
6969
# RELR-NEXT: Relocation section '.relr.auth.dyn' at offset 0x[[ADDR2]] contains 5 entries:
7070
# RELR-NEXT: Index: Entry Address Symbolic Address
71-
# RELR-NEXT: 0000: 0000000000030440 0000000000030440 $d.0
72-
# RELR-NEXT: 0001: 000000000000000f 0000000000030448 $d.0 + 0x8
73-
# RELR-NEXT: 0000000000030450 $d.0 + 0x10
74-
# RELR-NEXT: 0000000000030458 $d.0 + 0x18
75-
# RELR-NEXT: 0002: 0000000000030492 0000000000030492 $d.0 + 0x52
71+
# RELR-NEXT: 0000: 0000000000030440 0000000000030440 $d
72+
# RELR-NEXT: 0001: 000000000000000f 0000000000030448 $d + 0x8
73+
# RELR-NEXT: 0000000000030450 $d + 0x10
74+
# RELR-NEXT: 0000000000030458 $d + 0x18
75+
# RELR-NEXT: 0002: 0000000000030492 0000000000030492 $d + 0x52
7676

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

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

lld/test/ELF/aarch64-thunk-script.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ high_target:
4343
// CHECK-NEXT: ret
4444

4545
/// Local symbols copied from %t.o
46-
// NM: t $x.0
47-
// NM-NEXT: t $x.1
46+
// NM: t $x
47+
// NM-NEXT: t $x
4848
/// Local thunk symbols.
4949
// NM-NEXT: t __AArch64AbsLongThunk_high_target
5050
// NM-NEXT: t $x

lld/test/ELF/basic-aarch64.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ _start:
119119
# CHECK-NEXT: ]
120120
# CHECK-NEXT: Address: 0x0
121121
# CHECK-NEXT: Offset: 0x1AA
122-
# CHECK-NEXT: Size: 13
122+
# CHECK-NEXT: Size: 11
123123
# CHECK-NEXT: Link: 0
124124
# CHECK-NEXT: Info: 0
125125
# CHECK-NEXT: AddressAlignment: 1
@@ -189,7 +189,7 @@ _start:
189189
# CHECK-NEXT: Section: Undefined (0x0)
190190
# CHECK-NEXT: }
191191
# CHECK-NEXT: Symbol {
192-
# CHECK-NEXT: Name: $x.0
192+
# CHECK-NEXT: Name: $x
193193
# CHECK-NEXT: Value: 0x210120
194194
# CHECK-NEXT: Size: 0
195195
# CHECK-NEXT: Binding: Local (0x0)

lld/test/ELF/pack-dyn-relocs.s

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -264,30 +264,30 @@
264264
// RELR64-EMPTY:
265265
// RELR64-NEXT: Relocation section '.relr.dyn' at offset {{.*}} contains 24 entries:
266266
// RELR64-NEXT: Symbolic Address
267-
// RELR64-NEXT: $d.0{{$}}
268-
// RELR64-NEXT: $d.0 + 0x8
269-
// RELR64-NEXT: $d.0 + 0x10
270-
// RELR64-NEXT: $d.0 + 0x18
271-
// RELR64-NEXT: $d.0 + 0x20
272-
// RELR64-NEXT: $d.0 + 0x28
273-
// RELR64-NEXT: $d.0 + 0x30
274-
// RELR64-NEXT: $d.0 + 0x38
275-
// RELR64-NEXT: $d.0 + 0x48
276-
// RELR64-NEXT: $d.0 + 0x50
277-
// RELR64-NEXT: $d.0 + 0x58
278-
// RELR64-NEXT: $d.0 + 0x60
279-
// RELR64-NEXT: $d.0 + 0x68
280-
// RELR64-NEXT: $d.0 + 0x70
281-
// RELR64-NEXT: $d.0 + 0x78
282-
// RELR64-NEXT: $d.0 + 0x90
283-
// RELR64-NEXT: $d.0 + 0x98
284-
// RELR64-NEXT: $d.0 + 0xa0
285-
// RELR64-NEXT: $d.0 + 0xa8
286-
// RELR64-NEXT: $d.0 + 0xb0
287-
// RELR64-NEXT: $d.0 + 0xb8
288-
// RELR64-NEXT: $d.0 + 0xc0
289-
// RELR64-NEXT: $d.0 + 0xc8
290-
// RELR64-NEXT: $d.0 + 0xd0
267+
// RELR64-NEXT: $d{{$}}
268+
// RELR64-NEXT: $d + 0x8
269+
// RELR64-NEXT: $d + 0x10
270+
// RELR64-NEXT: $d + 0x18
271+
// RELR64-NEXT: $d + 0x20
272+
// RELR64-NEXT: $d + 0x28
273+
// RELR64-NEXT: $d + 0x30
274+
// RELR64-NEXT: $d + 0x38
275+
// RELR64-NEXT: $d + 0x48
276+
// RELR64-NEXT: $d + 0x50
277+
// RELR64-NEXT: $d + 0x58
278+
// RELR64-NEXT: $d + 0x60
279+
// RELR64-NEXT: $d + 0x68
280+
// RELR64-NEXT: $d + 0x70
281+
// RELR64-NEXT: $d + 0x78
282+
// RELR64-NEXT: $d + 0x90
283+
// RELR64-NEXT: $d + 0x98
284+
// RELR64-NEXT: $d + 0xa0
285+
// RELR64-NEXT: $d + 0xa8
286+
// RELR64-NEXT: $d + 0xb0
287+
// RELR64-NEXT: $d + 0xb8
288+
// RELR64-NEXT: $d + 0xc0
289+
// RELR64-NEXT: $d + 0xc8
290+
// RELR64-NEXT: $d + 0xd0
291291
// RELR64-EMPTY:
292292
// RELR64-NEXT: Hex dump of section '.data':
293293
// RELR64-NEXT: 0x00030490 90040300 00000000 91040300 00000000 .

llvm/include/llvm/MC/MCContext.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,10 @@ class MCContext {
468468
/// true, behaves like getOrCreateSymbol, prefixed with PrivateLabelPrefix.
469469
MCSymbol *createBlockSymbol(const Twine &Name, bool AlwaysEmit = false);
470470

471+
/// Create a local, non-temporary symbol like an ELF mapping symbol. Calling
472+
/// the function with the same name will generate new, unique instances.
473+
MCSymbol *createLocalSymbol(StringRef Name);
474+
471475
/// Create the definition of a directional local symbol for numbered label
472476
/// (used for "1:" definitions).
473477
MCSymbol *createDirectionalLocalSymbol(unsigned LocalLabelVal);

llvm/lib/MC/MCContext.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,11 @@ MCSymbol *MCContext::createNamedTempSymbol() {
349349
return createNamedTempSymbol("tmp");
350350
}
351351

352+
MCSymbol *MCContext::createLocalSymbol(StringRef Name) {
353+
MCSymbolTableEntry &NameEntry = getSymbolTableEntry(Name);
354+
return createSymbolImpl(&NameEntry, /*IsTemporary=*/false);
355+
}
356+
352357
unsigned MCContext::NextInstance(unsigned LocalLabelVal) {
353358
MCLabel *&Label = Instances[LocalLabelVal];
354359
if (!Label)

llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ class AArch64ELFStreamer : public MCELFStreamer {
181181
std::unique_ptr<MCCodeEmitter> Emitter)
182182
: MCELFStreamer(Context, std::move(TAB), std::move(OW),
183183
std::move(Emitter)),
184-
MappingSymbolCounter(0), LastEMS(EMS_None) {}
184+
LastEMS(EMS_None) {}
185185

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

196196
// Reset state between object emissions
197197
void reset() override {
198-
MappingSymbolCounter = 0;
199198
MCELFStreamer::reset();
200199
LastMappingSymbols.clear();
201200
LastEMS = EMS_None;
@@ -271,15 +270,12 @@ class AArch64ELFStreamer : public MCELFStreamer {
271270
}
272271

273272
void emitMappingSymbol(StringRef Name) {
274-
auto *Symbol = cast<MCSymbolELF>(getContext().getOrCreateSymbol(
275-
Name + "." + Twine(MappingSymbolCounter++)));
273+
auto *Symbol = cast<MCSymbolELF>(getContext().createLocalSymbol(Name));
276274
emitLabel(Symbol);
277275
Symbol->setType(ELF::STT_NOTYPE);
278276
Symbol->setBinding(ELF::STB_LOCAL);
279277
}
280278

281-
int64_t MappingSymbolCounter;
282-
283279
DenseMap<const MCSection *, ElfMappingSymbol> LastMappingSymbols;
284280
ElfMappingSymbol LastEMS;
285281
};

llvm/test/CodeGen/AArch64/callbr-asm-obj-file.ll

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
@l = common hidden local_unnamed_addr global i32 0, align 4
88

99
; CHECK-LABEL: <test1>:
10-
; CHECK-LABEL: <$d.1>:
11-
; CHECK-LABEL: <$x.2>:
10+
; CHECK-LABEL: <$d>:
11+
; CHECK-LABEL: <$x>:
1212
; CHECK-NEXT: b 0x2c <test1+0x2c>
13-
; CHECK-LABEL: <$x.4>:
13+
; CHECK-LABEL: <$x>:
1414
; CHECK-NEXT: mov w0, wzr
1515
; CHECK-NEXT: ldr x30, [sp], #16
1616
; CHECK-NEXT: ret
@@ -41,8 +41,8 @@ declare dso_local i32 @i(...) local_unnamed_addr
4141

4242
; CHECK-LABEL: <test2>:
4343
; CHECK: b {{.*}} <test2+0x1c>
44-
; CHECK-LABEL: <$d.5>:
45-
; CHECK-LABEL: <$x.6>:
44+
; CHECK-LABEL: <$d>:
45+
; CHECK-LABEL: <$x>:
4646
; CHECK-NEXT: b {{.*}} <test2+0x18>
4747
define hidden i32 @test2() local_unnamed_addr {
4848
%1 = load i32, ptr @l, align 4
@@ -70,10 +70,10 @@ define hidden i32 @test2() local_unnamed_addr {
7070
}
7171

7272
; CHECK-LABEL: <test3>:
73-
; CHECK-LABEL: <$d.9>:
74-
; CHECK-LABEL: <$x.10>:
73+
; CHECK-LABEL: <$d>:
74+
; CHECK-LABEL: <$x>:
7575
; CHECK-NEXT: b {{.*}} <test3+0x34>
76-
; CHECK-LABEL: <$x.12>:
76+
; CHECK-LABEL: <$x>:
7777
; CHECK-NEXT: ldr x30, [sp], #16
7878
; CHECK-NEXT: ret
7979
define internal i1 @test3() {

llvm/test/CodeGen/AArch64/inlineasm-ldr-pseudo.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ entry:
1616
; CHECK: 58000040 ldr x0, 0x10
1717
; CHECK: d65f03c0 ret
1818
; Make sure the constant pool entry comes after the return
19-
; CHECK-LABEL: <$d.1>:
19+
; CHECK-LABEL: <$d>:
2020
define i32 @bar() nounwind {
2121
entry:
2222
%0 = tail call i32 asm sideeffect "ldr $0,=0x10001", "=r"() nounwind

llvm/test/DebugInfo/Symbolize/ELF/aarch64-mapping-symbol.s

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
## addresses.
88
# RUN: llvm-nm --special-syms %t | FileCheck %s -check-prefix MAPPING_SYM
99

10-
# MAPPING_SYM: 0000000000000000 t $d.0
11-
# MAPPING_SYM-NEXT: 000000000000000c t $d.2
12-
# MAPPING_SYM-NEXT: 0000000000000004 t $x.1
10+
# MAPPING_SYM: 0000000000000000 t $d
11+
# MAPPING_SYM-NEXT: 000000000000000c t $d
12+
# MAPPING_SYM-NEXT: 0000000000000004 t $x
1313
# MAPPING_SYM-NEXT: 0000000000000000 T foo
1414

1515
# RUN: llvm-symbolizer --obj=%t 0 4 0xc | FileCheck %s -check-prefix SYMBOL

llvm/test/MC/AArch64/CheckDataSymbol.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# RUN: llvm-mc -filetype=obj -assemble \
22
# RUN: -triple=aarch64- %s -o - \
33
# RUN: | llvm-readobj -S --symbols - | FileCheck %s
4-
# CHECK: Name: $d.1 ({{[1-9][0-9]+}})
4+
# CHECK: Name: $d ({{[1-9][0-9]+}})
55
# CHECK-NEXT: Value: 0x4
66
# CHECK-NEXT: Size: 0
77
# CHECK-NEXT: Binding: Local (0x0)

llvm/test/MC/AArch64/mapping-across-sections.s

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: llvm-mc -triple=aarch64 -filetype=obj %s | llvm-objdump -t - | FileCheck %s
1+
// RUN: llvm-mc -triple=aarch64 -filetype=obj %s | llvm-objdump -t - | FileCheck %s --match-full-lines
22

33
.section .text1,"ax"
44
add w0, w0, w0
@@ -28,13 +28,13 @@ add w0, w0, w0
2828
.section ".note.GNU-stack","",@progbits
2929

3030
// CHECK: SYMBOL TABLE:
31-
// CHECK-NEXT: 0000000000000000 l .text1 0000000000000000 $x.0
32-
// CHECK-NEXT: 0000000000000000 l .text 0000000000000000 $x.1
33-
// CHECK-NEXT: 0000000000000004 l .text 0000000000000000 $d.2
34-
// CHECK-NEXT: 0000000000000000 l .data 0000000000000000 $d.3
35-
// CHECK-NEXT: 0000000000000008 l .text 0000000000000000 $x.4
36-
// CHECK-NEXT: 000000000000000c l .text 0000000000000000 $d.5
37-
// CHECK-NEXT: 0000000000000000 l .rodata 0000000000000000 $d.6
38-
// CHECK-NEXT: 0000000000000004 l .rodata 0000000000000000 $x.7
39-
// CHECK-NEXT: 0000000000000000 l .comment 0000000000000000 $d.8
31+
// CHECK-NEXT: 0000000000000000 l .text1 0000000000000000 $x
32+
// CHECK-NEXT: 0000000000000000 l .text 0000000000000000 $x
33+
// CHECK-NEXT: 0000000000000004 l .text 0000000000000000 $d
34+
// CHECK-NEXT: 0000000000000000 l .data 0000000000000000 $d
35+
// CHECK-NEXT: 0000000000000008 l .text 0000000000000000 $x
36+
// CHECK-NEXT: 000000000000000c l .text 0000000000000000 $d
37+
// CHECK-NEXT: 0000000000000000 l .rodata 0000000000000000 $d
38+
// CHECK-NEXT: 0000000000000004 l .rodata 0000000000000000 $x
39+
// CHECK-NEXT: 0000000000000000 l .comment 0000000000000000 $d
4040
// CHECK-NOT: {{.}}

llvm/test/MC/AArch64/mapping-within-section.s

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: llvm-mc -triple=aarch64-none-linux-gnu -filetype=obj %s | llvm-nm --special-syms - | FileCheck %s
1+
// RUN: llvm-mc -triple=aarch64-none-linux-gnu -filetype=obj %s | llvm-nm --no-sort --special-syms - | FileCheck %s --match-full-lines
22

33
.text
44
// $x at 0x0000
@@ -18,6 +18,13 @@
1818
// $x at 0x0018
1919
add x0, x0, x0
2020

21-
// CHECK: 0000000000000004 t $d.1
22-
// CHECK-NEXT: 0000000000000000 t $x.0
23-
// CHECK-NEXT: 0000000000000064 t $x.2
21+
.globl $d
22+
$d:
23+
$x:
24+
25+
// CHECK: 0000000000000000 t $x
26+
// CHECK-NEXT: 0000000000000004 t $d
27+
// CHECK-NEXT: 0000000000000064 t $x
28+
// CHECK-NEXT: 0000000000000068 t $x
29+
// CHECK-NEXT: 0000000000000068 T $d
30+
// CHECK-NOT: {{.}}

llvm/test/MC/AArch64/size-directive.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ aarch64_size:
3232
// CHECK-OBJ-NEXT: )
3333

3434
// SYMS: Type Bind Vis Ndx Name
35-
// SYMS: NOTYPE LOCAL DEFAULT 3 $d.0
35+
// SYMS: NOTYPE LOCAL DEFAULT 3 $d{{$}}
3636
// SYMS-NEXT: FUNC GLOBAL DEFAULT 3 aarch64_size
3737
// SYMS-NEXT: NOTYPE GLOBAL DEFAULT UND half_word
3838
// SYMS-NEXT: NOTYPE GLOBAL DEFAULT UND full_word

llvm/test/MC/ELF/AArch64/cfi.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ f37:
227227
.cfi_endproc
228228

229229
// CHECK: Section {
230-
// CHECK: Name: .eh_frame (20)
230+
// CHECK: Name: .eh_frame
231231
// CHECK-NEXT: Type: SHT_PROGBITS (0x1)
232232
// CHECK-NEXT: Flags [ (0x2)
233233
// CHECK-NEXT: SHF_ALLOC (0x2)
@@ -355,7 +355,7 @@ f37:
355355
// CHECK-NEXT: )
356356
// CHECK-NEXT: }
357357
// CHECK: Section {
358-
// CHECK: Name: .rela.eh_frame (15)
358+
// CHECK: Name: .rela.eh_frame
359359
// CHECK-NEXT: Type: SHT_RELA (0x4)
360360
// CHECK-NEXT: Flags [ (0x40)
361361
// CHECK-NEXT: SHF_INFO_LINK (0x40)

llvm/test/tools/llvm-objdump/ELF/AArch64/elf-aarch64-mapping-symbols.test

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
# CHECK: Disassembly of section .mysection:
66
# CHECK-EMPTY:
7-
# ALL-NEXT: <$x.0>:
7+
# ALL-NEXT: <$x>:
88
# CHECK-NEXT: <_start>:
99
# CHECK-NEXT: 0: 10000021 adr x1, 0x4
1010
# CHECK-EMPTY:
11-
# ALL-NEXT: <$d.1>:
11+
# ALL-NEXT: <$d>:
1212
# CHECK-NEXT: <msg>:
1313
# CHECK-NEXT: 4: 48 65 6c 6c .word
1414
# CHECK-NEXT: 8: 6f 2c 20 77 .word
@@ -18,10 +18,10 @@
1818
# CHECK-NEXT: Disassembly of section .myothersection:
1919
# CHECK-EMPTY:
2020
# NOALL-NEXT: <.myothersection>:
21-
# ALL-NEXT: <$x.2>:
21+
# ALL-NEXT: <$x>:
2222
# CHECK-NEXT: 0: 90000001 adrp x1, 0x0
2323
# CHECK-EMPTY:
24-
# ALL-NEXT: <$d.3>:
24+
# ALL-NEXT: <$d>:
2525
# CHECK-NEXT: <mystr>:
2626
# CHECK-NEXT: 4: 62 6c 61 68 .word
2727
# CHECK-NEXT: 8: 9a .byte 0x9a

0 commit comments

Comments
 (0)