From 240bc16532b92fff14ab037868fac2f70fa5af2d Mon Sep 17 00:00:00 2001 From: Simon Atanasyan Date: Tue, 26 Jul 2016 21:11:30 +0000 Subject: [PATCH] [ELF][MIPS] Do not emit .got section in case of relocatable output llvm-svn: 276808 --- lld/ELF/Writer.cpp | 4 ++-- lld/test/ELF/mips-relocatable.s | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 lld/test/ELF/mips-relocatable.s diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index 88f243d..540be8c 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -555,7 +555,7 @@ template void Writer::addRelIpltSymbols() { // The linker is expected to define some symbols depending on // the linking result. This function defines such symbols. template void Writer::addReservedSymbols() { - if (Config->EMachine == EM_MIPS) { + if (Config->EMachine == EM_MIPS && !Config->Relocatable) { // Define _gp for MIPS. st_value of _gp symbol will be updated by Writer // so that it points to an absolute address which is relative to GOT. // See "Global Data Symbols" in Chapter 6 in the following document: @@ -816,7 +816,7 @@ template bool Writer::needsGot() { // We add the .got section to the result for dynamic MIPS target because // its address and properties are mentioned in the .dynamic section. - if (Config->EMachine == EM_MIPS) + if (Config->EMachine == EM_MIPS && !Config->Relocatable) return true; // If we have a relocation that is relative to GOT (such as GOTOFFREL), diff --git a/lld/test/ELF/mips-relocatable.s b/lld/test/ELF/mips-relocatable.s new file mode 100644 index 0000000..168ddf7 --- /dev/null +++ b/lld/test/ELF/mips-relocatable.s @@ -0,0 +1,21 @@ +# Check linking MIPS code in case of -r linker's option. + +# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o +# RUN: ld.lld -r -o %t-r.o %t.o +# RUN: llvm-objdump -s -t %t-r.o | FileCheck %s + +# REQUIRES: mips + + .text + .global __start +__start: + lw $t0,%call16(__start)($gp) +foo: + nop + + .section .rodata, "a" +v: + .gpword foo + +# CHECK-NOT: Contents of section .got: +# CHECK-NOT: {{.*}} _gp -- 2.7.4