[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