From 35651f3b1d1ee333d72fabd7606723bed87c40ef Mon Sep 17 00:00:00 2001 From: Nick Barnes Date: Fri, 23 Nov 2001 11:24:42 +0000 Subject: [PATCH] Add mps_arena_has_addr for configura. Copied from Perforce Change: 24143 ServerID: perforce.ravenbrook.com --- mps/src/arena.c | 11 +++++++++++ mps/src/mpm.h | 1 + mps/src/mps.h | 2 ++ mps/src/mpsi.c | 14 ++++++++++++++ 4 files changed, 28 insertions(+) diff --git a/mps/src/arena.c b/mps/src/arena.c index a8e7d7901c2..fcc6616f8ee 100644 --- a/mps/src/arena.c +++ b/mps/src/arena.c @@ -1379,6 +1379,17 @@ Res ArenaFinalize(Arena arena, Ref obj) } +/* Has Addr */ + +Bool ArenaHasAddr(Arena arena, Addr addr) +{ + Seg seg; + + AVERT(Arena, arena); + return SegOfAddr(&seg, arena, addr); +} + + /* Peek / Poke */ Ref ArenaPeek(Arena arena, Addr addr) diff --git a/mps/src/mpm.h b/mps/src/mpm.h index 0d2c3e0c676..89d0be755fb 100644 --- a/mps/src/mpm.h +++ b/mps/src/mpm.h @@ -657,6 +657,7 @@ extern void ArenaClamp(Arena arena); extern void ArenaRelease(Arena arena); extern void ArenaPark(Arena arena); extern Res ArenaCollect(Arena arena); +extern Bool ArenaHasAddr(Arena arena, Addr addr); extern Res ControlAlloc(void **baseReturn, Arena arena, size_t size, Bool withReservoirPermit); diff --git a/mps/src/mps.h b/mps/src/mps.h index b4dc1d6940b..926a9d1e321 100644 --- a/mps/src/mps.h +++ b/mps/src/mps.h @@ -263,6 +263,8 @@ extern size_t mps_arena_spare_commit_limit(mps_arena_t); extern size_t mps_space_reserved(mps_space_t); extern size_t mps_space_committed(mps_space_t); +extern mps_bool_t mps_arena_has_addr(mps_arena_t, mps_addr_t); + /* Client memory arenas */ extern mps_res_t mps_arena_extend(mps_arena_t, mps_addr_t, size_t); extern mps_res_t mps_arena_retract(mps_arena_t, mps_addr_t, size_t); diff --git a/mps/src/mpsi.c b/mps/src/mpsi.c index bc0b359a7a1..2cde77ee744 100644 --- a/mps/src/mpsi.c +++ b/mps/src/mpsi.c @@ -442,6 +442,20 @@ void mps_space_destroy(mps_space_t mps_space) } #endif +/* mps_arena_has_addr -- is this address managed by this arena? */ + +mps_bool_t mps_arena_has_addr(mps_arena_t mps_arena, mps_addr_t p) +{ + Bool b; + Arena arena = (Arena)mps_arena; + + ArenaEnter(arena); + AVERT(Arena, arena); + b = ArenaHasAddr(arena, (Addr)p); + ArenaLeave(arena); + return b; +} + /* mps_fmt_create_A -- create an object format of variant A *