@@ -1010,10 +1010,16 @@ CompressedOffloadBundle::compress(llvm::compression::Params P,
1010
1010
1011
1011
uint16_t CompressionMethod = static_cast <uint16_t >(P.format );
1012
1012
uint32_t UncompressedSize = Input.getBuffer ().size ();
1013
+ uint32_t TotalFileSize = MagicNumber.size () + sizeof (TotalFileSize) +
1014
+ sizeof (Version) + sizeof (CompressionMethod) +
1015
+ sizeof (UncompressedSize) + sizeof (TruncatedHash) +
1016
+ CompressedBuffer.size ();
1013
1017
1014
1018
SmallVector<char , 0 > FinalBuffer;
1015
1019
llvm::raw_svector_ostream OS (FinalBuffer);
1016
1020
OS << MagicNumber;
1021
+ OS.write (reinterpret_cast <const char *>(&TotalFileSize),
1022
+ sizeof (TotalFileSize));
1017
1023
OS.write (reinterpret_cast <const char *>(&Version), sizeof (Version));
1018
1024
OS.write (reinterpret_cast <const char *>(&CompressionMethod),
1019
1025
sizeof (CompressionMethod));
@@ -1033,7 +1039,9 @@ CompressedOffloadBundle::compress(llvm::compression::Params P,
1033
1039
double CompressionSpeedMBs =
1034
1040
(UncompressedSize / (1024.0 * 1024.0 )) / CompressionTimeSeconds;
1035
1041
1036
- llvm::errs () << " Compressed bundle format version: " << Version << " \n "
1042
+ llvm::errs () << " Total file size (including headers): "
1043
+ << formatWithCommas (TotalFileSize) << " bytes\n "
1044
+ << " Compressed bundle format version: " << Version << " \n "
1037
1045
<< " Compression method used: " << MethodUsed << " \n "
1038
1046
<< " Compression level: " << P.level << " \n "
1039
1047
<< " Binary size before compression: "
@@ -1069,21 +1077,26 @@ CompressedOffloadBundle::decompress(const llvm::MemoryBuffer &Input,
1069
1077
return llvm::MemoryBuffer::getMemBufferCopy (Blob);
1070
1078
}
1071
1079
1080
+ size_t CurrentOffset = MagicSize;
1081
+ uint32_t TotalFileSize;
1082
+ memcpy (&TotalFileSize, Blob.data () + CurrentOffset, sizeof (uint32_t ));
1083
+ CurrentOffset += FileSizeFieldSize;
1084
+
1072
1085
uint16_t ThisVersion;
1086
+ memcpy (&ThisVersion, Blob.data () + CurrentOffset, sizeof (uint16_t ));
1087
+ CurrentOffset += VersionFieldSize;
1088
+
1073
1089
uint16_t CompressionMethod;
1090
+ memcpy (&CompressionMethod, Blob.data () + CurrentOffset, sizeof (uint16_t ));
1091
+ CurrentOffset += MethodFieldSize;
1092
+
1074
1093
uint32_t UncompressedSize;
1094
+ memcpy (&UncompressedSize, Blob.data () + CurrentOffset, sizeof (uint32_t ));
1095
+ CurrentOffset += UncompressedSizeFieldSize;
1096
+
1075
1097
uint64_t StoredHash;
1076
- memcpy (&ThisVersion, Input.getBuffer ().data () + MagicNumber.size (),
1077
- sizeof (uint16_t ));
1078
- memcpy (&CompressionMethod, Blob.data () + MagicSize + VersionFieldSize,
1079
- sizeof (uint16_t ));
1080
- memcpy (&UncompressedSize,
1081
- Blob.data () + MagicSize + VersionFieldSize + MethodFieldSize,
1082
- sizeof (uint32_t ));
1083
- memcpy (&StoredHash,
1084
- Blob.data () + MagicSize + VersionFieldSize + MethodFieldSize +
1085
- SizeFieldSize,
1086
- sizeof (uint64_t ));
1098
+ memcpy (&StoredHash, Blob.data () + CurrentOffset, sizeof (uint64_t ));
1099
+ CurrentOffset += HashFieldSize;
1087
1100
1088
1101
llvm::compression::Format CompressionFormat;
1089
1102
if (CompressionMethod ==
@@ -1135,7 +1148,9 @@ CompressedOffloadBundle::decompress(const llvm::MemoryBuffer &Input,
1135
1148
double DecompressionSpeedMBs =
1136
1149
(UncompressedSize / (1024.0 * 1024.0 )) / DecompressionTimeSeconds;
1137
1150
1138
- llvm::errs () << " Compressed bundle format version: " << ThisVersion << " \n "
1151
+ llvm::errs () << " Total file size (from header): "
1152
+ << formatWithCommas (TotalFileSize) << " bytes\n "
1153
+ << " Compressed bundle format version: " << ThisVersion << " \n "
1139
1154
<< " Decompression method: "
1140
1155
<< (CompressionFormat == llvm::compression::Format::Zlib
1141
1156
? " zlib"
0 commit comments