[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