From c3c413f63117896f186fc4385bdaac0578d3613f Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Mon, 27 Sep 2010 22:04:54 +0000 Subject: [PATCH] Write relocations in the end of the file. This matches what gas does and makes files easier to diff. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114898 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MC/ELFObjectWriter.cpp | 3 +- test/MC/ELF/basic-elf.ll | 71 +++++++++++++++++++------------------- test/MC/ELF/local-reloc.s | 19 +++++----- test/MC/ELF/merge.s | 10 +++--- 4 files changed, 51 insertions(+), 52 deletions(-) diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp index 58fad80ba89..120789b6fd0 100644 --- a/lib/MC/ELFObjectWriter.cpp +++ b/lib/MC/ELFObjectWriter.cpp @@ -839,8 +839,6 @@ void ELFObjectWriterImpl::CreateMetadataSections(MCAssembler &Asm, MCContext &Ctx = Asm.getContext(); MCDataFragment *F; - WriteRelocations(Asm, Layout); - const MCSection *SymtabSection; unsigned EntrySize = Is64Bit ? ELF::SYMENTRY_SIZE64 : ELF::SYMENTRY_SIZE32; @@ -867,6 +865,7 @@ void ELFObjectWriterImpl::CreateMetadataSections(MCAssembler &Asm, StrtabSD.setAlignment(1); StringTableIndex = Asm.size(); + WriteRelocations(Asm, Layout); // Symbol table F = new MCDataFragment(&SymtabSD); diff --git a/test/MC/ELF/basic-elf.ll b/test/MC/ELF/basic-elf.ll index 1aa43f7884a..b9be0678a71 100644 --- a/test/MC/ELF/basic-elf.ll +++ b/test/MC/ELF/basic-elf.ll @@ -20,6 +20,24 @@ declare i32 @puts(i8* nocapture) nounwind ; 32: (('sh_name', 0) # '' ; 32: # '.text' + +; 32: ('st_bind', 0) +; 32: ('st_type', 3) + +; 32: ('st_bind', 0) +; 32: ('st_type', 3) + +; 32: ('st_bind', 0) +; 32: ('st_type', 3) + +; 32: # 'main' +; 32: ('st_bind', 1) +; 32-NEXT: ('st_type', 2) + +; 32: # 'puts' +; 32: ('st_bind', 1) +; 32-NEXT: ('st_type', 0) + ; 32: # '.rel.text' ; 32: ('_relocations', [ @@ -41,24 +59,6 @@ declare i32 @puts(i8* nocapture) nounwind ; 32: ), ; 32: ]) -; 32: ('st_bind', 0) -; 32: ('st_type', 3) - -; 32: ('st_bind', 0) -; 32: ('st_type', 3) - -; 32: ('st_bind', 0) -; 32: ('st_type', 3) - -; 32: # 'main' -; 32: ('st_bind', 1) -; 32-NEXT: ('st_type', 2) - -; 32: # 'puts' -; 32: ('st_bind', 1) -; 32-NEXT: ('st_type', 0) - - ; 64: ('e_indent[EI_CLASS]', 2) ; 64: ('e_indent[EI_DATA]', 1) ; 64: ('e_indent[EI_VERSION]', 1) @@ -67,6 +67,24 @@ declare i32 @puts(i8* nocapture) nounwind ; 64: (('sh_name', 0) # '' ; 64: # '.text' + +; 64: ('st_bind', 0) +; 64: ('st_type', 3) + +; 64: ('st_bind', 0) +; 64: ('st_type', 3) + +; 64: ('st_bind', 0) +; 64: ('st_type', 3) + +; 64: # 'main' +; 64-NEXT: ('st_bind', 1) +; 64-NEXT: ('st_type', 2) + +; 64: # 'puts' +; 64-NEXT: ('st_bind', 1) +; 64-NEXT: ('st_type', 0) + ; 64: # '.rela.text' ; 64: ('_relocations', [ @@ -91,20 +109,3 @@ declare i32 @puts(i8* nocapture) nounwind ; 64: ('r_addend', -4) ; 64: ), ; 64: ]) - -; 64: ('st_bind', 0) -; 64: ('st_type', 3) - -; 64: ('st_bind', 0) -; 64: ('st_type', 3) - -; 64: ('st_bind', 0) -; 64: ('st_type', 3) - -; 64: # 'main' -; 64-NEXT: ('st_bind', 1) -; 64-NEXT: ('st_type', 2) - -; 64: # 'puts' -; 64-NEXT: ('st_bind', 1) -; 64-NEXT: ('st_type', 0) diff --git a/test/MC/ELF/local-reloc.s b/test/MC/ELF/local-reloc.s index e5a3d4cce50..30c0f68455d 100644 --- a/test/MC/ELF/local-reloc.s +++ b/test/MC/ELF/local-reloc.s @@ -10,6 +10,15 @@ foo: // CHECK: # Section 1 // CHECK-next: (('sh_name', 1) # '.text' +// Symbol number 2 is section number 1 +// CHECK: # Symbol 2 +// CHECK-NEXT: (('st_name', 0) # '' +// CHECK-NEXT: ('st_bind', 0) +// CHECK-NEXT: ('st_type', 3) +// CHECK-NEXT: ('st_other', 0) +// CHECK-NEXT: ('st_shndx', 1) +// CHECK-NEXT: ('st_value', 0) +// CHECK-NEXT: ('st_size', 0) // Relocation refers to symbol number 2 // CHECK: ('_relocations', [ @@ -20,13 +29,3 @@ foo: // CHECK-NEXT: ('r_addend', // CHECK-NEXT: ), // CHECK-NEXT: ]) - -// Symbol number 2 is section number 1 -// CHECK: # Symbol 2 -// CHECK-NEXT: (('st_name', 0) # '' -// CHECK-NEXT: ('st_bind', 0) -// CHECK-NEXT: ('st_type', 3) -// CHECK-NEXT: ('st_other', 0) -// CHECK-NEXT: ('st_shndx', 1) -// CHECK-NEXT: ('st_value', 0) -// CHECK-NEXT: ('st_size', 0) diff --git a/test/MC/ELF/merge.s b/test/MC/ELF/merge.s index 82e1d88696b..14828d2ec2a 100644 --- a/test/MC/ELF/merge.s +++ b/test/MC/ELF/merge.s @@ -9,6 +9,11 @@ .text movsd .Lfoo(%rip), %xmm1 +// Symbol number 1 is .Lfoo + +// CHECK: # Symbol 1 +// CHECK-NEXT: (('st_name', 1) # '.Lfoo' + // Relocation refers to symbol 1 // CHECK: ('_relocations', [ @@ -19,8 +24,3 @@ // CHECK-NEXT: ('r_addend', // CHECK-NEXT: ), // CHECK-NEXT: ]) - -// Symbol number 1 is .Lfoo - -// CHECK: # Symbol 1 -// CHECK-NEXT: (('st_name', 1) # '.Lfoo'