summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/MC/ELFObjectWriter.cpp22
-rw-r--r--llvm/test/MC/ARM/thumb1-branch-reloc.s12
-rw-r--r--llvm/test/MC/ARM/thumb2-beq-fixup.s1
-rw-r--r--llvm/test/MC/ELF/relax.s33
-rw-r--r--llvm/test/MC/ELF/target-in-same-section.s39
-rw-r--r--llvm/test/MC/X86/align-branch-64-2a.s2
-rw-r--r--llvm/test/MC/X86/align-branch-64-2b.s2
-rw-r--r--llvm/test/MC/X86/align-branch-64-2c.s2
8 files changed, 55 insertions, 58 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp
index f8e93889344..b421d0b2bf6 100644
--- a/llvm/lib/MC/ELFObjectWriter.cpp
+++ b/llvm/lib/MC/ELFObjectWriter.cpp
@@ -569,26 +569,6 @@ void ELFWriter::writeSymbol(SymbolTableWriter &Writer, uint32_t StringIndex,
IsReserved);
}
-// True if the assembler knows nothing about the final value of the symbol.
-// This doesn't cover the comdat issues, since in those cases the assembler
-// can at least know that all symbols in the section will move together.
-static bool isWeak(const MCSymbolELF &Sym) {
- if (Sym.getType() == ELF::STT_GNU_IFUNC)
- return true;
-
- switch (Sym.getBinding()) {
- default:
- llvm_unreachable("Unknown binding");
- case ELF::STB_LOCAL:
- return false;
- case ELF::STB_GLOBAL:
- return false;
- case ELF::STB_WEAK:
- case ELF::STB_GNU_UNIQUE:
- return true;
- }
-}
-
bool ELFWriter::isInSymtab(const MCAsmLayout &Layout, const MCSymbolELF &Symbol,
bool Used, bool Renamed) {
if (Symbol.isVariable()) {
@@ -1534,7 +1514,7 @@ bool ELFObjectWriter::isSymbolRefDifferenceFullyResolvedImpl(
const auto &SymA = cast<MCSymbolELF>(SA);
if (IsPCRel) {
assert(!InSet);
- if (isWeak(SymA))
+ if (SymA.getBinding() != ELF::STB_LOCAL)
return false;
}
return MCObjectWriter::isSymbolRefDifferenceFullyResolvedImpl(Asm, SymA, FB,
diff --git a/llvm/test/MC/ARM/thumb1-branch-reloc.s b/llvm/test/MC/ARM/thumb1-branch-reloc.s
index c599389d1c2..22384bec027 100644
--- a/llvm/test/MC/ARM/thumb1-branch-reloc.s
+++ b/llvm/test/MC/ARM/thumb1-branch-reloc.s
@@ -18,4 +18,14 @@
@CHECK: Section {{.*}} .rel.text.cond {
@CHECK: 0x0 R_ARM_THM_JUMP8
@CHECK: }
- \ No newline at end of file
+
+ .section .text.insection
+.globl global
+local:
+global:
+ b local
+ b global
+
+@CHECK: Section {{.*}} .rel.text.insection {
+@CHECK-NEXT: 0x2 R_ARM_THM_JUMP11 global 0x0
+@CHECK-NEXT: }
diff --git a/llvm/test/MC/ARM/thumb2-beq-fixup.s b/llvm/test/MC/ARM/thumb2-beq-fixup.s
index e6d43e8fed9..36728081162 100644
--- a/llvm/test/MC/ARM/thumb2-beq-fixup.s
+++ b/llvm/test/MC/ARM/thumb2-beq-fixup.s
@@ -36,4 +36,5 @@ global_thumb_fn:
@ CHECK: Section (3) .rel.text
@ CHECK-NEXT: 0x0 R_ARM_THM_JUMP19 internal_arm_fn 0x0
@ CHECK-NEXT: 0x4 R_ARM_THM_JUMP19 global_arm_fn 0x0
+@ CHECK-NEXT: 0x8 R_ARM_THM_JUMP19 global_thumb_fn 0x0
@ CHECK-NEXT: }
diff --git a/llvm/test/MC/ELF/relax.s b/llvm/test/MC/ELF/relax.s
deleted file mode 100644
index 27de52963ba..00000000000
--- a/llvm/test/MC/ELF/relax.s
+++ /dev/null
@@ -1,33 +0,0 @@
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -S --sd --symbols | FileCheck %s
-
-// Test that we do not relax these.
-
-bar:
-.globl foo
-foo:
- .set zed,foo
-
- jmp bar
- jmp foo
- jmp zed
-
-// CHECK: Section {
-// CHECK: Name: .text
-// CHECK-NEXT: Type: SHT_PROGBITS
-// CHECK-NEXT: Flags [
-// CHECK-NEXT: SHF_ALLOC
-// CHECK-NEXT: SHF_EXECINSTR
-// CHECK-NEXT: ]
-// CHECK-NEXT: Address: 0x0
-// CHECK-NEXT: Offset: 0x40
-// CHECK-NEXT: Size: 6
-// CHECK-NEXT: Link: 0
-// CHECK-NEXT: Info: 0
-// CHECK-NEXT: AddressAlignment: 4
-// CHECK-NEXT: EntrySize: 0
-// CHECK-NEXT: SectionData (
-// CHECK-NEXT: 0000: EBFEEBFC EBFA
-// CHECK-NEXT: )
-// CHECK-NEXT: }
-// CHECK: Symbol {
-// CHECK: Name: foo
diff --git a/llvm/test/MC/ELF/target-in-same-section.s b/llvm/test/MC/ELF/target-in-same-section.s
new file mode 100644
index 00000000000..dbdacaffdb7
--- /dev/null
+++ b/llvm/test/MC/ELF/target-in-same-section.s
@@ -0,0 +1,39 @@
+## For a target defined in the same section, create a relocation if the
+## symbol is not local, otherwise resolve the fixup statically.
+# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t
+# RUN: llvm-readobj -r %t | FileCheck --check-prefix=RELOC %s
+# RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck %s
+
+# RELOC: .rela.text {
+# RELOC-NEXT: 0x5 R_X86_64_PLT32 global 0xFFFFFFFFFFFFFFFC
+# RELOC-NEXT: 0xA R_X86_64_PLT32 weak 0xFFFFFFFFFFFFFFFC
+# RELOC-NEXT: 0x19 R_X86_64_PLT32 global 0xFFFFFFFFFFFFFFFC
+# RELOC-NEXT: 0x1E R_X86_64_PLT32 weak 0xFFFFFFFFFFFFFFFC
+# RELOC-NEXT: }
+
+# CHECK: 0: jmp
+# CHECK-NEXT: 2: jmp
+# CHECK-NEXT: 4: jmp
+# CHECK-NEXT: 9: jmp
+# CHECK-NEXT: e: callq
+# CHECK-NEXT: 13: callq
+# CHECK-NEXT: 18: callq
+# CHECK-NEXT: 1d: callq
+# CHECK-NEXT: 22: retq
+
+.globl global
+.weak weak
+global:
+weak:
+local:
+.set var,global
+ jmp var
+ jmp local
+ jmp global
+ jmp weak
+
+ call var
+ call local
+ call global
+ call weak
+ ret
diff --git a/llvm/test/MC/X86/align-branch-64-2a.s b/llvm/test/MC/X86/align-branch-64-2a.s
index 61e9e1f899b..0652840cbc2 100644
--- a/llvm/test/MC/X86/align-branch-64-2a.s
+++ b/llvm/test/MC/X86/align-branch-64-2a.s
@@ -12,6 +12,6 @@
# CHECK-NEXT: 3e: ff d0 callq *%rax
# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
# CHECK-NEXT: 58: 55 pushq %rbp
-# CHECK-NEXT: 59: e8 a2 ff ff ff callq {{.*}}
+# CHECK-NEXT: 59: e8 00 00 00 00 callq {{.*}}
# CHECK-COUNT-4: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
# CHECK: 7e: ff 14 25 00 00 00 00 callq *0
diff --git a/llvm/test/MC/X86/align-branch-64-2b.s b/llvm/test/MC/X86/align-branch-64-2b.s
index 1cb49f7d109..91494fa36ba 100644
--- a/llvm/test/MC/X86/align-branch-64-2b.s
+++ b/llvm/test/MC/X86/align-branch-64-2b.s
@@ -11,7 +11,7 @@
# CHECK-NEXT: 3c: ff d0 callq *%rax
# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
# CHECK: 56: 55 pushq %rbp
-# CHECK-NEXT: 57: e8 a4 ff ff ff callq {{.*}}
+# CHECK-NEXT: 57: e8 00 00 00 00 callq {{.*}}
# CHECK-COUNT-4: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
# CHECK-COUNT-4: : 90 nop
# CHECK: 80: ff 14 25 00 00 00 00 callq *0
diff --git a/llvm/test/MC/X86/align-branch-64-2c.s b/llvm/test/MC/X86/align-branch-64-2c.s
index bb750aa24a0..6754feb85f2 100644
--- a/llvm/test/MC/X86/align-branch-64-2c.s
+++ b/llvm/test/MC/X86/align-branch-64-2c.s
@@ -14,6 +14,6 @@
# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
# CHECK: 5a: 55 pushq %rbp
# CHECK-COUNT-5: : 90 nop
-# CHECK: 60: e8 9b ff ff ff callq {{.*}}
+# CHECK: 60: e8 00 00 00 00 callq {{.*}}
# CHECK-COUNT-4: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
# CHECK: 85: ff 14 25 00 00 00 00 callq *0
OpenPOWER on IntegriCloud