llvm/test/MC/ELF/section-sym-redefine.s
Evgeniy Stepanov 3828f99ca5 Handle section vs global name conflict.
This is a fix for PR26941.

When there is both a section and a global definition with the same
name, the global wins.

Section symbols are not added to the symbol table; section references
are left undefined and fixed up in the object writer unless they've
been satisfied by some other definition.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@264649 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-28 20:36:28 +00:00

139 lines
3.4 KiB
ArmAsm

// 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: ]