xref: /llvm-project/bolt/include/bolt/Core/BinaryEmitter.h (revision 07f63b0ac5c530c808420971734b36b8fa79e687)
1 //===- bolt/Core/BinaryEmitter.h - Emit code and data -----------*- C++ -*-===//
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-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file contains declarations of functions for emitting code and data into
10 // a binary file.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef BOLT_CORE_BINARY_EMITTER_H
15 #define BOLT_CORE_BINARY_EMITTER_H
16 
17 #include "llvm/ADT/StringRef.h"
18 
19 namespace llvm {
20 class MCStreamer;
21 
22 namespace bolt {
23 class BinaryContext;
24 class BinaryFunction;
25 class FunctionFragment;
26 
27 /// Emit all code and data from the BinaryContext \p BC into the \p Streamer.
28 ///
29 /// \p OrgSecPrefix is used to modify name of emitted original sections
30 /// contained in \p BC. This is done to distinguish them from sections emitted
31 /// by LLVM backend.
32 void emitBinaryContext(MCStreamer &Streamer, BinaryContext &BC,
33                        StringRef OrgSecPrefix = "");
34 
35 /// Emit \p BF function code. The caller is responsible for emitting function
36 /// symbol(s) and setting the section to emit the code to.
37 void emitFunctionBody(MCStreamer &Streamer, BinaryFunction &BF,
38                       FunctionFragment &FF, bool EmitCodeOnly);
39 
40 } // namespace bolt
41 } // namespace llvm
42 
43 #endif
44