mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-25 10:27:04 +00:00
Add the option, -info-plist to llvm-objdump used with -macho to print the
Mach-O info plist section as strings. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231974 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
7
test/tools/llvm-objdump/X86/macho-info-plist.test
Normal file
7
test/tools/llvm-objdump/X86/macho-info-plist.test
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# RUN: llvm-mc < %s -triple x86_64-apple-darwin -filetype=obj | llvm-objdump -m -info-plist - | FileCheck %s
|
||||||
|
|
||||||
|
.section __TEXT, __info_plist
|
||||||
|
.asciz "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
||||||
|
|
||||||
|
# CHECK: Contents of (__TEXT,__info_plist) section
|
||||||
|
# CHECK: <?xml version="1.0" encoding="UTF-8"?>
|
||||||
@@ -96,6 +96,11 @@ cl::list<std::string>
|
|||||||
cl::desc("Prints the specified segment,section for "
|
cl::desc("Prints the specified segment,section for "
|
||||||
"Mach-O objects (requires -macho)"));
|
"Mach-O objects (requires -macho)"));
|
||||||
|
|
||||||
|
cl::opt<bool>
|
||||||
|
llvm::InfoPlist("info-plist",
|
||||||
|
cl::desc("Print the info plist section as strings for "
|
||||||
|
"Mach-O objects (requires -macho)"));
|
||||||
|
|
||||||
static cl::list<std::string>
|
static cl::list<std::string>
|
||||||
ArchFlags("arch", cl::desc("architecture(s) from a Mach-O file to dump"),
|
ArchFlags("arch", cl::desc("architecture(s) from a Mach-O file to dump"),
|
||||||
cl::ZeroOrMore);
|
cl::ZeroOrMore);
|
||||||
@@ -981,6 +986,10 @@ static void DumpSectionContents(StringRef Filename, MachOObjectFile *O,
|
|||||||
DisassembleMachO(Filename, O, SegName, SectName);
|
DisassembleMachO(Filename, O, SegName, SectName);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (SegName == "__TEXT" && SectName == "__info_plist") {
|
||||||
|
outs() << sect;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
switch (section_type) {
|
switch (section_type) {
|
||||||
case MachO::S_REGULAR:
|
case MachO::S_REGULAR:
|
||||||
DumpRawSectionContents(O, sect, sect_size, sect_addr);
|
DumpRawSectionContents(O, sect, sect_size, sect_addr);
|
||||||
@@ -1026,6 +1035,24 @@ static void DumpSectionContents(StringRef Filename, MachOObjectFile *O,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void DumpInfoPlistSectionContents(StringRef Filename,
|
||||||
|
MachOObjectFile *O) {
|
||||||
|
for (const SectionRef &Section : O->sections()) {
|
||||||
|
StringRef SectName;
|
||||||
|
Section.getName(SectName);
|
||||||
|
DataRefImpl Ref = Section.getRawDataRefImpl();
|
||||||
|
StringRef SegName = O->getSectionFinalSegmentName(Ref);
|
||||||
|
if (SegName == "__TEXT" && SectName == "__info_plist") {
|
||||||
|
outs() << "Contents of (" << SegName << "," << SectName << ") section\n";
|
||||||
|
StringRef BytesStr;
|
||||||
|
Section.getContents(BytesStr);
|
||||||
|
const char *sect = reinterpret_cast<const char *>(BytesStr.data());
|
||||||
|
outs() << sect;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// checkMachOAndArchFlags() checks to see if the ObjectFile is a Mach-O file
|
// checkMachOAndArchFlags() checks to see if the ObjectFile is a Mach-O file
|
||||||
// and if it is and there is a list of architecture flags is specified then
|
// and if it is and there is a list of architecture flags is specified then
|
||||||
// check to make sure this Mach-O file is one of those architectures or all
|
// check to make sure this Mach-O file is one of those architectures or all
|
||||||
@@ -1097,6 +1124,8 @@ static void ProcessMachO(StringRef Filename, MachOObjectFile *MachOOF,
|
|||||||
PrintSectionContents(MachOOF);
|
PrintSectionContents(MachOOF);
|
||||||
if (DumpSections.size() != 0)
|
if (DumpSections.size() != 0)
|
||||||
DumpSectionContents(Filename, MachOOF, true);
|
DumpSectionContents(Filename, MachOOF, true);
|
||||||
|
if (InfoPlist)
|
||||||
|
DumpInfoPlistSectionContents(Filename, MachOOF);
|
||||||
if (SymbolTable)
|
if (SymbolTable)
|
||||||
PrintSymbolTable(MachOOF);
|
PrintSymbolTable(MachOOF);
|
||||||
if (UnwindInfo)
|
if (UnwindInfo)
|
||||||
|
|||||||
@@ -907,6 +907,7 @@ int main(int argc, char **argv) {
|
|||||||
&& !(IndirectSymbols && MachOOpt)
|
&& !(IndirectSymbols && MachOOpt)
|
||||||
&& !(DataInCode && MachOOpt)
|
&& !(DataInCode && MachOOpt)
|
||||||
&& !(LinkOptHints && MachOOpt)
|
&& !(LinkOptHints && MachOOpt)
|
||||||
|
&& !(InfoPlist && MachOOpt)
|
||||||
&& !(DumpSections.size() != 0 && MachOOpt)) {
|
&& !(DumpSections.size() != 0 && MachOOpt)) {
|
||||||
cl::PrintHelpMessage();
|
cl::PrintHelpMessage();
|
||||||
return 2;
|
return 2;
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ extern cl::opt<bool> ArchiveHeaders;
|
|||||||
extern cl::opt<bool> IndirectSymbols;
|
extern cl::opt<bool> IndirectSymbols;
|
||||||
extern cl::opt<bool> DataInCode;
|
extern cl::opt<bool> DataInCode;
|
||||||
extern cl::opt<bool> LinkOptHints;
|
extern cl::opt<bool> LinkOptHints;
|
||||||
|
extern cl::opt<bool> InfoPlist;
|
||||||
extern cl::opt<bool> Relocations;
|
extern cl::opt<bool> Relocations;
|
||||||
extern cl::opt<bool> SectionHeaders;
|
extern cl::opt<bool> SectionHeaders;
|
||||||
extern cl::opt<bool> SectionContents;
|
extern cl::opt<bool> SectionContents;
|
||||||
|
|||||||
Reference in New Issue
Block a user