@@ -4587,15 +4587,12 @@ void RewriteInstance::updateELFSymbolTable(
4587
4587
}
4588
4588
}
4589
4589
4590
- assert ((!NumHotTextSymsUpdated || NumHotTextSymsUpdated == 2 ) &&
4591
- " either none or both __hot_start/__hot_end symbols were expected" );
4592
- assert ((!NumHotDataSymsUpdated || NumHotDataSymsUpdated == 2 ) &&
4593
- " either none or both __hot_data_start/__hot_data_end symbols were "
4594
- " expected" );
4590
+ auto AddSymbol = [&](const StringRef &Name, uint64_t Address) {
4591
+ if (!Address)
4592
+ return ;
4595
4593
4596
- auto addSymbol = [&](const std::string &Name) {
4597
4594
ELFSymTy Symbol;
4598
- Symbol.st_value = getNewValueForSymbol (Name) ;
4595
+ Symbol.st_value = Address ;
4599
4596
Symbol.st_shndx = ELF::SHN_ABS;
4600
4597
Symbol.st_name = AddToStrTab (Name);
4601
4598
Symbol.st_size = 0 ;
@@ -4608,14 +4605,30 @@ void RewriteInstance::updateELFSymbolTable(
4608
4605
Symbols.emplace_back (Symbol);
4609
4606
};
4610
4607
4608
+ // Add runtime library start and fini address symbols
4609
+ if (RuntimeLibrary *RtLibrary = BC->getRuntimeLibrary ()) {
4610
+ AddSymbol (" __bolt_runtime_start" , RtLibrary->getRuntimeStartAddress ());
4611
+ AddSymbol (" __bolt_runtime_fini" , RtLibrary->getRuntimeFiniAddress ());
4612
+ }
4613
+
4614
+ assert ((!NumHotTextSymsUpdated || NumHotTextSymsUpdated == 2 ) &&
4615
+ " either none or both __hot_start/__hot_end symbols were expected" );
4616
+ assert ((!NumHotDataSymsUpdated || NumHotDataSymsUpdated == 2 ) &&
4617
+ " either none or both __hot_data_start/__hot_data_end symbols were "
4618
+ " expected" );
4619
+
4620
+ auto AddEmittedSymbol = [&](const StringRef &Name) {
4621
+ AddSymbol (Name, getNewValueForSymbol (Name));
4622
+ };
4623
+
4611
4624
if (opts::HotText && !NumHotTextSymsUpdated) {
4612
- addSymbol (" __hot_start" );
4613
- addSymbol (" __hot_end" );
4625
+ AddEmittedSymbol (" __hot_start" );
4626
+ AddEmittedSymbol (" __hot_end" );
4614
4627
}
4615
4628
4616
4629
if (opts::HotData && !NumHotDataSymsUpdated) {
4617
- addSymbol (" __hot_data_start" );
4618
- addSymbol (" __hot_data_end" );
4630
+ AddEmittedSymbol (" __hot_data_start" );
4631
+ AddEmittedSymbol (" __hot_data_end" );
4619
4632
}
4620
4633
4621
4634
// Put local symbols at the beginning.
0 commit comments