Implement sectionContainsSymbol for ELF.
authorEric Christopher <echristo@gmail.com>
Wed, 3 Apr 2013 18:31:19 +0000 (18:31 +0000)
committerEric Christopher <echristo@gmail.com>
Wed, 3 Apr 2013 18:31:19 +0000 (18:31 +0000)
Patch by Nico Rieck!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178677 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Object/ELF.h
test/Object/Mips/feature.test

index fa75053f0a46890b9917afd31bbe431043eff02b..719bc08915d9b3f883aba909d44068af4c5bcc67 100644 (file)
@@ -1378,8 +1378,16 @@ template<class ELFT>
 error_code ELFObjectFile<ELFT>::sectionContainsSymbol(DataRefImpl Sec,
                                                       DataRefImpl Symb,
                                                       bool &Result) const {
-  // FIXME: Unimplemented.
-  Result = false;
+  validateSymbol(Symb);
+
+  const Elf_Shdr *sec = reinterpret_cast<const Elf_Shdr *>(Sec.p);
+  const Elf_Sym  *symb = getSymbol(Symb);
+
+  unsigned shndx = symb->st_shndx;
+  bool Reserved = shndx >= ELF::SHN_LORESERVE
+               && shndx <= ELF::SHN_HIRESERVE;
+
+  Result = !Reserved && (sec == getSection(symb->st_shndx));
   return object_error::success;
 }
 
index e8da609746035851a4e5ba065d73402b79dfc4f6..340301450a50da1d6a51a8473bcc2d3e96d67dcd 100644 (file)
@@ -2,10 +2,12 @@ RUN: llvm-objdump -disassemble -triple mips64el -mattr +mips64r2 %p/../Inputs/de
 RUN: | FileCheck %s
 
 CHECK: Disassembly of section .text:
-CHECK: .text:
+CHECK: dext:
 CHECK:        0:       08 00 e0 03                                     jr      $ra
 CHECK:        4:       43 49 82 7c                                     dext $2, $4, 5, 10
+CHECK: dextu:
 CHECK:        8:       08 00 e0 03                                     jr      $ra
 CHECK:        c:       83 28 82 7c                                     dext $2, $4, 2, 6
+CHECK: dextm:
 CHECK:       10:       08 00 e0 03                                     jr      $ra
 CHECK:       14:       43 09 82 7c                                     dext $2, $4, 5, 2