aboutsummaryrefslogtreecommitdiffstats
path: root/mps/code/poolabs.c
diff options
context:
space:
mode:
authorDavid Lovemore2012-09-10 12:15:20 +0100
committerDavid Lovemore2012-09-10 12:15:20 +0100
commit8cc0eeb220353e59c45adeae84d0a34bbe2d62f3 (patch)
tree21d0ca271d99be7ef5da8e5d8750c03d5928d7f5 /mps/code/poolabs.c
parent1c9b8d7eb3455c6ebbf10e5a9b6e8f49dbb51d79 (diff)
downloademacs-8cc0eeb220353e59c45adeae84d0a34bbe2d62f3.tar.gz
emacs-8cc0eeb220353e59c45adeae84d0a34bbe2d62f3.zip
Scan at correct rank according to the band in arenaread.
Copied from Perforce Change: 179385 ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code/poolabs.c')
-rw-r--r--mps/code/poolabs.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/mps/code/poolabs.c b/mps/code/poolabs.c
index 9834feb711d..e3e45b7480c 100644
--- a/mps/code/poolabs.c
+++ b/mps/code/poolabs.c
@@ -348,6 +348,8 @@ Res PoolNoAccess(Pool pool, Seg seg, Addr addr,
348 348
349/* SegAccess 349/* SegAccess
350 * 350 *
351 * See also PoolSingleAccess
352 *
351 * Should be used (for the access method) by Pool Classes which intend 353 * Should be used (for the access method) by Pool Classes which intend
352 * to handle page faults by scanning the entire segment and lowering 354 * to handle page faults by scanning the entire segment and lowering
353 * the barrier. 355 * the barrier.
@@ -372,6 +374,8 @@ Res PoolSegAccess(Pool pool, Seg seg, Addr addr,
372 374
373/* SingleAccess 375/* SingleAccess
374 * 376 *
377 * See also ArenaRead, and PoolSegAccess.
378 *
375 * Handles page faults by attempting emulation. If the faulting 379 * Handles page faults by attempting emulation. If the faulting
376 * instruction cannot be emulated then this function returns ResFAIL. 380 * instruction cannot be emulated then this function returns ResFAIL.
377 * 381 *
@@ -410,7 +414,7 @@ Res PoolSingleAccess(Pool pool, Seg seg, Addr addr,
410 /* .single-access.assume.ref */ 414 /* .single-access.assume.ref */
411 /* .single-access.improve.format */ 415 /* .single-access.improve.format */
412 ref = *(Ref *)addr; 416 ref = *(Ref *)addr;
413 /* Check that the reference is aligned to a word boundary */ 417 /* .tagging: Check that the reference is aligned to a word boundary */
414 /* (we assume it is not a reference otherwise). */ 418 /* (we assume it is not a reference otherwise). */
415 if(WordIsAligned((Word)ref, sizeof(Word))) { 419 if(WordIsAligned((Word)ref, sizeof(Word))) {
416 Rank rank; 420 Rank rank;
@@ -427,6 +431,8 @@ Res PoolSingleAccess(Pool pool, Seg seg, Addr addr,
427 431
428 /* Update SegSummary according to the possibly changed reference. */ 432 /* Update SegSummary according to the possibly changed reference. */
429 ref = *(Ref *)addr; 433 ref = *(Ref *)addr;
434 /* .tagging: ought to check the reference for a tag. But
435 * this is conservative. */
430 SegSetSummary(seg, RefSetAdd(arena, SegSummary(seg), ref)); 436 SegSetSummary(seg, RefSetAdd(arena, SegSummary(seg), ref));
431 437
432 ShieldCover(arena, seg); 438 ShieldCover(arena, seg);