diff options
author | Vitaly Buka <vitalybuka@google.com> | 2022-11-19 09:58:14 -0800 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2022-11-19 09:58:14 -0800 |
commit | be954243f4c29842a4ea882a04477881f2770855 (patch) | |
tree | 4f624182636b8f0d45a9df05c57f80207947312c /llvm/tools | |
parent | 7c188afde1f056c98b9577d42b49459c09b19a66 (diff) | |
download | llvm-be954243f4c29842a4ea882a04477881f2770855.zip llvm-be954243f4c29842a4ea882a04477881f2770855.tar.gz llvm-be954243f4c29842a4ea882a04477881f2770855.tar.bz2 |
Revert "[XCOFF] llvvm-readobj support display symbol table of loader section of xcoff object file."
Use of uninitialized value.
This reverts commit 037f5c283a2278ef156189be48db0738323206bd.
Diffstat (limited to 'llvm/tools')
-rw-r--r-- | llvm/tools/llvm-readobj/ObjDumper.h | 2 | ||||
-rw-r--r-- | llvm/tools/llvm-readobj/Opts.td | 1 | ||||
-rw-r--r-- | llvm/tools/llvm-readobj/XCOFFDumper.cpp | 104 | ||||
-rw-r--r-- | llvm/tools/llvm-readobj/llvm-readobj.cpp | 7 |
4 files changed, 27 insertions, 87 deletions
diff --git a/llvm/tools/llvm-readobj/ObjDumper.h b/llvm/tools/llvm-readobj/ObjDumper.h index 4aff9fb..2a6af54 100644 --- a/llvm/tools/llvm-readobj/ObjDumper.h +++ b/llvm/tools/llvm-readobj/ObjDumper.h @@ -158,7 +158,7 @@ public: // Only implement for XCOFF virtual void printAuxiliaryHeader() {} virtual void printExceptionSection() {} - virtual void printLoaderSection(bool PrintHeader, bool PrintSymbolTable) {} + virtual void printLoaderSection(bool PrintHeader) {} // Only implemented for MachO. virtual void printMachODataInCode() { } diff --git a/llvm/tools/llvm-readobj/Opts.td b/llvm/tools/llvm-readobj/Opts.td index 7d0e64a..4f126d6 100644 --- a/llvm/tools/llvm-readobj/Opts.td +++ b/llvm/tools/llvm-readobj/Opts.td @@ -90,7 +90,6 @@ def grp_xcoff : OptionGroup<"kind">, HelpText<"OPTIONS (XCOFF specific)">; def auxiliary_header : FF<"auxiliary-header" , "Display the auxiliary header">, Group<grp_xcoff>; def exception_section : FF<"exception-section" , "Display the exception section entries">, Group<grp_xcoff>; def loader_section_header : FF<"loader-section-header" , "Display the loader section header">, Group<grp_xcoff>; -def loader_section_symbols : FF<"loader-section-symbols" , "Display the loader section symbol table">, Group<grp_xcoff>; def help : FF<"help", "Display this help">; def version : FF<"version", "Display the version">; diff --git a/llvm/tools/llvm-readobj/XCOFFDumper.cpp b/llvm/tools/llvm-readobj/XCOFFDumper.cpp index c03cdd1..9e52f86 100644 --- a/llvm/tools/llvm-readobj/XCOFFDumper.cpp +++ b/llvm/tools/llvm-readobj/XCOFFDumper.cpp @@ -40,7 +40,7 @@ public: void printNeededLibraries() override; void printStringTable() override; void printExceptionSection() override; - void printLoaderSection(bool PrintHeader, bool PrintSymbolTable) override; + void printLoaderSection(bool PrintHeader) override; ScopedPrinter &getScopedPrinter() const { return W; } @@ -68,9 +68,6 @@ private: void printAuxiliaryHeader(const XCOFFAuxiliaryHeader32 *AuxHeader); void printAuxiliaryHeader(const XCOFFAuxiliaryHeader64 *AuxHeader); void printLoaderSectionHeader(uintptr_t LoaderSectAddr); - void printLoaderSectionSymbols(uintptr_t LoaderSectAddr); - template <typename LoaderSectionSymbolEntry, typename LoaderSectionHeader> - void printLoaderSectionSymbolsHelper(uintptr_t LoaderSectAddr); const XCOFFObjectFile &Obj; }; } // anonymous namespace @@ -138,7 +135,7 @@ void XCOFFDumper::printSectionHeaders() { printSectionHeaders(Obj.sections32()); } -void XCOFFDumper::printLoaderSection(bool PrintHeader, bool PrintSymbolTable) { +void XCOFFDumper::printLoaderSection(bool PrintHeader) { DictScope DS(W, "Loader Section"); Expected<uintptr_t> LoaderSectionAddrOrError = Obj.getSectionFileOffsetToRawData(XCOFF::STYP_LOADER); @@ -148,18 +145,13 @@ void XCOFFDumper::printLoaderSection(bool PrintHeader, bool PrintSymbolTable) { } uintptr_t LoaderSectionAddr = LoaderSectionAddrOrError.get(); - if (LoaderSectionAddr == 0) - return; - W.indent(); if (PrintHeader) printLoaderSectionHeader(LoaderSectionAddr); - - if (PrintSymbolTable) - printLoaderSectionSymbols(LoaderSectionAddr); - - // TODO: Need to add printing of relocation entry of loader section later. + // TODO: Need to print symbol table, relocation entry of loader section later. // For example: + // if (PrintSymbolTable) + // printLoaderSectionSymbolTable(); // if (PrintRelocation) // printLoaderSectionRelocationEntry(); W.unindent(); @@ -193,73 +185,6 @@ void XCOFFDumper::printLoaderSectionHeader(uintptr_t LoaderSectionAddr) { } } -const EnumEntry<XCOFF::StorageClass> SymStorageClass[] = { -#define ECase(X) \ - { #X, XCOFF::X } - ECase(C_NULL), ECase(C_AUTO), ECase(C_EXT), ECase(C_STAT), - ECase(C_REG), ECase(C_EXTDEF), ECase(C_LABEL), ECase(C_ULABEL), - ECase(C_MOS), ECase(C_ARG), ECase(C_STRTAG), ECase(C_MOU), - ECase(C_UNTAG), ECase(C_TPDEF), ECase(C_USTATIC), ECase(C_ENTAG), - ECase(C_MOE), ECase(C_REGPARM), ECase(C_FIELD), ECase(C_BLOCK), - ECase(C_FCN), ECase(C_EOS), ECase(C_FILE), ECase(C_LINE), - ECase(C_ALIAS), ECase(C_HIDDEN), ECase(C_HIDEXT), ECase(C_BINCL), - ECase(C_EINCL), ECase(C_INFO), ECase(C_WEAKEXT), ECase(C_DWARF), - ECase(C_GSYM), ECase(C_LSYM), ECase(C_PSYM), ECase(C_RSYM), - ECase(C_RPSYM), ECase(C_STSYM), ECase(C_TCSYM), ECase(C_BCOMM), - ECase(C_ECOML), ECase(C_ECOMM), ECase(C_DECL), ECase(C_ENTRY), - ECase(C_FUN), ECase(C_BSTAT), ECase(C_ESTAT), ECase(C_GTLS), - ECase(C_STTLS), ECase(C_EFCN) -#undef ECase -}; - -template <typename LoaderSectionSymbolEntry, typename LoaderSectionHeader> -void XCOFFDumper::printLoaderSectionSymbolsHelper(uintptr_t LoaderSectionAddr) { - const LoaderSectionHeader *LoadSecHeader = - reinterpret_cast<const LoaderSectionHeader *>(LoaderSectionAddr); - const LoaderSectionSymbolEntry *LoadSecSymEntPtr = - reinterpret_cast<LoaderSectionSymbolEntry *>( - LoaderSectionAddr + uintptr_t(LoadSecHeader->getOffsetToSymTbl())); - - for (uint32_t i = 0; i < LoadSecHeader->NumberOfSymTabEnt; - ++i, ++LoadSecSymEntPtr) { - if (Error E = Binary::checkOffset( - Obj.getMemoryBufferRef(), - LoaderSectionAddr + (i * sizeof(LoaderSectionSymbolEntry)), - sizeof(LoaderSectionSymbolEntry))) { - reportUniqueWarning(std::move(E)); - return; - } - - Expected<StringRef> SymbolNameOrErr = - LoadSecSymEntPtr->getSymbolName(LoadSecHeader); - if (!SymbolNameOrErr) { - reportUniqueWarning(SymbolNameOrErr.takeError()); - return; - } - - DictScope DS(W, "Symbol"); - W.printString("Name", SymbolNameOrErr.get()); - W.printHex("Virtual Address", LoadSecSymEntPtr->Value); - W.printNumber("SectionNum", LoadSecSymEntPtr->SectionNumber); - W.printHex("SymbolType", LoadSecSymEntPtr->SymbolType); - W.printEnum("StorageClass", - static_cast<uint8_t>(LoadSecSymEntPtr->StorageClass), - makeArrayRef(SymStorageClass)); - W.printHex("ImportFileID", LoadSecSymEntPtr->ImportFileID); - W.printNumber("ParameterTypeCheck", LoadSecSymEntPtr->ParameterTypeCheck); - } -} - -void XCOFFDumper::printLoaderSectionSymbols(uintptr_t LoaderSectionAddr) { - DictScope DS(W, "Loader Section Symbols"); - if (Obj.is64Bit()) - printLoaderSectionSymbolsHelper<LoaderSectionSymbolEntry64, - LoaderSectionHeader64>(LoaderSectionAddr); - else - printLoaderSectionSymbolsHelper<LoaderSectionSymbolEntry32, - LoaderSectionHeader32>(LoaderSectionAddr); -} - template <typename T> void XCOFFDumper::printExceptionSectionEntry(const T &ExceptionSectEnt) const { if (ExceptionSectEnt.getReason()) @@ -543,6 +468,25 @@ void XCOFFDumper::printSectAuxEntForDWARF(const T *AuxEntPtr) { makeArrayRef(SymAuxType)); } +const EnumEntry<XCOFF::StorageClass> SymStorageClass[] = { +#define ECase(X) \ + { #X, XCOFF::X } + ECase(C_NULL), ECase(C_AUTO), ECase(C_EXT), ECase(C_STAT), + ECase(C_REG), ECase(C_EXTDEF), ECase(C_LABEL), ECase(C_ULABEL), + ECase(C_MOS), ECase(C_ARG), ECase(C_STRTAG), ECase(C_MOU), + ECase(C_UNTAG), ECase(C_TPDEF), ECase(C_USTATIC), ECase(C_ENTAG), + ECase(C_MOE), ECase(C_REGPARM), ECase(C_FIELD), ECase(C_BLOCK), + ECase(C_FCN), ECase(C_EOS), ECase(C_FILE), ECase(C_LINE), + ECase(C_ALIAS), ECase(C_HIDDEN), ECase(C_HIDEXT), ECase(C_BINCL), + ECase(C_EINCL), ECase(C_INFO), ECase(C_WEAKEXT), ECase(C_DWARF), + ECase(C_GSYM), ECase(C_LSYM), ECase(C_PSYM), ECase(C_RSYM), + ECase(C_RPSYM), ECase(C_STSYM), ECase(C_TCSYM), ECase(C_BCOMM), + ECase(C_ECOML), ECase(C_ECOMM), ECase(C_DECL), ECase(C_ENTRY), + ECase(C_FUN), ECase(C_BSTAT), ECase(C_ESTAT), ECase(C_GTLS), + ECase(C_STTLS), ECase(C_EFCN) +#undef ECase +}; + static StringRef GetSymbolValueName(XCOFF::StorageClass SC) { switch (SC) { case XCOFF::C_EXT: diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/llvm-readobj.cpp index ac1d9d9..fadf144 100644 --- a/llvm/tools/llvm-readobj/llvm-readobj.cpp +++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp @@ -163,7 +163,6 @@ static bool COFFTLSDirectory; // XCOFF specific options. static bool XCOFFAuxiliaryHeader; static bool XCOFFLoaderSectionHeader; -static bool XCOFFLoaderSectionSymbol; static bool XCOFFExceptionSection; OutputStyleTy Output = OutputStyleTy::LLVM; @@ -306,7 +305,6 @@ static void parseOptions(const opt::InputArgList &Args) { // XCOFF specific options. opts::XCOFFAuxiliaryHeader = Args.hasArg(OPT_auxiliary_header); opts::XCOFFLoaderSectionHeader = Args.hasArg(OPT_loader_section_header); - opts::XCOFFLoaderSectionSymbol = Args.hasArg(OPT_loader_section_symbols); opts::XCOFFExceptionSection = Args.hasArg(OPT_exception_section); opts::InputFilenames = Args.getAllArgValues(OPT_INPUT); @@ -512,9 +510,8 @@ static void dumpObject(ObjectFile &Obj, ScopedPrinter &Writer, } if (Obj.isXCOFF()) { - if (opts::XCOFFLoaderSectionHeader || opts::XCOFFLoaderSectionSymbol) - Dumper->printLoaderSection(opts::XCOFFLoaderSectionHeader, - opts::XCOFFLoaderSectionSymbol); + if (opts::XCOFFLoaderSectionHeader) + Dumper->printLoaderSection(opts::XCOFFLoaderSectionHeader); if (opts::XCOFFExceptionSection) Dumper->printExceptionSection(); |