mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +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