aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael J. Spencer <bigcheesegs@gmail.com>2011-10-13 22:30:10 +0000
committerMichael J. Spencer <bigcheesegs@gmail.com>2011-10-13 22:30:10 +0000
commit63b2f8c710ec42aa5304cbe8a5e8013e3ac66b8e (patch)
treea2ef7ac0acfa4aa9ce070a782aafedfbb0ca2944
parent942eb009114ef9a2e95e236790faa7a3c04bc2ba (diff)
ELF: Fix the section that relocations apply to. Add test to verify. Patch by Danil Malyshev!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141901 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Object/ELFObjectFile.cpp6
-rw-r--r--test/Object/objdump-relocations.test4
2 files changed, 7 insertions, 3 deletions
diff --git a/lib/Object/ELFObjectFile.cpp b/lib/Object/ELFObjectFile.cpp
index f30d6a0369..257d08cadf 100644
--- a/lib/Object/ELFObjectFile.cpp
+++ b/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/test/Object/objdump-relocations.test b/test/Object/objdump-relocations.test
index cd90d7a8fb..2dcdb432ef 100644
--- a/test/Object/objdump-relocations.test
+++ b/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