forked from OSchip/llvm-project
Revert "[llvm-readobj][XCOFF] dump auxiliary symbols."
This reverts commit aad49c8eb9
.
Breaks tests on Windows, see comments on https://reviews.llvm.org/D113825
This commit is contained in:
parent
9a1ce35d7e
commit
d3b90f4104
|
@ -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.
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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: ]
|
||||
|
|
|
@ -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: ]
|
||||
|
|
|
@ -44,16 +44,9 @@ private:
|
|||
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");
|
||||
// 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.");
|
||||
|
||||
// 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 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();
|
||||
case XCOFF::C_STAT:
|
||||
if (NumberOfAuxEntries > 1)
|
||||
report_fatal_error(
|
||||
"C_STAT symbol should not have more than 1 auxiliary entry.");
|
||||
|
||||
const XCOFFSectAuxEntForStat *StatAuxEntPtr =
|
||||
getAuxEntPtr<XCOFFSectAuxEntForStat>(
|
||||
XCOFFObjectFile::getAdvancedSymbolEntryAddress(
|
||||
SymbolEntRef.getEntryAddress(), 1));
|
||||
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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue