[llvm] [BOLT] More refactoring of PHDR handling. NFC (PR #148932)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 15 12:03:31 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-bolt
Author: Maksim Panchenko (maksfb)
<details>
<summary>Changes</summary>
Replace ad-hoc adjustment of the program header count with info from the new segment list.
---
Full diff: https://github.com/llvm/llvm-project/pull/148932.diff
1 Files Affected:
- (modified) bolt/lib/Rewrite/RewriteInstance.cpp (+12-18)
``````````diff
diff --git a/bolt/lib/Rewrite/RewriteInstance.cpp b/bolt/lib/Rewrite/RewriteInstance.cpp
index 96045a916232c..f1b94e4a821a6 100644
--- a/bolt/lib/Rewrite/RewriteInstance.cpp
+++ b/bolt/lib/Rewrite/RewriteInstance.cpp
@@ -4260,31 +4260,25 @@ void RewriteInstance::patchELFPHDRTable() {
const ELFFile<ELF64LE> &Obj = ELF64LEFile->getELFFile();
raw_fd_ostream &OS = Out->os();
- // Write/re-write program headers.
Phnum = Obj.getHeader().e_phnum;
- if (PHDRTableOffset) {
- // Writing new pheader table and adding one new entry for R+X segment.
- Phnum += 1;
- if (NewWritableSegmentSize) {
- // Adding one more entry for R+W segment.
- Phnum += 1;
- }
- } else {
+
+ if (BC->NewSegments.empty()) {
+ BC->outs() << "BOLT-INFO: not adding new segments\n";
+ return;
+ }
+
+ if (opts::UseGnuStack) {
assert(!PHDRTableAddress && "unexpected address for program header table");
- PHDRTableOffset = Obj.getHeader().e_phoff;
- if (NewWritableSegmentSize) {
+ if (BC->NewSegments.size() > 1) {
BC->errs() << "BOLT-ERROR: unable to add writable segment\n";
exit(1);
}
+ } else {
+ Phnum += BC->NewSegments.size();
}
- if (opts::Instrument)
- Phnum += 2;
-
- if (BC->NewSegments.empty()) {
- BC->outs() << "BOLT-INFO: not adding new segments\n";
- return;
- }
+ if (!PHDRTableOffset)
+ PHDRTableOffset = Obj.getHeader().e_phoff;
const uint64_t SavedPos = OS.tell();
OS.seek(PHDRTableOffset);
``````````
</details>
https://github.com/llvm/llvm-project/pull/148932
More information about the llvm-commits
mailing list