10 #include <llvm/IR/DataLayout.h>
11 #include <llvm/MC/MCObjectFileInfo.h>
12 #include <llvm/MC/MCStreamer.h>
14 #include "core/visibility.h"
37 const llvm::MCObjectFileInfo *objInfo,
38 const llvm::DataLayout &layout,
44 bool runOnModule(llvm::Module &M)
override;
46 llvm::StringRef getPassName()
const override;
48 void getAnalysisUsage(llvm::AnalysisUsage &AU)
const override;
52 void LowerExtern(
const Extern &ext);
54 void LowerSection(
const Data &data);
56 void LowerObject(
const Object &
object);
58 void LowerAtom(
const Atom &atom);
60 llvm::MCSymbol *LowerSymbol(
const std::string_view name);
62 void EmitVisibility(llvm::MCSymbol *sym, Visibility visibility);
65 using XtorMap = std::map<int, std::vector<const Func *>>;
67 void LowerXtors(
const XtorMap &map,
const std::string &name);
71 llvm::MCSection *GetSection(
const Data &data);
79 llvm::MCContext *ctx_;
81 llvm::MCStreamer *os_;
83 const llvm::MCObjectFileInfo *objInfo_;
85 const llvm::DataLayout &layout_;