.addrsig_sym sym
-This marks ``sym`` as address-significant.
+If ``sym`` is not otherwise referenced or defined anywhere else in the file,
+this directive is a no-op. Otherwise, mark ``sym`` as address-significant.
``SHT_LLVM_SYMPART`` Section (symbol partition specification)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
void ELFWriter::writeAddrsigSection() {
for (const MCSymbol *Sym : OWriter.AddrsigSyms)
- encodeULEB128(Sym->getIndex(), W.OS);
+ if (Sym->getIndex() != 0)
+ encodeULEB128(Sym->getIndex(), W.OS);
}
MCSectionELF *ELFWriter::createRelocationSection(MCContext &Ctx,
}
void MCObjectStreamer::emitAddrsigSym(const MCSymbol *Sym) {
- getAssembler().registerSymbol(*Sym);
getAssembler().getWriter().addAddrsigSymbol(Sym);
}
Asm.getContext().getObjectFileInfo()->getAddrSigSection();
unsigned Log2Size = is64Bit() ? 3 : 2;
for (const MCSymbol *S : getAddrsigSyms()) {
+ if (!S->isRegistered())
+ continue;
MachO::any_relocation_info MRE;
MRE.r_word0 = 0;
MRE.r_word1 = (Log2Size << 25) | (MachO::GENERIC_RELOC_VANILLA << 28);
Frag->setLayoutOrder(0);
raw_svector_ostream OS(Frag->getContents());
for (const MCSymbol *S : AddrsigSyms) {
+ if (!S->isRegistered())
+ continue;
if (!S->isTemporary()) {
encodeULEB128(S->getIndex(), OS);
continue;
// CHECK-NEXT: IMAGE_SCN_LNK_REMOVE (0x800)
// CHECK-NEXT: ]
// CHECK-NEXT: SectionData (
-// CHECK-NEXT: 0000: 080A0B02
+// CHECK-NEXT: 0000: 080B0A02
// CHECK-NEXT: )
// CHECK: Symbols [
-// CHECK: Name: .text
+// CHECK: Name:
+// CHECK-SAME: {{^}} .text
// CHECK: AuxSectionDef
-// CHECK: Name: .data
+// CHECK: Name:
+// CHECK-SAME: {{^}} .data
// CHECK: AuxSectionDef
-// CHECK: Name: .bss
+// CHECK: Name:
+// CHECK-SAME: {{^}} .bss
// CHECK: AuxSectionDef
-// CHECK: Name: .llvm_addrsig
+// CHECK: Name:
+// CHECK-SAME: {{^}} .llvm_addrsig
// CHECK: AuxSectionDef
-// CHECK: Name: g1
-// CHECK: Name: g2
-// CHECK: Name: g3
-// CHECK: Name: local
+// CHECK: Name:
+// CHECK-SAME: {{^}} g1
+// CHECK: Name:
+// CHECK-SAME: {{^}} g2
+// CHECK: Name:
+// CHECK-SAME: {{^}} local
+// CHECK: Name:
+// CHECK-SAME: {{^}} g3
+// CHECK-NOT: Name:
+// CHECK: }
// CHECK: Addrsig [
// CHECK-NEXT: Sym: g1 (8)
-// CHECK-NEXT: Sym: g3 (10)
-// CHECK-NEXT: Sym: local (11)
+// CHECK-NEXT: Sym: g3 (11)
+// CHECK-NEXT: Sym: local (10)
// CHECK-NEXT: Sym: .data (2)
// CHECK-NEXT: ]
+.globl g1
+
.addrsig
.addrsig_sym g1
.globl g2
.addrsig_sym g3
.addrsig_sym local
.addrsig_sym .Llocal
+.addrsig_sym .Lunseen
+.addrsig_sym unseen
local:
+.globl g3
.data
.Llocal:
+++ /dev/null
-// RUN: not llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - 2>&1 | FileCheck %s
-// CHECK: Undefined temporary symbol
-
-.addrsig
-.addrsig_sym .Lundef
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: g3
+// CHECK-NOT: Symbol {
// CHECK: Addrsig [
// CHECK-NEXT: Sym: g1 (3)
// CHECK-NEXT: Sym: (1)
// CHECK-NEXT: ]
+.globl g1
+
// ASM: .addrsig
// ASM-NEXT: .addrsig_sym g1
.addrsig
// ASM: .addrsig_sym g3
// ASM-NEXT: .addrsig_sym local
// ASM-NEXT: .addrsig_sym .Llocal
+// ASM-NEXT: .addrsig_sym .Lunseen
+// ASM-NEXT: .addrsig_sym unseen
.addrsig_sym g3
.addrsig_sym local
.addrsig_sym .Llocal
+.addrsig_sym .Lunseen
+.addrsig_sym unseen
local:
.Llocal:
+.globl g3
+
// DWO-NOT: .llvm_addrsig
# CHECK: Symbol {
# CHECK-NEXT: Name: local
# CHECK: Symbol {
-# CHECK-NEXT: Name: .Llocal
-# CHECK: Symbol {
# CHECK-NEXT: Name: ltmp1
# CHECK: Symbol {
+# CHECK-NEXT: Name: .Llocal
+# CHECK: Symbol {
# CHECK-NEXT: Name: g1
# CHECK: Symbol {
# CHECK-NEXT: Name: g2
.addrsig_sym g3
.addrsig_sym local
.addrsig_sym .Llocal
+.addrsig_sym .Lunseen
+.addrsig_sym unseen
local:
nop