mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-19 02:42:58 +00:00
Disallow redefinition of section symbols.
Differential Revision: https://reviews.llvm.org/D30235 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296180 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5982b2c089
commit
89efd71a88
@ -320,6 +320,11 @@ MCSectionELF *MCContext::createELFSectionImpl(StringRef Section, unsigned Type,
|
||||
const MCSectionELF *Associated) {
|
||||
MCSymbolELF *R;
|
||||
MCSymbol *&Sym = Symbols[Section];
|
||||
// A section symbol can not redefine regular symbols. There may be multiple
|
||||
// sections with the same name, in which case the first such section wins.
|
||||
if (Sym && Sym->isDefined() &&
|
||||
(!Sym->isInSection() || Sym->getSection().getBeginSymbol() != Sym))
|
||||
reportError(SMLoc(), "invalid symbol redefinition");
|
||||
if (Sym && Sym->isUndefined()) {
|
||||
R = cast<MCSymbolELF>(Sym);
|
||||
} else {
|
||||
@ -330,7 +335,6 @@ MCSectionELF *MCContext::createELFSectionImpl(StringRef Section, unsigned Type,
|
||||
}
|
||||
R->setBinding(ELF::STB_LOCAL);
|
||||
R->setType(ELF::STT_SECTION);
|
||||
R->setRedefinable(true);
|
||||
|
||||
auto *Ret = new (ELFAllocator.Allocate()) MCSectionELF(
|
||||
Section, Type, Flags, K, EntrySize, Group, UniqueID, R, Associated);
|
||||
|
@ -1,8 +1,9 @@
|
||||
; RUN: llc < %s -march=xcore
|
||||
; RUN: not llc < %s -march=xcore 2>&1 | FileCheck %s
|
||||
|
||||
; we used to crash in this.
|
||||
@bar = internal global i32 zeroinitializer
|
||||
|
||||
define void @".dp.bss"() {
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: LLVM ERROR: invalid symbol redefinition
|
||||
|
6
test/MC/ELF/section-sym-err.s
Normal file
6
test/MC/ELF/section-sym-err.s
Normal file
@ -0,0 +1,6 @@
|
||||
// RUN: not llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o %t.o 2>&1 | FileCheck %s
|
||||
|
||||
.section foo
|
||||
foo:
|
||||
|
||||
// CHECK: error: invalid symbol redefinition
|
6
test/MC/ELF/section-sym-err2.s
Normal file
6
test/MC/ELF/section-sym-err2.s
Normal file
@ -0,0 +1,6 @@
|
||||
// RUN: not llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o %t.o 2>&1 | FileCheck %s
|
||||
|
||||
foo:
|
||||
.section foo
|
||||
|
||||
// CHECK: error: invalid symbol redefinition
|
@ -1,138 +0,0 @@
|
||||
// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -t -r --expand-relocs | FileCheck %s
|
||||
|
||||
// Local symbol overriding section.
|
||||
.section x1,"a",@progbits
|
||||
.local x1
|
||||
.comm x1,4,4
|
||||
.long x1 // reloc: .bss + 0
|
||||
|
||||
// Section declared after local. Local symbol wins.
|
||||
.local x2
|
||||
.comm x2,4,4
|
||||
.section x2,"a",@progbits
|
||||
.long x2 // reloc: .bss + 4
|
||||
|
||||
// No overriding symbol.
|
||||
.section x3,"a",@progbits
|
||||
.long x3 // reloc: x3(section) + 0
|
||||
|
||||
// Global vs section.
|
||||
.section x4,"a",@progbits
|
||||
.long 0
|
||||
.globl x4
|
||||
.section foo, "a", @progbits
|
||||
x4:
|
||||
.long 0
|
||||
.long x4 // reloc: x4(global) + 0
|
||||
|
||||
// Global vs implicit section
|
||||
.globl .data
|
||||
.data:
|
||||
.long 42
|
||||
.long .data // reloc: .data(global) + 0
|
||||
|
||||
// CHECK: Relocations [
|
||||
// CHECK: Section (4) .relax1 {
|
||||
// CHECK: Relocation {
|
||||
// CHECK: Offset: 0x0
|
||||
// CHECK: Type: R_X86_64_32 (10)
|
||||
// CHECK: Symbol: .bss (3)
|
||||
// CHECK: Addend: 0x0
|
||||
// CHECK: }
|
||||
// CHECK: }
|
||||
// CHECK: Section (7) .relax2 {
|
||||
// CHECK: Relocation {
|
||||
// CHECK: Offset: 0x0
|
||||
// CHECK: Type: R_X86_64_32 (10)
|
||||
// CHECK: Symbol: .bss (3)
|
||||
// CHECK: Addend: 0x4
|
||||
// CHECK: }
|
||||
// CHECK: }
|
||||
// CHECK: Section (9) .relax3 {
|
||||
// CHECK: Relocation {
|
||||
// CHECK: Offset: 0x0
|
||||
// CHECK: Type: R_X86_64_32 (10)
|
||||
// CHECK: Symbol: x3 (4)
|
||||
// CHECK: Addend: 0x0
|
||||
// CHECK: }
|
||||
// CHECK: }
|
||||
// CHECK: Section (12) .relafoo {
|
||||
// CHECK: Relocation {
|
||||
// CHECK: Offset: 0x4
|
||||
// CHECK: Type: R_X86_64_32 (10)
|
||||
// CHECK: Symbol: x4 (6)
|
||||
// CHECK: Addend: 0x0
|
||||
// CHECK: }
|
||||
// CHECK: Relocation {
|
||||
// CHECK: Offset: 0xC
|
||||
// CHECK: Type: R_X86_64_32 (10)
|
||||
// CHECK: Symbol: .data (5)
|
||||
// CHECK: Addend: 0x0
|
||||
// CHECK: }
|
||||
// CHECK: }
|
||||
// CHECK: ]
|
||||
// CHECK: Symbols [
|
||||
// CHECK: Symbol {
|
||||
// CHECK: Name: (0)
|
||||
// CHECK: Value: 0x0
|
||||
// CHECK: Size: 0
|
||||
// CHECK: Binding: Local (0x0)
|
||||
// CHECK: Type: None (0x0)
|
||||
// CHECK: Other: 0
|
||||
// CHECK: Section: Undefined (0x0)
|
||||
// CHECK: }
|
||||
// CHECK: Symbol {
|
||||
// CHECK: Name: x1 (67)
|
||||
// CHECK: Value: 0x0
|
||||
// CHECK: Size: 4
|
||||
// CHECK: Binding: Local (0x0)
|
||||
// CHECK: Type: Object (0x1)
|
||||
// CHECK: Other: 0
|
||||
// CHECK: Section: .bss (0x5)
|
||||
// CHECK: }
|
||||
// CHECK: Symbol {
|
||||
// CHECK: Name: x2 (59)
|
||||
// CHECK: Value: 0x4
|
||||
// CHECK: Size: 4
|
||||
// CHECK: Binding: Local (0x0)
|
||||
// CHECK: Type: Object (0x1)
|
||||
// CHECK: Other: 0
|
||||
// CHECK: Section: .bss (0x5)
|
||||
// CHECK: }
|
||||
// CHECK: Symbol {
|
||||
// CHECK: Name: (0)
|
||||
// CHECK: Value: 0x0
|
||||
// CHECK: Size: 0
|
||||
// CHECK: Binding: Local (0x0)
|
||||
// CHECK: Type: Section (0x3)
|
||||
// CHECK: Other: 0
|
||||
// CHECK: Section: .bss (0x5)
|
||||
// CHECK: }
|
||||
// CHECK: Symbol {
|
||||
// CHECK: Name: (0)
|
||||
// CHECK: Value: 0x0
|
||||
// CHECK: Size: 0
|
||||
// CHECK: Binding: Local (0x0)
|
||||
// CHECK: Type: Section (0x3)
|
||||
// CHECK: Other: 0
|
||||
// CHECK: Section: x3 (0x8)
|
||||
// CHECK: }
|
||||
// CHECK: Symbol {
|
||||
// CHECK: Name: .data (37)
|
||||
// CHECK: Value: 0x8
|
||||
// CHECK: Size: 0
|
||||
// CHECK: Binding: Global (0x1)
|
||||
// CHECK: Type: None (0x0)
|
||||
// CHECK: Other: 0
|
||||
// CHECK: Section: foo (0xB)
|
||||
// CHECK: }
|
||||
// CHECK: Symbol {
|
||||
// CHECK: Name: x4 (43)
|
||||
// CHECK: Value: 0x0
|
||||
// CHECK: Size: 0
|
||||
// CHECK: Binding: Global (0x1)
|
||||
// CHECK: Type: None (0x0)
|
||||
// CHECK: Other: 0
|
||||
// CHECK: Section: foo (0xB)
|
||||
// CHECK: }
|
||||
// CHECK: ]
|
@ -143,12 +143,13 @@ bar:
|
||||
|
||||
// Test that we handle the strings like gas
|
||||
.section bar-"foo"
|
||||
.section "foo"
|
||||
.section "fooo"
|
||||
|
||||
|
||||
// CHECK: Section {
|
||||
// CHECK: Name: bar-"foo"
|
||||
// CHECK: Section {
|
||||
// CHECK: Name: foo
|
||||
// CHECK: Name: fooo
|
||||
|
||||
// Test SHF_LINK_ORDER
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user