[lld] r199239 - [Mips] Create and initialize _gp symbol.

Simon Atanasyan simon at atanasyan.com
Tue Jan 14 10:19:53 PST 2014


Author: atanasyan
Date: Tue Jan 14 12:19:52 2014
New Revision: 199239

URL: http://llvm.org/viewvc/llvm-project?rev=199239&view=rev
Log:
[Mips] Create and initialize _gp symbol.

Modified:
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp
    lld/trunk/test/elf/Mips/dynlib-fileheader.test
    lld/trunk/test/elf/Mips/gotsym.test

Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp?rev=199239&r1=199238&r2=199239&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp Tue Jan 14 12:19:52 2014
@@ -157,6 +157,7 @@ bool MipsTargetHandler::createImplicitFi
 
   if (_context.isDynamic()) {
     file->addAbsoluteAtom("_GLOBAL_OFFSET_TABLE_");
+    file->addAbsoluteAtom("_gp");
     file->addAbsoluteAtom("_gp_disp");
   }
   result.push_back(std::move(file));
@@ -173,6 +174,12 @@ void MipsTargetHandler::finalizeSymbolVa
     assert(gotAtomIter != _targetLayout.absoluteAtoms().end());
     (*gotAtomIter)->_virtualAddr = gotSection ? gotSection->virtualAddr() : 0;
 
+    auto gpAtomIter = _targetLayout.findAbsoluteAtom("_gp");
+    assert(gpAtomIter != _targetLayout.absoluteAtoms().end());
+    (*gpAtomIter)->_virtualAddr =
+        gotSection ? gotSection->virtualAddr() + _targetLayout.getGPOffset()
+                   : 0;
+
     auto gpDispAtomIter = _targetLayout.findAbsoluteAtom("_gp_disp");
     assert(gpDispAtomIter != _targetLayout.absoluteAtoms().end());
     _gpDispSymAtom = (*gpDispAtomIter);

Modified: lld/trunk/test/elf/Mips/dynlib-fileheader.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/dynlib-fileheader.test?rev=199239&r1=199238&r2=199239&view=diff
==============================================================================
--- lld/trunk/test/elf/Mips/dynlib-fileheader.test (original)
+++ lld/trunk/test/elf/Mips/dynlib-fileheader.test Tue Jan 14 12:19:52 2014
@@ -21,7 +21,7 @@ CHECK:  Machine: EM_MIPS (0x8)
 CHECK:  Version: 1
 CHECK:  Entry: 0x170
 CHECK:  ProgramHeaderOffset: 0x34
-CHECK:  SectionHeaderOffset: 0x21C8
+CHECK:  SectionHeaderOffset: 0x21D8
 CHECK:  Flags [ (0x0)
 CHECK:  ]
 CHECK:  HeaderSize: 52

Modified: lld/trunk/test/elf/Mips/gotsym.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/gotsym.test?rev=199239&r1=199238&r2=199239&view=diff
==============================================================================
--- lld/trunk/test/elf/Mips/gotsym.test (original)
+++ lld/trunk/test/elf/Mips/gotsym.test Tue Jan 14 12:19:52 2014
@@ -9,6 +9,7 @@
 # SHARED:   6 .got          00000008 0000000000001000 DATA 
 # SHARED: SYMBOL TABLE:
 # SHARED: 00001000 g       *ABS*  00000000 _GLOBAL_OFFSET_TABLE_
+# SHARED: 00008ff0 g       *ABS*  00000000 _gp
 # SHARED: 00008ff0 g       *ABS*  00000000 _gp_disp
 
 # RUN: lld -flavor gnu -target mipsel -e main --noinhibit-exec -o %t2 %t1
@@ -19,6 +20,7 @@
 # EXE:   7 .got          00000008 0000000000401000 DATA
 # EXE: SYMBOL TABLE:
 # EXE: 00401000 g       *ABS*  00000000 _GLOBAL_OFFSET_TABLE_
+# EXE: 00408ff0 g       *ABS*  00000000 _gp
 # EXE: 00408ff0 g       *ABS*  00000000 _gp_disp
 
     .global main





More information about the llvm-commits mailing list