[llvm] [BOLT][NFC] Add const qualifier to certain pointers to read-only objects (PR #148543)

via llvm-commits llvm-commits at lists.llvm.org
Sun Jul 13 11:07:30 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-bolt

Author: YongKang Zhu (yozhu)

<details>
<summary>Changes</summary>



---
Full diff: https://github.com/llvm/llvm-project/pull/148543.diff


1 Files Affected:

- (modified) bolt/runtime/instr.cpp (+28-25) 


``````````diff
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();

``````````

</details>


https://github.com/llvm/llvm-project/pull/148543


More information about the llvm-commits mailing list