diff --git a/bolt/include/bolt/Core/BinaryContext.h b/bolt/include/bolt/Core/BinaryContext.h --- a/bolt/include/bolt/Core/BinaryContext.h +++ b/bolt/include/bolt/Core/BinaryContext.h @@ -585,6 +585,9 @@ /// Indicates if relocations are available for usage. bool HasRelocations{false}; + /// Indicates if the binary is stripped + bool IsStripped{false}; + /// Is the binary always loaded at a fixed address. Shared objects and /// position-independent executables (PIEs) are examples of binaries that /// will have HasFixedLoadAddress set to false. diff --git a/bolt/lib/Rewrite/RewriteInstance.cpp b/bolt/lib/Rewrite/RewriteInstance.cpp --- a/bolt/lib/Rewrite/RewriteInstance.cpp +++ b/bolt/lib/Rewrite/RewriteInstance.cpp @@ -1557,6 +1557,7 @@ TimerGroupName, TimerGroupDesc, opts::TimeRewrite); bool HasTextRelocations = false; + bool HasSymbolTable = false; bool HasDebugInfo = false; // Process special sections. @@ -1588,6 +1589,7 @@ } HasTextRelocations = (bool)BC->getUniqueSectionByName(".rela.text"); + HasSymbolTable = (bool)BC->getUniqueSectionByName(".symtab"); LSDASection = BC->getUniqueSectionByName(".gcc_except_table"); EHFrameSection = BC->getUniqueSectionByName(".eh_frame"); GOTPLTSection = BC->getUniqueSectionByName(".got.plt"); @@ -1624,6 +1626,8 @@ BC->HasRelocations = HasTextRelocations && (opts::RelocationMode != cl::BOU_FALSE); + BC->IsStripped = !HasSymbolTable; + // Force non-relocation mode for heatmap generation if (opts::HeatmapMode) BC->HasRelocations = false;