diff options
author | Michael J. Spencer <bigcheesegs@gmail.com> | 2011-10-13 22:30:10 +0000 |
---|---|---|
committer | Michael J. Spencer <bigcheesegs@gmail.com> | 2011-10-13 22:30:10 +0000 |
commit | 834bd602e6343e16d6fd5505d6e1813f22d7d01c (patch) | |
tree | 11d575c070de53e37ab40351d752e1847e0079d9 /llvm | |
parent | 9ca5c425826329d5b23300bbc8a1a7c10a19c64d (diff) | |
download | bcm5719-llvm-834bd602e6343e16d6fd5505d6e1813f22d7d01c.tar.gz bcm5719-llvm-834bd602e6343e16d6fd5505d6e1813f22d7d01c.zip |
ELF: Fix the section that relocations apply to. Add test to verify. Patch by Danil Malyshev!
llvm-svn: 141901
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Object/ELFObjectFile.cpp | 6 | ||||
-rw-r--r-- | llvm/test/Object/objdump-relocations.test | 4 |
2 files changed, 7 insertions, 3 deletions
diff --git a/llvm/lib/Object/ELFObjectFile.cpp b/llvm/lib/Object/ELFObjectFile.cpp index f30d6a03699..257d08cadff 100644 --- a/llvm/lib/Object/ELFObjectFile.cpp +++ b/llvm/lib/Object/ELFObjectFile.cpp @@ -762,7 +762,7 @@ relocation_iterator ELFObjectFile<target_endianness, is64Bits> const Elf_Shdr *sec = reinterpret_cast<const Elf_Shdr *>(Sec.p); typename RelocMap_t::const_iterator ittr = SectionRelocMap.find(sec); if (sec != 0 && ittr != SectionRelocMap.end()) { - RelData.w.a = getSection(ittr->second[0])->sh_link; + RelData.w.a = getSection(ittr->second[0])->sh_info; RelData.w.b = ittr->second[0]; RelData.w.c = 0; } @@ -780,7 +780,7 @@ relocation_iterator ELFObjectFile<target_endianness, is64Bits> // Get the index of the last relocation section for this section. std::size_t relocsecindex = ittr->second[ittr->second.size() - 1]; const Elf_Shdr *relocsec = getSection(relocsecindex); - RelData.w.a = relocsec->sh_link; + RelData.w.a = relocsec->sh_info; RelData.w.b = relocsecindex; RelData.w.c = relocsec->sh_size / relocsec->sh_entsize; } @@ -1114,7 +1114,7 @@ ELFObjectFile<target_endianness, is64Bits>::ELFObjectFile(MemoryBuffer *Object SymbolTableSections.push_back(sh); } if (sh->sh_type == ELF::SHT_REL || sh->sh_type == ELF::SHT_RELA) { - SectionRelocMap[getSection(sh->sh_link)].push_back(i); + SectionRelocMap[getSection(sh->sh_info)].push_back(i); } ++sh; } diff --git a/llvm/test/Object/objdump-relocations.test b/llvm/test/Object/objdump-relocations.test index cd90d7a8fb3..2dcdb432ef6 100644 --- a/llvm/test/Object/objdump-relocations.test +++ b/llvm/test/Object/objdump-relocations.test @@ -7,18 +7,22 @@ RUN: | FileCheck %s -check-prefix ELF-i386 RUN: llvm-objdump -r %p/TestObjectFiles/trivial-object-test.elf-x86-64 \ RUN: | FileCheck %s -check-prefix ELF-x86-64 +COFF-i386: .text COFF-i386: IMAGE_REL_I386_DIR32 L_.str COFF-i386: IMAGE_REL_I386_REL32 _puts COFF-i386: IMAGE_REL_I386_REL32 _SomeOtherFunction +COFF-x86-64: .text COFF-x86-64: IMAGE_REL_AMD64_REL32 L.str COFF-x86-64: IMAGE_REL_AMD64_REL32 puts COFF-x86-64: IMAGE_REL_AMD64_REL32 SomeOtherFunction +ELF-i386: .text ELF-i386: R_386_32 ELF-i386: R_386_PC32 ELF-i386: R_386_PC32 +ELF-x86-64: .text ELF-x86-64: R_X86_64_32S .rodata.str1.1 ELF-x86-64: R_X86_64_PC32 puts ELF-x86-64: R_X86_64_PC32 SomeOtherFunction |