diff options
| author | Nick Barnes | 2001-11-23 15:26:23 +0000 |
|---|---|---|
| committer | Nick Barnes | 2001-11-23 15:26:23 +0000 |
| commit | eef2f4743c288d2b2e7846129430949186b21d98 (patch) | |
| tree | 3b7545d340d4032e78411c1901eeb0b87d556e09 /mps/code | |
| parent | 04fe0477bb432d4f76f6f4d4b244286e19105978 (diff) | |
| parent | 35651f3b1d1ee333d72fabd7606723bed87c40ef (diff) | |
| download | emacs-eef2f4743c288d2b2e7846129430949186b21d98.tar.gz emacs-eef2f4743c288d2b2e7846129430949186b21d98.zip | |
Merging mps_arena_has_addr() stuff from configura branch to master sources.
Copied from Perforce
Change: 24163
ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code')
| -rw-r--r-- | mps/code/amcss.c | 17 | ||||
| -rw-r--r-- | mps/code/arena.c | 11 | ||||
| -rw-r--r-- | mps/code/mpm.h | 2 | ||||
| -rw-r--r-- | mps/code/mps.h | 2 | ||||
| -rw-r--r-- | mps/code/mpsi.c | 14 |
5 files changed, 43 insertions, 3 deletions
diff --git a/mps/code/amcss.c b/mps/code/amcss.c index 454c4c777ad..32278402d74 100644 --- a/mps/code/amcss.c +++ b/mps/code/amcss.c | |||
| @@ -50,7 +50,7 @@ static void enable(mps_arena_t arena) | |||
| 50 | static void report(mps_arena_t arena) | 50 | static void report(mps_arena_t arena) |
| 51 | { | 51 | { |
| 52 | mps_message_t message; | 52 | mps_message_t message; |
| 53 | 53 | ||
| 54 | while (mps_message_get(&message, arena, mps_message_type_gc())) { | 54 | while (mps_message_get(&message, arena, mps_message_type_gc())) { |
| 55 | size_t live, condemned, not_condemned; | 55 | size_t live, condemned, not_condemned; |
| 56 | 56 | ||
| @@ -156,10 +156,23 @@ static void *test(void *arg, size_t s) | |||
| 156 | collections = c; | 156 | collections = c; |
| 157 | printf("\nCollection %lu, %lu objects.\n", | 157 | printf("\nCollection %lu, %lu objects.\n", |
| 158 | c, objs); | 158 | c, objs); |
| 159 | do { | ||
| 160 | mps_addr_t p = (mps_addr_t)rnd(); | ||
| 161 | if (mps_arena_has_addr(arena, p)) { | ||
| 162 | printf("0x%08x is in arena\n", (int)p); | ||
| 163 | break; | ||
| 164 | } | ||
| 165 | } while(1); | ||
| 166 | |||
| 159 | report(arena); | 167 | report(arena); |
| 160 | for(r = 0; r < exactRootsCOUNT; ++r) | 168 | for(r = 0; r < exactRootsCOUNT; ++r) |
| 161 | cdie(exactRoots[r] == objNULL || dylan_check(exactRoots[r]), | 169 | cdie(exactRoots[r] == objNULL || |
| 170 | (dylan_check(exactRoots[r]) && | ||
| 171 | mps_arena_has_addr(arena, exactRoots[r])), | ||
| 162 | "all roots check"); | 172 | "all roots check"); |
| 173 | cdie(!mps_arena_has_addr(arena, NULL), | ||
| 174 | "NULL in arena"); | ||
| 175 | |||
| 163 | if(collections == collectionsCOUNT / 2) { | 176 | if(collections == collectionsCOUNT / 2) { |
| 164 | unsigned long object_count = 0; | 177 | unsigned long object_count = 0; |
| 165 | mps_arena_park(arena); | 178 | mps_arena_park(arena); |
diff --git a/mps/code/arena.c b/mps/code/arena.c index c0bb7888524..83c3ee600ff 100644 --- a/mps/code/arena.c +++ b/mps/code/arena.c | |||
| @@ -647,3 +647,14 @@ Res ArenaNoExtend(Arena arena, Addr base, Size size) | |||
| 647 | NOTREACHED; | 647 | NOTREACHED; |
| 648 | return ResUNIMPL; | 648 | return ResUNIMPL; |
| 649 | } | 649 | } |
| 650 | |||
| 651 | |||
| 652 | /* Has Addr */ | ||
| 653 | |||
| 654 | Bool ArenaHasAddr(Arena arena, Addr addr) | ||
| 655 | { | ||
| 656 | Seg seg; | ||
| 657 | |||
| 658 | AVERT(Arena, arena); | ||
| 659 | return SegOfAddr(&seg, arena, addr); | ||
| 660 | } | ||
diff --git a/mps/code/mpm.h b/mps/code/mpm.h index 0572b1a5a20..a810d6b0b40 100644 --- a/mps/code/mpm.h +++ b/mps/code/mpm.h | |||
| @@ -523,11 +523,11 @@ extern void (ArenaPoll)(Globals globals); | |||
| 523 | /* .nogc.why: ScriptWorks doesn't use MM-provided incremental GC, so */ | 523 | /* .nogc.why: ScriptWorks doesn't use MM-provided incremental GC, so */ |
| 524 | /* doesn't need to poll when allocating. */ | 524 | /* doesn't need to poll when allocating. */ |
| 525 | 525 | ||
| 526 | |||
| 527 | extern void ArenaClamp(Globals globals); | 526 | extern void ArenaClamp(Globals globals); |
| 528 | extern void ArenaRelease(Globals globals); | 527 | extern void ArenaRelease(Globals globals); |
| 529 | extern void ArenaPark(Globals globals); | 528 | extern void ArenaPark(Globals globals); |
| 530 | extern Res ArenaCollect(Globals globals); | 529 | extern Res ArenaCollect(Globals globals); |
| 530 | extern Bool ArenaHasAddr(Arena arena, Addr addr); | ||
| 531 | 531 | ||
| 532 | extern Res ControlInit(Arena arena); | 532 | extern Res ControlInit(Arena arena); |
| 533 | extern void ControlFinish(Arena arena); | 533 | extern void ControlFinish(Arena arena); |
diff --git a/mps/code/mps.h b/mps/code/mps.h index 7339319d815..5af0608b240 100644 --- a/mps/code/mps.h +++ b/mps/code/mps.h | |||
| @@ -262,6 +262,8 @@ extern size_t mps_arena_spare_commit_limit(mps_arena_t); | |||
| 262 | extern size_t mps_space_reserved(mps_space_t); | 262 | extern size_t mps_space_reserved(mps_space_t); |
| 263 | extern size_t mps_space_committed(mps_space_t); | 263 | extern size_t mps_space_committed(mps_space_t); |
| 264 | 264 | ||
| 265 | extern mps_bool_t mps_arena_has_addr(mps_arena_t, mps_addr_t); | ||
| 266 | |||
| 265 | /* Client memory arenas */ | 267 | /* Client memory arenas */ |
| 266 | extern mps_res_t mps_arena_extend(mps_arena_t, mps_addr_t, size_t); | 268 | extern mps_res_t mps_arena_extend(mps_arena_t, mps_addr_t, size_t); |
| 267 | extern mps_res_t mps_arena_retract(mps_arena_t, mps_addr_t, size_t); | 269 | extern mps_res_t mps_arena_retract(mps_arena_t, mps_addr_t, size_t); |
diff --git a/mps/code/mpsi.c b/mps/code/mpsi.c index c72bf7549b1..cff889c8872 100644 --- a/mps/code/mpsi.c +++ b/mps/code/mpsi.c | |||
| @@ -432,6 +432,20 @@ void mps_space_destroy(mps_space_t mps_space) | |||
| 432 | } | 432 | } |
| 433 | #endif | 433 | #endif |
| 434 | 434 | ||
| 435 | /* mps_arena_has_addr -- is this address managed by this arena? */ | ||
| 436 | |||
| 437 | mps_bool_t mps_arena_has_addr(mps_arena_t mps_arena, mps_addr_t p) | ||
| 438 | { | ||
| 439 | Bool b; | ||
| 440 | Arena arena = (Arena)mps_arena; | ||
| 441 | |||
| 442 | ArenaEnter(arena); | ||
| 443 | AVERT(Arena, arena); | ||
| 444 | b = ArenaHasAddr(arena, (Addr)p); | ||
| 445 | ArenaLeave(arena); | ||
| 446 | return b; | ||
| 447 | } | ||
| 448 | |||
| 435 | 449 | ||
| 436 | /* mps_fmt_create_A -- create an object format of variant A | 450 | /* mps_fmt_create_A -- create an object format of variant A |
| 437 | * | 451 | * |