Index: ELF/Writer.cpp =================================================================== --- ELF/Writer.cpp +++ ELF/Writer.cpp @@ -98,6 +98,17 @@ if (Config->Relocatable) return Name; + // This is normally used for --emit-relocs. With that we want + // to name relocation section similar to it's target section. + // That makes output cleaner and consistent with GNU linkers. + for (StringRef V : {".rel.", ".rela."}) { + if (!Name.startswith(V)) + continue; + StringRef Target = Name.drop_front(V.size() - 1); + size_t Size = V.size() + getOutputSectionName(Target).size() - 1; + return Name.take_front(Size); + } + for (StringRef V : {".text.", ".rodata.", ".data.rel.ro.", ".data.", ".bss.rel.ro.", ".bss.", ".init_array.", ".fini_array.", ".ctors.", ".dtors.", ".tbss.", Index: test/ELF/emit-relocs-merge.s =================================================================== --- test/ELF/emit-relocs-merge.s +++ test/ELF/emit-relocs-merge.s @@ -8,7 +8,7 @@ # CHECK-NEXT: 0x1000 R_X86_64_64 zed 0x0 # CHECK-NEXT: 0x1008 R_X86_64_64 zed 0x0 # CHECK-NEXT: } -# CHECK-NEXT: Section ({{.*}}) .rela.data.foo { +# CHECK-NEXT: Section ({{.*}}) .rela.data { # CHECK-NEXT: 0x1000 R_X86_64_64 zed 0x0 # CHECK-NEXT: 0x1008 R_X86_64_64 zed 0x0 # CHECK-NEXT: } Index: test/ELF/emit-relocs.s =================================================================== --- test/ELF/emit-relocs.s +++ test/ELF/emit-relocs.s @@ -83,7 +83,7 @@ # CHECK-NEXT: } # CHECK-NEXT: ] -.section .text,"ax",@progbits,unique,0 +.section .text.fn,"ax",@progbits,unique,0 .globl fn .type fn,@function fn: @@ -94,7 +94,7 @@ callq fn@PLT nop -.section .text,"ax",@progbits,unique,1 +.section .text.fn2,"ax",@progbits,unique,1 .globl fn2 .type fn2,@function fn2: