@@ -568,13 +568,13 @@ struct FunctionDescription {
568568// / should be straightforward as most data is POD or an array of POD elements.
569569// / This metadata is used to reconstruct function CFGs.
570570struct ProfileWriterContext {
571- IndCallDescription *IndCallDescriptions;
572- IndCallTargetDescription *IndCallTargets;
573- uint8_t *FuncDescriptions;
574- char *Strings; // String table with function names used in this binary
571+ const IndCallDescription *IndCallDescriptions;
572+ const IndCallTargetDescription *IndCallTargets;
573+ const uint8_t *FuncDescriptions;
574+ const char *Strings; // String table with function names used in this binary
575575 int FileDesc; // File descriptor for the file on disk backing this
576576 // information in memory via mmap
577- void *MMapPtr; // The mmap ptr
577+ const void *MMapPtr; // The mmap ptr
578578 int MMapSize; // The mmap size
579579
580580 // / Hash table storing all possible call destinations to detect untracked
@@ -721,7 +721,7 @@ static char *getBinaryPath() {
721721
722722ProfileWriterContext readDescriptions () {
723723 ProfileWriterContext Result;
724- char *BinPath = getBinaryPath ();
724+ const char *BinPath = getBinaryPath ();
725725 assert (BinPath && BinPath[0 ] != ' \0 ' , " failed to find binary path" );
726726
727727 uint64_t FD = __open (BinPath, O_RDONLY,
@@ -732,23 +732,24 @@ ProfileWriterContext readDescriptions() {
732732
733733 // mmap our binary to memory
734734 uint64_t Size = __lseek (FD, 0 , SEEK_END);
735- uint8_t *BinContents = reinterpret_cast <uint8_t *>(
735+ const uint8_t *BinContents = reinterpret_cast <uint8_t *>(
736736 __mmap (0 , Size, PROT_READ, MAP_PRIVATE, FD, 0 ));
737737 assert (BinContents != MAP_FAILED, " readDescriptions: Failed to mmap self!" );
738738 Result.MMapPtr = BinContents;
739739 Result.MMapSize = Size;
740- Elf64_Ehdr *Hdr = reinterpret_cast <Elf64_Ehdr *>(BinContents);
741- Elf64_Shdr *Shdr = reinterpret_cast <Elf64_Shdr *>(BinContents + Hdr->e_shoff );
742- Elf64_Shdr *StringTblHeader = reinterpret_cast <Elf64_Shdr *>(
740+ const Elf64_Ehdr *Hdr = reinterpret_cast <const Elf64_Ehdr *>(BinContents);
741+ const Elf64_Shdr *Shdr =
742+ reinterpret_cast <const Elf64_Shdr *>(BinContents + Hdr->e_shoff );
743+ const Elf64_Shdr *StringTblHeader = reinterpret_cast <const Elf64_Shdr *>(
743744 BinContents + Hdr->e_shoff + Hdr->e_shstrndx * Hdr->e_shentsize );
744745
745746 // Find .bolt.instr.tables with the data we need and set pointers to it
746747 for (int I = 0 ; I < Hdr->e_shnum ; ++I) {
747- char *SecName = reinterpret_cast <char *>(
748+ const char *SecName = reinterpret_cast <const char *>(
748749 BinContents + StringTblHeader->sh_offset + Shdr->sh_name );
749750 if (compareStr (SecName, " .bolt.instr.tables" , 64 ) != 0 ) {
750- Shdr = reinterpret_cast <Elf64_Shdr *>(BinContents + Hdr->e_shoff +
751- (I + 1 ) * Hdr->e_shentsize );
751+ Shdr = reinterpret_cast <const Elf64_Shdr *>(BinContents + Hdr->e_shoff +
752+ (I + 1 ) * Hdr->e_shentsize );
752753 continue ;
753754 }
754755 // Actual contents of the ELF note start after offset 20 decimal:
@@ -758,19 +759,19 @@ ProfileWriterContext readDescriptions() {
758759 // Offset 12: Producer name (BOLT\0) (5 bytes + align to 4-byte boundary)
759760 // Offset 20: Contents
760761 uint32_t IndCallDescSize =
761- *reinterpret_cast <uint32_t *>(BinContents + Shdr->sh_offset + 20 );
762- uint32_t IndCallTargetDescSize = *reinterpret_cast <uint32_t *>(
762+ *reinterpret_cast <const uint32_t *>(BinContents + Shdr->sh_offset + 20 );
763+ uint32_t IndCallTargetDescSize = *reinterpret_cast <const uint32_t *>(
763764 BinContents + Shdr->sh_offset + 24 + IndCallDescSize);
764- uint32_t FuncDescSize =
765- * reinterpret_cast < uint32_t *>( BinContents + Shdr->sh_offset + 28 +
766- IndCallDescSize + IndCallTargetDescSize);
767- Result.IndCallDescriptions = reinterpret_cast <IndCallDescription *>(
765+ uint32_t FuncDescSize = * reinterpret_cast < const uint32_t *>(
766+ BinContents + Shdr->sh_offset + 28 + IndCallDescSize +
767+ IndCallTargetDescSize);
768+ Result.IndCallDescriptions = reinterpret_cast <const IndCallDescription *>(
768769 BinContents + Shdr->sh_offset + 24 );
769- Result.IndCallTargets = reinterpret_cast <IndCallTargetDescription *>(
770+ Result.IndCallTargets = reinterpret_cast <const IndCallTargetDescription *>(
770771 BinContents + Shdr->sh_offset + 28 + IndCallDescSize);
771772 Result.FuncDescriptions = BinContents + Shdr->sh_offset + 32 +
772773 IndCallDescSize + IndCallTargetDescSize;
773- Result.Strings = reinterpret_cast <char *>(
774+ Result.Strings = reinterpret_cast <const char *>(
774775 BinContents + Shdr->sh_offset + 32 + IndCallDescSize +
775776 IndCallTargetDescSize + FuncDescSize);
776777 return Result;
@@ -814,13 +815,14 @@ void printStats(const ProfileWriterContext &Ctx) {
814815 strCopy (StatPtr,
815816 " \n BOLT INSTRUMENTATION RUNTIME STATISTICS\n\n IndCallDescSize: " );
816817 StatPtr = intToStr (StatPtr,
817- Ctx.FuncDescriptions -
818- reinterpret_cast < uint8_t *>( Ctx.IndCallDescriptions ),
818+ Ctx.FuncDescriptions - reinterpret_cast < const uint8_t *>(
819+ Ctx.IndCallDescriptions ),
819820 10 );
820821 StatPtr = strCopy (StatPtr, " \n FuncDescSize: " );
821- StatPtr = intToStr (
822- StatPtr,
823- reinterpret_cast <uint8_t *>(Ctx.Strings ) - Ctx.FuncDescriptions , 10 );
822+ StatPtr = intToStr (StatPtr,
823+ reinterpret_cast <const uint8_t *>(Ctx.Strings ) -
824+ Ctx.FuncDescriptions ,
825+ 10 );
824826 StatPtr = strCopy (StatPtr, " \n __bolt_instr_num_ind_calls: " );
825827 StatPtr = intToStr (StatPtr, __bolt_instr_num_ind_calls, 10 );
826828 StatPtr = strCopy (StatPtr, " \n __bolt_instr_num_funcs: " );
@@ -1549,7 +1551,7 @@ __bolt_instr_data_dump(int FD) {
15491551 Ctx.CallFlowTable ->forEachElement (visitCallFlowEntry, FD, &Ctx);
15501552
15511553 __fsync (FD);
1552- __munmap (Ctx.MMapPtr , Ctx.MMapSize );
1554+ __munmap (( void *) Ctx.MMapPtr , Ctx.MMapSize );
15531555 __close (Ctx.FileDesc );
15541556 HashAlloc.destroy ();
15551557 GlobalWriteProfileMutex->release ();
@@ -1756,7 +1758,7 @@ extern "C" __attribute((naked)) void __bolt_instr_start()
17561758 " jal x1, __bolt_instr_setup\n "
17571759 RESTORE_ALL
17581760 " setup_symbol:\n "
1759- " auipc x5, %%pcrel_hi(__bolt_start_trampoline)\n "
1761+ " auipc x5, %%pcrel_hi(__bolt_start_trampoline)\n "
17601762 " addi x5, x5, %%pcrel_lo(setup_symbol)\n "
17611763 " jr x5\n "
17621764 :::);
@@ -1788,8 +1790,8 @@ extern "C" void __bolt_instr_fini() {
17881790 __asm__ __volatile__ (
17891791 SAVE_ALL
17901792 " fini_symbol:\n "
1791- " auipc x5, %%pcrel_hi(__bolt_fini_trampoline)\n "
1792- " addi x5, x5, %%pcrel_lo(fini_symbol)\n "
1793+ " auipc x5, %%pcrel_hi(__bolt_fini_trampoline)\n "
1794+ " addi x5, x5, %%pcrel_lo(fini_symbol)\n "
17931795 " jalr x1, 0(x5)\n "
17941796 RESTORE_ALL
17951797 :::);
0 commit comments