[llvm-branch-commits] [llvm] [BOLT] Ignore hot markers as function references in updateELFSymbolTable (PR #92713)
Amir Ayupov via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon May 20 15:49:26 PDT 2024
https://github.com/aaupov updated https://github.com/llvm/llvm-project/pull/92713
>From a32bf63f61f6d382f09982d992f3cabc8dc55cfd Mon Sep 17 00:00:00 2001
From: Amir Ayupov <aaupov at fb.com>
Date: Sun, 19 May 2024 19:44:20 -0700
Subject: [PATCH 1/4] drop changes to bolt/test/AArch64/text-data.c
Created using spr 1.3.4
---
bolt/test/AArch64/text-data.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/bolt/test/AArch64/text-data.c b/bolt/test/AArch64/text-data.c
index 17e507a7cc1b4..2986fe7840078 100644
--- a/bolt/test/AArch64/text-data.c
+++ b/bolt/test/AArch64/text-data.c
@@ -3,7 +3,7 @@
// RUN: %clang %cflags %s -o %t.exe -Wl,-q
// RUN: llvm-bolt %t.exe -o %t.bolt --lite=0 --use-old-text=0
-// RUN: llvm-objdump -j .bolt.org.text -d --disassemble-symbols=arr %t.bolt | \
+// RUN: llvm-objdump -j .text -d --disassemble-symbols=arr %t.bolt | \
// RUN: FileCheck %s
// CHECK: {{.*}} <arr>:
>From d09b18df4eb75879ef528bfcb43604b86d56860c Mon Sep 17 00:00:00 2001
From: Amir Ayupov <aaupov at fb.com>
Date: Sun, 19 May 2024 20:13:19 -0700
Subject: [PATCH 2/4] Address comments
Created using spr 1.3.4
---
bolt/lib/Rewrite/RewriteInstance.cpp | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/bolt/lib/Rewrite/RewriteInstance.cpp b/bolt/lib/Rewrite/RewriteInstance.cpp
index 0d11bdc46fa5a..ba5cec7d9c596 100644
--- a/bolt/lib/Rewrite/RewriteInstance.cpp
+++ b/bolt/lib/Rewrite/RewriteInstance.cpp
@@ -4789,7 +4789,6 @@ void RewriteInstance::updateELFSymbolTable(
continue;
Expected<StringRef> SymbolName = Symbol.getName(StringSection);
- assert(SymbolName && "cannot get symbol name");
const BinaryFunction *Function =
BC->getBinaryFunctionAtAddress(Symbol.st_value);
@@ -4798,8 +4797,11 @@ void RewriteInstance::updateELFSymbolTable(
if (Function && Symbol.getType() == ELF::STT_SECTION)
Function = nullptr;
- // Ignore input hot markers as function aliases – markers are handled
- // separately.
+ // Ignore input hot markers as function aliases.
+ // If hot markers are treated as function aliases, we may create
+ // non-sensical __hot_start.cold symbols which would not have a parent
+ // when read by BOLT as we don't register them as function aliases
+ // (explicitly ignored in parsing symbol table in discoverFileObjects).
if (Function &&
(*SymbolName == "__hot_start" || *SymbolName == "__hot_end"))
Function = nullptr;
>From b36c250836607410246e6ddf2f855d43df77e80d Mon Sep 17 00:00:00 2001
From: Amir Ayupov <aaupov at fb.com>
Date: Sun, 19 May 2024 20:17:15 -0700
Subject: [PATCH 3/4] keep assert
Created using spr 1.3.4
---
bolt/lib/Rewrite/RewriteInstance.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/bolt/lib/Rewrite/RewriteInstance.cpp b/bolt/lib/Rewrite/RewriteInstance.cpp
index ba5cec7d9c596..e788ca7afd5ad 100644
--- a/bolt/lib/Rewrite/RewriteInstance.cpp
+++ b/bolt/lib/Rewrite/RewriteInstance.cpp
@@ -4789,6 +4789,7 @@ void RewriteInstance::updateELFSymbolTable(
continue;
Expected<StringRef> SymbolName = Symbol.getName(StringSection);
+ assert(SymbolName && "cannot get symbol name");
const BinaryFunction *Function =
BC->getBinaryFunctionAtAddress(Symbol.st_value);
>From 1a1e2ae769bc6c9c6eb82980349f4ba7b4404aae Mon Sep 17 00:00:00 2001
From: Amir Ayupov <aaupov at fb.com>
Date: Mon, 20 May 2024 15:49:16 -0700
Subject: [PATCH 4/4] Hoist the special symbol handling
Created using spr 1.3.4
---
bolt/lib/Rewrite/RewriteInstance.cpp | 31 ++++++++++++++--------------
1 file changed, 15 insertions(+), 16 deletions(-)
diff --git a/bolt/lib/Rewrite/RewriteInstance.cpp b/bolt/lib/Rewrite/RewriteInstance.cpp
index 98d21bd7b0c77..9cc4c8c8c4faf 100644
--- a/bolt/lib/Rewrite/RewriteInstance.cpp
+++ b/bolt/lib/Rewrite/RewriteInstance.cpp
@@ -4826,11 +4826,20 @@ void RewriteInstance::updateELFSymbolTable(
updateSymbolValue(*SymbolName);
++NumHotTextSymsUpdated;
}
- // Ignore input hot markers as function aliases.
- // If hot markers are treated as function aliases, we may create
- // non-sensical __hot_start.cold symbols which would not have a parent
- // when read by BOLT as we don't register them as function aliases
- // (explicitly ignored in parsing symbol table in discoverFileObjects).
+ goto registerSymbol;
+ }
+
+ if (*SymbolName == "__hot_data_start" || *SymbolName == "__hot_data_end") {
+ if (opts::HotData) {
+ updateSymbolValue(*SymbolName);
+ ++NumHotDataSymsUpdated;
+ }
+ goto registerSymbol;
+ }
+
+ if (*SymbolName == "_end") {
+ if (NextAvailableAddress > Symbol.st_value)
+ updateSymbolValue(*SymbolName, NextAvailableAddress);
goto registerSymbol;
}
@@ -4930,17 +4939,7 @@ void RewriteInstance::updateELFSymbolTable(
}
}
- // Handle special symbols based on their name.
- if (opts::HotData && (*SymbolName == "__hot_data_start" ||
- *SymbolName == "__hot_data_end")) {
- updateSymbolValue(*SymbolName);
- ++NumHotDataSymsUpdated;
- }
-
- if (*SymbolName == "_end" && NextAvailableAddress > Symbol.st_value)
- updateSymbolValue(*SymbolName, NextAvailableAddress);
-
-registerSymbol:
+ registerSymbol:
if (IsDynSym)
Write((&Symbol - cantFail(Obj.symbols(&SymTabSection)).begin()) *
sizeof(ELFSymTy),
More information about the llvm-branch-commits
mailing list