Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC
Commits:
-
41a448e5
by Ben Gamari at 2025-09-04T19:21:43-04:00
-
46bb9a79
by Ben Gamari at 2025-09-04T19:21:44-04:00
2 changed files:
Changes:
... | ... | @@ -36,6 +36,8 @@ packageArgs = do |
36 | 36 | cursesLibraryDir <- getSetting CursesLibDir
|
37 | 37 | ffiIncludeDir <- getSetting FfiIncludeDir
|
38 | 38 | ffiLibraryDir <- getSetting FfiLibDir
|
39 | + libzstdIncludeDir <- getSetting LibZstdIncludeDir
|
|
40 | + libzstdLibraryDir <- getSetting LibZstdLibDir
|
|
39 | 41 | stageVersion <- readVersion <$> (expr $ ghcVersionStage stage)
|
40 | 42 | |
41 | 43 | mconcat
|
... | ... | @@ -74,7 +76,9 @@ packageArgs = do |
74 | 76 | , builder (Cabal Setup) ? mconcat
|
75 | 77 | [ arg "--disable-library-for-ghci"
|
76 | 78 | , anyTargetOs [OSOpenBSD] ? arg "--ld-options=-E"
|
77 | - , compilerStageOption ghcProfiled ? arg "--ghc-pkg-option=--force" ]
|
|
79 | + , compilerStageOption ghcProfiled ? arg "--ghc-pkg-option=--force"
|
|
80 | + , cabalExtraDirs libzstdIncludeDir libzstdLibraryDir
|
|
81 | + ]
|
|
78 | 82 | |
79 | 83 | , builder (Cabal Flags) ? mconcat
|
80 | 84 | -- For the ghc library, internal-interpreter only makes
|
... | ... | @@ -313,38 +313,41 @@ void decompressIPEBufferListNodeIfCompressed(IpeBufferListNode *node) { |
313 | 313 | barf("An IPE buffer list node has been compressed, but the "
|
314 | 314 | "decompression library (zstd) is not available.");
|
315 | 315 | #else
|
316 | + // Decompress string table
|
|
316 | 317 | size_t compressed_sz = ZSTD_findFrameCompressedSize(
|
317 | - node->string_table,
|
|
318 | + node->string_table_block->string_table,
|
|
318 | 319 | node->string_table_size
|
319 | 320 | );
|
320 | - char *decompressed_strings = stgMallocBytes(
|
|
321 | - node->string_table_size,
|
|
321 | + IpeStringTableBlock *decompressed_strings = stgMallocBytes(
|
|
322 | + sizeof(IpeStringTableBlock) + node->string_table_size,
|
|
322 | 323 | "updateIpeMap: decompressed_strings"
|
323 | 324 | );
|
325 | + decompressed_strings->magic = IPE_MAGIC_WORD;
|
|
324 | 326 | ZSTD_decompress(
|
325 | - decompressed_strings,
|
|
327 | + decompressed_strings->string_table,
|
|
326 | 328 | node->string_table_size,
|
327 | - node->string_table,
|
|
329 | + node->string_table_block->string_table,
|
|
328 | 330 | compressed_sz
|
329 | 331 | );
|
330 | - node->string_table = (const char *) decompressed_strings;
|
|
332 | + node->string_table_block = decompressed_strings;
|
|
331 | 333 | |
332 | 334 | // Decompress the IPE data
|
333 | 335 | compressed_sz = ZSTD_findFrameCompressedSize(
|
334 | - node->entries,
|
|
336 | + node->entries_block->entries,
|
|
335 | 337 | node->entries_size
|
336 | 338 | );
|
337 | - void *decompressed_entries = stgMallocBytes(
|
|
338 | - node->entries_size,
|
|
339 | + IpeBufferEntryBlock *decompressed_entries = stgMallocBytes(
|
|
340 | + sizeof(IpeBufferEntryBlock) + node->entries_size,
|
|
339 | 341 | "updateIpeMap: decompressed_entries"
|
340 | 342 | );
|
343 | + decompressed_entries->magic = IPE_MAGIC_WORD;
|
|
341 | 344 | ZSTD_decompress(
|
342 | - decompressed_entries,
|
|
345 | + decompressed_entries->entries,
|
|
343 | 346 | node->entries_size,
|
344 | - node->entries,
|
|
347 | + node->entries_block->entries,
|
|
345 | 348 | compressed_sz
|
346 | 349 | );
|
347 | - node->entries = decompressed_entries;
|
|
350 | + node->entries_block = decompressed_entries;
|
|
348 | 351 | #endif // HAVE_LIBZSTD == 0
|
349 | 352 | |
350 | 353 | }
|