ELF: Fix the section that relocations apply to. Add test to verify. Patch by Danil...
authorMichael J. Spencer <bigcheesegs@gmail.com>
Thu, 13 Oct 2011 22:30:10 +0000 (22:30 +0000)
committerMichael J. Spencer <bigcheesegs@gmail.com>
Thu, 13 Oct 2011 22:30:10 +0000 (22:30 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141901 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Object/ELFObjectFile.cpp
test/Object/objdump-relocations.test

index f30d6a03699511e79a2b8c3e36b4693ce42e51bd..257d08cadff3e6d8801e82064c77baa10256c4a0 100644 (file)
@@ -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;
   }
index cd90d7a8fb3ea817bc114ef17a8c67e5f1d047af..2dcdb432ef61e0e86635546c7b2b73db15f0d580 100644 (file)
@@ -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