[PATCH] D58498: [obj2yaml] - Do not miss section index for special symbols.

George Rimar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 22 00:44:56 PST 2019


This revision was automatically updated to reflect the committed changes.
Closed by commit rL354661: [obj2yaml] - Do not miss section index for special symbols. (authored by grimar, committed by ).
Herald added a project: LLVM.

Changed prior to commit:
  https://reviews.llvm.org/D58498?vs=187791&id=187907#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D58498/new/

https://reviews.llvm.org/D58498

Files:
  llvm/trunk/test/tools/obj2yaml/Inputs/shn_xindex.o
  llvm/trunk/test/tools/obj2yaml/special-symbol-indices.yaml
  llvm/trunk/tools/obj2yaml/elf2yaml.cpp


Index: llvm/trunk/tools/obj2yaml/elf2yaml.cpp
===================================================================
--- llvm/trunk/tools/obj2yaml/elf2yaml.cpp
+++ llvm/trunk/tools/obj2yaml/elf2yaml.cpp
@@ -284,6 +284,13 @@
     return errorToErrorCode(SymbolNameOrErr.takeError());
   S.Name = SymbolNameOrErr.get();
 
+  if (Sym->st_shndx >= ELF::SHN_LORESERVE) {
+    if (Sym->st_shndx == ELF::SHN_XINDEX)
+      return obj2yaml_error::not_implemented;
+    S.Index = (ELFYAML::ELF_SHN)Sym->st_shndx;
+    return obj2yaml_error::success;
+  }
+
   auto ShdrOrErr = Obj.getSection(Sym, SymTab, ShndxTable);
   if (!ShdrOrErr)
     return errorToErrorCode(ShdrOrErr.takeError());
Index: llvm/trunk/test/tools/obj2yaml/special-symbol-indices.yaml
===================================================================
--- llvm/trunk/test/tools/obj2yaml/special-symbol-indices.yaml
+++ llvm/trunk/test/tools/obj2yaml/special-symbol-indices.yaml
@@ -0,0 +1,46 @@
+# RUN: yaml2obj %s > %t
+# RUN: obj2yaml %t | FileCheck %s
+
+## Test checks that we are able to handle symbols with special/reserved indices.
+
+# CHECK:      Symbols:
+# CHECK-NEXT:   Global:
+# CHECK-NEXT:     - Name:    absolute
+# CHECK-NEXT:       Index:   SHN_ABS
+# CHECK-NEXT:       Value:   0x0000000000001234
+# CHECK-NEXT:     - Name:    common
+# CHECK-NEXT:       Index:   SHN_COMMON
+# CHECK-NEXT:     - Name:    valid_index
+# CHECK-NEXT:       Section: .text
+# CHECK-NEXT:     - Name:    processor_specific_index
+# CHECK-NEXT:       Index:   SHN_HEXAGON_SCOMMON_1
+# CHECK-NEXT:     - Name:    unknown_index
+# CHECK-NEXT:       Index:   0x0000FFFE
+
+!ELF
+FileHeader:
+  Class:           ELFCLASS64
+  Data:            ELFDATA2LSB
+  Type:            ET_EXEC
+  Machine:         EM_HEXAGON
+Sections:
+  - Name: .text
+    Type: SHT_PROGBITS
+Symbols:
+  Global:
+    - Name:     absolute
+      Index:    SHN_ABS
+      Value:    0x1234
+    - Name:     common
+      Index:    SHN_COMMON
+    - Name:     valid_index
+      Index:    0x1
+    - Name:     processor_specific_index
+      Index:    SHN_HEXAGON_SCOMMON_1
+    - Name:     unknown_index
+      Index:    0xfffe
+
+## shn_xindex.o contains a symbol with st_shndx == SHN_XINDEX.
+## We do not support it at this moment.
+# RUN: not obj2yaml %S/Inputs/shn_xindex.o 2>&1 | FileCheck %s --check-prefix=ERR
+# ERR: Error reading file: {{.*}}shn_xindex.o: Feature not yet implemented.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D58498.187907.patch
Type: text/x-patch
Size: 2420 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190222/16a73abe/attachment.bin>


More information about the llvm-commits mailing list