mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-04-07 06:41:00 -07:00
Merging changes from mmdevel_drj_swint
Copied from Perforce Change: 15881 ServerID: perforce.ravenbrook.com
This commit is contained in:
parent
ade4af3296
commit
cd440af2e5
16 changed files with 283 additions and 96 deletions
|
|
@ -1,12 +1,12 @@
|
|||
/* impl.c.arenavm: VIRTUAL MEMORY BASED ARENA IMPLEMENTATION
|
||||
*
|
||||
* $HopeName: MMsrc!arenavm.c(trunk.3) $
|
||||
* $HopeName: MMsrc!arenavm.c(trunk.4) $
|
||||
* Copyright (C) 1996 Harlequin Group, all rights reserved.
|
||||
*/
|
||||
|
||||
#include "mpm.h"
|
||||
|
||||
SRCID(arenavm, "$HopeName: MMsrc!arenavm.c(trunk.3) $");
|
||||
SRCID(arenavm, "$HopeName: MMsrc!arenavm.c(trunk.4) $");
|
||||
|
||||
#define SpaceArena(space) (&(space)->arenaStruct)
|
||||
|
||||
|
|
@ -80,7 +80,7 @@ static void BTSet(BT bt, BI i, Bool b)
|
|||
* arena part.
|
||||
*/
|
||||
|
||||
Res ArenaCreate(Space *spaceReturn, Size size)
|
||||
Res ArenaCreate(Space *spaceReturn, Size size, Addr base)
|
||||
{
|
||||
Res res;
|
||||
Space space;
|
||||
|
|
@ -93,12 +93,13 @@ Res ArenaCreate(Space *spaceReturn, Size size)
|
|||
|
||||
/* Create the space structure, initialize the VM part, and */
|
||||
/* the current attribute structure. */
|
||||
res = VMCreate(&space, size);
|
||||
res = VMCreate(&space, size, base);
|
||||
if(res) return res;
|
||||
|
||||
arena = SpaceArena(space);
|
||||
arena->base = VMBase(space);
|
||||
arena->limit = VMLimit(space);
|
||||
size = AddrOffset(arena->base, arena->limit);
|
||||
arena->pageSize = VMAlign();
|
||||
arena->pageShift = SizeLog2(arena->pageSize);
|
||||
arena->pages = size >> arena->pageShift;
|
||||
|
|
@ -129,7 +130,9 @@ Res ArenaCreate(Space *spaceReturn, Size size)
|
|||
/* Set the zone shift to divide the arena into the same number of */
|
||||
/* zones as will fit into a reference set (the number of bits in */
|
||||
/* a word). */
|
||||
space->zoneShift = SizeLog2(size >> WORD_SHIFT);
|
||||
/* space->zoneShift = SizeLog2(size >> WORD_SHIFT); */
|
||||
space->zoneShift = 20; /* @@@@ */
|
||||
|
||||
|
||||
/* Sign the arena. */
|
||||
arena->sig = ArenaSig;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# GENERIC BUILD.GC MAKEFILE FRAGMENT
|
||||
#
|
||||
# $HopeName: MMsrc!gc.gmk(trunk.18) $
|
||||
# $HopeName: MMsrc!gc.gmk(trunk.19) $
|
||||
#
|
||||
# Copyright (C) 1995 Harlequin Group, all rights reserved
|
||||
#
|
||||
|
|
@ -20,6 +20,7 @@
|
|||
# AMC as above for the "amc" part
|
||||
# LO as above for the "lo" part
|
||||
# DW as above for the "dw" part
|
||||
# SW as above for the "sw" part
|
||||
# TESTLIB as above for the "testlib" part
|
||||
# LIBS extra libraries to include in tests (usually "-lm")
|
||||
# NOISY if defined and non-empty, causes commands to be emitted
|
||||
|
|
@ -77,17 +78,27 @@ endif
|
|||
.PHONY: phony
|
||||
|
||||
# C FLAGS
|
||||
# %%VARIETY: Define a macro containing the set of flags for the new
|
||||
# variety.
|
||||
|
||||
# Some flags depend on the target. Alas.
|
||||
ifdef TARGET
|
||||
ifeq ($(TARGET),mmsw.a)
|
||||
CFLAGSTARGET = -DTARGET_VM_RM
|
||||
else
|
||||
CFLAGSTARGET =
|
||||
endif
|
||||
endif
|
||||
|
||||
# These flags are included in all compilations.
|
||||
CFLAGSCOMMON = \
|
||||
$(PFMDEFS) \
|
||||
$(PFMDEFS) $(CFLAGSTARGET) \
|
||||
-ansi -pedantic -Wall -Werror -Wpointer-arith \
|
||||
-Wstrict-prototypes -Wmissing-prototypes \
|
||||
-Winline -Waggregate-return -Wnested-externs \
|
||||
-Wcast-qual -Wshadow
|
||||
|
||||
# %%VARIETY: Define a macro containing the set of flags for the new
|
||||
# variety.
|
||||
|
||||
# These flags are added to compilations for the "df" variety.
|
||||
CFDF = -DTARGET_VAR_DF -g -ggdb3
|
||||
|
||||
|
|
@ -116,6 +127,8 @@ LOOBJ = $(LO:%.c=$(PFM)/$(VARIETY)/%.o)
|
|||
LODEP = $(LO:%.c=$(PFM)/$(VARIETY)/%.d)
|
||||
DWOBJ = $(DW:%.c=$(PFM)/$(VARIETY)/%.o)
|
||||
DWDEP = $(DW:%.c=$(PFM)/$(VARIETY)/%.d)
|
||||
SWOBJ = $(SW:%.c=$(PFM)/$(VARIETY)/%.o)
|
||||
SWDEP = $(SW:%.c=$(PFM)/$(VARIETY)/%.d)
|
||||
TESTLIBOBJ = $(TESTLIB:%.c=$(PFM)/$(VARIETY)/%.o)
|
||||
TESTLIBDEP = $(TESTLIB:%.c=$(PFM)/$(VARIETY)/%.d)
|
||||
endif
|
||||
|
|
@ -150,7 +163,8 @@ all: mpmss amcss dwstress mpsicv lockcov poolncv lo.a locv qs weakcv
|
|||
#
|
||||
# %%TARGET: Add a pseudo-target for the new target here.
|
||||
|
||||
mpmss amcss dwstress mpsicv lockcov poolncv lo.a locv qs weakcv: phony
|
||||
mpmss amcss dwstress mpsicv lockcov poolncv lo.a \
|
||||
locv qs weakcv mmsw.a: phony
|
||||
$(MAKE) -f $(PFM).gmk TARGET=$@ target
|
||||
|
||||
# "clean" removes the directory containing the build results for the
|
||||
|
|
@ -228,6 +242,9 @@ $(PFM)/$(VARIETY)/mpm.a: $(MPMOBJ)
|
|||
|
||||
$(PFM)/$(VARIETY)/lo.a: $(PFM)/$(VARIETY)/lo.o
|
||||
|
||||
$(PFM)/$(VARIETY)/mmsw.a: \
|
||||
$(SWOBJ)
|
||||
|
||||
endif
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* impl.h.mpm: MEMORY POOL MANAGER DEFINITIONS
|
||||
*
|
||||
* $HopeName: MMsrc!mpm.h(trunk.5) $
|
||||
* $HopeName: MMsrc!mpm.h(trunk.6) $
|
||||
* Copyright (C) 1996 Harlequin Group, all rights reserved.
|
||||
*/
|
||||
|
||||
|
|
@ -253,7 +253,7 @@ extern Res TraceScanAreaTagged(ScanState ss, Addr *base, Addr *limit);
|
|||
|
||||
/* Space Interface -- see impl.c.space */
|
||||
|
||||
extern Res SpaceCreate(Space *spaceReturn);
|
||||
extern Res SpaceCreate(Space *spaceReturn, Addr base, Size size);
|
||||
extern void SpaceDestroy(Space space);
|
||||
extern Bool SpaceCheck(Space space);
|
||||
extern Res SpaceDescribe(Space space, Lib_FILE *stream);
|
||||
|
|
@ -273,7 +273,7 @@ extern void SpaceFree(Space space, Addr base, Size size);
|
|||
|
||||
/* Arena Interface -- see impl.c.arena* */
|
||||
|
||||
extern Res ArenaCreate(Space *spaceReturn, Size size);
|
||||
extern Res ArenaCreate(Space *spaceReturn, Size size, Addr base);
|
||||
extern void ArenaDestroy(Space space);
|
||||
extern Bool ArenaCheck(Arena arena);
|
||||
extern Align ArenaAlign(Space space);
|
||||
|
|
@ -407,7 +407,7 @@ extern Space RootSpace(Root root);
|
|||
|
||||
extern Align VMAlign(void);
|
||||
extern Bool VMCheck(VM vm);
|
||||
extern Res VMCreate(Space *spaceReturn, Size size);
|
||||
extern Res VMCreate(Space *spaceReturn, Size size, Addr base);
|
||||
extern void VMDestroy(Space space);
|
||||
extern Addr VMBase(Space space);
|
||||
extern Addr VMLimit(Space space);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* impl.h.mpmst: MEMORY POOL MANAGER DATA STRUCTURES
|
||||
*
|
||||
* $HopeName: MMsrc!mpmst.h(trunk.5) $
|
||||
* $HopeName: MMsrc!mpmst.h(trunk.6) $
|
||||
* Copyright (C) 1996 Harlequin Group, all rights reserved.
|
||||
*
|
||||
* .rationale: Almost all MPM data structures are defined in this
|
||||
|
|
@ -154,7 +154,7 @@ typedef struct MVStruct {
|
|||
Size maxSize; /* client estimate of maximum size */
|
||||
Size space; /* total free space in pool */
|
||||
Size lost; /* lost because free couldn't allocate(!) */
|
||||
struct MVSpanStruct *spans; /* span chain */
|
||||
RingStruct spans; /* span chain */
|
||||
Sig sig; /* impl.h.misc.sig */
|
||||
} MVStruct;
|
||||
|
||||
|
|
@ -169,7 +169,17 @@ typedef struct MVStruct {
|
|||
|
||||
#define VMSig ((Sig)0x519FEE33)
|
||||
|
||||
#if defined(MPS_OS_W3)
|
||||
#ifdef TARGET_VM_RM
|
||||
|
||||
typedef struct VMStruct { /* Real Memory fake VM; impl.c.vmrm */
|
||||
Sig sig; /* impl.h.misc.sig */
|
||||
Align align; /* made-up alignment */
|
||||
Addr base, limit; /* boundaries of reserved space */
|
||||
Size reserved; /* total reserved address space */
|
||||
Size mapped; /* total mapped memory */
|
||||
} VMStruct;
|
||||
|
||||
#elif defined(MPS_OS_W3)
|
||||
|
||||
typedef struct VMStruct { /* Win32 VM structure; impl.c.vmnt */
|
||||
Sig sig; /* impl.h.misc.sig */
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
*
|
||||
* HARLEQUIN MEMORY POOL SYSTEM INTERFACE
|
||||
*
|
||||
* $HopeName: MMsrc!mps.h(trunk.8) $
|
||||
* $HopeName: MMsrc!mps.h(trunk.9) $
|
||||
*
|
||||
* Copyright (C) 1996 Harlequin Group, all rights reserved
|
||||
*/
|
||||
|
|
@ -225,6 +225,8 @@ extern mps_assert_t mps_assert_default(void);
|
|||
|
||||
/* Spaces */
|
||||
|
||||
extern mps_res_t mps_space_create_wmem(mps_space_t *mps_space_o,
|
||||
mps_addr_t base, size_t size);
|
||||
extern mps_res_t mps_space_create(mps_space_t *mps_space_o);
|
||||
extern void mps_space_destroy(mps_space_t mps_space);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* impl.h.mpscmv: MEMORY POOL SYSTEM CLASS "MV"
|
||||
*
|
||||
* $HopeName$
|
||||
* $HopeName: MMsrc!mpscmv.h(trunk.1) $
|
||||
* Copyright (C) 1996 Harlequin Group, all rights reserved.
|
||||
*/
|
||||
|
||||
|
|
@ -9,6 +9,8 @@
|
|||
|
||||
#include "mps.h"
|
||||
|
||||
extern size_t mps_mv_free_size(mps_pool_t mps_pool);
|
||||
extern size_t mps_mv_size(mps_pool_t mps_pool);
|
||||
extern mps_class_t mps_class_mv(void);
|
||||
|
||||
#endif /* mpscmv_h */
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* impl.c.mpsi: MEMORY POOL SYSTEM INTERFACE LAYER
|
||||
*
|
||||
* $HopeName: MMsrc!mpsi.c(trunk.13) $
|
||||
* $HopeName: MMsrc!mpsi.c(trunk.14) $
|
||||
* Copyright (C) 1996 Harlequin Group, all rights reserved.
|
||||
*
|
||||
* .thread-safety: Most calls through this interface lock the space
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
#include "mpm.h"
|
||||
#include "mps.h"
|
||||
|
||||
SRCID(mpsi, "$HopeName: MMsrc!mpsi.c(trunk.13) $");
|
||||
SRCID(mpsi, "$HopeName: MMsrc!mpsi.c(trunk.14) $");
|
||||
|
||||
|
||||
/* Check consistency of interface mappings. */
|
||||
|
|
@ -96,6 +96,18 @@ mps_assert_t mps_assert_default(void)
|
|||
return AssertDefault();
|
||||
}
|
||||
|
||||
mps_res_t mps_space_create_wmem(mps_space_t *mps_space_o,
|
||||
mps_addr_t base, size_t size)
|
||||
{
|
||||
Space *spaceReturn = (Space *)mps_space_o;
|
||||
/* This is the first real call that the client will have to make, */
|
||||
/* so check static consistency here. */
|
||||
AVER(mpsi_check());
|
||||
AVER(spaceReturn != NULL);
|
||||
AVER(base != NULL);
|
||||
return SpaceCreate(spaceReturn, (Addr)base, (Size)size);
|
||||
}
|
||||
|
||||
mps_res_t mps_space_create(mps_space_t *mps_space_o)
|
||||
{
|
||||
Space *spaceReturn = (Space *)mps_space_o;
|
||||
|
|
@ -103,7 +115,7 @@ mps_res_t mps_space_create(mps_space_t *mps_space_o)
|
|||
/* so check static consistency here. */
|
||||
AVER(mpsi_check());
|
||||
AVER(spaceReturn != NULL);
|
||||
return SpaceCreate(spaceReturn);
|
||||
return SpaceCreate(spaceReturn, (Addr)0, (Size)0);
|
||||
}
|
||||
|
||||
void mps_space_destroy(mps_space_t mps_space)
|
||||
|
|
|
|||
|
|
@ -1,12 +1,15 @@
|
|||
/* impl.h.mpstd: HARLEQUIN MEMORY POOL SYSTEM TARGET DETECTION
|
||||
*
|
||||
* $HopeName: MMsrc!mpstd.h(trunk.8) $
|
||||
* $HopeName: MMsrc!mpstd.h(trunk.9) $
|
||||
* Copyright (C) 1996 Harlequin Group, all rights reserved
|
||||
*
|
||||
* Detect the target platform using predefined preprocessor symbols
|
||||
* defined by the build environment. The symbols are derived from the
|
||||
* documentation, or, in the case of GCC, from the compiler itself.
|
||||
* References to the documentation appear above each detection line.
|
||||
*
|
||||
* .hack.align: All alignments have been hacked to be at least 8.
|
||||
* This is a short term fix to meet req.epcore.attr.align
|
||||
*/
|
||||
|
||||
#ifndef mpstd_h
|
||||
|
|
@ -22,7 +25,7 @@
|
|||
#define MPS_T_WORD unsigned long
|
||||
#define MPS_WORD_WIDTH 32
|
||||
#define MPS_WORD_SHIFT 5
|
||||
#define MPS_PF_ALIGN 4
|
||||
#define MPS_PF_ALIGN 8 /* .hack.align */
|
||||
|
||||
/* winnt.h (D:\packages\msvc20\include\winnt.h on aaron) */
|
||||
/* really ought to check this more thoroughly */
|
||||
|
|
@ -35,7 +38,7 @@
|
|||
#define MPS_T_WORD unsigned long
|
||||
#define MPS_WORD_WIDTH 32
|
||||
#define MPS_WORD_SHIFT 5
|
||||
#define MPS_PF_ALIGN 4
|
||||
#define MPS_PF_ALIGN 8 /* .hack.align */
|
||||
|
||||
/* winnt.h (D:\packages\msvc20\include\winnt.h on aaron) */
|
||||
/* really ought to check this more thoroughly */
|
||||
|
|
@ -48,7 +51,7 @@
|
|||
#define MPS_T_WORD unsigned long
|
||||
#define MPS_WORD_WIDTH 32
|
||||
#define MPS_WORD_SHIFT 5
|
||||
#define MPS_PF_ALIGN 4
|
||||
#define MPS_PF_ALIGN 8 /* .hack.align */
|
||||
|
||||
/* Visual C++ 2.0, Books Online, C/C++ Book, Preprocessor Reference, */
|
||||
/* Chapter 1: The Preprocessor, Macros, Predefined Macros. */
|
||||
|
|
@ -61,7 +64,7 @@
|
|||
#define MPS_T_WORD unsigned long
|
||||
#define MPS_WORD_WIDTH 32
|
||||
#define MPS_WORD_SHIFT 5
|
||||
#define MPS_PF_ALIGN 4
|
||||
#define MPS_PF_ALIGN 8 /* .hack.align */
|
||||
|
||||
/* MW C/C++/ASM Lang Ref, pp175-176. Metrowerks does not document */
|
||||
/* a way to determine the OS -- we assume MacOS 7. */
|
||||
|
|
@ -74,7 +77,7 @@
|
|||
#define MPS_T_WORD unsigned long
|
||||
#define MPS_WORD_WIDTH 32
|
||||
#define MPS_WORD_SHIFT 5
|
||||
#define MPS_PF_ALIGN 1
|
||||
#define MPS_PF_ALIGN 8 /* .hack.align */
|
||||
|
||||
/* 1. MPW 3.0 C Ref, p. 43. */
|
||||
/* 2. MPW SC/SCpp C/C++ Compiler for 68k Macintosh, p 3-60. */
|
||||
|
|
@ -89,7 +92,7 @@
|
|||
#define MPS_T_WORD unsigned long
|
||||
#define MPS_WORD_WIDTH 32
|
||||
#define MPS_WORD_SHIFT 5
|
||||
#define MPS_PF_ALIGN 1
|
||||
#define MPS_PF_ALIGN 8 /* .hack.align */
|
||||
|
||||
/* 1. C++/C Compiler for Macintosh with PowerPC, p 3-36. */
|
||||
/* 2. MPW MrC/MrCpp C/C++ Compiler for Power Macintosh, p 3-57. */
|
||||
|
|
@ -104,7 +107,7 @@
|
|||
#define MPS_T_WORD unsigned long
|
||||
#define MPS_WORD_WIDTH 32
|
||||
#define MPS_WORD_SHIFT 5
|
||||
#define MPS_PF_ALIGN 4
|
||||
#define MPS_PF_ALIGN 8 /* .hack.align */
|
||||
|
||||
/* GCC 2.5.8, gcc -E -dM, (__SVR4 indicates Solaris) */
|
||||
|
||||
|
|
@ -155,7 +158,7 @@
|
|||
#define MPS_T_WORD unsigned long
|
||||
#define MPS_WORD_WIDTH 32
|
||||
#define MPS_WORD_SHIFT 5
|
||||
#define MPS_PF_ALIGN 4
|
||||
#define MPS_PF_ALIGN 8 /* .hack.align */
|
||||
|
||||
#else
|
||||
#error "Unable to detect target platform"
|
||||
|
|
|
|||
114
mps/src/poolmv.c
114
mps/src/poolmv.c
|
|
@ -1,6 +1,6 @@
|
|||
/* impl.c.poolmv: MANUAL VARIABLE POOL
|
||||
*
|
||||
* $HopeName: MMsrc!poolmv.c(MMdevel_restr2.6) $
|
||||
* $HopeName: MMsrc!poolmv.c(trunk.13) $
|
||||
* Copyright (C) 1994, 1995 Harlequin Group, all rights reserved
|
||||
*
|
||||
* **** RESTRICTION: This pool may not allocate from the arena control
|
||||
|
|
@ -37,7 +37,7 @@
|
|||
#include "poolmfs.h"
|
||||
#include "mpscmv.h"
|
||||
|
||||
SRCID(poolmv, "$HopeName: MMsrc!poolmv.c(MMdevel_restr2.6) $");
|
||||
SRCID(poolmv, "$HopeName: MMsrc!poolmv.c(trunk.13) $");
|
||||
|
||||
|
||||
#define BLOCKPOOL(mv) (MFSPool(&(mv)->blockPoolStruct))
|
||||
|
|
@ -95,7 +95,7 @@ static Bool MVBlockCheck(MVBlock block)
|
|||
|
||||
typedef struct MVSpanStruct *MVSpan;
|
||||
typedef struct MVSpanStruct {
|
||||
MVSpan next; /* link to next span */
|
||||
RingStruct spans; /* all the spans */
|
||||
MV mv; /* owning MV pool */
|
||||
Seg seg; /* segment underlying the span */
|
||||
MVBlockStruct base; /* sentinel at base of span */
|
||||
|
|
@ -119,6 +119,7 @@ static Bool MVSpanCheck(MVSpan span)
|
|||
{
|
||||
CHECKL(span != NULL);
|
||||
CHECKU(MV, span->mv);
|
||||
CHECKL(RingCheck(&span->spans));
|
||||
CHECKL(MVBlockCheck(&span->base));
|
||||
CHECKL(MVBlockCheck(&span->limit));
|
||||
/* The block chain starts with the base sentinel. */
|
||||
|
|
@ -181,7 +182,7 @@ static Res MVInit(Pool pool, va_list arg)
|
|||
mv->extendBy = extendBy;
|
||||
mv->avgSize = avgSize;
|
||||
mv->maxSize = maxSize;
|
||||
mv->spans = NULL;
|
||||
RingInit(&mv->spans);
|
||||
mv->space = 0;
|
||||
mv->lost = 0;
|
||||
mv->sig = MVSig;
|
||||
|
|
@ -195,6 +196,7 @@ static Res MVInit(Pool pool, va_list arg)
|
|||
static void MVFinish(Pool pool)
|
||||
{
|
||||
MV mv;
|
||||
Ring spans, node = NULL; /* gcc whinge stop */
|
||||
MVSpan span;
|
||||
|
||||
AVERT(Pool, pool);
|
||||
|
|
@ -202,11 +204,11 @@ static void MVFinish(Pool pool)
|
|||
AVERT(MV, mv);
|
||||
|
||||
/* Destroy all the segments attached to the pool. */
|
||||
span = mv->spans;
|
||||
while(span != NULL) {
|
||||
spans = &mv->spans;
|
||||
RING_FOR(node, spans) {
|
||||
span = RING_ELT(MVSpan, spans, node);
|
||||
AVERT(MVSpan, span);
|
||||
PoolSegFree(pool, span->seg);
|
||||
span = span->next;
|
||||
}
|
||||
|
||||
mv->sig = SigInvalid;
|
||||
|
|
@ -366,6 +368,7 @@ static Res MVAlloc(Addr *pReturn, Pool pool, Size size)
|
|||
Space space;
|
||||
MV mv;
|
||||
Size segSize;
|
||||
Ring spans, node = NULL; /* gcc whinge stop */
|
||||
|
||||
AVERT(Pool, pool);
|
||||
mv = PoolPoolMV(pool);
|
||||
|
|
@ -377,9 +380,9 @@ static Res MVAlloc(Addr *pReturn, Pool pool, Size size)
|
|||
size = SizeAlignUp(size, pool->alignment);
|
||||
|
||||
if(size <= mv->space) {
|
||||
span = mv->spans;
|
||||
|
||||
while(span != NULL) {
|
||||
spans = &mv->spans;
|
||||
RING_FOR(node, spans) {
|
||||
span = RING_ELT(MVSpan, spans, node);
|
||||
if(size <= span->space) {
|
||||
Addr new;
|
||||
|
||||
|
|
@ -390,8 +393,6 @@ static Res MVAlloc(Addr *pReturn, Pool pool, Size size)
|
|||
return ResOK;
|
||||
}
|
||||
}
|
||||
|
||||
span = span->next;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -419,7 +420,7 @@ static Res MVAlloc(Addr *pReturn, Pool pool, Size size)
|
|||
|
||||
span->mv = mv;
|
||||
span->seg->p = (void *)span;
|
||||
span->next = mv->spans;
|
||||
RingInit(&span->spans);
|
||||
span->base.base = span->base.limit = SegBase(space, span->seg);
|
||||
span->limit.base = span->limit.limit = SegLimit(space, span->seg);
|
||||
span->space = AddrOffset(span->base.limit, span->limit.base);
|
||||
|
|
@ -434,7 +435,7 @@ static Res MVAlloc(Addr *pReturn, Pool pool, Size size)
|
|||
AVERT(MVSpan, span);
|
||||
|
||||
mv->space += span->space;
|
||||
mv->spans = span;
|
||||
RingAppend(&mv->spans, &span->spans);
|
||||
|
||||
*pReturn = span->base.base;
|
||||
return ResOK;
|
||||
|
|
@ -478,6 +479,18 @@ static void MVFree(Pool pool, Addr old, Size size)
|
|||
mv->lost += size;
|
||||
else
|
||||
mv->space += size;
|
||||
|
||||
/* free space should be less than total space */
|
||||
AVER(AddrAdd(span->base.base, span->space) <= span->limit.limit);
|
||||
if(AddrAdd(span->base.base, span->space) == span->limit.limit) {
|
||||
AVER(span->blockCount == 2);
|
||||
/* both blocks are the trivial sentinel blocks */
|
||||
AVER(span->base.limit == span->base.base);
|
||||
AVER(span->limit.limit == span->limit.base);
|
||||
PoolSegFree(pool, span->seg);
|
||||
RingRemove(&span->spans);
|
||||
PoolFree(SPANPOOL(mv), (Addr)span, sizeof(MVSpanStruct));
|
||||
}
|
||||
|
||||
return; /* should free spans. See note 4. */
|
||||
}
|
||||
|
|
@ -489,6 +502,7 @@ static Res MVDescribe(Pool pool, Lib_FILE *stream)
|
|||
MVSpan span;
|
||||
Align step;
|
||||
Size length;
|
||||
Ring spans, node = NULL; /* gcc whinge stop */
|
||||
|
||||
AVERT(Pool, pool);
|
||||
mv = PoolPoolMV(pool);
|
||||
|
|
@ -511,16 +525,15 @@ static Res MVDescribe(Pool pool, Lib_FILE *stream)
|
|||
Lib_fprintf(stream,
|
||||
" Spans\n"
|
||||
" desc seg space blockCount\n");
|
||||
span = mv->spans;
|
||||
while(span != NULL) {
|
||||
spans = &mv->spans;
|
||||
RING_FOR(node, spans) {
|
||||
span = RING_ELT(MVSpan, spans, node);
|
||||
AVERT(MVSpan, span);
|
||||
|
||||
Lib_fprintf(stream, " %8lX %8lX %8lX %d\n",
|
||||
(unsigned long)span,
|
||||
(unsigned long)span->seg,
|
||||
span->space, span->blockCount);
|
||||
|
||||
span = span->next;
|
||||
}
|
||||
|
||||
Lib_fprintf(stream, " Span allocation maps\n");
|
||||
|
|
@ -528,10 +541,11 @@ static Res MVDescribe(Pool pool, Lib_FILE *stream)
|
|||
step = pool->alignment;
|
||||
length = 0x40 * step;
|
||||
|
||||
span = mv->spans;
|
||||
while(span != NULL) {
|
||||
spans = &mv->spans;
|
||||
RING_FOR(node, spans) {
|
||||
Addr i, j;
|
||||
MVBlock block;
|
||||
span = RING_ELT(MVSpan, spans, node);
|
||||
Lib_fprintf(stream, " MVSpan %8lX\n", (unsigned long)span);
|
||||
|
||||
block = span->blocks;
|
||||
|
|
@ -540,7 +554,8 @@ static Res MVDescribe(Pool pool, Lib_FILE *stream)
|
|||
for(i = span->base.base; i < span->limit.limit; i = AddrAdd(i, length)) {
|
||||
Lib_fprintf(stream, " %8lX ", (unsigned long)i);
|
||||
|
||||
for(j = i; j < AddrAdd(i, length) && j < span->limit.limit; j = AddrAdd(j, step)) {
|
||||
for(j = i; j < AddrAdd(i, length) && j < span->limit.limit;
|
||||
j = AddrAdd(j, step)) {
|
||||
if(j == block->base) {
|
||||
if(AddrAdd(j, step) == block->limit)
|
||||
Lib_fputc('@', stream);
|
||||
|
|
@ -560,8 +575,6 @@ static Res MVDescribe(Pool pool, Lib_FILE *stream)
|
|||
}
|
||||
Lib_fputc('\n', stream);
|
||||
}
|
||||
|
||||
span = span->next;
|
||||
}
|
||||
|
||||
return ResOK;
|
||||
|
|
@ -607,6 +620,61 @@ mps_class_t mps_class_mv(void)
|
|||
return (mps_class_t)(PoolClassMV());
|
||||
}
|
||||
|
||||
/* Free bytes */
|
||||
|
||||
size_t mps_mv_free_size(mps_pool_t mps_pool)
|
||||
{
|
||||
Pool pool;
|
||||
MV mv;
|
||||
MVSpan span;
|
||||
Size f = 0;
|
||||
Ring spans, node = NULL; /* gcc whinge stop */
|
||||
|
||||
pool = (Pool)mps_pool;
|
||||
|
||||
AVERT(Pool, pool);
|
||||
mv = PoolPoolMV(pool);
|
||||
AVERT(MV, mv);
|
||||
|
||||
spans = &mv->spans;
|
||||
RING_FOR(node, spans) {
|
||||
span = RING_ELT(MVSpan, spans, node);
|
||||
AVERT(MVSpan, span);
|
||||
f += span->space;
|
||||
}
|
||||
|
||||
return (size_t)f;
|
||||
}
|
||||
|
||||
size_t mps_mv_size(mps_pool_t mps_pool)
|
||||
{
|
||||
Pool pool;
|
||||
MV mv;
|
||||
MVSpan span;
|
||||
Space space;
|
||||
Size f = 0;
|
||||
Ring spans, node = NULL; /* gcc whinge stop */
|
||||
|
||||
pool = (Pool)mps_pool;
|
||||
|
||||
AVERT(Pool, pool);
|
||||
mv = PoolPoolMV(pool);
|
||||
AVERT(MV, mv);
|
||||
space = PoolSpace(pool);
|
||||
|
||||
spans = &mv->spans;
|
||||
RING_FOR(node, spans) {
|
||||
span = RING_ELT(MVSpan, spans, node);
|
||||
AVERT(MVSpan, span);
|
||||
f += SegSize(space, span->seg);
|
||||
}
|
||||
|
||||
return (size_t)f;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* MVCheck -- check the consistency of an MV structure */
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# BUILD FOR SOLARIS/SPARC/GCC PLATFORM
|
||||
#
|
||||
# $HopeName: MMsrc!sospgc.gmk(MMdevel_protoposm_1.2) $
|
||||
# $HopeName: MMsrc!sospgc.gmk(trunk.2) $
|
||||
#
|
||||
# Copyright (C) 1995 Harlequin Group, all rights reserved
|
||||
#
|
||||
|
|
@ -19,6 +19,10 @@ MPMPS = sssosp.S
|
|||
AMC = amc.c
|
||||
LO = lo.c
|
||||
DW = fmtdy.c dw.c
|
||||
SW = assert.c ring.c liban.c mpm.c \
|
||||
arenavm.c vmrm.c space.c pool.c poolmfs.c \
|
||||
poolmv.c root.c format.c buffer.c lockan.c ref.c \
|
||||
trace.c than.c protso.c shield.c mpsi.c ld.c ssan.c
|
||||
LIBS = -lm
|
||||
|
||||
TESTLIB = testlib.c
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# BUILD FOR SUNOS/SPARC/GCC PLATFORM
|
||||
#
|
||||
# $HopeName: MMsrc!suspgc.gmk(MMdevel_restr2.2) $
|
||||
# $HopeName: MMsrc!suspgc.gmk(trunk.18) $
|
||||
#
|
||||
# Copyright (C) 1995 Harlequin Group, all rights reserved
|
||||
#
|
||||
|
|
@ -18,6 +18,10 @@ MPMS = sssusp.s
|
|||
AMC = amc.c
|
||||
LO = lo.c
|
||||
DW = fmtdy.c dw.c
|
||||
SW = assert.c ring.c liban.c mpm.c \
|
||||
arenavm.c vmrm.c space.c pool.c poolmfs.c \
|
||||
poolmv.c root.c format.c buffer.c lockan.c ref.c \
|
||||
trace.c than.c protsu.c shield.c mpsi.c ld.c ssan.c
|
||||
|
||||
TESTLIB = testlib.c
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* impl.c.vman: ANSI VM: MALLOC-BASED PSUEDO MEMORY MAPPING
|
||||
*
|
||||
* $HopeName: MMsrc!vman.c(MMdevel_restr.4) $
|
||||
* $HopeName: MMsrc!vman.c(trunk.9) $
|
||||
* Copyright (C) 1996 Harlequin Group, all rights reserved.
|
||||
*/
|
||||
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
#include <stdlib.h> /* for malloc and free */
|
||||
#include <string.h> /* for memset */
|
||||
|
||||
SRCID(vman, "$HopeName: MMsrc!vman.c(MMdevel_restr.4) $");
|
||||
SRCID(vman, "$HopeName: MMsrc!vman.c(trunk.9) $");
|
||||
|
||||
#define SpaceVM(_space) (&(_space)->arenaStruct.vmStruct)
|
||||
|
||||
|
|
@ -31,18 +31,15 @@ Align VMAlign()
|
|||
return VMAN_ALIGN;
|
||||
}
|
||||
|
||||
Res VMCreate(Space *spaceReturn, Size size)
|
||||
|
||||
Res VMCreate(Space *spaceReturn, Size size, Addr base)
|
||||
{
|
||||
Space space;
|
||||
VM vm;
|
||||
|
||||
AVER(size > 0);
|
||||
AVER(SizeIsAligned(size, VMAN_ALIGN));
|
||||
|
||||
space = (Space)malloc(sizeof(SpaceStruct));
|
||||
if(space == NULL)
|
||||
return ResMEMORY;
|
||||
vm = SpaceVM(space);
|
||||
AVER(spaceReturn != NULL);
|
||||
AVER(size != 0);
|
||||
AVER(base == NULL);
|
||||
|
||||
/* Note that because we add VMAN_ALIGN rather than */
|
||||
/* VMAN_ALIGN-1 we are not in danger of overflowing */
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* impl.c.vmsu: VIRTUAL MEMORY MAPPING FOR SUNOS 4
|
||||
*
|
||||
* $HopeName: MMsrc!vmsu.c(MMdevel_restr.4) $
|
||||
* $HopeName: MMsrc!vmsu.c(trunk.10) $
|
||||
* Copyright (C) 1995 Harlequin Group, all rights reserved
|
||||
*
|
||||
* Design: design.mps.vm
|
||||
|
|
@ -44,7 +44,7 @@
|
|||
#include <errno.h>
|
||||
#include <sys/errno.h>
|
||||
|
||||
SRCID(vmsu, "$HopeName: MMsrc!vmsu.c(MMdevel_restr.4) $");
|
||||
SRCID(vmsu, "$HopeName: MMsrc!vmsu.c(trunk.10) $");
|
||||
|
||||
|
||||
/* Fix up unprototyped system calls. */
|
||||
|
|
@ -85,7 +85,7 @@ Bool VMCheck(VM vm)
|
|||
}
|
||||
|
||||
|
||||
Res VMCreate(Space *spaceReturn, Size size)
|
||||
Res VMCreate(Space *spaceReturn, Size size, Addr base)
|
||||
{
|
||||
caddr_t addr;
|
||||
Align align;
|
||||
|
|
@ -100,6 +100,7 @@ Res VMCreate(Space *spaceReturn, Size size)
|
|||
AVER(SizeIsAligned(size, align));
|
||||
AVER(size != 0);
|
||||
AVER(size <= INT_MAX); /* see .assume.size */
|
||||
AVER(base == NULL);
|
||||
|
||||
zero_fd = open("/dev/zero", O_RDONLY);
|
||||
if(zero_fd == -1)
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
*
|
||||
* VIRTUAL MEMORY MAPPING FOR WIN32
|
||||
*
|
||||
* $HopeName: MMsrc!vmnt.c(trunk.11) $
|
||||
* $HopeName: MMsrc!vmnt.c(trunk.12) $
|
||||
*
|
||||
* Copyright (C) 1995 Harlequin Group, all rights reserved
|
||||
*
|
||||
|
|
@ -55,7 +55,7 @@
|
|||
|
||||
#include <windows.h>
|
||||
|
||||
SRCID(vmnt, "$HopeName: MMsrc!vmnt.c(trunk.11) $");
|
||||
SRCID(vmnt, "$HopeName: MMsrc!vmnt.c(trunk.12) $");
|
||||
|
||||
|
||||
#define SpaceVM(space) (&(space)->arenaStruct.vmStruct)
|
||||
|
|
@ -89,9 +89,9 @@ Bool VMCheck(VM vm)
|
|||
}
|
||||
|
||||
|
||||
Res VMCreate(Space *spaceReturn, Size size)
|
||||
Res VMCreate(Space *spaceReturn, Size size, Addr base)
|
||||
{
|
||||
LPVOID base;
|
||||
LPVOID vbase;
|
||||
Align align;
|
||||
VM vm;
|
||||
Space space;
|
||||
|
|
@ -106,26 +106,27 @@ Res VMCreate(Space *spaceReturn, Size size)
|
|||
AVER(SizeIsP2(align)); /* see .assume.sysalign */
|
||||
|
||||
AVER(SizeIsAligned(size, align));
|
||||
AVER(base == NULL);
|
||||
|
||||
/* Allocate some store for the space descriptor.
|
||||
* This is likely to be wasteful see issue.vmnt.waste */
|
||||
base = VirtualAlloc(NULL, SizeAlignUp(sizeof(SpaceStruct), align),
|
||||
vbase = VirtualAlloc(NULL, SizeAlignUp(sizeof(SpaceStruct), align),
|
||||
MEM_COMMIT, PAGE_READWRITE);
|
||||
if(base == NULL)
|
||||
if(vbase == NULL)
|
||||
return ResMEMORY;
|
||||
space = (Space)base;
|
||||
space = (Space)vbase;
|
||||
vm = SpaceVM(space);
|
||||
|
||||
/* Allocate the address space. */
|
||||
base = VirtualAlloc(NULL, size, MEM_RESERVE, PAGE_NOACCESS);
|
||||
if(base == NULL)
|
||||
vbase = VirtualAlloc(NULL, size, MEM_RESERVE, PAGE_NOACCESS);
|
||||
if(vbase == NULL)
|
||||
return ResRESOURCE;
|
||||
|
||||
AVER(AddrIsAligned(base, align));
|
||||
AVER(AddrIsAligned(vbase, align));
|
||||
|
||||
vm->align = align;
|
||||
vm->base = (Addr)base;
|
||||
vm->limit = AddrAdd(base, size);
|
||||
vm->base = (Addr)vbase;
|
||||
vm->limit = AddrAdd(vbase, size);
|
||||
vm->reserved = size;
|
||||
vm->mapped = 0;
|
||||
AVER(vm->base < vm->limit); /* .assume.not-last */
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# ==== NTI3MV NMAKE FILE ====
|
||||
#
|
||||
# $HopeName: MMsrc!ntalmv.nmk(MMdevel_drj_swint.2) $
|
||||
# $HopeName: MMsrc!ntalmv.nmk(trunk.1) $
|
||||
#
|
||||
# Copyright (C) 1995 Harlequin Group, all rights reserved
|
||||
#
|
||||
|
|
@ -12,8 +12,13 @@ MPM = <assert> <ring> <liban> <mpm> \
|
|||
<poolmv> <root> <format> <buffer> <locknt> \
|
||||
<ref> <trace> <protnt> <shield> \
|
||||
<than> <ssan> <mpsi> <mpsint> <ld>
|
||||
SW = <assert> <ring> <liban> <mpm> \
|
||||
<arenavm> <vmrm> <space> <pool> <poolmfs> \
|
||||
<poolmv> <root> <format> <buffer> <locknt> \
|
||||
<ref> <trace> <protnt> <shield> \
|
||||
<than> <ssan> <mpsi> <mpsint> <ld>
|
||||
AMC = <amc>
|
||||
LO = <lo>
|
||||
LO = <lo>
|
||||
DW = <dw> <fmtdy>
|
||||
TESTLIB = <testlib>
|
||||
|
||||
|
|
@ -21,7 +26,7 @@ TESTLIB = <testlib>
|
|||
|
||||
# ==== ALMOST GENERIC PRODUCT BUILD FOR NMAKE ====
|
||||
#
|
||||
# $HopeName: MMsrc!ntalmv.nmk(MMdevel_drj_swint.2) $
|
||||
# $HopeName: MMsrc!ntalmv.nmk(trunk.1) $
|
||||
#
|
||||
# Copyright (C) 1995 Harlequin Group, all rights reserved
|
||||
#
|
||||
|
|
@ -29,9 +34,10 @@ TESTLIB = <testlib>
|
|||
#
|
||||
# This makefile fragment is conceptually included in more specific
|
||||
# makefiles for platforms which use the "mv" builder. Alas
|
||||
# due to shortcomings in nmake and the fact that only ntalmv uses mv
|
||||
# at the moment it is physically part of mti3mv.nmk. [It is not possible
|
||||
# use a macro in a substituion, hence this file uses ntalmv instead of $(PFM)]
|
||||
# due to shortcomings in nmake at the moment it is physically
|
||||
# part of ntalmv.nmk. [It is not possible use a macro in a
|
||||
# substituion, hence this file uses ntalmv instead of $(PFM)]
|
||||
# @@ This needs examining again
|
||||
#
|
||||
# %%PART: Add a new parameter for the files included in the part
|
||||
# Parameters:
|
||||
|
|
@ -41,9 +47,10 @@ TESTLIB = <testlib>
|
|||
# MPM list of sources which make up the "mpm" part for this
|
||||
# platform. Each source is stripped of its .c extension
|
||||
# and surrounded in angle brackets (<>)
|
||||
# SW as above for the "sw" part
|
||||
# AMC as above for the "amc" part
|
||||
# LO as above for the "lo" part
|
||||
# DW as above for the "amc" part
|
||||
# LO as above for the "lo" part
|
||||
# DW as above for the "amc" part
|
||||
# TESTLIB as above for the "testlib" part
|
||||
# NOISY if defined, causes command to be emitted
|
||||
#
|
||||
|
|
@ -82,6 +89,9 @@ TESTLIB = <testlib>
|
|||
!IFNDEF DW
|
||||
!ERROR mv.nmk: DW not defined
|
||||
!ENDIF
|
||||
!IFNDEF SW
|
||||
!ERROR mv.nmk: SW not defined
|
||||
!ENDIF
|
||||
!IFNDEF TESTLIB
|
||||
!ERROR mv.nmk: TESTLIB not defined
|
||||
!ENDIF
|
||||
|
|
@ -104,7 +114,18 @@ ECHO = echo
|
|||
# All compilations
|
||||
# [Sadly /W4 causes <windows.h> to emit thousands of warnings]
|
||||
# /MT means compile for multi-threaded environment.
|
||||
CFLAGSCOMMON = /nologo /W3 /WX $(PFMDEFS) /MT
|
||||
# /ML means compile for single-threaded environment.
|
||||
# some C flags depend on the target we are building.
|
||||
|
||||
!ifdef TARGET
|
||||
!if "$(TARGET)" == "mmsw.lib"
|
||||
CFLAGSTARGET = /ML /DTARGET_VM_RM
|
||||
!else
|
||||
CFLAGSTARGET = /MT
|
||||
!endif
|
||||
!endif
|
||||
|
||||
CFLAGSCOMMON = /nologo /W3 /WX $(PFMDEFS) $(CFLAGSTARGET)
|
||||
|
||||
# "debug" variety flags
|
||||
# [Used to use /Zi instead of /Z7. /Z7 generates debugging output in the
|
||||
|
|
@ -117,7 +138,7 @@ CFDP = /DTARGET_VAR_DP /Z7
|
|||
CFDS = /DTARGET_VAR_DS /Z7
|
||||
|
||||
# "release" variety flags
|
||||
# Microsoft documentation is not very clear on the point of using bothing
|
||||
# Microsoft documentation is not very clear on the point of using both
|
||||
# optimzation and debug information
|
||||
CFRO = /DTARGET_VAR_RO /Z7 /O2
|
||||
|
||||
|
|
@ -165,6 +186,8 @@ LINKFLAGS=$(LINKFLAGSCOMMON) $(LFDF)
|
|||
LIBFLAGS=$(LIBFLAGSCOMMON) $(LIBFLAGSDF)
|
||||
MPMOBJ0 = $(MPM:<=ntalmv\df\)
|
||||
MPMOBJ = $(MPMOBJ0:>=.obj)
|
||||
SWOBJ0 = $(SW:<=ntalmv\df\)
|
||||
SWOBJ = $(SWOBJ0:>=.obj)
|
||||
AMCOBJ0 = $(AMC:<=ntalmv\df\)
|
||||
AMCOBJ = $(AMCOBJ0:>=.obj)
|
||||
LOOBJ0 = $(LO:<=ntalmv\df\)
|
||||
|
|
@ -180,6 +203,8 @@ LINKFLAGS=$(LINKFLAGSCOMMON) $(LFDP)
|
|||
LIBFLAGS=$(LIBFLAGSCOMMON) $(LIBFLAGSDP)
|
||||
MPMOBJ0 = $(MPM:<=ntalmv\dp\)
|
||||
MPMOBJ = $(MPMOBJ0:>=.obj)
|
||||
SWOBJ0 = $(SW:<=ntalmv\dp\)
|
||||
SWOBJ = $(SWOBJ0:>=.obj)
|
||||
AMCOBJ0 = $(AMC:<=ntalmv\dp\)
|
||||
AMCOBJ = $(AMCOBJ0:>=.obj)
|
||||
LOOBJ0 = $(LO:<=ntalmv\dp\)
|
||||
|
|
@ -195,6 +220,8 @@ LINKFLAGS=$(LINKFLAGSCOMMON) $(LFDS)
|
|||
LIBFLAGS=$(LIBFLAGSCOMMON) $(LIBFLAGSDS)
|
||||
MPMOBJ0 = $(MPM:<=ntalmv\ds\)
|
||||
MPMOBJ = $(MPMOBJ0:>=.obj)
|
||||
SWOBJ0 = $(SW:<=ntalmv\ds\)
|
||||
SWOBJ = $(SWOBJ0:>=.obj)
|
||||
AMCOBJ0 = $(AMC:<=ntalmv\ds\)
|
||||
AMCOBJ = $(AMCOBJ0:>=.obj)
|
||||
LOOBJ0 = $(LO:<=ntalmv\ds\)
|
||||
|
|
@ -210,6 +237,8 @@ LINKFLAGS=$(LINKFLAGSCOMMON) $(LFRO)
|
|||
LIBFLAGS=$(LIBFLAGSCOMMON) $(LIBFLAGSRO)
|
||||
MPMOBJ0 = $(MPM:<=ntalmv\ro\)
|
||||
MPMOBJ = $(MPMOBJ0:>=.obj)
|
||||
SWOBJ0 = $(SW:<=ntalmv\ro\)
|
||||
SWOBJ = $(SWOBJ0:>=.obj)
|
||||
AMCOBJ0 = $(AMC:<=ntalmv\ro\)
|
||||
AMCOBJ = $(AMCOBJ0:>=.obj)
|
||||
LOOBJ0 = $(LO:<=ntalmv\ro\)
|
||||
|
|
@ -225,6 +254,8 @@ LINKFLAGS=$(LINKFLAGSCOMMON) $(LFCV)
|
|||
LIBFLAGS=$(LIBFLAGSCOMMON) $(LIBFLAGSCV)
|
||||
MPMOBJ0 = $(MPM:<=ntalmv\cv\)
|
||||
MPMOBJ = $(MPMOBJ0:>=.obj)
|
||||
SWOBJ0 = $(SW:<=ntalmv\cv\)
|
||||
SWOBJ = $(SWOBJ0:>=.obj)
|
||||
AMCOBJ0 = $(AMC:<=ntalmv\cv\)
|
||||
AMCOBJ = $(AMCOBJ0:>=.obj)
|
||||
LOOBJ0 = $(LO:<=ntalmv\cv\)
|
||||
|
|
@ -337,7 +368,7 @@ $(PFM)\$(VARIETY)\amc.lib: $(MPMOBJ) $(AMCOBJ)
|
|||
$(ECHO) $@
|
||||
$(LIBMAN) $(LIBFLAGS) /OUT:$@ $**
|
||||
|
||||
$(PFM)\$(VARIETY)\mmsw.lib: $(MPMOBJ) $(SWOBJ)
|
||||
$(PFM)\$(VARIETY)\mmsw.lib: $(SWOBJ)
|
||||
$(ECHO) $@
|
||||
$(LIBMAN) $(LIBFLAGS) /OUT:$@ $**
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# ==== NTI3MV NMAKE FILE ====
|
||||
#
|
||||
# $HopeName: MMsrc!nti3mv.nmk(trunk.22) $
|
||||
# $HopeName: MMsrc!nti3mv.nmk(trunk.23) $
|
||||
#
|
||||
# Copyright (C) 1995 Harlequin Group, all rights reserved
|
||||
#
|
||||
|
|
@ -12,6 +12,11 @@ MPM = <assert> <ring> <liban> <mpm> \
|
|||
<poolmv> <root> <format> <buffer> <locknt> \
|
||||
<ref> <trace> <protnt> <shield> \
|
||||
<thnti3> <ssnti3> <mpsi> <mpsint> <ld>
|
||||
SW = <assert> <ring> <liban> <mpm> \
|
||||
<arenavm> <vmrm> <space> <pool> <poolmfs> \
|
||||
<poolmv> <root> <format> <buffer> <locknt> \
|
||||
<ref> <trace> <protnt> <shield> \
|
||||
<thnti3> <ssnti3> <mpsi> <mpsint> <ld>
|
||||
AMC = <amc>
|
||||
LO = <lo>
|
||||
DW = <dw> <fmtdy>
|
||||
|
|
@ -21,7 +26,7 @@ TESTLIB = <testlib>
|
|||
|
||||
# ==== ALMOST GENERIC PRODUCT BUILD FOR NMAKE ====
|
||||
#
|
||||
# $HopeName: MMsrc!nti3mv.nmk(trunk.22) $
|
||||
# $HopeName: MMsrc!nti3mv.nmk(trunk.23) $
|
||||
#
|
||||
# Copyright (C) 1995 Harlequin Group, all rights reserved
|
||||
#
|
||||
|
|
@ -82,6 +87,9 @@ TESTLIB = <testlib>
|
|||
!IFNDEF DW
|
||||
!ERROR mv.nmk: DW not defined
|
||||
!ENDIF
|
||||
!IFNDEF SW
|
||||
!ERROR mv.nmk: SW not defined
|
||||
!ENDIF
|
||||
!IFNDEF TESTLIB
|
||||
!ERROR mv.nmk: TESTLIB not defined
|
||||
!ENDIF
|
||||
|
|
@ -104,7 +112,19 @@ ECHO = echo
|
|||
# All compilations
|
||||
# [Sadly /W4 causes <windows.h> to emit thousands of warnings]
|
||||
# /MT means compile for multi-threaded environment.
|
||||
CFLAGSCOMMON = /nologo /W3 /WX $(PFMDEFS) /MT
|
||||
# /ML means compile for single-threaded environment.
|
||||
# some C flags depend on the target we are building.
|
||||
|
||||
!ifdef TARGET
|
||||
!if "$(TARGET)" == "mmsw.lib"
|
||||
CFLAGSTARGET = /ML /DTARGET_VM_RM
|
||||
!else
|
||||
CFLAGSTARGET = /MT
|
||||
!endif
|
||||
!endif
|
||||
|
||||
CFLAGSCOMMON = /nologo /W3 /WX $(PFMDEFS) $(CFLAGSTARGET)
|
||||
|
||||
|
||||
# "debug" variety flags
|
||||
# [Used to use /Zi instead of /Z7. /Z7 generates debugging output in the
|
||||
|
|
@ -165,6 +185,8 @@ LINKFLAGS=$(LINKFLAGSCOMMON) $(LFDF)
|
|||
LIBFLAGS=$(LIBFLAGSCOMMON) $(LIBFLAGSDF)
|
||||
MPMOBJ0 = $(MPM:<=nti3mv\df\)
|
||||
MPMOBJ = $(MPMOBJ0:>=.obj)
|
||||
SWOBJ0 = $(SW:<=nti3mv\df\)
|
||||
SWOBJ = $(SWOBJ0:>=.obj)
|
||||
AMCOBJ0 = $(AMC:<=nti3mv\df\)
|
||||
AMCOBJ = $(AMCOBJ0:>=.obj)
|
||||
LOOBJ0 = $(LO:<=nti3mv\df\)
|
||||
|
|
@ -180,6 +202,8 @@ LINKFLAGS=$(LINKFLAGSCOMMON) $(LFDP)
|
|||
LIBFLAGS=$(LIBFLAGSCOMMON) $(LIBFLAGSDP)
|
||||
MPMOBJ0 = $(MPM:<=nti3mv\dp\)
|
||||
MPMOBJ = $(MPMOBJ0:>=.obj)
|
||||
SWOBJ0 = $(SW:<=nti3mv\dp\)
|
||||
SWOBJ = $(SWOBJ0:>=.obj)
|
||||
AMCOBJ0 = $(AMC:<=nti3mv\dp\)
|
||||
AMCOBJ = $(AMCOBJ0:>=.obj)
|
||||
LOOBJ0 = $(LO:<=nti3mv\dp\)
|
||||
|
|
@ -195,6 +219,8 @@ LINKFLAGS=$(LINKFLAGSCOMMON) $(LFDS)
|
|||
LIBFLAGS=$(LIBFLAGSCOMMON) $(LIBFLAGSDS)
|
||||
MPMOBJ0 = $(MPM:<=nti3mv\ds\)
|
||||
MPMOBJ = $(MPMOBJ0:>=.obj)
|
||||
SWOBJ0 = $(SW:<=nti3mv\ds\)
|
||||
SWOBJ = $(SWOBJ0:>=.obj)
|
||||
AMCOBJ0 = $(AMC:<=nti3mv\ds\)
|
||||
AMCOBJ = $(AMCOBJ0:>=.obj)
|
||||
LOOBJ0 = $(LO:<=nti3mv\ds\)
|
||||
|
|
@ -210,6 +236,8 @@ LINKFLAGS=$(LINKFLAGSCOMMON) $(LFRO)
|
|||
LIBFLAGS=$(LIBFLAGSCOMMON) $(LIBFLAGSRO)
|
||||
MPMOBJ0 = $(MPM:<=nti3mv\ro\)
|
||||
MPMOBJ = $(MPMOBJ0:>=.obj)
|
||||
SWOBJ0 = $(SW:<=nti3mv\ro\)
|
||||
SWOBJ = $(SWOBJ0:>=.obj)
|
||||
AMCOBJ0 = $(AMC:<=nti3mv\ro\)
|
||||
AMCOBJ = $(AMCOBJ0:>=.obj)
|
||||
LOOBJ0 = $(LO:<=nti3mv\ro\)
|
||||
|
|
@ -250,7 +278,7 @@ all: mpmss.exe amcss.exe dwstress.exe lockutnt.exe lockcov.exe \
|
|||
|
||||
dwstress.exe amcss.exe lockutnt.exe lockcov.exe \
|
||||
mpmss.exe protcv.exe mpsicv.exe poolncv.exe locv.exe qs.exe \
|
||||
mpm.lib mmdw.lib weakcv.exe:
|
||||
mpm.lib mmdw.lib mmsw.lib weakcv.exe:
|
||||
$(MAKE) /nologo /f $(PFM).nmk TARGET=$@ target
|
||||
|
||||
mpsicv.cov:
|
||||
|
|
@ -337,6 +365,10 @@ $(PFM)\$(VARIETY)\amc.lib: $(MPMOBJ) $(AMCOBJ)
|
|||
$(ECHO) $@
|
||||
$(LIBMAN) $(LIBFLAGS) /OUT:$@ $**
|
||||
|
||||
$(PFM)\$(VARIETY)\mmsw.lib: $(SWOBJ)
|
||||
$(ECHO) $@
|
||||
$(LIBMAN) $(LIBFLAGS) /OUT:$@ $**
|
||||
|
||||
$(PFM)\$(VARIETY)\mmdw.lib: $(MPMOBJ) $(AMCOBJ) $(DWOBJ)
|
||||
$(ECHO) $@
|
||||
$(LIBMAN) $(LIBFLAGS) /OUT:$@ $**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue