@@ -46,17 +46,13 @@ BreakFunctionNames("break-funcs",
4646 cl::Hidden,
4747 cl::cat(BoltCategory));
4848
49- cl::list<std::string>
50- FunctionPadSpec (" pad-funcs" , cl::CommaSeparated,
51- cl::desc (" list of functions to pad with amount of bytes" ),
52- cl::value_desc(" func1:pad1,func2:pad2,func3:pad3,..." ),
53- cl::Hidden, cl::cat(BoltCategory));
54-
55- cl::list<std::string> FunctionPadBeforeSpec (
56- " pad-funcs-before" , cl::CommaSeparated,
57- cl::desc (" list of functions to pad with amount of bytes" ),
58- cl::value_desc(" func1:pad1,func2:pad2,func3:pad3,..." ), cl::Hidden,
59- cl::cat(BoltCategory));
49+ static cl::list<std::string>
50+ FunctionPadSpec (" pad-funcs" ,
51+ cl::CommaSeparated,
52+ cl::desc (" list of functions to pad with amount of bytes" ),
53+ cl::value_desc(" func1:pad1,func2:pad2,func3:pad3,..." ),
54+ cl::Hidden,
55+ cl::cat(BoltCategory));
6056
6157static cl::opt<bool > MarkFuncs (
6258 " mark-funcs" ,
@@ -74,12 +70,11 @@ X86AlignBranchBoundaryHotOnly("x86-align-branch-boundary-hot-only",
7470 cl::init(true ),
7571 cl::cat(BoltOptCategory));
7672
77- size_t padFunction (const cl::list<std::string> &Spec,
78- const BinaryFunction &Function) {
73+ size_t padFunction (const BinaryFunction &Function) {
7974 static std::map<std::string, size_t > FunctionPadding;
8075
81- if (FunctionPadding.empty () && !Spec .empty ()) {
82- for (const std::string &Spec : Spec ) {
76+ if (FunctionPadding.empty () && !FunctionPadSpec .empty ()) {
77+ for (std::string &Spec : FunctionPadSpec ) {
8378 size_t N = Spec.find (' :' );
8479 if (N == std::string::npos)
8580 continue ;
@@ -324,32 +319,6 @@ bool BinaryEmitter::emitFunction(BinaryFunction &Function,
324319 Streamer.emitCodeAlignment (Function.getAlign (), &*BC.STI );
325320 }
326321
327- if (size_t Padding =
328- opts::padFunction (opts::FunctionPadBeforeSpec, Function)) {
329- // Handle padFuncsBefore after the above alignment logic but before
330- // symbol addresses are decided.
331- if (!BC.HasRelocations ) {
332- BC.errs () << " BOLT-ERROR: -pad-before-funcs is not supported in "
333- << " non-relocation mode\n " ;
334- exit (1 );
335- }
336-
337- // Preserve Function.getMinAlign().
338- if (!isAligned (Function.getMinAlign (), Padding)) {
339- BC.errs () << " BOLT-ERROR: user-requested " << Padding
340- << " padding bytes before function " << Function
341- << " is not a multiple of the minimum function alignment ("
342- << Function.getMinAlign ().value () << " ).\n " ;
343- exit (1 );
344- }
345-
346- LLVM_DEBUG (dbgs () << " BOLT-DEBUG: padding before function " << Function
347- << " with " << Padding << " bytes\n " );
348-
349- // Since the padding is not executed, it can be null bytes.
350- Streamer.emitFill (Padding, 0 );
351- }
352-
353322 MCContext &Context = Streamer.getContext ();
354323 const MCAsmInfo *MAI = Context.getAsmInfo ();
355324
@@ -404,7 +373,7 @@ bool BinaryEmitter::emitFunction(BinaryFunction &Function,
404373 emitFunctionBody (Function, FF, /* EmitCodeOnly=*/ false );
405374
406375 // Emit padding if requested.
407- if (size_t Padding = opts::padFunction (opts::FunctionPadSpec, Function)) {
376+ if (size_t Padding = opts::padFunction (Function)) {
408377 LLVM_DEBUG (dbgs () << " BOLT-DEBUG: padding function " << Function << " with "
409378 << Padding << " bytes\n " );
410379 Streamer.emitFill (Padding, MAI->getTextAlignFillValue ());
0 commit comments