aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2022-11-19 09:58:14 -0800
committerVitaly Buka <vitalybuka@google.com>2022-11-19 09:58:14 -0800
commitbe954243f4c29842a4ea882a04477881f2770855 (patch)
tree4f624182636b8f0d45a9df05c57f80207947312c /llvm/tools
parent7c188afde1f056c98b9577d42b49459c09b19a66 (diff)
downloadllvm-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.h2
-rw-r--r--llvm/tools/llvm-readobj/Opts.td1
-rw-r--r--llvm/tools/llvm-readobj/XCOFFDumper.cpp104
-rw-r--r--llvm/tools/llvm-readobj/llvm-readobj.cpp7
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();