Skip to content

Commit

Permalink
llvm-objdump: Split printRuntimeFunction to two small functions.
Browse files Browse the repository at this point in the history
No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202781 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
rui314 committed Mar 4, 2014
1 parent 5dee350 commit b1347c6
Showing 1 changed file with 41 additions and 39 deletions.
80 changes: 41 additions & 39 deletions tools/llvm-objdump/COFFDump.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -413,12 +413,51 @@ static bool getPDataSection(const COFFObjectFile *Obj,
return false;
}

static void printWin64EHUnwindInfo(const Win64EH::UnwindInfo *UI) {
// The casts to int are required in order to output the value as number.
// Without the casts the value would be interpreted as char data (which
// results in garbage output).
outs() << " Version: " << static_cast<int>(UI->getVersion()) << "\n";
outs() << " Flags: " << static_cast<int>(UI->getFlags());
if (UI->getFlags()) {
if (UI->getFlags() & UNW_ExceptionHandler)
outs() << " UNW_ExceptionHandler";
if (UI->getFlags() & UNW_TerminateHandler)
outs() << " UNW_TerminateHandler";
if (UI->getFlags() & UNW_ChainInfo)
outs() << " UNW_ChainInfo";
}
outs() << "\n";
outs() << " Size of prolog: " << static_cast<int>(UI->PrologSize) << "\n";
outs() << " Number of Codes: " << static_cast<int>(UI->NumCodes) << "\n";
// Maybe this should move to output of UOP_SetFPReg?
if (UI->getFrameRegister()) {
outs() << " Frame register: "
<< getUnwindRegisterName(UI->getFrameRegister()) << "\n";
outs() << " Frame offset: " << 16 * UI->getFrameOffset() << "\n";
} else {
outs() << " No frame pointer used\n";
}
if (UI->getFlags() & (UNW_ExceptionHandler | UNW_TerminateHandler)) {
// FIXME: Output exception handler data
} else if (UI->getFlags() & UNW_ChainInfo) {
// FIXME: Output chained unwind info
}

if (UI->NumCodes)
outs() << " Unwind Codes:\n";

printAllUnwindCodes(ArrayRef<UnwindCode>(&UI->UnwindCodes[0], UI->NumCodes));

outs() << "\n\n";
outs().flush();
}

static void printRuntimeFunction(const COFFObjectFile *Obj,
const RuntimeFunction &RF,
uint64_t SectionOffset,
const std::vector<RelocationRef> &Rels) {
outs() << "Function Table:\n";

outs() << " Start Address: ";
printCOFFSymbolAddress(outs(), Rels,
SectionOffset +
Expand Down Expand Up @@ -456,44 +495,7 @@ static void printRuntimeFunction(const COFFObjectFile *Obj,

const Win64EH::UnwindInfo *UI = reinterpret_cast<const Win64EH::UnwindInfo *>(
XContents.data() + UnwindInfoOffset);

// The casts to int are required in order to output the value as number.
// Without the casts the value would be interpreted as char data (which
// results in garbage output).
outs() << " Version: " << static_cast<int>(UI->getVersion()) << "\n";
outs() << " Flags: " << static_cast<int>(UI->getFlags());
if (UI->getFlags()) {
if (UI->getFlags() & UNW_ExceptionHandler)
outs() << " UNW_ExceptionHandler";
if (UI->getFlags() & UNW_TerminateHandler)
outs() << " UNW_TerminateHandler";
if (UI->getFlags() & UNW_ChainInfo)
outs() << " UNW_ChainInfo";
}
outs() << "\n";
outs() << " Size of prolog: " << static_cast<int>(UI->PrologSize) << "\n";
outs() << " Number of Codes: " << static_cast<int>(UI->NumCodes) << "\n";
// Maybe this should move to output of UOP_SetFPReg?
if (UI->getFrameRegister()) {
outs() << " Frame register: "
<< getUnwindRegisterName(UI->getFrameRegister()) << "\n";
outs() << " Frame offset: " << 16 * UI->getFrameOffset() << "\n";
} else {
outs() << " No frame pointer used\n";
}
if (UI->getFlags() & (UNW_ExceptionHandler | UNW_TerminateHandler)) {
// FIXME: Output exception handler data
} else if (UI->getFlags() & UNW_ChainInfo) {
// FIXME: Output chained unwind info
}

if (UI->NumCodes)
outs() << " Unwind Codes:\n";

printAllUnwindCodes(ArrayRef<UnwindCode>(&UI->UnwindCodes[0], UI->NumCodes));

outs() << "\n\n";
outs().flush();
printWin64EHUnwindInfo(UI);
}

void llvm::printCOFFUnwindInfo(const COFFObjectFile *Obj) {
Expand Down

0 comments on commit b1347c6

Please sign in to comment.