forked from OSchip/llvm-project
Add code to llvm-objdump so the -section option with -macho will dump ‘C’ string
sections with the Mach-O S_CSTRING_LITERALS section type. llvm-svn: 228198
This commit is contained in:
parent
a092f17580
commit
10ba041188
|
@ -0,0 +1,4 @@
|
|||
RUN: llvm-objdump -m -section __TEXT,__cstring %p/Inputs/hello.obj.macho-x86_64 | FileCheck %s
|
||||
|
||||
CHECK: Contents of (__TEXT,__cstring) section
|
||||
CHECK: 0x000000000000003b Hello world\n
|
|
@ -537,6 +537,25 @@ static const char *GuessSymbolName(uint64_t value, SymbolAddressMap *AddrMap) {
|
|||
return SymbolName;
|
||||
}
|
||||
|
||||
static void DumpCstringSection(MachOObjectFile *O, const char *sect,
|
||||
uint32_t sect_size, uint64_t sect_addr,
|
||||
bool verbose) {
|
||||
for (uint32_t i = 0; i < sect_size; i++) {
|
||||
if (O->is64Bit())
|
||||
outs() << format("0x%016" PRIx64, sect_addr + i) << " ";
|
||||
else
|
||||
outs() << format("0x%08" PRIx64, sect_addr + i) << " ";
|
||||
for ( ; i < sect_size && sect[i] != '\0'; i++) {
|
||||
char p[2];
|
||||
p[0] = sect[i];
|
||||
p[1] = '\0';
|
||||
outs().write_escaped(p);
|
||||
}
|
||||
if (i < sect_size && sect[i] == '\0')
|
||||
outs() << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
static void DumpInitTermPointerSection(MachOObjectFile *O, const char *sect,
|
||||
uint32_t sect_size, uint64_t sect_addr,
|
||||
SymbolAddressMap *AddrMap,
|
||||
|
@ -676,6 +695,9 @@ static void DumpSectionContents(StringRef Filename, MachOObjectFile *O,
|
|||
case MachO::S_ZEROFILL:
|
||||
outs() << "zerofill section and has no contents in the file\n";
|
||||
break;
|
||||
case MachO::S_CSTRING_LITERALS:
|
||||
DumpCstringSection(O, sect, sect_size, sect_addr, verbose);
|
||||
break;
|
||||
case MachO::S_MOD_INIT_FUNC_POINTERS:
|
||||
case MachO::S_MOD_TERM_FUNC_POINTERS:
|
||||
DumpInitTermPointerSection(O, sect, sect_size, sect_addr, &AddrMap,
|
||||
|
|
Loading…
Reference in New Issue