mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-27 14:24:40 +00:00
llvm-objdump: Replace the -macho -raw option with a generic -raw-clang-ast
option that works with all object container formats. Now that clang modules/PCH are object containers this option is useful to to construct pipes like llvm-objdump -raw-clang-ast foo.pcm | llvm-bcanalyzer - to inspect the AST contents in a PCH container. Will be tested via clang. Belatedly addresses review feedback for r233390. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241659 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -96,6 +96,10 @@ llvm::LazyBind("lazy-bind", cl::desc("Display mach-o lazy binding info"));
|
||||
cl::opt<bool>
|
||||
llvm::WeakBind("weak-bind", cl::desc("Display mach-o weak binding info"));
|
||||
|
||||
cl::opt<bool>
|
||||
llvm::RawClangAST("raw-clang-ast",
|
||||
cl::desc("Dump the raw binary contents of the clang AST section"));
|
||||
|
||||
static cl::opt<bool>
|
||||
MachOOpt("macho", cl::desc("Use MachO specific object file parser"));
|
||||
static cl::alias
|
||||
@ -1297,6 +1301,43 @@ void llvm::printWeakBindTable(const ObjectFile *o) {
|
||||
}
|
||||
}
|
||||
|
||||
/// Dump the raw contents of the __clangast section so the output can be piped
|
||||
/// into llvm-bcanalyzer.
|
||||
void llvm::printRawClangAST(const ObjectFile *Obj) {
|
||||
if (outs().is_displayed()) {
|
||||
errs() << "The -raw-clang-ast option will dump the raw binary contents of "
|
||||
"the clang ast section.\n"
|
||||
"Please redirect the output to a file or another program such as "
|
||||
"llvm-bcanalyzer.\n";
|
||||
return;
|
||||
}
|
||||
|
||||
StringRef ClangASTSectionName("__clangast");
|
||||
if (isa<COFFObjectFile>(Obj)) {
|
||||
ClangASTSectionName = "clangast";
|
||||
}
|
||||
|
||||
Optional<object::SectionRef> ClangASTSection;
|
||||
for (auto Sec : Obj->sections()) {
|
||||
StringRef Name;
|
||||
Sec.getName(Name);
|
||||
if (Name == ClangASTSectionName) {
|
||||
ClangASTSection = Sec;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!ClangASTSection)
|
||||
return;
|
||||
|
||||
StringRef ClangASTContents;
|
||||
if (error(ClangASTSection.getValue().getContents(ClangASTContents))) {
|
||||
errs() << "Could not read the " << ClangASTSectionName << " section!\n";
|
||||
return;
|
||||
}
|
||||
|
||||
outs().write(ClangASTContents.data(), ClangASTContents.size());
|
||||
}
|
||||
|
||||
static void printFaultMaps(const ObjectFile *Obj) {
|
||||
const char *FaultMapSectionName = nullptr;
|
||||
|
||||
@ -1351,9 +1392,12 @@ static void printPrivateFileHeader(const ObjectFile *o) {
|
||||
}
|
||||
|
||||
static void DumpObject(const ObjectFile *o) {
|
||||
outs() << '\n';
|
||||
outs() << o->getFileName()
|
||||
<< ":\tfile format " << o->getFileFormatName() << "\n\n";
|
||||
// Avoid other output when using a raw option.
|
||||
if (!RawClangAST) {
|
||||
outs() << '\n';
|
||||
outs() << o->getFileName()
|
||||
<< ":\tfile format " << o->getFileFormatName() << "\n\n";
|
||||
}
|
||||
|
||||
if (Disassemble)
|
||||
DisassembleObject(o, Relocations);
|
||||
@ -1379,6 +1423,8 @@ static void DumpObject(const ObjectFile *o) {
|
||||
printLazyBindTable(o);
|
||||
if (WeakBind)
|
||||
printWeakBindTable(o);
|
||||
if (RawClangAST)
|
||||
printRawClangAST(o);
|
||||
if (PrintFaultMaps)
|
||||
printFaultMaps(o);
|
||||
}
|
||||
@ -1469,6 +1515,7 @@ int main(int argc, char **argv) {
|
||||
&& !Bind
|
||||
&& !LazyBind
|
||||
&& !WeakBind
|
||||
&& !RawClangAST
|
||||
&& !(UniversalHeaders && MachOOpt)
|
||||
&& !(ArchiveHeaders && MachOOpt)
|
||||
&& !(IndirectSymbols && MachOOpt)
|
||||
|
Reference in New Issue
Block a user