@@ -4568,15 +4568,12 @@ void RewriteInstance::updateELFSymbolTable(
4568
4568
}
4569
4569
}
4570
4570
4571
- assert ((!NumHotTextSymsUpdated || NumHotTextSymsUpdated == 2 ) &&
4572
- " either none or both __hot_start/__hot_end symbols were expected" );
4573
- assert ((!NumHotDataSymsUpdated || NumHotDataSymsUpdated == 2 ) &&
4574
- " either none or both __hot_data_start/__hot_data_end symbols were "
4575
- " expected" );
4571
+ auto AddSymbol = [&](const StringRef &Name, uint64_t Address) {
4572
+ if (!Address)
4573
+ return ;
4576
4574
4577
- auto addSymbol = [&](const std::string &Name) {
4578
4575
ELFSymTy Symbol;
4579
- Symbol.st_value = getNewValueForSymbol (Name) ;
4576
+ Symbol.st_value = Address ;
4580
4577
Symbol.st_shndx = ELF::SHN_ABS;
4581
4578
Symbol.st_name = AddToStrTab (Name);
4582
4579
Symbol.st_size = 0 ;
@@ -4589,14 +4586,30 @@ void RewriteInstance::updateELFSymbolTable(
4589
4586
Symbols.emplace_back (Symbol);
4590
4587
};
4591
4588
4589
+ // Add runtime library start and fini address symbols
4590
+ if (RuntimeLibrary *RtLibrary = BC->getRuntimeLibrary ()) {
4591
+ AddSymbol (" __bolt_runtime_start" , RtLibrary->getRuntimeStartAddress ());
4592
+ AddSymbol (" __bolt_runtime_fini" , RtLibrary->getRuntimeFiniAddress ());
4593
+ }
4594
+
4595
+ assert ((!NumHotTextSymsUpdated || NumHotTextSymsUpdated == 2 ) &&
4596
+ " either none or both __hot_start/__hot_end symbols were expected" );
4597
+ assert ((!NumHotDataSymsUpdated || NumHotDataSymsUpdated == 2 ) &&
4598
+ " either none or both __hot_data_start/__hot_data_end symbols were "
4599
+ " expected" );
4600
+
4601
+ auto AddEmittedSymbol = [&](const StringRef &Name) {
4602
+ AddSymbol (Name, getNewValueForSymbol (Name));
4603
+ };
4604
+
4592
4605
if (opts::HotText && !NumHotTextSymsUpdated) {
4593
- addSymbol (" __hot_start" );
4594
- addSymbol (" __hot_end" );
4606
+ AddEmittedSymbol (" __hot_start" );
4607
+ AddEmittedSymbol (" __hot_end" );
4595
4608
}
4596
4609
4597
4610
if (opts::HotData && !NumHotDataSymsUpdated) {
4598
- addSymbol (" __hot_data_start" );
4599
- addSymbol (" __hot_data_end" );
4611
+ AddEmittedSymbol (" __hot_data_start" );
4612
+ AddEmittedSymbol (" __hot_data_end" );
4600
4613
}
4601
4614
4602
4615
// Put local symbols at the beginning.
0 commit comments