diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp index b15c2d4e138..4e09b4df195 100644 --- a/lib/MC/ELFObjectWriter.cpp +++ b/lib/MC/ELFObjectWriter.cpp @@ -1080,8 +1080,8 @@ bool ELFObjectWriter::IsFixupFullyResolved(const MCAssembler &Asm, const MCSection *SectionA = 0; const MCSymbol *SymbolA = 0; if (const MCSymbolRefExpr *A = Target.getSymA()) { - SymbolA = &A->getSymbol().AliasedSymbol(); - SectionA = &SymbolA->getSection(); + SymbolA = &A->getSymbol(); + SectionA = &SymbolA->AliasedSymbol().getSection(); } const MCSection *SectionB = 0; @@ -1092,6 +1092,9 @@ bool ELFObjectWriter::IsFixupFullyResolved(const MCAssembler &Asm, if (!BaseSection) return SectionA == SectionB; + // FIXME: This is in here just to match gnu as output. If the two ends + // are in the same section, there is nothing that the linker can do to + // break it. const MCSymbolData &DataA = Asm.getSymbolData(*SymbolA); if (DataA.isExternal()) return false; diff --git a/test/MC/ELF/relax.s b/test/MC/ELF/relax.s index 48b9c4e18c4..d584c7c88fc 100644 --- a/test/MC/ELF/relax.s +++ b/test/MC/ELF/relax.s @@ -1,6 +1,6 @@ // RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | elf-dump --dump-section-data | FileCheck %s -// Test that we do a relaxation for foo but not for bar. Relaxing foo is +// Test that we do a relaxation for foo but not for bar or zed. Relaxing foo is // probably not necessary, but matches what gnu as does. // Also test that the relaxation done for foo uses the symbol, not section and @@ -9,29 +9,32 @@ bar: .globl foo foo: + .set zed,foo + jmp bar jmp foo + jmp zed // CHECK: ('sh_name', 0x00000001) # '.text' // CHECK-NEXT: ('sh_type', 0x00000001) // CHECK-NEXT: ('sh_flags', 0x00000006) // CHECK-NEXT: ('sh_addr', 0x00000000) // CHECK-NEXT: ('sh_offset', 0x00000040) -// CHECK-NEXT: ('sh_size', 0x00000007) +// CHECK-NEXT: ('sh_size', 0x00000009) // CHECK-NEXT: ('sh_link', 0x00000000) // CHECK-NEXT: ('sh_info', 0x00000000) // CHECK-NEXT: ('sh_addralign', 0x00000004) // CHECK-NEXT: ('sh_entsize', 0x00000000) -// CHECK-NEXT: ('_section_data', 'ebfee900 000000') +// CHECK-NEXT: ('_section_data', 'ebfee900 000000eb f7') -// CHECK: # Symbol 0x00000005 +// CHECK: # Symbol 0x00000006 // CHECK-NEXT: (('st_name', 0x00000005) # 'foo' // CHECK: .rela.text // CHECK: ('_relocations', [ // CHECK-NEXT: Relocation 0x00000000 // CHECK-NEXT: (('r_offset', 0x00000003) -// CHECK-NEXT: ('r_sym', 0x00000005) +// CHECK-NEXT: ('r_sym', 0x00000006) // CHECK-NEXT: ('r_type', 0x00000002) // CHECK-NEXT: ('r_addend', 0xfffffffc) // CHECK-NEXT: ),