+++ /dev/null
-# REQUIRES: system-aix
-## This file tests the ability of llvm-readobj to display the auxiliary header for 64 bits XCOFF and 32 bits XCOFF object file.
-# RUN: llvm-readobj --auxiliary-header %p/Inputs/xcoff-64-xlc-exec 2>&1 | \
-# RUN: FileCheck --check-prefixes=XLC64EXEC,WARN64 %s
-
-# RUN: llvm-readobj --auxiliary-header %p/Inputs/xcoff-32-xlc-exec | \
-# RUN: FileCheck --check-prefix=XLC32EXEC %s
-
-# RUN: llvm-readobj --auxiliary-header %p/Inputs/xcoff-32-xlc-obj.o | \
-# RUN: FileCheck --check-prefix=XLC32OBJ %s
-
-# RUN: llvm-readobj --headers %p/Inputs/xcoff-32-xlc-obj.o | \
-# RUN: FileCheck --check-prefix=XLC32OBJ %s
-
-# RUN: llvm-readobj --auxiliary-header %p/Inputs/xcoff-32-xlc-obj-malform.o 2>&1 | \
-# RUN: FileCheck --check-prefixes=XLC32OBJ-PART,WARN-PART %s
-
-# XLC32EXEC: File: {{.*}}xcoff-32-xlc-exec
-# XLC32EXEC-NEXT: Format: aixcoff-rs6000
-# XLC32EXEC-NEXT: Arch: powerpc
-# XLC32EXEC-NEXT: AddressSize: 32bit
-# XLC32EXEC-NEXT: AuxiliaryHeader {
-# XLC32EXEC-NEXT: Magic: 0x10B
-# XLC32EXEC-NEXT: Version: 0x1
-# XLC32EXEC-NEXT: Size of .text section: 0x498
-# XLC32EXEC-NEXT: Size of .data section: 0xF0
-# XLC32EXEC-NEXT: Size of .bss section: 0x4
-# XLC32EXEC-NEXT: Entry point address: 0x20000658
-# XLC32EXEC-NEXT: .text section start address: 0x10000128
-# XLC32EXEC-NEXT: .data section start address: 0x200005C0
-# XLC32EXEC-NEXT: TOC anchor address: 0x2000066C
-# XLC32EXEC-NEXT: Section number of entryPoint: 2
-# XLC32EXEC-NEXT: Section number of .text: 1
-# XLC32EXEC-NEXT: Section number of .data: 2
-# XLC32EXEC-NEXT: Section number of TOC: 2
-# XLC32EXEC-NEXT: Section number of loader data: 4
-# XLC32EXEC-NEXT: Section number of .bss: 3
-# XLC32EXEC-NEXT: Maxium alignment of .text: 0x7
-# XLC32EXEC-NEXT: Maxium alignment of .data: 0x3
-# XLC32EXEC-NEXT: Module type: 0x314C
-# XLC32EXEC-NEXT: CPU type of objects: 0x0
-# XLC32EXEC-NEXT: (Reserved): 0x0
-# XLC32EXEC-NEXT: Maximum stack size: 0x0
-# XLC32EXEC-NEXT: Maximum data size: 0x0
-# XLC32EXEC-NEXT: Reserved for debugger: 0x0
-# XLC32EXEC-NEXT: Text page size: 0x0
-# XLC32EXEC-NEXT: Data page size: 0x0
-# XLC32EXEC-NEXT: Stack page size: 0x0
-# XLC32EXEC-NEXT: Flag: 0x0
-# XLC32EXEC-NEXT: Alignment of thread-local storage: 0x0
-# XLC32EXEC-NEXT: Section number for .tdata: 0
-# XLC32EXEC-NEXT: Section number for .tbss: 0
-# XLC32EXEC-NEXT: }
-
-
-# XLC64EXEC: File: {{.*}}xcoff-64-xlc-exec
-# XLC64EXEC-NEXT: Format: aix5coff64-rs6000
-# XLC64EXEC-NEXT: Arch: powerpc64
-# XLC64EXEC-NEXT: AddressSize: 64bit
-# XLC64EXEC-NEXT: AuxiliaryHeader {
-# XLC64EXEC-NEXT: Magic: 0x10B
-# XLC64EXEC-NEXT: Version: 0x1
-# XLC64EXEC-NEXT: Reserved for debugger: 0x0
-# XLC64EXEC-NEXT: .text section start address: 0x1000001F8
-# XLC64EXEC-NEXT: .data section start address: 0x110000640
-# XLC64EXEC-NEXT: TOC anchor address: 0x110000738
-# XLC64EXEC-NEXT: Section number of entryPoint: 2
-# XLC64EXEC-NEXT: Section number of .text: 1
-# XLC64EXEC-NEXT: Section number of .data: 2
-# XLC64EXEC-NEXT: Section number of TOC: 2
-# XLC64EXEC-NEXT: Section number of loader data: 4
-# XLC64EXEC-NEXT: Section number of .bss: 3
-# XLC64EXEC-NEXT: Maxium alignment of .text: 0x7
-# XLC64EXEC-NEXT: Maxium alignment of .data: 0x3
-# XLC64EXEC-NEXT: Module type: 0x314C
-# XLC64EXEC-NEXT: CPU type of objects: 0x0
-# XLC64EXEC-NEXT: (Reserved): 0x0
-# XLC64EXEC-NEXT: Text page size: 0x0
-# XLC64EXEC-NEXT: Data page size: 0x0
-# XLC64EXEC-NEXT: Stack page size: 0x0
-# XLC64EXEC-NEXT: Flag: 0x0
-# XLC64EXEC-NEXT: Alignment of thread-local storage: 0x0
-# XLC64EXEC-NEXT: Size of .text section: 0x448
-# XLC64EXEC-NEXT: Size of .data section: 0x180
-# XLC64EXEC-NEXT: Size of .bss section: 0x8
-# XLC64EXEC-NEXT: Entry point address: 0x110000710
-# XLC64EXEC-NEXT: Maximum stack size: 0x0
-# XLC64EXEC-NEXT: Maximum data size: 0x0
-# XLC64EXEC-NEXT: Section number for .tdata: 0
-# XLC64EXEC-NEXT: Section number for .tbss: 0
-# XLC64EXEC-NEXT: Additional flags 64-bit XCOFF: 0x0
-# WARN64: {{.*}}llvm-readobj: warning: '<stdin>': There are extra data beyond auxiliary header
-# XLC64EXEC-NEXT: Extra raw data: (00 00 00 00 00 00 00 00 00 00)
-# XLC64EXEC-NEXT: }
-
-# XLC32OBJ: File: {{.*}}xcoff-32-xlc-obj.o
-# XLC32OBJ-NEXT: Format: aixcoff-rs6000
-# XLC32OBJ-NEXT: Arch: powerpc
-# XLC32OBJ-NEXT: AddressSize: 32bit
-# XLC32OBJ: AuxiliaryHeader {
-# XLC32OBJ-NEXT: Magic: 0x10B
-# XLC32OBJ-NEXT: Version: 0x0
-# XLC32OBJ-NEXT: Size of .text section: 0x200
-# XLC32OBJ-NEXT: Size of .data section: 0x3C
-# XLC32OBJ-NEXT: Size of .bss section: 0x0
-# XLC32OBJ-NEXT: Entry point address: 0x0
-# XLC32OBJ-NEXT: .text section start address: 0x0
-# XLC32OBJ-NEXT: .data section start address: 0x200
-# XLC32OBJ-NEXT: }
-
-# XLC32OBJ-PART: File: {{.*}}xcoff-32-xlc-obj-malform.o
-# XLC32OBJ-PART-NEXT: Format: aixcoff-rs6000
-# XLC32OBJ-PART-NEXT: Arch: powerpc
-# XLC32OBJ-PART-NEXT: AddressSize: 32bit
-# XLC32OBJ-PART-NEXT: AuxiliaryHeader {
-# XLC32OBJ-PART-NEXT: Magic: 0x10B
-# XLC32OBJ-PART-NEXT: Version: 0x0
-# XLC32OBJ-PART-NEXT: Size of .text section: 0x200
-# XLC32OBJ-PART-NEXT: Size of .data section: 0x3C
-# XLC32OBJ-PART-NEXT: Size of .bss section: 0x0
-# XLC32OBJ-PART-NEXT: Entry point address: 0x0
-# XLC32OBJ-PART-NEXT: .text section start address: 0x0
-# WARN-PART: {{.*}}llvm-readobj: warning: '<stdin>': Only partial field for .data section start address at offset (24).
-# XLC32OBJ-PART-NEXT: Raw data: (00 00 02)
-# XLC32OBJ-PART-NEXT: }
-
#include "llvm/Support/ScopedPrinter.h"
#include <ctime>
-#include <stddef.h>
using namespace llvm;
using namespace object;
void printNeededLibraries() override;
void printStringTable() override;
+ ScopedPrinter &getScopedPrinter() const { return W; }
+
private:
template <typename T> void printSectionHeaders(ArrayRef<T> Sections);
template <typename T> void printGenericSectionHeader(T &Sec) const;
}
void XCOFFDumper::printAuxiliaryHeader() {
+ DictScope DS(W, "AuxiliaryHeader");
+
if (Obj.is64Bit())
printAuxiliaryHeader(Obj.auxiliaryHeader64());
else
W.printNumber("NumberOfLineNumbers", Sec.NumberOfLineNumbers);
}
+enum PrintStyle { Hex, Number };
+template <typename T, typename V>
+static void printAuxMemberHelper(PrintStyle Style, const char *MemberName,
+ const T &Member, const V *AuxHeader,
+ uint16_t AuxSize, uint16_t &PartialFieldOffset,
+ const char *&PartialFieldName,
+ ScopedPrinter &W) {
+ ptrdiff_t Offset = reinterpret_cast<const char *>(&Member) -
+ reinterpret_cast<const char *>(AuxHeader);
+ if (Offset + sizeof(Member) <= AuxSize)
+ Style == Hex ? W.printHex(MemberName, Member)
+ : W.printNumber(MemberName, Member);
+ else if (Offset < AuxSize) {
+ PartialFieldOffset = Offset;
+ PartialFieldName = MemberName;
+ }
+}
+
+template <class T>
+void checkAndPrintAuxHeaderParseError(const char *PartialFieldName,
+ uint16_t PartialFieldOffset,
+ uint16_t AuxSize, T &AuxHeader,
+ XCOFFDumper *Dumper) {
+ if (PartialFieldOffset < AuxSize) {
+ Dumper->reportUniqueWarning(Twine("only partial field for ") +
+ PartialFieldName + " at offset (" +
+ Twine(PartialFieldOffset) + ")");
+ Dumper->getScopedPrinter().printBinary(
+ "Raw data", "",
+ ArrayRef<uint8_t>(reinterpret_cast<const uint8_t *>(&AuxHeader) +
+ PartialFieldOffset,
+ AuxSize - PartialFieldOffset));
+ } else if (sizeof(AuxHeader) < AuxSize)
+ Dumper->getScopedPrinter().printBinary(
+ "Extra raw data", "",
+ ArrayRef<uint8_t>(reinterpret_cast<const uint8_t *>(&AuxHeader) +
+ sizeof(AuxHeader),
+ AuxSize - sizeof(AuxHeader)));
+}
+
void XCOFFDumper::printAuxiliaryHeader(
const XCOFFAuxiliaryHeader32 *AuxHeader) {
if (AuxHeader == nullptr)
uint16_t PartialFieldOffset = AuxSize;
const char *PartialFieldName = nullptr;
- DictScope DS(W, "AuxiliaryHeader");
-
-#define PrintAuxMember32(H, S, T) \
- if (offsetof(XCOFFAuxiliaryHeader32, T) + \
- sizeof(XCOFFAuxiliaryHeader32::T) <= \
- AuxSize) \
- W.print##H(S, AuxHeader->T); \
- else if (offsetof(XCOFFAuxiliaryHeader32, T) < AuxSize) { \
- PartialFieldOffset = offsetof(XCOFFAuxiliaryHeader32, T); \
- PartialFieldName = S; \
- }
+ auto PrintAuxMember = [&](PrintStyle Style, const char *MemberName,
+ auto &Member) {
+ printAuxMemberHelper(Style, MemberName, Member, AuxHeader, AuxSize,
+ PartialFieldOffset, PartialFieldName, W);
+ };
- PrintAuxMember32(Hex, "Magic", AuxMagic);
- PrintAuxMember32(Hex, "Version", Version);
- PrintAuxMember32(Hex, "Size of .text section", TextSize);
- PrintAuxMember32(Hex, "Size of .data section", InitDataSize);
- PrintAuxMember32(Hex, "Size of .bss section", BssDataSize);
- PrintAuxMember32(Hex, "Entry point address", EntryPointAddr);
- PrintAuxMember32(Hex, ".text section start address", TextStartAddr);
- PrintAuxMember32(Hex, ".data section start address", DataStartAddr);
- PrintAuxMember32(Hex, "TOC anchor address", TOCAnchorAddr);
- PrintAuxMember32(Number, "Section number of entryPoint", SecNumOfEntryPoint);
- PrintAuxMember32(Number, "Section number of .text", SecNumOfText);
- PrintAuxMember32(Number, "Section number of .data", SecNumOfData);
- PrintAuxMember32(Number, "Section number of TOC", SecNumOfTOC);
- PrintAuxMember32(Number, "Section number of loader data", SecNumOfLoader);
- PrintAuxMember32(Number, "Section number of .bss", SecNumOfBSS);
- PrintAuxMember32(Hex, "Maxium alignment of .text", MaxAlignOfText);
- PrintAuxMember32(Hex, "Maxium alignment of .data", MaxAlignOfData);
- PrintAuxMember32(Hex, "Module type", ModuleType);
- PrintAuxMember32(Hex, "CPU type of objects", CpuFlag);
- PrintAuxMember32(Hex, "(Reserved)", CpuType);
- PrintAuxMember32(Hex, "Maximum stack size", MaxStackSize);
- PrintAuxMember32(Hex, "Maximum data size", MaxDataSize);
- PrintAuxMember32(Hex, "Reserved for debugger", ReservedForDebugger);
- PrintAuxMember32(Hex, "Text page size", TextPageSize);
- PrintAuxMember32(Hex, "Data page size", DataPageSize);
- PrintAuxMember32(Hex, "Stack page size", StackPageSize);
+ PrintAuxMember(Hex, "Magic", AuxHeader->AuxMagic);
+ PrintAuxMember(Hex, "Version", AuxHeader->Version);
+ PrintAuxMember(Hex, "Size of .text section", AuxHeader->TextSize);
+ PrintAuxMember(Hex, "Size of .data section", AuxHeader->InitDataSize);
+ PrintAuxMember(Hex, "Size of .bss section", AuxHeader->BssDataSize);
+ PrintAuxMember(Hex, "Entry point address", AuxHeader->EntryPointAddr);
+ PrintAuxMember(Hex, ".text section start address", AuxHeader->TextStartAddr);
+ PrintAuxMember(Hex, ".data section start address", AuxHeader->DataStartAddr);
+ PrintAuxMember(Hex, "TOC anchor address", AuxHeader->TOCAnchorAddr);
+ PrintAuxMember(Number, "Section number of entryPoint",
+ AuxHeader->SecNumOfEntryPoint);
+ PrintAuxMember(Number, "Section number of .text", AuxHeader->SecNumOfText);
+ PrintAuxMember(Number, "Section number of .data", AuxHeader->SecNumOfData);
+ PrintAuxMember(Number, "Section number of TOC", AuxHeader->SecNumOfTOC);
+ PrintAuxMember(Number, "Section number of loader data",
+ AuxHeader->SecNumOfLoader);
+ PrintAuxMember(Number, "Section number of .bss", AuxHeader->SecNumOfBSS);
+ PrintAuxMember(Hex, "Maxium alignment of .text", AuxHeader->MaxAlignOfText);
+ PrintAuxMember(Hex, "Maxium alignment of .data", AuxHeader->MaxAlignOfData);
+ PrintAuxMember(Hex, "Module type", AuxHeader->ModuleType);
+ PrintAuxMember(Hex, "CPU type of objects", AuxHeader->CpuFlag);
+ PrintAuxMember(Hex, "(Reserved)", AuxHeader->CpuType);
+ PrintAuxMember(Hex, "Maximum stack size", AuxHeader->MaxStackSize);
+ PrintAuxMember(Hex, "Maximum data size", AuxHeader->MaxDataSize);
+ PrintAuxMember(Hex, "Reserved for debugger", AuxHeader->ReservedForDebugger);
+ PrintAuxMember(Hex, "Text page size", AuxHeader->TextPageSize);
+ PrintAuxMember(Hex, "Data page size", AuxHeader->DataPageSize);
+ PrintAuxMember(Hex, "Stack page size", AuxHeader->StackPageSize);
if (offsetof(XCOFFAuxiliaryHeader32, FlagAndTDataAlignment) +
sizeof(XCOFFAuxiliaryHeader32::FlagAndTDataAlignment) <=
AuxSize) {
AuxHeader->getTDataAlignment());
}
- PrintAuxMember32(Number, "Section number for .tdata", SecNumOfTData);
- PrintAuxMember32(Number, "Section number for .tbss", SecNumOfTBSS);
+ PrintAuxMember(Number, "Section number for .tdata", AuxHeader->SecNumOfTData);
+ PrintAuxMember(Number, "Section number for .tbss", AuxHeader->SecNumOfTBSS);
- // Deal with error.
- if (PartialFieldOffset < AuxSize) {
- std::string ErrInfo;
- llvm::raw_string_ostream StringOS(ErrInfo);
- StringOS << "Only partial field for " << PartialFieldName << " at offset ("
- << PartialFieldOffset << ").";
- StringOS.flush();
- reportWarning(
- make_error<GenericBinaryError>(ErrInfo, object_error::parse_failed),
- "-");
- W.printBinary(
- "Raw data", "",
- ArrayRef<uint8_t>((const uint8_t *)(AuxHeader) + PartialFieldOffset,
- AuxSize - PartialFieldOffset));
- } else if (sizeof(XCOFFAuxiliaryHeader32) < AuxSize) {
- reportWarning(make_error<GenericBinaryError>(
- "There are extra data beyond auxiliary header",
- object_error::parse_failed),
- "-");
- W.printBinary("Extra raw data", "",
- ArrayRef<uint8_t>((const uint8_t *)(AuxHeader) +
- sizeof(XCOFFAuxiliaryHeader32),
- AuxSize - sizeof(XCOFFAuxiliaryHeader32)));
- }
-
-#undef PrintAuxMember32
+ checkAndPrintAuxHeaderParseError(PartialFieldName, PartialFieldOffset,
+ AuxSize, *AuxHeader, this);
}
void XCOFFDumper::printAuxiliaryHeader(
uint16_t PartialFieldOffset = AuxSize;
const char *PartialFieldName = nullptr;
- DictScope DS(W, "AuxiliaryHeader");
-
-#define PrintAuxMember64(H, S, T) \
- if (offsetof(XCOFFAuxiliaryHeader64, T) + \
- sizeof(XCOFFAuxiliaryHeader64::T) <= \
- AuxSize) \
- W.print##H(S, AuxHeader->T); \
- else if (offsetof(XCOFFAuxiliaryHeader64, T) < AuxSize) { \
- PartialFieldOffset = offsetof(XCOFFAuxiliaryHeader64, T); \
- PartialFieldName = S; \
- }
+ auto PrintAuxMember = [&](PrintStyle Style, const char *MemberName,
+ auto &Member) {
+ printAuxMemberHelper(Style, MemberName, Member, AuxHeader, AuxSize,
+ PartialFieldOffset, PartialFieldName, W);
+ };
- PrintAuxMember64(Hex, "Magic", AuxMagic);
- PrintAuxMember64(Hex, "Version", Version);
- PrintAuxMember64(Hex, "Reserved for debugger", ReservedForDebugger);
- PrintAuxMember64(Hex, ".text section start address", TextStartAddr);
- PrintAuxMember64(Hex, ".data section start address", DataStartAddr);
- PrintAuxMember64(Hex, "TOC anchor address", TOCAnchorAddr);
- PrintAuxMember64(Number, "Section number of entryPoint", SecNumOfEntryPoint);
- PrintAuxMember64(Number, "Section number of .text", SecNumOfText);
- PrintAuxMember64(Number, "Section number of .data", SecNumOfData);
- PrintAuxMember64(Number, "Section number of TOC", SecNumOfTOC);
- PrintAuxMember64(Number, "Section number of loader data", SecNumOfLoader);
- PrintAuxMember64(Number, "Section number of .bss", SecNumOfBSS);
- PrintAuxMember64(Hex, "Maxium alignment of .text", MaxAlignOfText);
- PrintAuxMember64(Hex, "Maxium alignment of .data", MaxAlignOfData);
- PrintAuxMember64(Hex, "Module type", ModuleType);
- PrintAuxMember64(Hex, "CPU type of objects", CpuFlag);
- PrintAuxMember64(Hex, "(Reserved)", CpuType);
- PrintAuxMember64(Hex, "Text page size", TextPageSize);
- PrintAuxMember64(Hex, "Data page size", DataPageSize);
- PrintAuxMember64(Hex, "Stack page size", StackPageSize);
+ PrintAuxMember(Hex, "Magic", AuxHeader->AuxMagic);
+ PrintAuxMember(Hex, "Version", AuxHeader->Version);
+ PrintAuxMember(Hex, "Reserved for debugger", AuxHeader->ReservedForDebugger);
+ PrintAuxMember(Hex, ".text section start address", AuxHeader->TextStartAddr);
+ PrintAuxMember(Hex, ".data section start address", AuxHeader->DataStartAddr);
+ PrintAuxMember(Hex, "TOC anchor address", AuxHeader->TOCAnchorAddr);
+ PrintAuxMember(Number, "Section number of entryPoint",
+ AuxHeader->SecNumOfEntryPoint);
+ PrintAuxMember(Number, "Section number of .text", AuxHeader->SecNumOfText);
+ PrintAuxMember(Number, "Section number of .data", AuxHeader->SecNumOfData);
+ PrintAuxMember(Number, "Section number of TOC", AuxHeader->SecNumOfTOC);
+ PrintAuxMember(Number, "Section number of loader data",
+ AuxHeader->SecNumOfLoader);
+ PrintAuxMember(Number, "Section number of .bss", AuxHeader->SecNumOfBSS);
+ PrintAuxMember(Hex, "Maxium alignment of .text", AuxHeader->MaxAlignOfText);
+ PrintAuxMember(Hex, "Maxium alignment of .data", AuxHeader->MaxAlignOfData);
+ PrintAuxMember(Hex, "Module type", AuxHeader->ModuleType);
+ PrintAuxMember(Hex, "CPU type of objects", AuxHeader->CpuFlag);
+ PrintAuxMember(Hex, "(Reserved)", AuxHeader->CpuType);
+ PrintAuxMember(Hex, "Text page size", AuxHeader->TextPageSize);
+ PrintAuxMember(Hex, "Data page size", AuxHeader->DataPageSize);
+ PrintAuxMember(Hex, "Stack page size", AuxHeader->StackPageSize);
if (offsetof(XCOFFAuxiliaryHeader64, FlagAndTDataAlignment) +
sizeof(XCOFFAuxiliaryHeader64::FlagAndTDataAlignment) <=
AuxSize) {
W.printHex("Alignment of thread-local storage",
AuxHeader->getTDataAlignment());
}
- PrintAuxMember64(Hex, "Size of .text section", TextSize);
- PrintAuxMember64(Hex, "Size of .data section", InitDataSize);
- PrintAuxMember64(Hex, "Size of .bss section", BssDataSize);
- PrintAuxMember64(Hex, "Entry point address", EntryPointAddr);
- PrintAuxMember64(Hex, "Maximum stack size", MaxStackSize);
- PrintAuxMember64(Hex, "Maximum data size", MaxDataSize);
- PrintAuxMember64(Number, "Section number for .tdata", SecNumOfTData);
- PrintAuxMember64(Number, "Section number for .tbss", SecNumOfTBSS);
- PrintAuxMember64(Hex, "Additional flags 64-bit XCOFF", XCOFF64Flag);
-
- if (PartialFieldOffset < AuxSize) {
- std::string ErrInfo;
- llvm::raw_string_ostream StringOS(ErrInfo);
- StringOS << "Only partial field for " << PartialFieldName << " at offset ("
- << PartialFieldOffset << ").";
- StringOS.flush();
- reportWarning(
- make_error<GenericBinaryError>(ErrInfo, object_error::parse_failed),
- "-");
- ;
- W.printBinary(
- "Raw data", "",
- ArrayRef<uint8_t>((const uint8_t *)(AuxHeader) + PartialFieldOffset,
- AuxSize - PartialFieldOffset));
- } else if (sizeof(XCOFFAuxiliaryHeader64) < AuxSize) {
- reportWarning(make_error<GenericBinaryError>(
- "There are extra data beyond auxiliary header",
- object_error::parse_failed),
- "-");
- W.printBinary("Extra raw data", "",
- ArrayRef<uint8_t>((const uint8_t *)(AuxHeader) +
- sizeof(XCOFFAuxiliaryHeader64),
- AuxSize - sizeof(XCOFFAuxiliaryHeader64)));
- }
-
-#undef PrintAuxMember64
+ PrintAuxMember(Hex, "Size of .text section", AuxHeader->TextSize);
+ PrintAuxMember(Hex, "Size of .data section", AuxHeader->InitDataSize);
+ PrintAuxMember(Hex, "Size of .bss section", AuxHeader->BssDataSize);
+ PrintAuxMember(Hex, "Entry point address", AuxHeader->EntryPointAddr);
+ PrintAuxMember(Hex, "Maximum stack size", AuxHeader->MaxStackSize);
+ PrintAuxMember(Hex, "Maximum data size", AuxHeader->MaxDataSize);
+ PrintAuxMember(Number, "Section number for .tdata", AuxHeader->SecNumOfTData);
+ PrintAuxMember(Number, "Section number for .tbss", AuxHeader->SecNumOfTBSS);
+ PrintAuxMember(Hex, "Additional flags 64-bit XCOFF", AuxHeader->XCOFF64Flag);
+
+ checkAndPrintAuxHeaderParseError(PartialFieldName, PartialFieldOffset,
+ AuxSize, *AuxHeader, this);
}
template <typename T>