[llvm] [llvm-objdump] print out xcoff file header and load section header for xcoff object file with option private-headers (PR #96350)
Chen Zheng via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 4 19:06:03 PDT 2024
================
@@ -30,10 +32,131 @@ using namespace llvm::support;
namespace {
class XCOFFDumper : public objdump::Dumper {
+ const XCOFFObjectFile &Obj;
+ unsigned Width;
public:
- XCOFFDumper(const object::XCOFFObjectFile &O) : Dumper(O) {}
- void printPrivateHeaders() override {}
+ XCOFFDumper(const object::XCOFFObjectFile &O) : Dumper(O), Obj(O) {}
+ void printPrivateHeaders() override;
+ void printFileHeader();
+ void printAuxiliaryHeader(){};
+ void printLoaderSectionHeader();
+ FormattedString formatName(StringRef Name);
+ void printHex(StringRef Name, uint64_t Value);
+ void printNumber(StringRef Name, uint64_t Value);
+ void printStrHex(StringRef Name, StringRef Str, uint64_t Value);
+ void setWidth(unsigned W) {Width =W;};
};
+
+void XCOFFDumper::printPrivateHeaders() {
+ printFileHeader();
+ printAuxiliaryHeader();
+ printLoaderSectionHeader();
----------------
chenzheng1030 wrote:
OK, thank you Digger. Maybe we should first decide what contents do we plan to display in `llvm-objdump --private-header`.
With GNU's objdump, I see:
```
$/opt/freeware/bin/objdump --help
-p, --private-headers Display object format specific file header contents
-P, --private=OPT,OPT... Display object format specific contents
Options supported for -P/--private switch:
For XCOFF files:
header Display the file header
aout Display the auxiliary header
sections Display the section headers
syms Display the symbols table
relocs Display the relocation entries
lineno Display the line number entries
loader Display loader section
except Display exception table
typchk Display type-check section
traceback Display traceback tags
toc Display toc symbols
ldinfo Display loader info in core files
```
With GNU's `objdump --private-headers sharedlib`, I saw:
```
$/opt/freeware/bin/objdump --private-header libtest.a
libtest.a: file format aixcoff-rs6000
```
With GNU's `objdump --private=loader sharedlib`, I saw:
```
$/opt/freeware/bin/objdump --private=loader libtest.a
libtest.a: file format aixcoff-rs6000
Loader header:
version: 1
nbr symbols: 2
nbr relocs: 3
import strtab len: 174
nbr import files: 1
import file off: 116
string table len: 0
string table off: 0
Dynamic symbols:
# value sc IFEW ty class file pa name
0 20000164 2 E SD RW 0 0 a
1 20000168 2 E SD DS 0 0 foo
Dynamic relocs:
vaddr sec sz typ sym
20000168 2 U 32 POS .text
2000016c 2 U 32 POS .data
20000174 2 U 32 POS 0
Import files:
0: /usr/lib:/lib,,
```
If we are going to display loader section content in `llvm-objdump --private-header`, that's fine for me only if we doc the implementation well in the `--help`.
Let me know your thoughts, Thanks again, Digger.
https://github.com/llvm/llvm-project/pull/96350
More information about the llvm-commits
mailing list