[llvm] [BOLT][NFC] Add const qualifier to certain pointers to read-only objects (PR #148543)
YongKang Zhu via llvm-commits
llvm-commits at lists.llvm.org
Sun Jul 13 12:32:41 PDT 2025
https://github.com/yozhu updated https://github.com/llvm/llvm-project/pull/148543
>From 0351b41209666101c65dc2c38c92d60d093a68b4 Mon Sep 17 00:00:00 2001
From: YongKang Zhu <yongzhu at fb.com>
Date: Fri, 11 Jul 2025 16:20:08 -0700
Subject: [PATCH 1/2] [BOLT][NFC] Add const qualifier to certain pointers to
read-only objects
---
bolt/runtime/instr.cpp | 53 ++++++++++++++++++++++--------------------
1 file changed, 28 insertions(+), 25 deletions(-)
diff --git a/bolt/runtime/instr.cpp b/bolt/runtime/instr.cpp
index ae356e71cbe41..a30edbebe3870 100644
--- a/bolt/runtime/instr.cpp
+++ b/bolt/runtime/instr.cpp
@@ -568,13 +568,13 @@ struct FunctionDescription {
/// should be straightforward as most data is POD or an array of POD elements.
/// This metadata is used to reconstruct function CFGs.
struct ProfileWriterContext {
- IndCallDescription *IndCallDescriptions;
- IndCallTargetDescription *IndCallTargets;
- uint8_t *FuncDescriptions;
- char *Strings; // String table with function names used in this binary
+ const IndCallDescription *IndCallDescriptions;
+ const IndCallTargetDescription *IndCallTargets;
+ const uint8_t *FuncDescriptions;
+ const char *Strings; // String table with function names used in this binary
int FileDesc; // File descriptor for the file on disk backing this
// information in memory via mmap
- void *MMapPtr; // The mmap ptr
+ const void *MMapPtr; // The mmap ptr
int MMapSize; // The mmap size
/// Hash table storing all possible call destinations to detect untracked
@@ -721,7 +721,7 @@ static char *getBinaryPath() {
ProfileWriterContext readDescriptions() {
ProfileWriterContext Result;
- char *BinPath = getBinaryPath();
+ const char *BinPath = getBinaryPath();
assert(BinPath && BinPath[0] != '\0', "failed to find binary path");
uint64_t FD = __open(BinPath, O_RDONLY,
@@ -732,23 +732,24 @@ ProfileWriterContext readDescriptions() {
// mmap our binary to memory
uint64_t Size = __lseek(FD, 0, SEEK_END);
- uint8_t *BinContents = reinterpret_cast<uint8_t *>(
+ const uint8_t *BinContents = reinterpret_cast<uint8_t *>(
__mmap(0, Size, PROT_READ, MAP_PRIVATE, FD, 0));
assert(BinContents != MAP_FAILED, "readDescriptions: Failed to mmap self!");
Result.MMapPtr = BinContents;
Result.MMapSize = Size;
- Elf64_Ehdr *Hdr = reinterpret_cast<Elf64_Ehdr *>(BinContents);
- Elf64_Shdr *Shdr = reinterpret_cast<Elf64_Shdr *>(BinContents + Hdr->e_shoff);
- Elf64_Shdr *StringTblHeader = reinterpret_cast<Elf64_Shdr *>(
+ const Elf64_Ehdr *Hdr = reinterpret_cast<const Elf64_Ehdr *>(BinContents);
+ const Elf64_Shdr *Shdr =
+ reinterpret_cast<const Elf64_Shdr *>(BinContents + Hdr->e_shoff);
+ const Elf64_Shdr *StringTblHeader = reinterpret_cast<const Elf64_Shdr *>(
BinContents + Hdr->e_shoff + Hdr->e_shstrndx * Hdr->e_shentsize);
// Find .bolt.instr.tables with the data we need and set pointers to it
for (int I = 0; I < Hdr->e_shnum; ++I) {
- char *SecName = reinterpret_cast<char *>(
+ const char *SecName = reinterpret_cast<const char *>(
BinContents + StringTblHeader->sh_offset + Shdr->sh_name);
if (compareStr(SecName, ".bolt.instr.tables", 64) != 0) {
- Shdr = reinterpret_cast<Elf64_Shdr *>(BinContents + Hdr->e_shoff +
- (I + 1) * Hdr->e_shentsize);
+ Shdr = reinterpret_cast<const Elf64_Shdr *>(BinContents + Hdr->e_shoff +
+ (I + 1) * Hdr->e_shentsize);
continue;
}
// Actual contents of the ELF note start after offset 20 decimal:
@@ -758,19 +759,19 @@ ProfileWriterContext readDescriptions() {
// Offset 12: Producer name (BOLT\0) (5 bytes + align to 4-byte boundary)
// Offset 20: Contents
uint32_t IndCallDescSize =
- *reinterpret_cast<uint32_t *>(BinContents + Shdr->sh_offset + 20);
- uint32_t IndCallTargetDescSize = *reinterpret_cast<uint32_t *>(
+ *reinterpret_cast<const uint32_t *>(BinContents + Shdr->sh_offset + 20);
+ uint32_t IndCallTargetDescSize = *reinterpret_cast<const uint32_t *>(
BinContents + Shdr->sh_offset + 24 + IndCallDescSize);
- uint32_t FuncDescSize =
- *reinterpret_cast<uint32_t *>(BinContents + Shdr->sh_offset + 28 +
- IndCallDescSize + IndCallTargetDescSize);
- Result.IndCallDescriptions = reinterpret_cast<IndCallDescription *>(
+ uint32_t FuncDescSize = *reinterpret_cast<const uint32_t *>(
+ BinContents + Shdr->sh_offset + 28 + IndCallDescSize +
+ IndCallTargetDescSize);
+ Result.IndCallDescriptions = reinterpret_cast<const IndCallDescription *>(
BinContents + Shdr->sh_offset + 24);
- Result.IndCallTargets = reinterpret_cast<IndCallTargetDescription *>(
+ Result.IndCallTargets = reinterpret_cast<const IndCallTargetDescription *>(
BinContents + Shdr->sh_offset + 28 + IndCallDescSize);
Result.FuncDescriptions = BinContents + Shdr->sh_offset + 32 +
IndCallDescSize + IndCallTargetDescSize;
- Result.Strings = reinterpret_cast<char *>(
+ Result.Strings = reinterpret_cast<const char *>(
BinContents + Shdr->sh_offset + 32 + IndCallDescSize +
IndCallTargetDescSize + FuncDescSize);
return Result;
@@ -814,13 +815,15 @@ void printStats(const ProfileWriterContext &Ctx) {
strCopy(StatPtr,
"\nBOLT INSTRUMENTATION RUNTIME STATISTICS\n\nIndCallDescSize: ");
StatPtr = intToStr(StatPtr,
- Ctx.FuncDescriptions -
- reinterpret_cast<uint8_t *>(Ctx.IndCallDescriptions),
+ Ctx.FuncDescriptions - reinterpret_cast<const uint8_t *>(
+ Ctx.IndCallDescriptions),
10);
StatPtr = strCopy(StatPtr, "\nFuncDescSize: ");
StatPtr = intToStr(
StatPtr,
- reinterpret_cast<uint8_t *>(Ctx.Strings) - Ctx.FuncDescriptions, 10);
+ reinterpret_cast<const uint8_t *>(Ctx.Strings) -
+ Ctx.FuncDescriptions,
+ 10);
StatPtr = strCopy(StatPtr, "\n__bolt_instr_num_ind_calls: ");
StatPtr = intToStr(StatPtr, __bolt_instr_num_ind_calls, 10);
StatPtr = strCopy(StatPtr, "\n__bolt_instr_num_funcs: ");
@@ -1549,7 +1552,7 @@ __bolt_instr_data_dump(int FD) {
Ctx.CallFlowTable->forEachElement(visitCallFlowEntry, FD, &Ctx);
__fsync(FD);
- __munmap(Ctx.MMapPtr, Ctx.MMapSize);
+ __munmap((void *)Ctx.MMapPtr, Ctx.MMapSize);
__close(Ctx.FileDesc);
HashAlloc.destroy();
GlobalWriteProfileMutex->release();
>From 5402e066123d12069cea33d6f4ea8f4d88f5e3df Mon Sep 17 00:00:00 2001
From: YongKang Zhu <yongzhu at fb.com>
Date: Sun, 13 Jul 2025 12:31:46 -0700
Subject: [PATCH 2/2] Fix formatting error
---
bolt/runtime/instr.cpp | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/bolt/runtime/instr.cpp b/bolt/runtime/instr.cpp
index a30edbebe3870..141171a981b39 100644
--- a/bolt/runtime/instr.cpp
+++ b/bolt/runtime/instr.cpp
@@ -819,8 +819,7 @@ void printStats(const ProfileWriterContext &Ctx) {
Ctx.IndCallDescriptions),
10);
StatPtr = strCopy(StatPtr, "\nFuncDescSize: ");
- StatPtr = intToStr(
- StatPtr,
+ StatPtr = intToStr(StatPtr,
reinterpret_cast<const uint8_t *>(Ctx.Strings) -
Ctx.FuncDescriptions,
10);
@@ -1759,7 +1758,7 @@ extern "C" __attribute((naked)) void __bolt_instr_start()
"jal x1, __bolt_instr_setup\n"
RESTORE_ALL
"setup_symbol:\n"
- "auipc x5, %%pcrel_hi(__bolt_start_trampoline)\n"
+ "auipc x5, %%pcrel_hi(__bolt_start_trampoline)\n"
"addi x5, x5, %%pcrel_lo(setup_symbol)\n"
"jr x5\n"
:::);
@@ -1791,8 +1790,8 @@ extern "C" void __bolt_instr_fini() {
__asm__ __volatile__(
SAVE_ALL
"fini_symbol:\n"
- "auipc x5, %%pcrel_hi(__bolt_fini_trampoline)\n"
- "addi x5, x5, %%pcrel_lo(fini_symbol)\n"
+ "auipc x5, %%pcrel_hi(__bolt_fini_trampoline)\n"
+ "addi x5, x5, %%pcrel_lo(fini_symbol)\n"
"jalr x1, 0(x5)\n"
RESTORE_ALL
:::);
More information about the llvm-commits
mailing list