Skip to content

[BOLT][NFC] Pre-disasm metadata rewriters #132113

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: users/aaupov/spr/main.boltnfc-pre-disasm-metadata-rewriters
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions bolt/include/bolt/Rewrite/MetadataManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ class MetadataManager {
/// Run initializers after sections are discovered.
void runSectionInitializers();

/// Execute metadata initializers when functions are discovered but not yet
/// disassembled.
void runInitializersPreDisasm();

/// Execute initialization of rewriters while functions are disassembled, but
/// CFG is not yet built.
void runInitializersPreCFG();
Expand Down
4 changes: 4 additions & 0 deletions bolt/include/bolt/Rewrite/MetadataRewriter.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ class MetadataRewriter {
/// but before functions are discovered.
virtual Error sectionInitializer() { return Error::success(); }

/// Run initialization after the functions are identified but not yet
/// disassembled.
virtual Error preDisasmInitializer() { return Error::success(); }

/// Interface for modifying/annotating functions in the binary based on the
/// contents of the section. Functions are in pre-cfg state.
virtual Error preCFGInitializer() { return Error::success(); }
Expand Down
3 changes: 3 additions & 0 deletions bolt/include/bolt/Rewrite/RewriteInstance.h
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,9 @@ class RewriteInstance {
/// Process metadata in sections before functions are discovered.
void processSectionMetadata();

/// Process metadata in special sections before functions are disassembled.
void processMetadataPreDisasm();

/// Process metadata in special sections before CFG is built for functions.
void processMetadataPreCFG();

Expand Down
12 changes: 12 additions & 0 deletions bolt/lib/Rewrite/MetadataManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,18 @@ void MetadataManager::runSectionInitializers() {
}
}

void MetadataManager::runInitializersPreDisasm() {
for (auto &Rewriter : Rewriters) {
LLVM_DEBUG(dbgs() << "BOLT-DEBUG: invoking " << Rewriter->getName()
<< " after reading sections\n");
if (Error E = Rewriter->preDisasmInitializer()) {
errs() << "BOLT-ERROR: while running " << Rewriter->getName()
<< " in pre-disasm state: " << toString(std::move(E)) << '\n';
exit(1);
}
}
}

void MetadataManager::runInitializersPreCFG() {
for (auto &Rewriter : Rewriters) {
LLVM_DEBUG(dbgs() << "BOLT-DEBUG: invoking " << Rewriter->getName()
Expand Down
10 changes: 9 additions & 1 deletion bolt/lib/Rewrite/RewriteInstance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -694,7 +694,7 @@ Error RewriteInstance::run() {

selectFunctionsToProcess();

readDebugInfo();
processMetadataPreDisasm();

disassembleFunctions();

Expand Down Expand Up @@ -3237,6 +3237,14 @@ void RewriteInstance::processSectionMetadata() {
MetadataManager.runSectionInitializers();
}

void RewriteInstance::processMetadataPreDisasm() {
NamedRegionTimer T("processmetadata-predisasm", "process metadata pre-disasm",
TimerGroupName, TimerGroupDesc, opts::TimeRewrite);
MetadataManager.runInitializersPreDisasm();

readDebugInfo();
}

void RewriteInstance::processMetadataPreCFG() {
NamedRegionTimer T("processmetadata-precfg", "process metadata pre-CFG",
TimerGroupName, TimerGroupDesc, opts::TimeRewrite);
Expand Down
You are viewing a condensed version of this merge commit. You can view the full changes here.