[llvm] d3b90f4 - Revert "[llvm-readobj][XCOFF] dump auxiliary symbols."
Nico Weber via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 12 06:42:55 PST 2022
Author: Nico Weber
Date: 2022-01-12T09:42:05-05:00
New Revision: d3b90f41041c0e2f0c8de00a3d3cd1b7d5f01367
URL: https://github.com/llvm/llvm-project/commit/d3b90f41041c0e2f0c8de00a3d3cd1b7d5f01367
DIFF: https://github.com/llvm/llvm-project/commit/d3b90f41041c0e2f0c8de00a3d3cd1b7d5f01367.diff
LOG: Revert "[llvm-readobj][XCOFF] dump auxiliary symbols."
This reverts commit aad49c8eb9849be57c562f8e2b7fbbe816183343.
Breaks tests on Windows, see comments on https://reviews.llvm.org/D113825
Added:
Modified:
llvm/include/llvm/Object/XCOFFObjectFile.h
llvm/lib/Object/XCOFFObjectFile.cpp
llvm/test/tools/llvm-readobj/XCOFF/symbols-invalid.test
llvm/test/tools/llvm-readobj/XCOFF/symbols.test
llvm/test/tools/llvm-readobj/XCOFF/symbols64.test
llvm/tools/llvm-readobj/XCOFFDumper.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/Object/XCOFFObjectFile.h b/llvm/include/llvm/Object/XCOFFObjectFile.h
index ac911e534f341..94136afc45ea2 100644
--- a/llvm/include/llvm/Object/XCOFFObjectFile.h
+++ b/llvm/include/llvm/Object/XCOFFObjectFile.h
@@ -348,57 +348,6 @@ struct XCOFFSectAuxEntForStat {
uint8_t Pad[10];
}; // 32-bit XCOFF file only.
-struct XCOFFFunctionAuxEnt32 {
- support::ubig32_t OffsetToExceptionTbl;
- support::ubig32_t SizeOfFunction;
- support::ubig32_t PtrToLineNum;
- support::big32_t SymIdxOfNextBeyond;
- uint8_t Pad[2];
-};
-
-struct XCOFFFunctionAuxEnt64 {
- support::ubig64_t PtrToLineNum;
- support::ubig32_t SizeOfFunction;
- support::big32_t SymIdxOfNextBeyond;
- uint8_t Pad;
- XCOFF::SymbolAuxType AuxType; // Contains _AUX_FCN; Type of auxiliary entry
-};
-
-struct XCOFFExceptionAuxEnt {
- support::ubig64_t OffsetToExceptionTbl;
- support::ubig32_t SizeOfFunction;
- support::big32_t SymIdxOfNextBeyond;
- uint8_t Pad;
- XCOFF::SymbolAuxType AuxType; // Contains _AUX_EXCEPT; Type of auxiliary entry
-};
-
-struct XCOFFBlockAuxEnt32 {
- uint8_t ReservedZeros1[2];
- support::ubig16_t LineNumHi;
- support::ubig16_t LineNumLo;
- uint8_t ReservedZeros2[12];
-};
-
-struct XCOFFBlockAuxEnt64 {
- support::ubig32_t LineNum;
- uint8_t Pad[13];
- XCOFF::SymbolAuxType AuxType; // Contains _AUX_SYM; Type of auxiliary entry
-};
-
-struct XCOFFSectAuxEntForDWARF32 {
- support::ubig32_t LengthOfSectionPortion;
- uint8_t Pad1[4];
- support::ubig32_t NumberOfRelocEnt;
- uint8_t Pad2[6];
-};
-
-struct XCOFFSectAuxEntForDWARF64 {
- support::ubig64_t LengthOfSectionPortion;
- support::ubig64_t NumberOfRelocEnt;
- uint8_t Pad;
- XCOFF::SymbolAuxType AuxType; // Contains _AUX_SECT; Type of Auxillary entry
-};
-
template <typename AddressType> struct XCOFFRelocation {
// Masks for packing/unpacking the r_rsize field of relocations.
diff --git a/llvm/lib/Object/XCOFFObjectFile.cpp b/llvm/lib/Object/XCOFFObjectFile.cpp
index f2f6d700ddd8c..9b0a5efacba7a 100644
--- a/llvm/lib/Object/XCOFFObjectFile.cpp
+++ b/llvm/lib/Object/XCOFFObjectFile.cpp
@@ -1112,12 +1112,8 @@ bool XCOFFSymbolRef::isFunction() const {
return true;
Expected<XCOFFCsectAuxRef> ExpCsectAuxEnt = getXCOFFCsectAuxRef();
- if (!ExpCsectAuxEnt) {
- // If we could not get the CSECT auxiliary entry, then treat this symbol as
- // if it isn't a function. Consume the error and return `false` to move on.
- consumeError(ExpCsectAuxEnt.takeError());
+ if (!ExpCsectAuxEnt)
return false;
- }
const XCOFFCsectAuxRef CsectAuxRef = ExpCsectAuxEnt.get();
diff --git a/llvm/test/tools/llvm-readobj/XCOFF/symbols-invalid.test b/llvm/test/tools/llvm-readobj/XCOFF/symbols-invalid.test
index 15b3e7052b028..b1e10af4f68bd 100644
--- a/llvm/test/tools/llvm-readobj/XCOFF/symbols-invalid.test
+++ b/llvm/test/tools/llvm-readobj/XCOFF/symbols-invalid.test
@@ -1,68 +1,23 @@
-## Test that we report warnings or dump raw data when symbols are invalid.
-
-# RUN: yaml2obj %s --docnum=1 -o %t1
-# RUN: llvm-readobj --syms %t1 2>&1 | FileCheck %s -DFILE=%t1 --check-prefix=CASE1
-
-# CASE1: llvm-readobj: warning: '[[FILE]]': the non-function C_EXT symbol at index 1 should have only 1 auxiliary entry, i.e. the CSECT auxiliary entry
-
---- !XCOFF
-FileHeader:
- MagicNumber: 0x1DF
-Symbols:
- - Name: .sym
- - Name: .fun
- StorageClass: [[STORAGECLASS='C_EXT']]
- NumberOfAuxEntries: 2
-
-# RUN: yaml2obj %s --docnum=1 -DSTORAGECLASS='C_WEAKEXT' -o %t2
-# RUN: llvm-readobj --syms %t2 2>&1 | FileCheck %s -DFILE=%t2 --check-prefix=CASE2
-
-# CASE2: llvm-readobj: warning: '[[FILE]]': the non-function C_WEAKEXT symbol at index 1 should have only 1 auxiliary entry, i.e. the CSECT auxiliary entry
-
-# RUN: yaml2obj %s --docnum=1 -DSTORAGECLASS='C_HIDEXT' -o %t3
-# RUN: llvm-readobj --syms %t3 2>&1 | FileCheck %s -DFILE=%t3 --check-prefix=CASE3
-
-# CASE3: llvm-readobj: warning: '[[FILE]]': the non-function C_HIDEXT symbol at index 1 should have only 1 auxiliary entry, i.e. the CSECT auxiliary entry
-
-# RUN: yaml2obj %s --docnum=1 -DSTORAGECLASS='C_STAT' -o %t4
-# RUN: llvm-readobj --syms %t4 2>&1 | FileCheck %s -DFILE=%t4 --check-prefix=CASE4
-
-# CASE4: llvm-readobj: warning: '[[FILE]]': the C_STAT symbol at index 1 should not have more than 1 auxiliary entry
-
-# RUN: yaml2obj %s --docnum=1 -DSTORAGECLASS='C_DWARF' -o %t5
-# RUN: llvm-readobj --syms %t5 2>&1 | FileCheck %s -DFILE=%t5 --check-prefix=CASE5
-
-# CASE5: llvm-readobj: warning: '[[FILE]]': the C_DWARF symbol at index 1 should not have more than 1 auxiliary entry
-
-# RUN: yaml2obj %s --docnum=1 -DSTORAGECLASS='C_BLOCK' -o %t6
-# RUN: llvm-readobj --syms %t6 2>&1 | FileCheck %s -DFILE=%t6 --check-prefix=CASE6
-
-# CASE6: llvm-readobj: warning: '[[FILE]]': the C_BLOCK symbol at index 1 should not have more than 1 auxiliary entry
-
-# RUN: yaml2obj %s --docnum=1 -DSTORAGECLASS='C_FCN' -o %t7
-# RUN: llvm-readobj --syms %t7 2>&1 | FileCheck %s -DFILE=%t7 --check-prefix=CASE7
-
-# CASE7: llvm-readobj: warning: '[[FILE]]': the C_FCN symbol at index 1 should not have more than 1 auxiliary entry
-
-## This case tests the raw data output ability when a file auxiliary entry does
+## This file tests the raw data output ability when a file auxiliary entry does
## not have the matching auxiliary type.
-# RUN: yaml2obj %s --docnum=2 -o %t8
-# RUN: llvm-readobj --syms %t8 | FileCheck %s --strict-whitespace --match-full-lines --check-prefix=CASE8
-# CASE8:Symbols [
-# CASE8-NEXT: Symbol {
-# CASE8-NEXT: Index: 0
-# CASE8-NEXT: Name: .fun
-# CASE8-NEXT: Value (SymbolTableIndex): 0x0
-# CASE8-NEXT: Section: N_UNDEF
-# CASE8-NEXT: Source Language ID: TB_C (0x0)
-# CASE8-NEXT: CPU Version ID: 0x0
-# CASE8-NEXT: StorageClass: C_FILE (0x67)
-# CASE8-NEXT: NumberOfAuxEntries: 1
-# CASE8-NEXT: !Unexpected raw auxiliary entry data:
-# CASE8-NEXT: 00000000 00000001 00020300 00000000 00fb
-# CASE8-NEXT: }
-# CASE8-NEXT:]
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-readobj --syms %t | FileCheck %s
+
+# CHECK: Symbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Index: 0
+# CHECK-NEXT: Name: .fun
+# CHECK-NEXT: Value (SymbolTableIndex): 0x0
+# CHECK-NEXT: Section: N_UNDEF
+# CHECK-NEXT: Source Language ID: TB_C (0x0)
+# CHECK-NEXT: CPU Version ID: 0x0
+# CHECK-NEXT: StorageClass: C_FILE (0x67)
+# CHECK-NEXT: NumberOfAuxEntries: 1
+# CHECK-NEXT: !Unexpected raw auxiliary entry data:
+# CHECK-NEXT: 00000000 00000001 00020300 00000000 00fb
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
--- !XCOFF
FileHeader:
diff --git a/llvm/test/tools/llvm-readobj/XCOFF/symbols.test b/llvm/test/tools/llvm-readobj/XCOFF/symbols.test
index f72144c6f1a06..9abe480a77479 100644
--- a/llvm/test/tools/llvm-readobj/XCOFF/symbols.test
+++ b/llvm/test/tools/llvm-readobj/XCOFF/symbols.test
@@ -87,52 +87,6 @@ Symbols:
SectionOrLength: 256
StabInfoIndex: 2
StabSectNum: 3
-## The C_WEAKEXT symbol with a Function auxiliary entry and a CSECT auxiliary entry.
- - Name: .fun3
- Value: 0x0
- Section: N_DEBUG
- Type: 0x20
- StorageClass: C_WEAKEXT
- NumberOfAuxEntries: 2
- AuxEntries:
- - Type: AUX_FCN
- OffsetToExceptionTbl: 2
- SizeOfFunction: 3
- SymIdxOfNextBeyond: 4
- PtrToLineNum: 5
- - Type: AUX_CSECT
- ParameterHashIndex: 11
- TypeChkSectNum: 22
- SymbolAlignmentAndType: 33
- StorageMappingClass: XMC_PR
- SectionOrLength: 256
- StabInfoIndex: 44
- StabSectNum: 55
-## The C_DWARF symbol with a SECT auxiliary entry.
- - Name: .fun4
- Section: N_DEBUG
- StorageClass: C_DWARF
- NumberOfAuxEntries: 1
- AuxEntries:
- - Type: AUX_SECT
- LengthOfSectionPortion: 2
- NumberOfRelocEnt: 3
-## The C_BLOCK symbol with a Block auxiliary entry.
- - Name: .fun5
- StorageClass: C_BLOCK
- NumberOfAuxEntries: 1
- AuxEntries:
- - Type: AUX_SYM
- LineNumHi: 2
- LineNumLo: 3
-## The C_FCN symbol with a Block auxiliary entry.
- - Name: .fun6
- StorageClass: C_FCN
- NumberOfAuxEntries: 1
- AuxEntries:
- - Type: AUX_SYM
- LineNumHi: 2
- LineNumLo: 3
# SYMBOL32: Symbols [
# SYMBOL32-NEXT: Symbol {
@@ -235,73 +189,4 @@ Symbols:
# SYMBOL32-NEXT: StabSectNum: 0x3
# SYMBOL32-NEXT: }
# SYMBOL32-NEXT: }
-# SYMBOL32-NEXT: Symbol {
-# SYMBOL32-NEXT: Index: 12
-# SYMBOL32-NEXT: Name: .fun3
-# SYMBOL32-NEXT: Value (RelocatableAddress): 0x0
-# SYMBOL32-NEXT: Section: N_DEBUG
-# SYMBOL32-NEXT: Type: 0x20
-# SYMBOL32-NEXT: StorageClass: C_WEAKEXT (0x6F)
-# SYMBOL32-NEXT: NumberOfAuxEntries: 2
-# SYMBOL32-NEXT: Function Auxiliary Entry {
-# SYMBOL32-NEXT: Index: 13
-# SYMBOL32-NEXT: OffsetToExceptionTable: 0x2
-# SYMBOL32-NEXT: SizeOfFunction: 0x3
-# SYMBOL32-NEXT: PointerToLineNum: 0x5
-# SYMBOL32-NEXT: SymbolIndexOfNextBeyond: 4
-# SYMBOL32-NEXT: }
-# SYMBOL32-NEXT: CSECT Auxiliary Entry {
-# SYMBOL32-NEXT: Index: 14
-# SYMBOL32-NEXT: SectionLen: 256
-# SYMBOL32-NEXT: ParameterHashIndex: 0xB
-# SYMBOL32-NEXT: TypeChkSectNum: 0x16
-# SYMBOL32-NEXT: SymbolAlignmentLog2: 4
-# SYMBOL32-NEXT: SymbolType: XTY_SD (0x1)
-# SYMBOL32-NEXT: StorageMappingClass: XMC_PR (0x0)
-# SYMBOL32-NEXT: StabInfoIndex: 0x2C
-# SYMBOL32-NEXT: StabSectNum: 0x37
-# SYMBOL32-NEXT: }
-# SYMBOL32-NEXT: }
-# SYMBOL32-NEXT: Symbol {
-# SYMBOL32-NEXT: Index: 15
-# SYMBOL32-NEXT: Name: .fun4
-# SYMBOL32-NEXT: Value (OffsetInDWARF): 0x0
-# SYMBOL32-NEXT: Section: N_DEBUG
-# SYMBOL32-NEXT: Type: 0x0
-# SYMBOL32-NEXT: StorageClass: C_DWARF (0x70)
-# SYMBOL32-NEXT: NumberOfAuxEntries: 1
-# SYMBOL32-NEXT: Sect Auxiliary Entry For DWARF {
-# SYMBOL32-NEXT: Index: 16
-# SYMBOL32-NEXT: LengthOfSectionPortion: 0x2
-# SYMBOL32-NEXT: NumberOfRelocEntries: 3
-# SYMBOL32-NEXT: }
-# SYMBOL32-NEXT: }
-# SYMBOL32-NEXT: Symbol {
-# SYMBOL32-NEXT: Index: 17
-# SYMBOL32-NEXT: Name: .fun5
-# SYMBOL32-NEXT: Value (RelocatableAddress): 0x0
-# SYMBOL32-NEXT: Section: N_UNDEF
-# SYMBOL32-NEXT: Type: 0x0
-# SYMBOL32-NEXT: StorageClass: C_BLOCK (0x64)
-# SYMBOL32-NEXT: NumberOfAuxEntries: 1
-# SYMBOL32-NEXT: Block Auxiliary Entry {
-# SYMBOL32-NEXT: Index: 18
-# SYMBOL32-NEXT: LineNumber (High 2 Bytes): 0x2
-# SYMBOL32-NEXT: LineNumber (Low 2 Bytes): 0x3
-# SYMBOL32-NEXT: }
-# SYMBOL32-NEXT: }
-# SYMBOL32-NEXT: Symbol {
-# SYMBOL32-NEXT: Index: 19
-# SYMBOL32-NEXT: Name: .fun6
-# SYMBOL32-NEXT: Value (RelocatableAddress): 0x0
-# SYMBOL32-NEXT: Section: N_UNDEF
-# SYMBOL32-NEXT: Type: 0x0
-# SYMBOL32-NEXT: StorageClass: C_FCN (0x65)
-# SYMBOL32-NEXT: NumberOfAuxEntries: 1
-# SYMBOL32-NEXT: Block Auxiliary Entry {
-# SYMBOL32-NEXT: Index: 20
-# SYMBOL32-NEXT: LineNumber (High 2 Bytes): 0x2
-# SYMBOL32-NEXT: LineNumber (Low 2 Bytes): 0x3
-# SYMBOL32-NEXT: }
-# SYMBOL32-NEXT: }
# SYMBOL32-NEXT: ]
diff --git a/llvm/test/tools/llvm-readobj/XCOFF/symbols64.test b/llvm/test/tools/llvm-readobj/XCOFF/symbols64.test
index 591c131063fe3..617f9ed51990c 100644
--- a/llvm/test/tools/llvm-readobj/XCOFF/symbols64.test
+++ b/llvm/test/tools/llvm-readobj/XCOFF/symbols64.test
@@ -72,71 +72,6 @@ Symbols:
StorageMappingClass: XMC_PR
SectionOrLengthLo: 2
SectionOrLengthHi: 3
-## The C_WEAKEXT symbol with a Function auxiliary entry and a CSECT auxiliary entry.
- - Name: .fun3
- Value: 0x0
- Section: N_DEBUG
- Type: 0x20
- StorageClass: C_WEAKEXT
- NumberOfAuxEntries: 2
- AuxEntries:
- - Type: AUX_FCN
- SizeOfFunction: 3
- SymIdxOfNextBeyond: 4
- PtrToLineNum: 5
- - Type: AUX_CSECT
- ParameterHashIndex: 2
- TypeChkSectNum: 3
- SymbolAlignmentAndType: 1
- StorageMappingClass: XMC_PR
- SectionOrLengthLo: 4
- SectionOrLengthHi: 5
-## The C_EXT symbol with a Function auxiliary entry, a CSECT auxiliary entry, and an Exception auxiliary entry.
- - Name: .fun4
- Value: 0x0
- Section: .text
- Type: 0x20
- StorageClass: C_EXT
- NumberOfAuxEntries: 3
- AuxEntries:
- - Type: AUX_FCN
- SizeOfFunction: 3
- SymIdxOfNextBeyond: 4
- PtrToLineNum: 5
- - Type: AUX_EXCEPT
- OffsetToExceptionTbl: 2
- SizeOfFunction: 3
- SymIdxOfNextBeyond: 4
- - Type: AUX_CSECT
- ParameterHashIndex: 2
- TypeChkSectNum: 3
- SymbolAlignmentAndType: 1
- StorageMappingClass: XMC_PR
- SectionOrLengthLo: 4
- SectionOrLengthHi: 5
-## The C_DWARF symbol with a SECT auxiliary entry.
- - Name: .fun5
- Section: N_DEBUG
- StorageClass: C_DWARF
- NumberOfAuxEntries: 1
- AuxEntries:
- - Type: AUX_SECT
- LengthOfSectionPortion: 2
- NumberOfRelocEnt: 3
-## The C_BLOCK symbol with a Block auxiliary entry.
- - Name: .fun6
- StorageClass: C_BLOCK
- NumberOfAuxEntries: 1
- AuxEntries:
- - Type: AUX_SYM
- LineNum: 3
-## The C_FCN symbol with a Block auxiliary entry.
- - Name: .fun7
- StorageClass: C_FCN
- NumberOfAuxEntries: 1
- AuxEntries:
- - Type: AUX_SYM
- LineNum: 3
# SYMBOL64: Symbols [
# SYMBOL64-NEXT: Symbol {
@@ -224,106 +159,4 @@ Symbols:
# SYMBOL64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
# SYMBOL64-NEXT: }
# SYMBOL64-NEXT: }
-# SYMBOL64-NEXT: Symbol {
-# SYMBOL64-NEXT: Index: 10
-# SYMBOL64-NEXT: Name: .fun3
-# SYMBOL64-NEXT: Value (RelocatableAddress): 0x0
-# SYMBOL64-NEXT: Section: N_DEBUG
-# SYMBOL64-NEXT: Type: 0x20
-# SYMBOL64-NEXT: StorageClass: C_WEAKEXT (0x6F)
-# SYMBOL64-NEXT: NumberOfAuxEntries: 2
-# SYMBOL64-NEXT: Function Auxiliary Entry {
-# SYMBOL64-NEXT: Index: 11
-# SYMBOL64-NEXT: SizeOfFunction: 0x3
-# SYMBOL64-NEXT: PointerToLineNum: 0x5
-# SYMBOL64-NEXT: SymbolIndexOfNextBeyond: 4
-# SYMBOL64-NEXT: Auxiliary Type: AUX_FCN (0xFE)
-# SYMBOL64-NEXT: }
-# SYMBOL64-NEXT: CSECT Auxiliary Entry {
-# SYMBOL64-NEXT: Index: 12
-# SYMBOL64-NEXT: SectionLen: 21474836484
-# SYMBOL64-NEXT: ParameterHashIndex: 0x2
-# SYMBOL64-NEXT: TypeChkSectNum: 0x3
-# SYMBOL64-NEXT: SymbolAlignmentLog2: 0
-# SYMBOL64-NEXT: SymbolType: XTY_SD (0x1)
-# SYMBOL64-NEXT: StorageMappingClass: XMC_PR (0x0)
-# SYMBOL64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
-# SYMBOL64-NEXT: }
-# SYMBOL64-NEXT: }
-# SYMBOL64-NEXT: Symbol {
-# SYMBOL64-NEXT: Index: 13
-# SYMBOL64-NEXT: Name: .fun4
-# SYMBOL64-NEXT: Value (RelocatableAddress): 0x0
-# SYMBOL64-NEXT: Section: .text
-# SYMBOL64-NEXT: Type: 0x20
-# SYMBOL64-NEXT: StorageClass: C_EXT (0x2)
-# SYMBOL64-NEXT: NumberOfAuxEntries: 3
-# SYMBOL64-NEXT: Function Auxiliary Entry {
-# SYMBOL64-NEXT: Index: 14
-# SYMBOL64-NEXT: SizeOfFunction: 0x3
-# SYMBOL64-NEXT: PointerToLineNum: 0x5
-# SYMBOL64-NEXT: SymbolIndexOfNextBeyond: 4
-# SYMBOL64-NEXT: Auxiliary Type: AUX_FCN (0xFE)
-# SYMBOL64-NEXT: }
-# SYMBOL64-NEXT: Exception Auxiliary Entry {
-# SYMBOL64-NEXT: Index: 15
-# SYMBOL64-NEXT: OffsetToExceptionTable: 0x2
-# SYMBOL64-NEXT: SizeOfFunction: 0x3
-# SYMBOL64-NEXT: SymbolIndexOfNextBeyond: 4
-# SYMBOL64-NEXT: Auxiliary Type: AUX_EXCEPT (0xFF)
-# SYMBOL64-NEXT: }
-# SYMBOL64-NEXT: CSECT Auxiliary Entry {
-# SYMBOL64-NEXT: Index: 16
-# SYMBOL64-NEXT: SectionLen: 21474836484
-# SYMBOL64-NEXT: ParameterHashIndex: 0x2
-# SYMBOL64-NEXT: TypeChkSectNum: 0x3
-# SYMBOL64-NEXT: SymbolAlignmentLog2: 0
-# SYMBOL64-NEXT: SymbolType: XTY_SD (0x1)
-# SYMBOL64-NEXT: StorageMappingClass: XMC_PR (0x0)
-# SYMBOL64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
-# SYMBOL64-NEXT: }
-# SYMBOL64-NEXT: }
-# SYMBOL64-NEXT: Symbol {
-# SYMBOL64-NEXT: Index: 17
-# SYMBOL64-NEXT: Name: .fun5
-# SYMBOL64-NEXT: Value (OffsetInDWARF): 0x0
-# SYMBOL64-NEXT: Section: N_DEBUG
-# SYMBOL64-NEXT: Type: 0x0
-# SYMBOL64-NEXT: StorageClass: C_DWARF (0x70)
-# SYMBOL64-NEXT: NumberOfAuxEntries: 1
-# SYMBOL64-NEXT: Sect Auxiliary Entry For DWARF {
-# SYMBOL64-NEXT: Index: 18
-# SYMBOL64-NEXT: LengthOfSectionPortion: 0x2
-# SYMBOL64-NEXT: NumberOfRelocEntries: 3
-# SYMBOL64-NEXT: Auxiliary Type: AUX_SECT (0xFA)
-# SYMBOL64-NEXT: }
-# SYMBOL64-NEXT: }
-# SYMBOL64-NEXT: Symbol {
-# SYMBOL64-NEXT: Index: 19
-# SYMBOL64-NEXT: Name: .fun6
-# SYMBOL64-NEXT: Value (RelocatableAddress): 0x0
-# SYMBOL64-NEXT: Section: N_UNDEF
-# SYMBOL64-NEXT: Type: 0x0
-# SYMBOL64-NEXT: StorageClass: C_BLOCK (0x64)
-# SYMBOL64-NEXT: NumberOfAuxEntries: 1
-# SYMBOL64-NEXT: Block Auxiliary Entry {
-# SYMBOL64-NEXT: Index: 20
-# SYMBOL64-NEXT: LineNumber: 0x3
-# SYMBOL64-NEXT: Auxiliary Type: AUX_SYM (0xFD)
-# SYMBOL64-NEXT: }
-# SYMBOL64-NEXT: }
-# SYMBOL64-NEXT: Symbol {
-# SYMBOL64-NEXT: Index: 21
-# SYMBOL64-NEXT: Name: .fun7
-# SYMBOL64-NEXT: Value (RelocatableAddress): 0x0
-# SYMBOL64-NEXT: Section: N_UNDEF
-# SYMBOL64-NEXT: Type: 0x0
-# SYMBOL64-NEXT: StorageClass: C_FCN (0x65)
-# SYMBOL64-NEXT: NumberOfAuxEntries: 1
-# SYMBOL64-NEXT: Block Auxiliary Entry {
-# SYMBOL64-NEXT: Index: 22
-# SYMBOL64-NEXT: LineNumber: 0x3
-# SYMBOL64-NEXT: Auxiliary Type: AUX_SYM (0xFD)
-# SYMBOL64-NEXT: }
-# SYMBOL64-NEXT: }
# SYMBOL64-NEXT: ]
diff --git a/llvm/tools/llvm-readobj/XCOFFDumper.cpp b/llvm/tools/llvm-readobj/XCOFFDumper.cpp
index e34b105cfbf0a..38e459cd5425b 100644
--- a/llvm/tools/llvm-readobj/XCOFFDumper.cpp
+++ b/llvm/tools/llvm-readobj/XCOFFDumper.cpp
@@ -44,16 +44,9 @@ class XCOFFDumper : public ObjDumper {
template <typename T> void printSectionHeaders(ArrayRef<T> Sections);
template <typename T> void printGenericSectionHeader(T &Sec) const;
template <typename T> void printOverflowSectionHeader(T &Sec) const;
- template <typename T> const T *getAuxEntPtr(uintptr_t AuxAddress);
void printFileAuxEnt(const XCOFFFileAuxEnt *AuxEntPtr);
void printCsectAuxEnt(XCOFFCsectAuxRef AuxEntRef);
void printSectAuxEntForStat(const XCOFFSectAuxEntForStat *AuxEntPtr);
- void printExceptionAuxEnt(const XCOFFExceptionAuxEnt *AuxEntPtr);
- void printFunctionAuxEnt(const XCOFFFunctionAuxEnt32 *AuxEntPtr);
- void printFunctionAuxEnt(const XCOFFFunctionAuxEnt64 *AuxEntPtr);
- void printBlockAuxEnt(const XCOFFBlockAuxEnt32 *AuxEntPtr);
- void printBlockAuxEnt(const XCOFFBlockAuxEnt64 *AuxEntPtr);
- template <typename T> void printSectAuxEntForDWARF(const T *AuxEntPtr);
void printSymbol(const SymbolRef &);
template <typename RelTy> void printRelocation(RelTy Reloc);
template <typename Shdr, typename RelTy>
@@ -296,77 +289,6 @@ void XCOFFDumper::printSectAuxEntForStat(
W.printNumber("NumberOfLineNum", AuxEntPtr->NumberOfLineNum);
}
-void XCOFFDumper::printExceptionAuxEnt(const XCOFFExceptionAuxEnt *AuxEntPtr) {
- assert(Obj.is64Bit() && "64-bit interface called on 32-bit object file.");
-
- DictScope SymDs(W, "Exception Auxiliary Entry");
- W.printNumber("Index",
- Obj.getSymbolIndex(reinterpret_cast<uintptr_t>(AuxEntPtr)));
- W.printHex("OffsetToExceptionTable", AuxEntPtr->OffsetToExceptionTbl);
- W.printHex("SizeOfFunction", AuxEntPtr->SizeOfFunction);
- W.printNumber("SymbolIndexOfNextBeyond", AuxEntPtr->SymIdxOfNextBeyond);
- W.printEnum("Auxiliary Type", static_cast<uint8_t>(AuxEntPtr->AuxType),
- makeArrayRef(SymAuxType));
-}
-
-void XCOFFDumper::printFunctionAuxEnt(const XCOFFFunctionAuxEnt32 *AuxEntPtr) {
- assert(!Obj.is64Bit() && "32-bit interface called on 64-bit object file.");
-
- DictScope SymDs(W, "Function Auxiliary Entry");
- W.printNumber("Index",
- Obj.getSymbolIndex(reinterpret_cast<uintptr_t>(AuxEntPtr)));
- W.printHex("OffsetToExceptionTable", AuxEntPtr->OffsetToExceptionTbl);
- W.printHex("SizeOfFunction", AuxEntPtr->SizeOfFunction);
- W.printHex("PointerToLineNum", AuxEntPtr->PtrToLineNum);
- W.printNumber("SymbolIndexOfNextBeyond", AuxEntPtr->SymIdxOfNextBeyond);
-}
-
-void XCOFFDumper::printFunctionAuxEnt(const XCOFFFunctionAuxEnt64 *AuxEntPtr) {
- assert(Obj.is64Bit() && "64-bit interface called on 32-bit object file.");
-
- DictScope SymDs(W, "Function Auxiliary Entry");
- W.printNumber("Index",
- Obj.getSymbolIndex(reinterpret_cast<uintptr_t>(AuxEntPtr)));
- W.printHex("SizeOfFunction", AuxEntPtr->SizeOfFunction);
- W.printHex("PointerToLineNum", AuxEntPtr->PtrToLineNum);
- W.printNumber("SymbolIndexOfNextBeyond", AuxEntPtr->SymIdxOfNextBeyond);
- W.printEnum("Auxiliary Type", static_cast<uint8_t>(AuxEntPtr->AuxType),
- makeArrayRef(SymAuxType));
-}
-
-void XCOFFDumper::printBlockAuxEnt(const XCOFFBlockAuxEnt32 *AuxEntPtr) {
- assert(!Obj.is64Bit() && "32-bit interface called on 64-bit object file.");
-
- DictScope SymDs(W, "Block Auxiliary Entry");
- W.printNumber("Index",
- Obj.getSymbolIndex(reinterpret_cast<uintptr_t>(AuxEntPtr)));
- W.printHex("LineNumber (High 2 Bytes)", AuxEntPtr->LineNumHi);
- W.printHex("LineNumber (Low 2 Bytes)", AuxEntPtr->LineNumLo);
-}
-
-void XCOFFDumper::printBlockAuxEnt(const XCOFFBlockAuxEnt64 *AuxEntPtr) {
- assert(Obj.is64Bit() && "64-bit interface called on 32-bit object file.");
-
- DictScope SymDs(W, "Block Auxiliary Entry");
- W.printNumber("Index",
- Obj.getSymbolIndex(reinterpret_cast<uintptr_t>(AuxEntPtr)));
- W.printHex("LineNumber", AuxEntPtr->LineNum);
- W.printEnum("Auxiliary Type", static_cast<uint8_t>(AuxEntPtr->AuxType),
- makeArrayRef(SymAuxType));
-}
-
-template <typename T>
-void XCOFFDumper::printSectAuxEntForDWARF(const T *AuxEntPtr) {
- DictScope SymDs(W, "Sect Auxiliary Entry For DWARF");
- W.printNumber("Index",
- Obj.getSymbolIndex(reinterpret_cast<uintptr_t>(AuxEntPtr)));
- W.printHex("LengthOfSectionPortion", AuxEntPtr->LengthOfSectionPortion);
- W.printNumber("NumberOfRelocEntries", AuxEntPtr->NumberOfRelocEnt);
- if (Obj.is64Bit())
- W.printEnum("Auxiliary Type", static_cast<uint8_t>(XCOFF::AUX_SECT),
- makeArrayRef(SymAuxType));
-}
-
const EnumEntry<XCOFF::StorageClass> SymStorageClass[] = {
#define ECase(X) \
{ #X, XCOFF::X }
@@ -392,13 +314,11 @@ static StringRef GetSymbolValueName(XCOFF::StorageClass SC) {
case XCOFF::C_WEAKEXT:
case XCOFF::C_HIDEXT:
case XCOFF::C_STAT:
- case XCOFF::C_FCN:
- case XCOFF::C_BLOCK:
return "Value (RelocatableAddress)";
case XCOFF::C_FILE:
return "Value (SymbolTableIndex)";
- case XCOFF::C_DWARF:
- return "Value (OffsetInDWARF)";
+ case XCOFF::C_FCN:
+ case XCOFF::C_BLOCK:
case XCOFF::C_FUN:
case XCOFF::C_STSYM:
case XCOFF::C_BINCL:
@@ -410,6 +330,7 @@ static StringRef GetSymbolValueName(XCOFF::StorageClass SC) {
case XCOFF::C_RPSYM:
case XCOFF::C_RSYM:
case XCOFF::C_ECOML:
+ case XCOFF::C_DWARF:
assert(false && "This StorageClass for the symbol is not yet implemented.");
return "";
default:
@@ -431,22 +352,6 @@ const EnumEntry<XCOFF::CFileCpuId> CFileCpuIdClass[] = {
#undef ECase
};
-template <typename T> const T *XCOFFDumper::getAuxEntPtr(uintptr_t AuxAddress) {
- const T *AuxEntPtr = reinterpret_cast<const T *>(AuxAddress);
- Obj.checkSymbolEntryPointer(reinterpret_cast<uintptr_t>(AuxEntPtr));
- return AuxEntPtr;
-}
-
-static void printUnexpectedRawAuxEnt(ScopedPrinter &W, uintptr_t AuxAddress) {
- W.startLine() << "!Unexpected raw auxiliary entry data:\n";
- W.startLine() << format_bytes(
- ArrayRef<uint8_t>(
- reinterpret_cast<const uint8_t *>(AuxAddress),
- XCOFF::SymbolTableEntrySize),
- None, XCOFF::SymbolTableEntrySize)
- << "\n";
-}
-
void XCOFFDumper::printSymbol(const SymbolRef &S) {
DataRefImpl SymbolDRI = S.getRawDataRefImpl();
XCOFFSymbolRef SymbolEntRef = Obj.toSymbolRef(SymbolDRI);
@@ -458,18 +363,16 @@ void XCOFFDumper::printSymbol(const SymbolRef &S) {
StringRef SymbolName =
unwrapOrError(Obj.getFileName(), SymbolEntRef.getName());
- uint32_t SymbolIdx = Obj.getSymbolIndex(SymbolEntRef.getEntryAddress());
- XCOFF::StorageClass SymbolClass = SymbolEntRef.getStorageClass();
-
- W.printNumber("Index", SymbolIdx);
+ W.printNumber("Index", Obj.getSymbolIndex(SymbolEntRef.getEntryAddress()));
W.printString("Name", SymbolName);
- W.printHex(GetSymbolValueName(SymbolClass), SymbolEntRef.getValue());
+ W.printHex(GetSymbolValueName(SymbolEntRef.getStorageClass()),
+ SymbolEntRef.getValue());
StringRef SectionName =
unwrapOrError(Obj.getFileName(), Obj.getSymbolSectionName(SymbolEntRef));
W.printString("Section", SectionName);
- if (SymbolClass == XCOFF::C_FILE) {
+ if (SymbolEntRef.getStorageClass() == XCOFF::C_FILE) {
W.printEnum("Source Language ID", SymbolEntRef.getLanguageIdForCFile(),
makeArrayRef(CFileLangIdClass));
W.printEnum("CPU Version ID", SymbolEntRef.getCPUTypeIddForCFile(),
@@ -477,24 +380,15 @@ void XCOFFDumper::printSymbol(const SymbolRef &S) {
} else
W.printHex("Type", SymbolEntRef.getSymbolType());
- W.printEnum("StorageClass", static_cast<uint8_t>(SymbolClass),
+ W.printEnum("StorageClass",
+ static_cast<uint8_t>(SymbolEntRef.getStorageClass()),
makeArrayRef(SymStorageClass));
W.printNumber("NumberOfAuxEntries", NumberOfAuxEntries);
if (NumberOfAuxEntries == 0)
return;
- auto checkNumOfAux = [=] {
- if (NumberOfAuxEntries > 1)
- reportUniqueWarning("the " +
- enumToString(static_cast<uint8_t>(SymbolClass),
- makeArrayRef(SymStorageClass)) +
- " symbol at index " + Twine(SymbolIdx) +
- " should not have more than 1 "
- "auxiliary entry");
- };
-
- switch (SymbolClass) {
+ switch (SymbolEntRef.getStorageClass()) {
case XCOFF::C_FILE:
// If the symbol is C_FILE and has auxiliary entries...
for (int I = 1; I <= NumberOfAuxEntries; I++) {
@@ -503,62 +397,55 @@ void XCOFFDumper::printSymbol(const SymbolRef &S) {
if (Obj.is64Bit() &&
*Obj.getSymbolAuxType(AuxAddress) != XCOFF::SymbolAuxType::AUX_FILE) {
- printUnexpectedRawAuxEnt(W, AuxAddress);
+ W.startLine() << "!Unexpected raw auxiliary entry data:\n";
+ W.startLine() << format_bytes(
+ ArrayRef<uint8_t>(
+ reinterpret_cast<const uint8_t *>(AuxAddress),
+ XCOFF::SymbolTableEntrySize),
+ 0, XCOFF::SymbolTableEntrySize)
+ << "\n";
continue;
}
const XCOFFFileAuxEnt *FileAuxEntPtr =
- getAuxEntPtr<XCOFFFileAuxEnt>(AuxAddress);
+ reinterpret_cast<const XCOFFFileAuxEnt *>(AuxAddress);
+#ifndef NDEBUG
+ Obj.checkSymbolEntryPointer(reinterpret_cast<uintptr_t>(FileAuxEntPtr));
+#endif
printFileAuxEnt(FileAuxEntPtr);
}
break;
case XCOFF::C_EXT:
case XCOFF::C_WEAKEXT:
case XCOFF::C_HIDEXT: {
- if (!SymbolEntRef.isFunction() && NumberOfAuxEntries > 1)
- reportUniqueWarning("the non-function " +
- enumToString(static_cast<uint8_t>(SymbolClass),
- makeArrayRef(SymStorageClass)) +
- " symbol at index " + Twine(SymbolIdx) +
- " should have only 1 auxiliary entry, i.e. the CSECT "
- "auxiliary entry");
-
- // For 32-bit objects, print the function auxiliary symbol table entry. The
- // last one must be a CSECT auxiliary entry.
- // For 64-bit objects, both a function auxiliary entry and an exception
- // auxiliary entry may appear, print them in the loop and skip printing the
- // CSECT auxiliary entry, which will be printed outside the loop.
+ // If the symbol is for a function, and it has more than 1 auxiliary entry,
+ // then one of them must be function auxiliary entry which we do not
+ // support yet.
+ if (SymbolEntRef.isFunction() && NumberOfAuxEntries >= 2)
+ report_fatal_error("Function auxiliary entry printing is unimplemented.");
+
+ // If there is more than 1 auxiliary entry, instead of printing out
+ // error information, print out the raw Auxiliary entry.
+ // For 32-bit object, print from first to the last - 1. The last one must be
+ // a CSECT Auxiliary Entry.
+ // For 64-bit object, print from first to last and skips if SymbolAuxType is
+ // AUX_CSECT.
for (int I = 1; I <= NumberOfAuxEntries; I++) {
- if ((I == NumberOfAuxEntries && !Obj.is64Bit()) ||
- !SymbolEntRef.isFunction())
+ if (I == NumberOfAuxEntries && !Obj.is64Bit())
break;
uintptr_t AuxAddress = XCOFFObjectFile::getAdvancedSymbolEntryAddress(
SymbolEntRef.getEntryAddress(), I);
+ if (Obj.is64Bit() &&
+ *Obj.getSymbolAuxType(AuxAddress) == XCOFF::SymbolAuxType::AUX_CSECT)
+ continue;
- if (Obj.is64Bit()) {
- XCOFF::SymbolAuxType Type = *Obj.getSymbolAuxType(AuxAddress);
- if (Type == XCOFF::SymbolAuxType::AUX_CSECT)
- continue;
- if (Type == XCOFF::SymbolAuxType::AUX_FCN) {
- const XCOFFFunctionAuxEnt64 *AuxEntPtr =
- getAuxEntPtr<XCOFFFunctionAuxEnt64>(AuxAddress);
- printFunctionAuxEnt(AuxEntPtr);
- } else if (Type == XCOFF::SymbolAuxType::AUX_EXCEPT) {
- const XCOFFExceptionAuxEnt *AuxEntPtr =
- getAuxEntPtr<XCOFFExceptionAuxEnt>(AuxAddress);
- printExceptionAuxEnt(AuxEntPtr);
- } else {
- printUnexpectedRawAuxEnt(W, AuxAddress);
- }
- } else {
- const XCOFFFunctionAuxEnt32 *AuxEntPtr =
- getAuxEntPtr<XCOFFFunctionAuxEnt32>(AuxAddress);
- printFunctionAuxEnt(AuxEntPtr);
- }
+ W.startLine() << "!Unexpected raw auxiliary entry data:\n";
+ W.startLine() << format_bytes(
+ ArrayRef<uint8_t>(reinterpret_cast<const uint8_t *>(AuxAddress),
+ XCOFF::SymbolTableEntrySize));
}
- // Print the CSECT auxiliary entry.
auto ErrOrCsectAuxRef = SymbolEntRef.getXCOFFCsectAuxRef();
if (!ErrOrCsectAuxRef)
reportUniqueWarning(ErrOrCsectAuxRef.takeError());
@@ -567,56 +454,34 @@ void XCOFFDumper::printSymbol(const SymbolRef &S) {
break;
}
- case XCOFF::C_STAT: {
- checkNumOfAux();
-
- const XCOFFSectAuxEntForStat *StatAuxEntPtr =
- getAuxEntPtr<XCOFFSectAuxEntForStat>(
- XCOFFObjectFile::getAdvancedSymbolEntryAddress(
- SymbolEntRef.getEntryAddress(), 1));
+ case XCOFF::C_STAT:
+ if (NumberOfAuxEntries > 1)
+ report_fatal_error(
+ "C_STAT symbol should not have more than 1 auxiliary entry.");
+
+ const XCOFFSectAuxEntForStat *StatAuxEntPtr;
+ StatAuxEntPtr = reinterpret_cast<const XCOFFSectAuxEntForStat *>(
+ XCOFFObjectFile::getAdvancedSymbolEntryAddress(
+ SymbolEntRef.getEntryAddress(), 1));
+#ifndef NDEBUG
+ Obj.checkSymbolEntryPointer(reinterpret_cast<uintptr_t>(StatAuxEntPtr));
+#endif
printSectAuxEntForStat(StatAuxEntPtr);
break;
- }
- case XCOFF::C_DWARF: {
- checkNumOfAux();
-
- uintptr_t AuxAddress = XCOFFObjectFile::getAdvancedSymbolEntryAddress(
- SymbolEntRef.getEntryAddress(), 1);
-
- if (Obj.is64Bit()) {
- const XCOFFSectAuxEntForDWARF64 *AuxEntPtr =
- getAuxEntPtr<XCOFFSectAuxEntForDWARF64>(AuxAddress);
- printSectAuxEntForDWARF<XCOFFSectAuxEntForDWARF64>(AuxEntPtr);
- } else {
- const XCOFFSectAuxEntForDWARF32 *AuxEntPtr =
- getAuxEntPtr<XCOFFSectAuxEntForDWARF32>(AuxAddress);
- printSectAuxEntForDWARF<XCOFFSectAuxEntForDWARF32>(AuxEntPtr);
- }
- break;
- }
+ case XCOFF::C_DWARF:
case XCOFF::C_BLOCK:
- case XCOFF::C_FCN: {
- checkNumOfAux();
-
- uintptr_t AuxAddress = XCOFFObjectFile::getAdvancedSymbolEntryAddress(
- SymbolEntRef.getEntryAddress(), 1);
-
- if (Obj.is64Bit()) {
- const XCOFFBlockAuxEnt64 *AuxEntPtr =
- getAuxEntPtr<XCOFFBlockAuxEnt64>(AuxAddress);
- printBlockAuxEnt(AuxEntPtr);
- } else {
- const XCOFFBlockAuxEnt32 *AuxEntPtr =
- getAuxEntPtr<XCOFFBlockAuxEnt32>(AuxAddress);
- printBlockAuxEnt(AuxEntPtr);
- }
+ case XCOFF::C_FCN:
+ report_fatal_error("Symbol table entry printing for this storage class "
+ "type is unimplemented.");
break;
- }
default:
for (int i = 1; i <= NumberOfAuxEntries; i++) {
- printUnexpectedRawAuxEnt(W,
- XCOFFObjectFile::getAdvancedSymbolEntryAddress(
- SymbolEntRef.getEntryAddress(), i));
+ W.startLine() << "!Unexpected raw auxiliary entry data:\n";
+ W.startLine() << format_bytes(
+ ArrayRef<uint8_t>(reinterpret_cast<const uint8_t *>(
+ XCOFFObjectFile::getAdvancedSymbolEntryAddress(
+ SymbolEntRef.getEntryAddress(), i)),
+ XCOFF::SymbolTableEntrySize));
}
break;
}
More information about the llvm-commits
mailing list