82 lines · cpp
1//===- bolt/Rewrite/MetadataManager.cpp -----------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "bolt/Rewrite/MetadataManager.h"10#include "llvm/Support/Debug.h"11 12#undef DEBUG_TYPE13#define DEBUG_TYPE "bolt-metadata"14 15using namespace llvm;16using namespace bolt;17 18void MetadataManager::registerRewriter(19 std::unique_ptr<MetadataRewriter> Rewriter) {20 Rewriters.emplace_back(std::move(Rewriter));21}22 23void MetadataManager::runSectionInitializers() {24 for (auto &Rewriter : Rewriters) {25 LLVM_DEBUG(dbgs() << "BOLT-DEBUG: invoking " << Rewriter->getName()26 << " after reading sections\n");27 if (Error E = Rewriter->sectionInitializer()) {28 errs() << "BOLT-ERROR: while running " << Rewriter->getName()29 << " after reading sections: " << toString(std::move(E)) << '\n';30 exit(1);31 }32 }33}34 35void MetadataManager::runInitializersPreCFG() {36 for (auto &Rewriter : Rewriters) {37 LLVM_DEBUG(dbgs() << "BOLT-DEBUG: invoking " << Rewriter->getName()38 << " before CFG construction\n");39 if (Error E = Rewriter->preCFGInitializer()) {40 errs() << "BOLT-ERROR: while running " << Rewriter->getName()41 << " in pre-CFG state: " << toString(std::move(E)) << '\n';42 exit(1);43 }44 }45}46 47void MetadataManager::runInitializersPostCFG() {48 for (auto &Rewriter : Rewriters) {49 LLVM_DEBUG(dbgs() << "BOLT-DEBUG: invoking " << Rewriter->getName()50 << " after CFG construction\n");51 if (Error E = Rewriter->postCFGInitializer()) {52 errs() << "BOLT-ERROR: while running " << Rewriter->getName()53 << " in CFG state: " << toString(std::move(E)) << '\n';54 exit(1);55 }56 }57}58 59void MetadataManager::runFinalizersPreEmit() {60 for (auto &Rewriter : Rewriters) {61 LLVM_DEBUG(dbgs() << "BOLT-DEBUG: invoking " << Rewriter->getName()62 << " before emitting binary context\n");63 if (Error E = Rewriter->preEmitFinalizer()) {64 errs() << "BOLT-ERROR: while running " << Rewriter->getName()65 << " before emit: " << toString(std::move(E)) << '\n';66 exit(1);67 }68 }69}70 71void MetadataManager::runFinalizersAfterEmit() {72 for (auto &Rewriter : Rewriters) {73 LLVM_DEBUG(dbgs() << "BOLT-DEBUG: invoking " << Rewriter->getName()74 << " after emit\n");75 if (Error E = Rewriter->postEmitFinalizer()) {76 errs() << "BOLT-ERROR: while running " << Rewriter->getName()77 << " after emit: " << toString(std::move(E)) << '\n';78 exit(1);79 }80 }81}82