[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