aboutsummaryrefslogtreecommitdiffstats
path: root/mps/code
diff options
context:
space:
mode:
authorRichard Brooksby2012-09-13 19:21:49 +0100
committerRichard Brooksby2012-09-13 19:21:49 +0100
commitb069f646610fca7dc5f57ff8823b17e08cc7d89c (patch)
treea076e6a72a906e033458e1f20379fa0b99209023 /mps/code
parenta237ef8cfa69001e31ee29db31b1dbe338cfdf6d (diff)
parent041080b47fb05546125490b158633080369834b8 (diff)
downloademacs-b069f646610fca7dc5f57ff8823b17e08cc7d89c.tar.gz
emacs-b069f646610fca7dc5f57ff8823b17e08cc7d89c.zip
Merging recent improvements to master into version 1.110 prior to release.
Copied from Perforce Change: 179480 ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code')
-rw-r--r--mps/code/chain.h2
-rw-r--r--mps/code/commpost.nmk2
-rw-r--r--mps/code/format.c18
-rw-r--r--mps/code/mpm.h20
-rw-r--r--mps/code/mpmst.h24
-rw-r--r--mps/code/mpmtypes.h36
-rw-r--r--mps/code/mps.h4
-rw-r--r--mps/code/mpsi.c124
-rw-r--r--mps/code/protsgix.c2
-rw-r--r--mps/code/root.c12
-rw-r--r--mps/code/sc.h205
-rwxr-xr-xmps/code/ssw3i3mv.c16
-rwxr-xr-xmps/code/ssw3i6mv.c64
-rw-r--r--mps/code/table.c54
-rw-r--r--mps/code/than.c2
-rw-r--r--mps/code/thix.c2
-rw-r--r--mps/code/thw3.h2
-rw-r--r--mps/code/version.c2
-rwxr-xr-xmps/code/w3build.bat79
-rw-r--r--mps/code/w3i3mv.nmk2
-rw-r--r--mps/code/w3i6mv.nmk2
21 files changed, 412 insertions, 262 deletions
diff --git a/mps/code/chain.h b/mps/code/chain.h
index 785c25e2349..0d2be1de068 100644
--- a/mps/code/chain.h
+++ b/mps/code/chain.h
@@ -64,7 +64,7 @@ typedef struct PoolGenStruct {
64 64
65#define ChainSig ((Sig)0x519C8A14) /* SIGnature CHAIN */ 65#define ChainSig ((Sig)0x519C8A14) /* SIGnature CHAIN */
66 66
67typedef struct ChainStruct { 67typedef struct mps_chain_s {
68 Sig sig; 68 Sig sig;
69 Arena arena; 69 Arena arena;
70 RingStruct chainRing; /* list of chains in the arena */ 70 RingStruct chainRing; /* list of chains in the arena */
diff --git a/mps/code/commpost.nmk b/mps/code/commpost.nmk
index 483acb09710..15b77940b29 100644
--- a/mps/code/commpost.nmk
+++ b/mps/code/commpost.nmk
@@ -232,7 +232,7 @@ $(PFM)\$(VARIETY)\zmess.exe: $(PFM)\$(VARIETY)\zmess.obj \
232 $(TESTLIBOBJ) 232 $(TESTLIBOBJ)
233 233
234$(PFM)\$(VARIETY)\eventcnv.exe: $(PFM)\$(VARIETY)\eventcnv.obj \ 234$(PFM)\$(VARIETY)\eventcnv.exe: $(PFM)\$(VARIETY)\eventcnv.obj \
235 $(PFM)\$(VARIETY)\eventpro.obj $(MPMOBJ) $(PLINTHOBJ) 235 $(PFM)\$(VARIETY)\eventpro.obj $(PFM)\$(VARIETY)\mps.lib
236 236
237$(PFM)\$(VARIETY)\replay.exe: $(PFM)\$(VARIETY)\replay.obj \ 237$(PFM)\$(VARIETY)\replay.exe: $(PFM)\$(VARIETY)\replay.obj \
238 $(PFM)\$(VARIETY)\eventrep.obj \ 238 $(PFM)\$(VARIETY)\eventrep.obj \
diff --git a/mps/code/format.c b/mps/code/format.c
index 5155a740eb5..9867f562167 100644
--- a/mps/code/format.c
+++ b/mps/code/format.c
@@ -40,11 +40,11 @@ Bool FormatCheck(Format format)
40} 40}
41 41
42 42
43static Addr FormatDefaultClass(Addr object) 43static mps_addr_t FormatDefaultClass(mps_addr_t object)
44{ 44{
45 AVER(object != NULL); 45 AVER(object != NULL);
46 46
47 return ((Addr *)object)[0]; 47 return ((mps_addr_t *)object)[0];
48} 48}
49 49
50 50
@@ -53,13 +53,13 @@ static Addr FormatDefaultClass(Addr object)
53Res FormatCreate(Format *formatReturn, Arena arena, 53Res FormatCreate(Format *formatReturn, Arena arena,
54 Align alignment, 54 Align alignment,
55 FormatVariety variety, 55 FormatVariety variety,
56 FormatScanMethod scan, 56 mps_fmt_scan_t scan,
57 FormatSkipMethod skip, 57 mps_fmt_skip_t skip,
58 FormatMoveMethod move, 58 mps_fmt_fwd_t move,
59 FormatIsMovedMethod isMoved, 59 mps_fmt_isfwd_t isMoved,
60 FormatCopyMethod copy, 60 mps_fmt_copy_t copy,
61 FormatPadMethod pad, 61 mps_fmt_pad_t pad,
62 FormatClassMethod class, 62 mps_fmt_class_t class,
63 Size headerSize) 63 Size headerSize)
64{ 64{
65 Format format; 65 Format format;
diff --git a/mps/code/mpm.h b/mps/code/mpm.h
index 165c7485e37..049cbf65343 100644
--- a/mps/code/mpm.h
+++ b/mps/code/mpm.h
@@ -807,13 +807,13 @@ extern Bool FormatCheck(Format format);
807extern Res FormatCreate(Format *formatReturn, Arena arena, 807extern Res FormatCreate(Format *formatReturn, Arena arena,
808 Align alignment, 808 Align alignment,
809 FormatVariety variety, 809 FormatVariety variety,
810 FormatScanMethod scan, 810 mps_fmt_scan_t scan,
811 FormatSkipMethod skip, 811 mps_fmt_skip_t skip,
812 FormatMoveMethod move, 812 mps_fmt_fwd_t move,
813 FormatIsMovedMethod isMoved, 813 mps_fmt_isfwd_t isMoved,
814 FormatCopyMethod copy, 814 mps_fmt_copy_t copy,
815 FormatPadMethod pad, 815 mps_fmt_pad_t pad,
816 FormatClassMethod class, 816 mps_fmt_class_t class,
817 Size headerSize); 817 Size headerSize);
818extern void FormatDestroy(Format format); 818extern void FormatDestroy(Format format);
819extern Arena FormatArena(Format format); 819extern Arena FormatArena(Format format);
@@ -936,14 +936,14 @@ extern Res RootCreateTableMasked(Root *rootReturn, Arena arena,
936 Word mask); 936 Word mask);
937extern Res RootCreateReg(Root *rootReturn, Arena arena, 937extern Res RootCreateReg(Root *rootReturn, Arena arena,
938 Rank rank, Thread thread, 938 Rank rank, Thread thread,
939 RootScanRegMethod scan, 939 mps_reg_scan_t scan,
940 void *p, size_t s); 940 void *p, size_t s);
941extern Res RootCreateFmt(Root *rootReturn, Arena arena, 941extern Res RootCreateFmt(Root *rootReturn, Arena arena,
942 Rank rank, RootMode mode, 942 Rank rank, RootMode mode,
943 FormatScanMethod scan, 943 mps_fmt_scan_t scan,
944 Addr base, Addr limit); 944 Addr base, Addr limit);
945extern Res RootCreateFun(Root *rootReturn, Arena arena, 945extern Res RootCreateFun(Root *rootReturn, Arena arena,
946 Rank rank, RootScanMethod scan, 946 Rank rank, mps_root_scan_t scan,
947 void *p, size_t s); 947 void *p, size_t s);
948extern void RootDestroy(Root root); 948extern void RootDestroy(Root root);
949extern Bool RootModeCheck(RootMode mode); 949extern Bool RootModeCheck(RootMode mode);
diff --git a/mps/code/mpmst.h b/mps/code/mpmst.h
index 5c21c60a6a0..332d32084e1 100644
--- a/mps/code/mpmst.h
+++ b/mps/code/mpmst.h
@@ -46,7 +46,7 @@
46 46
47#define PoolClassSig ((Sig)0x519C7A55) /* SIGnature pool CLASS */ 47#define PoolClassSig ((Sig)0x519C7A55) /* SIGnature pool CLASS */
48 48
49typedef struct PoolClassStruct { 49typedef struct mps_class_s {
50 ProtocolClassStruct protocol; 50 ProtocolClassStruct protocol;
51 const char *name; /* class name string */ 51 const char *name; /* class name string */
52 size_t size; /* size of outer structure */ 52 size_t size; /* size of outer structure */
@@ -93,7 +93,7 @@ typedef struct PoolClassStruct {
93 93
94#define PoolSig ((Sig)0x519B0019) /* SIGnature POOL */ 94#define PoolSig ((Sig)0x519B0019) /* SIGnature POOL */
95 95
96typedef struct PoolStruct { /* generic structure */ 96typedef struct mps_pool_s { /* generic structure */
97 Sig sig; /* <design/sig/> */ 97 Sig sig; /* <design/sig/> */
98 Serial serial; /* from arena->poolSerial */ 98 Serial serial; /* from arena->poolSerial */
99 PoolClass class; /* pool class structure */ 99 PoolClass class; /* pool class structure */
@@ -218,7 +218,7 @@ typedef struct MessageClassStruct {
218 * 218 *
219 * See <design/message/#message.struct>. */ 219 * See <design/message/#message.struct>. */
220 220
221typedef struct MessageStruct { 221typedef struct mps_message_s {
222 Sig sig; /* <design/sig/> */ 222 Sig sig; /* <design/sig/> */
223 Arena arena; /* owning arena */ 223 Arena arena; /* owning arena */
224 MessageClass class; /* Message Class Structure */ 224 MessageClass class; /* Message Class Structure */
@@ -399,20 +399,20 @@ typedef struct SegBufStruct {
399 399
400#define FormatSig ((Sig)0x519F63A2) /* Signature FoRMAT */ 400#define FormatSig ((Sig)0x519F63A2) /* Signature FoRMAT */
401 401
402typedef struct FormatStruct { 402typedef struct mps_fmt_s {
403 Sig sig; 403 Sig sig;
404 Serial serial; /* from arena->formatSerial */ 404 Serial serial; /* from arena->formatSerial */
405 FormatVariety variety; /* format variety (e.g. A) */ 405 FormatVariety variety; /* format variety (e.g. A) */
406 Arena arena; /* owning arena */ 406 Arena arena; /* owning arena */
407 RingStruct arenaRing; /* formats are attached to the arena */ 407 RingStruct arenaRing; /* formats are attached to the arena */
408 Align alignment; /* alignment of formatted objects */ 408 Align alignment; /* alignment of formatted objects */
409 FormatScanMethod scan; 409 mps_fmt_scan_t scan;
410 FormatSkipMethod skip; 410 mps_fmt_skip_t skip;
411 FormatMoveMethod move; 411 mps_fmt_fwd_t move;
412 FormatIsMovedMethod isMoved; 412 mps_fmt_isfwd_t isMoved;
413 FormatCopyMethod copy; 413 mps_fmt_copy_t copy;
414 FormatPadMethod pad; 414 mps_fmt_pad_t pad;
415 FormatClassMethod class; /* pointer indicating class */ 415 mps_fmt_class_t class; /* pointer indicating class */
416 Size headerSize; /* size of header */ 416 Size headerSize; /* size of header */
417} FormatStruct; 417} FormatStruct;
418 418
@@ -530,7 +530,7 @@ typedef struct ChunkCacheEntryStruct {
530 530
531#define ArenaClassSig ((Sig)0x519A6C1A) /* SIGnature ARena CLAss */ 531#define ArenaClassSig ((Sig)0x519A6C1A) /* SIGnature ARena CLAss */
532 532
533typedef struct ArenaClassStruct { 533typedef struct mps_arena_class_s {
534 ProtocolClassStruct protocol; 534 ProtocolClassStruct protocol;
535 char *name; /* class name string */ 535 char *name; /* class name string */
536 size_t size; /* size of outer structure */ 536 size_t size; /* size of outer structure */
diff --git a/mps/code/mpmtypes.h b/mps/code/mpmtypes.h
index b1853178cbb..984790baf56 100644
--- a/mps/code/mpmtypes.h
+++ b/mps/code/mpmtypes.h
@@ -67,10 +67,10 @@ typedef BufferClass SegBufClass; /* <design/buffer/> */
67typedef BufferClass RankBufClass; /* <design/buffer/> */ 67typedef BufferClass RankBufClass; /* <design/buffer/> */
68typedef unsigned BufferMode; /* <design/buffer/> */ 68typedef unsigned BufferMode; /* <design/buffer/> */
69typedef unsigned FrameState; /* <design/alloc-frame/> */ 69typedef unsigned FrameState; /* <design/alloc-frame/> */
70typedef struct FormatStruct *Format; /* design.mps.format */ 70typedef struct mps_fmt_s *Format; /* design.mps.format */
71typedef struct LockStruct *Lock; /* <code/lock.c>* */ 71typedef struct LockStruct *Lock; /* <code/lock.c>* */
72typedef struct PoolStruct *Pool; /* <design/pool/> */ 72typedef struct mps_pool_s *Pool; /* <design/pool/> */
73typedef struct PoolClassStruct *PoolClass; /* <code/poolclas.c> */ 73typedef struct mps_class_s *PoolClass; /* <code/poolclas.c> */
74typedef PoolClass AbstractPoolClass; /* <code/poolabs.c> */ 74typedef PoolClass AbstractPoolClass; /* <code/poolabs.c> */
75typedef PoolClass AbstractAllocFreePoolClass; /* <code/poolabs.c> */ 75typedef PoolClass AbstractAllocFreePoolClass; /* <code/poolabs.c> */
76typedef PoolClass AbstractBufferPoolClass; /* <code/poolabs.c> */ 76typedef PoolClass AbstractBufferPoolClass; /* <code/poolabs.c> */
@@ -79,7 +79,7 @@ typedef PoolClass AbstractScanPoolClass; /* <code/poolabs.c> */
79typedef PoolClass AbstractCollectPoolClass; /* <code/poolabs.c> */ 79typedef PoolClass AbstractCollectPoolClass; /* <code/poolabs.c> */
80typedef struct TraceStruct *Trace; /* <design/trace/> */ 80typedef struct TraceStruct *Trace; /* <design/trace/> */
81typedef struct ScanStateStruct *ScanState; /* <design/trace/> */ 81typedef struct ScanStateStruct *ScanState; /* <design/trace/> */
82typedef struct ChainStruct *Chain; /* <design/trace/> */ 82typedef struct mps_chain_s *Chain; /* <design/trace/> */
83typedef struct TractStruct *Tract; /* <design/arena/> */ 83typedef struct TractStruct *Tract; /* <design/arena/> */
84typedef struct ChunkStruct *Chunk; /* <code/tract.c> */ 84typedef struct ChunkStruct *Chunk; /* <code/tract.c> */
85typedef struct ChunkCacheEntryStruct *ChunkCacheEntry; /* <code/tract.c> */ 85typedef struct ChunkCacheEntryStruct *ChunkCacheEntry; /* <code/tract.c> */
@@ -90,19 +90,20 @@ typedef struct SegClassStruct *SegClass; /* <code/seg.c> */
90typedef SegClass GCSegClass; /* <code/seg.c> */ 90typedef SegClass GCSegClass; /* <code/seg.c> */
91typedef struct SegPrefStruct *SegPref; /* design.mps.pref, <code/locus.c> */ 91typedef struct SegPrefStruct *SegPref; /* design.mps.pref, <code/locus.c> */
92typedef int SegPrefKind; /* design.mps.pref, <code/locus.c> */ 92typedef int SegPrefKind; /* design.mps.pref, <code/locus.c> */
93typedef struct ArenaClassStruct *ArenaClass; /* <design/arena/> */ 93typedef struct mps_arena_class_s *ArenaClass; /* <design/arena/> */
94typedef ArenaClass AbstractArenaClass; /* <code/arena.c> */ 94typedef ArenaClass AbstractArenaClass; /* <code/arena.c> */
95typedef struct mps_arena_s *Arena; /* <design/arena/> */ 95typedef struct mps_arena_s *Arena; /* <design/arena/> */
96typedef struct GlobalsStruct *Globals; /* <design/arena/> */ 96typedef struct GlobalsStruct *Globals; /* <design/arena/> */
97typedef struct VMStruct *VM; /* <code/vm.c>* */ 97typedef struct VMStruct *VM; /* <code/vm.c>* */
98typedef struct RootStruct *Root; /* <code/root.c> */ 98typedef struct RootStruct *Root; /* <code/root.c> */
99typedef struct ThreadStruct *Thread; /* <code/th.c>* */ 99typedef struct mps_thr_s *Thread; /* <code/th.c>* */
100typedef struct MutatorFaultContextStruct 100typedef struct MutatorFaultContextStruct
101 *MutatorFaultContext; /* <design/prot/> */ 101 *MutatorFaultContext; /* <design/prot/> */
102typedef struct PoolDebugMixinStruct *PoolDebugMixin; 102typedef struct PoolDebugMixinStruct *PoolDebugMixin;
103typedef struct AllocPatternStruct *AllocPattern; 103typedef struct AllocPatternStruct *AllocPattern;
104typedef struct AllocFrameStruct *AllocFrame; /* <design/alloc-frame/> */ 104typedef struct AllocFrameStruct *AllocFrame; /* <design/alloc-frame/> */
105typedef struct ReservoirStruct *Reservoir; /* <design/reservoir/> */ 105typedef struct ReservoirStruct *Reservoir; /* <design/reservoir/> */
106typedef struct StackContextStruct *StackContext;
106 107
107 108
108/* Arena*Method -- see <code/mpmst.h#ArenaClassStruct> */ 109/* Arena*Method -- see <code/mpmst.h#ArenaClassStruct> */
@@ -223,7 +224,7 @@ typedef PoolDebugMixin (*PoolDebugMixinMethod)(Pool pool);
223 */ 224 */
224 225
225typedef unsigned MessageType; 226typedef unsigned MessageType;
226typedef struct MessageStruct *Message; 227typedef struct mps_message_s *Message;
227typedef struct MessageClassStruct *MessageClass; 228typedef struct MessageClassStruct *MessageClass;
228 229
229/* Message*Method -- <design/message/> */ 230/* Message*Method -- <design/message/> */
@@ -242,27 +243,6 @@ typedef struct TraceStartMessageStruct *TraceStartMessage;
242typedef struct TraceMessageStruct *TraceMessage; /* trace end */ 243typedef struct TraceMessageStruct *TraceMessage; /* trace end */
243 244
244 245
245/* Format*Method -- see design.mps.format-interface */
246/* .fmt-methods: These methods must match those defined in the */
247/* MPS C Interface. (See <code/mps.h#fmt-methods>.) */
248
249typedef Res (*FormatScanMethod)(mps_ss_t ss, Addr base, Addr limit);
250typedef Addr (*FormatSkipMethod)(Addr object);
251typedef void (*FormatMoveMethod)(Addr object, Addr to);
252typedef Addr (*FormatIsMovedMethod)(Addr object);
253typedef void (*FormatCopyMethod)(Addr object, Addr to);
254typedef void (*FormatPadMethod)(Addr base, Size size);
255typedef Addr (*FormatClassMethod)(Addr object);
256
257
258/* Root*Method -- see design.mps.root-interface */
259/* .root-methods: These methods must match those defined in the */
260/* MPS C Interface. (See <code/mps.h#root-methods>.) */
261
262typedef Res (*RootScanMethod)(mps_ss_t ss, void *p, size_t s);
263typedef Res (*RootScanRegMethod)(mps_ss_t ss, Thread thread, void *p, size_t s);
264
265
266/* CONSTANTS */ 246/* CONSTANTS */
267 247
268 248
diff --git a/mps/code/mps.h b/mps/code/mps.h
index 469639b6c6d..6d0edbb75d2 100644
--- a/mps/code/mps.h
+++ b/mps/code/mps.h
@@ -178,8 +178,8 @@ typedef struct mps_ld_s { /* location dependency descriptor */
178 178
179 179
180/* Format and Root Method Types */ 180/* Format and Root Method Types */
181/* .fmt-methods: Keep in sync with <code/mpmtypes.h#fmt-methods> */ 181/* see design.mps.root-interface */
182/* .root-methods: Keep in sync with <code/mpmtypes.h#root-methods> */ 182/* see design.mps.format-interface */
183 183
184typedef mps_res_t (*mps_root_scan_t)(mps_ss_t, void *, size_t); 184typedef mps_res_t (*mps_root_scan_t)(mps_ss_t, void *, size_t);
185typedef mps_res_t (*mps_fmt_scan_t)(mps_ss_t, mps_addr_t, mps_addr_t); 185typedef mps_res_t (*mps_fmt_scan_t)(mps_ss_t, mps_addr_t, mps_addr_t);
diff --git a/mps/code/mpsi.c b/mps/code/mpsi.c
index 240861f8dad..15bc692ee00 100644
--- a/mps/code/mpsi.c
+++ b/mps/code/mpsi.c
@@ -324,7 +324,7 @@ mps_res_t mps_arena_create(mps_arena_t *mps_arena_o,
324/* mps_arena_create_v -- create an arena object */ 324/* mps_arena_create_v -- create an arena object */
325 325
326mps_res_t mps_arena_create_v(mps_arena_t *mps_arena_o, 326mps_res_t mps_arena_create_v(mps_arena_t *mps_arena_o,
327 mps_arena_class_t mps_arena_class, va_list args) 327 mps_arena_class_t arena_class, va_list args)
328{ 328{
329 Arena arena; 329 Arena arena;
330 Res res; 330 Res res;
@@ -335,7 +335,7 @@ mps_res_t mps_arena_create_v(mps_arena_t *mps_arena_o,
335 335
336 AVER(mps_arena_o != NULL); 336 AVER(mps_arena_o != NULL);
337 337
338 res = ArenaCreateV(&arena, (ArenaClass)mps_arena_class, args); 338 res = ArenaCreateV(&arena, arena_class, args);
339 if (res != ResOK) 339 if (res != ResOK)
340 return res; 340 return res;
341 341
@@ -463,12 +463,12 @@ mps_res_t mps_fmt_create_A(mps_fmt_t *mps_fmt_o,
463 arena, 463 arena,
464 (Align)mps_fmt_A->align, 464 (Align)mps_fmt_A->align,
465 FormatVarietyA, 465 FormatVarietyA,
466 (FormatScanMethod)mps_fmt_A->scan, 466 mps_fmt_A->scan,
467 (FormatSkipMethod)mps_fmt_A->skip, 467 mps_fmt_A->skip,
468 (FormatMoveMethod)mps_fmt_A->fwd, 468 mps_fmt_A->fwd,
469 (FormatIsMovedMethod)mps_fmt_A->isfwd, 469 mps_fmt_A->isfwd,
470 (FormatCopyMethod)mps_fmt_A->copy, 470 mps_fmt_A->copy,
471 (FormatPadMethod)mps_fmt_A->pad, 471 mps_fmt_A->pad,
472 NULL, 472 NULL,
473 (Size)0); 473 (Size)0);
474 474
@@ -497,13 +497,13 @@ mps_res_t mps_fmt_create_B(mps_fmt_t *mps_fmt_o,
497 arena, 497 arena,
498 (Align)mps_fmt_B->align, 498 (Align)mps_fmt_B->align,
499 FormatVarietyB, 499 FormatVarietyB,
500 (FormatScanMethod)mps_fmt_B->scan, 500 mps_fmt_B->scan,
501 (FormatSkipMethod)mps_fmt_B->skip, 501 mps_fmt_B->skip,
502 (FormatMoveMethod)mps_fmt_B->fwd, 502 mps_fmt_B->fwd,
503 (FormatIsMovedMethod)mps_fmt_B->isfwd, 503 mps_fmt_B->isfwd,
504 (FormatCopyMethod)mps_fmt_B->copy, 504 mps_fmt_B->copy,
505 (FormatPadMethod)mps_fmt_B->pad, 505 mps_fmt_B->pad,
506 (FormatClassMethod)mps_fmt_B->mps_class, 506 mps_fmt_B->mps_class,
507 (Size)0); 507 (Size)0);
508 508
509 ArenaLeave(arena); 509 ArenaLeave(arena);
@@ -531,12 +531,12 @@ mps_res_t mps_fmt_create_auto_header(mps_fmt_t *mps_fmt_o,
531 arena, 531 arena,
532 (Align)mps_fmt->align, 532 (Align)mps_fmt->align,
533 FormatVarietyAutoHeader, 533 FormatVarietyAutoHeader,
534 (FormatScanMethod)mps_fmt->scan, 534 mps_fmt->scan,
535 (FormatSkipMethod)mps_fmt->skip, 535 mps_fmt->skip,
536 (FormatMoveMethod)mps_fmt->fwd, 536 mps_fmt->fwd,
537 (FormatIsMovedMethod)mps_fmt->isfwd, 537 mps_fmt->isfwd,
538 NULL, 538 NULL,
539 (FormatPadMethod)mps_fmt->pad, 539 mps_fmt->pad,
540 NULL, 540 NULL,
541 (Size)mps_fmt->mps_headerSize); 541 (Size)mps_fmt->mps_headerSize);
542 542
@@ -565,12 +565,12 @@ mps_res_t mps_fmt_create_fixed(mps_fmt_t *mps_fmt_o,
565 arena, 565 arena,
566 (Align)mps_fmt_fixed->align, 566 (Align)mps_fmt_fixed->align,
567 FormatVarietyFixed, 567 FormatVarietyFixed,
568 (FormatScanMethod)mps_fmt_fixed->scan, 568 mps_fmt_fixed->scan,
569 NULL, 569 NULL,
570 (FormatMoveMethod)mps_fmt_fixed->fwd, 570 mps_fmt_fixed->fwd,
571 (FormatIsMovedMethod)mps_fmt_fixed->isfwd, 571 mps_fmt_fixed->isfwd,
572 NULL, 572 NULL,
573 (FormatPadMethod)mps_fmt_fixed->pad, 573 mps_fmt_fixed->pad,
574 NULL, 574 NULL,
575 (Size)0); 575 (Size)0);
576 576
@@ -584,9 +584,8 @@ mps_res_t mps_fmt_create_fixed(mps_fmt_t *mps_fmt_o,
584 584
585/* mps_fmt_destroy -- destroy a format object */ 585/* mps_fmt_destroy -- destroy a format object */
586 586
587void mps_fmt_destroy(mps_fmt_t mps_fmt) 587void mps_fmt_destroy(mps_fmt_t format)
588{ 588{
589 Format format = (Format)mps_fmt;
590 Arena arena; 589 Arena arena;
591 590
592 AVER(TESTT(Format, format)); 591 AVER(TESTT(Format, format));
@@ -612,10 +611,9 @@ mps_res_t mps_pool_create(mps_pool_t *mps_pool_o, mps_arena_t arena,
612} 611}
613 612
614mps_res_t mps_pool_create_v(mps_pool_t *mps_pool_o, mps_arena_t arena, 613mps_res_t mps_pool_create_v(mps_pool_t *mps_pool_o, mps_arena_t arena,
615 mps_class_t mps_class, va_list args) 614 mps_class_t class, va_list args)
616{ 615{
617 Pool pool; 616 Pool pool;
618 PoolClass class = (PoolClass)mps_class;
619 Res res; 617 Res res;
620 618
621 ArenaEnter(arena); 619 ArenaEnter(arena);
@@ -633,9 +631,8 @@ mps_res_t mps_pool_create_v(mps_pool_t *mps_pool_o, mps_arena_t arena,
633 return res; 631 return res;
634} 632}
635 633
636void mps_pool_destroy(mps_pool_t mps_pool) 634void mps_pool_destroy(mps_pool_t pool)
637{ 635{
638 Pool pool = (Pool)mps_pool;
639 Arena arena; 636 Arena arena;
640 637
641 AVER(TESTT(Pool, pool)); 638 AVER(TESTT(Pool, pool));
@@ -649,9 +646,8 @@ void mps_pool_destroy(mps_pool_t mps_pool)
649} 646}
650 647
651 648
652mps_res_t mps_alloc(mps_addr_t *p_o, mps_pool_t mps_pool, size_t size, ...) 649mps_res_t mps_alloc(mps_addr_t *p_o, mps_pool_t pool, size_t size, ...)
653{ 650{
654 Pool pool = (Pool)mps_pool;
655 Arena arena; 651 Arena arena;
656 Addr p; 652 Addr p;
657 Res res; 653 Res res;
@@ -693,9 +689,8 @@ mps_res_t mps_alloc_v(mps_addr_t *p_o, mps_pool_t mps_pool, size_t size,
693} 689}
694 690
695 691
696void mps_free(mps_pool_t mps_pool, mps_addr_t p, size_t size) 692void mps_free(mps_pool_t pool, mps_addr_t p, size_t size)
697{ 693{
698 Pool pool = (Pool)mps_pool;
699 Arena arena; 694 Arena arena;
700 695
701 AVER(TESTT(Pool, pool)); 696 AVER(TESTT(Pool, pool));
@@ -716,9 +711,8 @@ void mps_free(mps_pool_t mps_pool, mps_addr_t p, size_t size)
716 711
717/* mps_ap_create -- create an allocation point */ 712/* mps_ap_create -- create an allocation point */
718 713
719mps_res_t mps_ap_create(mps_ap_t *mps_ap_o, mps_pool_t mps_pool, ...) 714mps_res_t mps_ap_create(mps_ap_t *mps_ap_o, mps_pool_t pool, ...)
720{ 715{
721 Pool pool = (Pool)mps_pool;
722 Arena arena; 716 Arena arena;
723 Buffer buf; 717 Buffer buf;
724 BufferClass bufclass; 718 BufferClass bufclass;
@@ -733,7 +727,7 @@ mps_res_t mps_ap_create(mps_ap_t *mps_ap_o, mps_pool_t mps_pool, ...)
733 727
734 AVERT(Pool, pool); 728 AVERT(Pool, pool);
735 729
736 va_start(args, mps_pool); 730 va_start(args, pool);
737 bufclass = PoolDefaultBufferClass(pool); 731 bufclass = PoolDefaultBufferClass(pool);
738 res = BufferCreateV(&buf, bufclass, pool, TRUE, args); 732 res = BufferCreateV(&buf, bufclass, pool, TRUE, args);
739 va_end(args); 733 va_end(args);
@@ -749,10 +743,9 @@ mps_res_t mps_ap_create(mps_ap_t *mps_ap_o, mps_pool_t mps_pool, ...)
749 743
750/* mps_ap_create_v -- create an allocation point, with varargs */ 744/* mps_ap_create_v -- create an allocation point, with varargs */
751 745
752mps_res_t mps_ap_create_v(mps_ap_t *mps_ap_o, mps_pool_t mps_pool, 746mps_res_t mps_ap_create_v(mps_ap_t *mps_ap_o, mps_pool_t pool,
753 va_list args) 747 va_list args)
754{ 748{
755 Pool pool = (Pool)mps_pool;
756 Arena arena; 749 Arena arena;
757 Buffer buf; 750 Buffer buf;
758 BufferClass bufclass; 751 BufferClass bufclass;
@@ -1043,12 +1036,10 @@ mps_bool_t mps_ap_trip(mps_ap_t mps_ap, mps_addr_t p, size_t size)
1043 1036
1044/* mps_sac_create -- create an SAC object */ 1037/* mps_sac_create -- create an SAC object */
1045 1038
1046mps_res_t mps_sac_create(mps_sac_t *mps_sac_o, mps_pool_t mps_pool, 1039mps_res_t mps_sac_create(mps_sac_t *mps_sac_o, mps_pool_t pool,
1047 size_t classes_count, mps_sac_classes_s *mps_classes) 1040 size_t classes_count, mps_sac_classes_s *classes)
1048{ 1041{
1049 Pool pool = (Pool)mps_pool;
1050 Arena arena; 1042 Arena arena;
1051 SACClasses classes;
1052 SAC sac; 1043 SAC sac;
1053 Res res; 1044 Res res;
1054 1045
@@ -1058,7 +1049,6 @@ mps_res_t mps_sac_create(mps_sac_t *mps_sac_o, mps_pool_t mps_pool,
1058 1049
1059 ArenaEnter(arena); 1050 ArenaEnter(arena);
1060 1051
1061 classes = (SACClasses)mps_classes;
1062 res = SACCreate(&sac, pool, (Count)classes_count, classes); 1052 res = SACCreate(&sac, pool, (Count)classes_count, classes);
1063 1053
1064 ArenaLeave(arena); 1054 ArenaLeave(arena);
@@ -1194,8 +1184,7 @@ mps_res_t mps_root_create(mps_root_t *mps_root_o, mps_arena_t arena,
1194 AVER(mps_rm == (mps_rm_t)0); 1184 AVER(mps_rm == (mps_rm_t)0);
1195 1185
1196 /* See .root-mode. */ 1186 /* See .root-mode. */
1197 res = RootCreateFun(&root, arena, rank, 1187 res = RootCreateFun(&root, arena, rank, mps_root_scan, p, s);
1198 (RootScanMethod)mps_root_scan, p, s);
1199 1188
1200 ArenaLeave(arena); 1189 ArenaLeave(arena);
1201 1190
@@ -1266,11 +1255,10 @@ mps_res_t mps_root_create_table_masked(mps_root_t *mps_root_o,
1266 1255
1267mps_res_t mps_root_create_fmt(mps_root_t *mps_root_o, mps_arena_t arena, 1256mps_res_t mps_root_create_fmt(mps_root_t *mps_root_o, mps_arena_t arena,
1268 mps_rank_t mps_rank, mps_rm_t mps_rm, 1257 mps_rank_t mps_rank, mps_rm_t mps_rm,
1269 mps_fmt_scan_t mps_fmt_scan, 1258 mps_fmt_scan_t scan,
1270 mps_addr_t base, mps_addr_t limit) 1259 mps_addr_t base, mps_addr_t limit)
1271{ 1260{
1272 Rank rank = (Rank)mps_rank; 1261 Rank rank = (Rank)mps_rank;
1273 FormatScanMethod scan = (FormatScanMethod)mps_fmt_scan;
1274 Root root; 1262 Root root;
1275 RootMode mode = (RootMode)mps_rm; 1263 RootMode mode = (RootMode)mps_rm;
1276 Res res; 1264 Res res;
@@ -1289,11 +1277,10 @@ mps_res_t mps_root_create_fmt(mps_root_t *mps_root_o, mps_arena_t arena,
1289 1277
1290mps_res_t mps_root_create_reg(mps_root_t *mps_root_o, mps_arena_t arena, 1278mps_res_t mps_root_create_reg(mps_root_t *mps_root_o, mps_arena_t arena,
1291 mps_rank_t mps_rank, mps_rm_t mps_rm, 1279 mps_rank_t mps_rank, mps_rm_t mps_rm,
1292 mps_thr_t mps_thr, mps_reg_scan_t mps_reg_scan, 1280 mps_thr_t thread, mps_reg_scan_t mps_reg_scan,
1293 void *reg_scan_p, size_t mps_size) 1281 void *reg_scan_p, size_t mps_size)
1294{ 1282{
1295 Rank rank = (Rank)mps_rank; 1283 Rank rank = (Rank)mps_rank;
1296 Thread thread = (Thread)mps_thr;
1297 Root root; 1284 Root root;
1298 Res res; 1285 Res res;
1299 1286
@@ -1308,8 +1295,7 @@ mps_res_t mps_root_create_reg(mps_root_t *mps_root_o, mps_arena_t arena,
1308 1295
1309 /* See .root-mode. */ 1296 /* See .root-mode. */
1310 res = RootCreateReg(&root, arena, rank, thread, 1297 res = RootCreateReg(&root, arena, rank, thread,
1311 (RootScanRegMethod)mps_reg_scan, 1298 mps_reg_scan, reg_scan_p, mps_size);
1312 reg_scan_p, mps_size);
1313 1299
1314 ArenaLeave(arena); 1300 ArenaLeave(arena);
1315 1301
@@ -1324,10 +1310,9 @@ mps_res_t mps_root_create_reg(mps_root_t *mps_root_o, mps_arena_t arena,
1324 * See .reg-scan. */ 1310 * See .reg-scan. */
1325 1311
1326mps_res_t mps_stack_scan_ambig(mps_ss_t mps_ss, 1312mps_res_t mps_stack_scan_ambig(mps_ss_t mps_ss,
1327 mps_thr_t mps_thr, void *p, size_t s) 1313 mps_thr_t thread, void *p, size_t s)
1328{ 1314{
1329 ScanState ss = PARENT(ScanStateStruct, ss_s, mps_ss); 1315 ScanState ss = PARENT(ScanStateStruct, ss_s, mps_ss);
1330 Thread thread = (Thread)mps_thr;
1331 UNUSED(s); 1316 UNUSED(s);
1332 return ThreadScan(ss, thread, p); 1317 return ThreadScan(ss, thread, p);
1333} 1318}
@@ -1379,9 +1364,8 @@ mps_res_t mps_thread_reg(mps_thr_t *mps_thr_o, mps_arena_t arena)
1379 return MPS_RES_OK; 1364 return MPS_RES_OK;
1380} 1365}
1381 1366
1382void mps_thread_dereg(mps_thr_t mps_thr) 1367void mps_thread_dereg(mps_thr_t thread)
1383{ 1368{
1384 Thread thread = (Thread)mps_thr;
1385 Arena arena; 1369 Arena arena;
1386 1370
1387 AVER(ThreadCheckSimple(thread)); 1371 AVER(ThreadCheckSimple(thread));
@@ -1564,10 +1548,8 @@ mps_bool_t mps_message_get(mps_message_t *mps_message_return,
1564} 1548}
1565 1549
1566void mps_message_discard(mps_arena_t arena, 1550void mps_message_discard(mps_arena_t arena,
1567 mps_message_t mps_message) 1551 mps_message_t message)
1568{ 1552{
1569 Message message = (Message)mps_message;
1570
1571 ArenaEnter(arena); 1553 ArenaEnter(arena);
1572 1554
1573 MessageDiscard(arena, message); 1555 MessageDiscard(arena, message);
@@ -1581,9 +1563,8 @@ void mps_message_discard(mps_arena_t arena,
1581/* -- All Message Types */ 1563/* -- All Message Types */
1582 1564
1583mps_message_type_t mps_message_type(mps_arena_t arena, 1565mps_message_type_t mps_message_type(mps_arena_t arena,
1584 mps_message_t mps_message) 1566 mps_message_t message)
1585{ 1567{
1586 Message message = (Message)mps_message;
1587 MessageType type; 1568 MessageType type;
1588 1569
1589 ArenaEnter(arena); 1570 ArenaEnter(arena);
@@ -1596,9 +1577,8 @@ mps_message_type_t mps_message_type(mps_arena_t arena,
1596} 1577}
1597 1578
1598mps_clock_t mps_message_clock(mps_arena_t arena, 1579mps_clock_t mps_message_clock(mps_arena_t arena,
1599 mps_message_t mps_message) 1580 mps_message_t message)
1600{ 1581{
1601 Message message = (Message)mps_message;
1602 Clock postedClock; 1582 Clock postedClock;
1603 1583
1604 ArenaEnter(arena); 1584 ArenaEnter(arena);
@@ -1615,9 +1595,8 @@ mps_clock_t mps_message_clock(mps_arena_t arena,
1615 1595
1616void mps_message_finalization_ref(mps_addr_t *mps_addr_return, 1596void mps_message_finalization_ref(mps_addr_t *mps_addr_return,
1617 mps_arena_t arena, 1597 mps_arena_t arena,
1618 mps_message_t mps_message) 1598 mps_message_t message)
1619{ 1599{
1620 Message message = (Message)mps_message;
1621 Ref ref; 1600 Ref ref;
1622 1601
1623 AVER(mps_addr_return != NULL); 1602 AVER(mps_addr_return != NULL);
@@ -1634,9 +1613,8 @@ void mps_message_finalization_ref(mps_addr_t *mps_addr_return,
1634/* -- mps_message_type_gc */ 1613/* -- mps_message_type_gc */
1635 1614
1636size_t mps_message_gc_live_size(mps_arena_t arena, 1615size_t mps_message_gc_live_size(mps_arena_t arena,
1637 mps_message_t mps_message) 1616 mps_message_t message)
1638{ 1617{
1639 Message message = (Message)mps_message;
1640 Size size; 1618 Size size;
1641 1619
1642 ArenaEnter(arena); 1620 ArenaEnter(arena);
@@ -1649,9 +1627,8 @@ size_t mps_message_gc_live_size(mps_arena_t arena,
1649} 1627}
1650 1628
1651size_t mps_message_gc_condemned_size(mps_arena_t arena, 1629size_t mps_message_gc_condemned_size(mps_arena_t arena,
1652 mps_message_t mps_message) 1630 mps_message_t message)
1653{ 1631{
1654 Message message = (Message)mps_message;
1655 Size size; 1632 Size size;
1656 1633
1657 ArenaEnter(arena); 1634 ArenaEnter(arena);
@@ -1664,9 +1641,8 @@ size_t mps_message_gc_condemned_size(mps_arena_t arena,
1664} 1641}
1665 1642
1666size_t mps_message_gc_not_condemned_size(mps_arena_t arena, 1643size_t mps_message_gc_not_condemned_size(mps_arena_t arena,
1667 mps_message_t mps_message) 1644 mps_message_t message)
1668{ 1645{
1669 Message message = (Message)mps_message;
1670 Size size; 1646 Size size;
1671 1647
1672 ArenaEnter(arena); 1648 ArenaEnter(arena);
@@ -1681,10 +1657,9 @@ size_t mps_message_gc_not_condemned_size(mps_arena_t arena,
1681/* -- mps_message_type_gc_start */ 1657/* -- mps_message_type_gc_start */
1682 1658
1683const char *mps_message_gc_start_why(mps_arena_t arena, 1659const char *mps_message_gc_start_why(mps_arena_t arena,
1684 mps_message_t mps_message) 1660 mps_message_t message)
1685{ 1661{
1686 const char *s; 1662 const char *s;
1687 Message message = (Message)mps_message;
1688 1663
1689 ArenaEnter(arena); 1664 ArenaEnter(arena);
1690 1665
@@ -1888,10 +1863,9 @@ mps_res_t mps_chain_create(mps_chain_t *chain_o, mps_arena_t arena,
1888 1863
1889/* mps_chain_destroy -- destroy a chain */ 1864/* mps_chain_destroy -- destroy a chain */
1890 1865
1891void mps_chain_destroy(mps_chain_t mps_chain) 1866void mps_chain_destroy(mps_chain_t chain)
1892{ 1867{
1893 Arena arena; 1868 Arena arena;
1894 Chain chain = (Chain)mps_chain;
1895 1869
1896 AVER(TESTT(Chain, chain)); 1870 AVER(TESTT(Chain, chain));
1897 arena = chain->arena; 1871 arena = chain->arena;
diff --git a/mps/code/protsgix.c b/mps/code/protsgix.c
index 9552d18eeca..39f19c90b4c 100644
--- a/mps/code/protsgix.c
+++ b/mps/code/protsgix.c
@@ -80,8 +80,6 @@ static void sigHandle(int sig, siginfo_t *info, void *context) /* .sigh.args */
80 struct sigaction sa; 80 struct sigaction sa;
81 81
82 UNUSED(context); 82 UNUSED(context);
83
84 UNUSED(context);
85 AVER(sig == PROT_SIGNAL); 83 AVER(sig == PROT_SIGNAL);
86 84
87 /* .sigh.context */ 85 /* .sigh.context */
diff --git a/mps/code/root.c b/mps/code/root.c
index 9ce385a124c..edb932f800a 100644
--- a/mps/code/root.c
+++ b/mps/code/root.c
@@ -33,7 +33,7 @@ typedef struct RootStruct {
33 RootVar var; /* union discriminator */ 33 RootVar var; /* union discriminator */
34 union RootUnion { 34 union RootUnion {
35 struct { 35 struct {
36 RootScanMethod scan; /* the function which does the scanning */ 36 mps_root_scan_t scan; /* the function which does the scanning */
37 void *p; /* environment for scan */ 37 void *p; /* environment for scan */
38 size_t s; /* environment for scan */ 38 size_t s; /* environment for scan */
39 } fun; 39 } fun;
@@ -47,13 +47,13 @@ typedef struct RootStruct {
47 Word mask; /* tag mask for scanning */ 47 Word mask; /* tag mask for scanning */
48 } tableMasked; 48 } tableMasked;
49 struct { 49 struct {
50 RootScanRegMethod scan; /* function for scanning registers */ 50 mps_reg_scan_t scan; /* function for scanning registers */
51 Thread thread; /* passed to scan */ 51 Thread thread; /* passed to scan */
52 void *p; /* passed to scan */ 52 void *p; /* passed to scan */
53 size_t s; /* passed to scan */ 53 size_t s; /* passed to scan */
54 } reg; 54 } reg;
55 struct { 55 struct {
56 FormatScanMethod scan; /* format-like scanner */ 56 mps_fmt_scan_t scan; /* format-like scanner */
57 Addr base, limit; /* passed to scan */ 57 Addr base, limit; /* passed to scan */
58 } fmt; 58 } fmt;
59 } the; 59 } the;
@@ -296,7 +296,7 @@ Res RootCreateTableMasked(Root *rootReturn, Arena arena,
296 296
297Res RootCreateReg(Root *rootReturn, Arena arena, 297Res RootCreateReg(Root *rootReturn, Arena arena,
298 Rank rank, Thread thread, 298 Rank rank, Thread thread,
299 RootScanRegMethod scan, void *p, size_t s) 299 mps_reg_scan_t scan, void *p, size_t s)
300{ 300{
301 union RootUnion theUnion; 301 union RootUnion theUnion;
302 302
@@ -315,7 +315,7 @@ Res RootCreateReg(Root *rootReturn, Arena arena,
315} 315}
316 316
317Res RootCreateFmt(Root *rootReturn, Arena arena, 317Res RootCreateFmt(Root *rootReturn, Arena arena,
318 Rank rank, RootMode mode, FormatScanMethod scan, 318 Rank rank, RootMode mode, mps_fmt_scan_t scan,
319 Addr base, Addr limit) 319 Addr base, Addr limit)
320{ 320{
321 union RootUnion theUnion; 321 union RootUnion theUnion;
@@ -336,7 +336,7 @@ Res RootCreateFmt(Root *rootReturn, Arena arena,
336} 336}
337 337
338Res RootCreateFun(Root *rootReturn, Arena arena, Rank rank, 338Res RootCreateFun(Root *rootReturn, Arena arena, Rank rank,
339 RootScanMethod scan, void *p, size_t s) 339 mps_root_scan_t scan, void *p, size_t s)
340{ 340{
341 union RootUnion theUnion; 341 union RootUnion theUnion;
342 342
diff --git a/mps/code/sc.h b/mps/code/sc.h
new file mode 100644
index 00000000000..765c4ccb033
--- /dev/null
+++ b/mps/code/sc.h
@@ -0,0 +1,205 @@
1/* sc.h: STACK CONTEXT
2 *
3 * $Id$
4 * Copyright (c) 2012 Ravenbrook Limited. See end of file for license.
5 *
6 * Provides a context to hold the registers and stack pointer
7 *
8 * This file provide wrappers for using setjmp or some similar mechanism
9 * to save the current callee-saves on the stack.
10 *
11 * See http://info.ravenbrook.com/mail/2012/08/03/14-36-35/0/ and the rest of
12 * the thread for the origin of the idea.
13 *
14 * TODO: Make StackScan take a StackContext
15 */
16
17#ifndef sc_h
18#define sc_h
19
20#include "mpm.h"
21
22
23/* StackContext -- holds the registers including a stack pointer
24 *
25 * This contains the callee-save registers and the stack pointer.
26 *
27 * This is used to save the registers after or on entry to the arena so that
28 * they can be scanned.
29 */
30
31/* STACK_CONTEXT_SAVE - save the callee-saves and stack pointer
32 *
33 * This macro saves the callee-saves and stack pointer for the
34 * current function into the passed StackContext. The StackContext
35 * is no longer valid after the function returns.
36 *
37 * This needs to be a macro because the compiler may need to do
38 * setjmp magic.
39 */
40
41/* StackContextStackTop - return the stack top from the stack context.
42 *
43 * We assume the stack is full. In other words the stack top points at
44 * a word that contains a potential Ref.
45 */
46
47
48/* Mac OS X on 32-bit Intel built with Clang or GCC */
49
50#if defined(MPS_PF_XCI3LL) || defined(MPS_PF_XCI3GC)
51
52#include <setjmp.h>
53
54typedef struct StackContextStruct {
55 jmp_buf jumpBuffer;
56} StackContextStruct;
57
58/* See the implementation of _setjmp in
59 * <http://www.opensource.apple.com/source/Libc/Libc-825.24/i386/sys/_setjmp.s> */
60
61#define JB_ESP 36 /* offset into the jmp_buf in bytes as defined in _setjmp.s */
62
63#define STACK_CONTEXT_SAVE(sc) ((void)_setjmp((sc)->jumpBuffer))
64
65#define StackContextSP(sc) ((Addr *)(sc)->jumpBuffer[JB_ESP/sizeof(int)])
66
67/* On MacOS X the stackPointer can end up pointing above the StackContext
68 * which we assume to be stored on the stack because it is no longer
69 * needed once we have _longjmp()ed back. So take the minimum of the
70 * SP and the base of the StackContext structure. */
71#define StackContextStackTop(sc) \
72 (StackContextSP(sc) < (Addr*)(sc) ? StackContextSP(sc) : (Addr*)(sc))
73
74
75/* Mac OS X on 64-bit Intel build with Clang or GCC */
76
77#elif defined(MPS_PF_XCI6LL) || defined(MPS_PF_XCI6GC)
78
79#include <setjmp.h>
80
81/* We could use getcontext() from libunwind but that produces
82 * deprecation warnings. See
83 * <http://stackoverflow.com/questions/3592914/how-can-i-implement-cooperative-lightweight-threading-with-c-on-mac-os-x>
84 */
85
86typedef struct StackContextStruct {
87 jmp_buf jumpBuffer;
88} StackContextStruct;
89
90/* See the implementation of _setjmp in
91 * <http://www.opensource.apple.com/source/Libc/Libc-825.24/x86_64/sys/_setjmp.s> */
92
93#define STACK_CONTEXT_SAVE(sc) ((void)_setjmp((sc)->jumpBuffer))
94
95#define JB_RSP 16 /* offset into the jmp_buf in bytes as defined in _setjmp.s */
96
97/* jmp_buf is an int[] but the stack pointer is 8 bytes so we need a cast */
98/* FIXME: possible aliasing problem */
99#define StackContextSP(sc) \
100 (*(Addr **)((char *)(sc)->jumpBuffer+JB_RSP))
101
102/* On MacOS X the stackPointer can end up pointing above the StackContext
103 * which we assume to be stored on the stack because it is no longer
104 * needed once we have _longjmp()ed back. So take the minimum of the
105 * SP and the base of the StackContext structure. */
106#define StackContextStackTop(sc) \
107 (StackContextSP(sc) < (Addr*)(sc) ? StackContextSP(sc) : (Addr*)(sc))
108
109
110/* Windows on 32-bit Intel with Microsoft Visual Studio */
111
112#elif defined(MPS_PF_W3I3MV)
113
114#include <setjmp.h>
115
116typedef struct StackContextStruct {
117 jmp_buf jumpBuffer;
118} StackContextStruct;
119
120#define STACK_CONTEXT_SAVE(sc) ((void)setjmp((sc)->jumpBuffer))
121
122#define StackContextStackTop(sc) \
123 ((Addr *)((_JUMP_BUFFER *)(sc)->jumpBuffer)->Esp)
124
125
126/* Windows on 64-bit Intel with Microsoft Visual Studio */
127
128#elif defined(MPS_PF_W3I6MV)
129
130#include <setjmp.h>
131
132typedef struct StackContextStruct {
133 jmp_buf jumpBuffer;
134} StackContextStruct;
135
136#define STACK_CONTEXT_SAVE(sc) ((void)setjmp((sc)->jumpBuffer))
137
138#define StackContextStackTop(sc) \
139 ((Addr *)((_JUMP_BUFFER *)(sc)->jumpBuffer)->Rsp)
140
141
142#else
143
144/* TODO: implement this on other platforms in a safer way.
145 * Potentially the callee saves from the calling function could be spilled
146 * underneath the jmp_buf so returning the address of the jmp_buf for the
147 * stack top is not completely safe.
148 */
149
150#include <setjmp.h>
151
152typedef struct StackContextStruct {
153 jmp_buf jumpBuffer;
154} StackContextStruct;
155
156#define STACK_CONTEXT_SAVE(sc) ((void)setjmp((sc)->jumpBuffer))
157
158#define StackContextStackTop(sc) ((Addr *)(sc)->jumpBuffer)
159
160
161#endif /* platform defines */
162
163#endif /* sc_h */
164
165
166/* C. COPYRIGHT AND LICENSE
167 *
168 * Copyright (C) 2001-2012 Ravenbrook Limited <http://www.ravenbrook.com/>.
169 * All rights reserved. This is an open source license. Contact
170 * Ravenbrook for commercial licensing options.
171 *
172 * Redistribution and use in source and binary forms, with or without
173 * modification, are permitted provided that the following conditions are
174 * met:
175 *
176 * 1. Redistributions of source code must retain the above copyright
177 * notice, this list of conditions and the following disclaimer.
178 *
179 * 2. Redistributions in binary form must reproduce the above copyright
180 * notice, this list of conditions and the following disclaimer in the
181 * documentation and/or other materials provided with the distribution.
182 *
183 * 3. Redistributions in any form must be accompanied by information on how
184 * to obtain complete source code for this software and any accompanying
185 * software that uses this software. The source code must either be
186 * included in the distribution or be available for no more than the cost
187 * of distribution plus a nominal fee, and must be freely redistributable
188 * under reasonable conditions. For an executable file, complete source
189 * code means the source code for all modules it contains. It does not
190 * include source code for modules or files that typically accompany the
191 * major components of the operating system on which the executable file
192 * runs.
193 *
194 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
195 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
196 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
197 * PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE
198 * COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
199 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
200 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
201 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
202 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
203 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
204 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
205 */
diff --git a/mps/code/ssw3i3mv.c b/mps/code/ssw3i3mv.c
index d33bc378e46..aac035a5966 100755
--- a/mps/code/ssw3i3mv.c
+++ b/mps/code/ssw3i3mv.c
@@ -1,4 +1,4 @@
1/* ssw3i3.c: WIN32/INTEL STACK SCANNING 1/* ssw3i3mv.c: STACK SCANNING FOR WIN32 WITH MICROSOFT C
2 * 2 *
3 * $Id$ 3 * $Id$
4 * Copyright (c) 2001 Ravenbrook Limited. See end of file for license. 4 * Copyright (c) 2001 Ravenbrook Limited. See end of file for license.
@@ -6,20 +6,20 @@
6 * This scans the stack and fixes the registers which may contain 6 * This scans the stack and fixes the registers which may contain
7 * roots. See <design/thread-manager/>. 7 * roots. See <design/thread-manager/>.
8 * 8 *
9 * The registers edi, esi, ebx are the registers defined to be preserved 9 * REFERENCES
10 * across function calls and therefore may contain roots.
11 * These are pushed on the stack for scanning.
12 * 10 *
13 * ASSUMPTIONS 11 * "Argument Passing and Naming Conventions"; MSDN; Microsoft Corporation;
12 * <http://msdn.microsoft.com/en-us/library/984x0h58%28v=vs.100%29.aspx>.
14 * 13 *
15 * .align: The stack pointer is assumed to be aligned on a word 14 * "Calling conventions for different C++ compilers and operating systems";
16 * boundary. 15 * Agner Fog; Copenhagen University College of Engineering; 2012-02-29;
16 * <http://agner.org./optimize/calling_conventions.pdf>.
17 */ 17 */
18 18
19 19
20#include "mpm.h" 20#include "mpm.h"
21 21
22SRCID(ssw3i3, "$Id$"); 22SRCID(ssw3i3mv, "$Id$");
23 23
24 24
25Res StackScan(ScanState ss, Addr *stackBot) 25Res StackScan(ScanState ss, Addr *stackBot)
diff --git a/mps/code/ssw3i6mv.c b/mps/code/ssw3i6mv.c
index d3e1dd85f46..807577a89a2 100755
--- a/mps/code/ssw3i6mv.c
+++ b/mps/code/ssw3i6mv.c
@@ -1,16 +1,33 @@
1/* ssw3mv.c: STACK SCANNING FOR WIN32 WITH MICROSOFT C 1/* ssw3i6mv.c: STACK SCANNING FOR WIN32 WITH MICROSOFT C
2 * 2 *
3 * $Id$ 3 * $Id$
4 * Copyright (c) 2001 Ravenbrook Limited. See end of file for license. 4 * Copyright (c) 2001 Ravenbrook Limited. See end of file for license.
5 * 5 *
6 * This scans the stack and fixes the registers which may contain roots. 6 * This scans the stack and fixes the registers which may contain roots.
7 * See <design/thread-manager/>. 7 * See <design/thread-manager/>. It's unlikely that the callee-save
8 * registers contain mutator roots by the time this function is called, but
9 * we can't be certain, so we must scan them anyway.
10 *
11 * REFERENCES
12 *
13 * "Overview of x64 Calling Conventions"; MSDN; Microsoft Corporation;
14 * <http://msdn.microsoft.com/en-us/library/ms235286%28v=vs.100%29.aspx>.
15 *
16 * "Caller/Callee Saved Registers"; MSDN; Microsoft Corporation;
17 * <http://msdn.microsoft.com/en-us/library/6t169e9c%28v=vs.100%29.aspx>.
18 *
19 * "Register Usage"; MSDN; Microsoft Corporation;
20 * <http://msdn.microsoft.com/en-us/library/9z1stfyw%28v=vs.100%29.aspx>.
21 *
22 * "Calling conventions for different C++ compilers and operating systems";
23 * Agner Fog; Copenhagen University College of Engineering; 2012-02-29;
24 * <http://agner.org./optimize/calling_conventions.pdf>.
8 */ 25 */
9 26
10#include "mpm.h" 27#include "mpm.h"
11#include <setjmp.h> 28#include <setjmp.h>
12 29
13SRCID(ssw3mv, "$Id$"); 30SRCID(ssw3i6mv, "$Id$");
14 31
15 32
16Res StackScan(ScanState ss, Addr *stackBot) 33Res StackScan(ScanState ss, Addr *stackBot)
@@ -44,3 +61,44 @@ Res StackScan(ScanState ss, Addr *stackBot)
44 61
45 return StackScanInner(ss, stackBot, (Addr *)&((_JUMP_BUFFER *)jb)->Rbx, 9); 62 return StackScanInner(ss, stackBot, (Addr *)&((_JUMP_BUFFER *)jb)->Rbx, 9);
46} 63}
64
65/* C. COPYRIGHT AND LICENSE
66 *
67 * Copyright (C) 2001-2002 Ravenbrook Limited <http://www.ravenbrook.com/>.
68 * All rights reserved. This is an open source license. Contact
69 * Ravenbrook for commercial licensing options.
70 *
71 * Redistribution and use in source and binary forms, with or without
72 * modification, are permitted provided that the following conditions are
73 * met:
74 *
75 * 1. Redistributions of source code must retain the above copyright
76 * notice, this list of conditions and the following disclaimer.
77 *
78 * 2. Redistributions in binary form must reproduce the above copyright
79 * notice, this list of conditions and the following disclaimer in the
80 * documentation and/or other materials provided with the distribution.
81 *
82 * 3. Redistributions in any form must be accompanied by information on how
83 * to obtain complete source code for this software and any accompanying
84 * software that uses this software. The source code must either be
85 * included in the distribution or be available for no more than the cost
86 * of distribution plus a nominal fee, and must be freely redistributable
87 * under reasonable conditions. For an executable file, complete source
88 * code means the source code for all modules it contains. It does not
89 * include source code for modules or files that typically accompany the
90 * major components of the operating system on which the executable file
91 * runs.
92 *
93 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
94 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
95 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
96 * PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE
97 * COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
98 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
99 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
100 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
101 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
102 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
103 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
104 */
diff --git a/mps/code/table.c b/mps/code/table.c
index 7e6b1ec7149..3e5cc0c14ae 100644
--- a/mps/code/table.c
+++ b/mps/code/table.c
@@ -16,7 +16,7 @@
16SRCID(table, "$Id$"); 16SRCID(table, "$Id$");
17 17
18 18
19/* TableHash -- return a hash value from an address 19/* tableHash -- return a hash value from an address
20 * 20 *
21 * This uses a single cycle of an MLCG, more commonly seen as a 21 * This uses a single cycle of an MLCG, more commonly seen as a
22 * pseudorandom number generator. It works extremely well as a 22 * pseudorandom number generator. It works extremely well as a
@@ -36,10 +36,16 @@ SRCID(table, "$Id$");
36 * Of course it's only a 31-bit cycle, so we start by losing the top 36 * Of course it's only a 31-bit cycle, so we start by losing the top
37 * bit of the address, but that's hardly a great problem. 37 * bit of the address, but that's hardly a great problem.
38 * 38 *
39 * See `rnd` in testlib.c for more technical details.
40 *
39 * The implementation is quite subtle. See rnd() in testlib.c, where 41 * The implementation is quite subtle. See rnd() in testlib.c, where
40 * it has been exhaustively (ie: totally) tested. RHSK 2010-12-28. 42 * it has been exhaustively (ie: totally) tested. RHSK 2010-12-28.
41 * 43 *
42 * TODO: Check how this works out on 64-bit. RB 2012-09-04 44 * NOTE: According to NB, still a fine function for producing a 31-bit hash
45 * value, although of course it only hashes on the lower 31 bits of the
46 * key; we could cheaply make it choose a different 31 bits if we'd prefer
47 * (e.g. ((key >> 2) & 0x7FFFFFFF)), or combine more of the key bits (e.g.
48 * ((key ^ (key >> 31)) & 0x7fffffff)).
43 */ 49 */
44 50
45#define R_m 2147483647UL 51#define R_m 2147483647UL
@@ -47,16 +53,16 @@ SRCID(table, "$Id$");
47 53
48typedef Word Hash; 54typedef Word Hash;
49 55
50static Hash TableHash(Word key) 56static Hash tableHash(Word key)
51{ 57{
52 Hash seed = (Hash)(key & 0x7FFFFFFF); 58 Hash hash = (Hash)(key & 0x7FFFFFFF);
53 /* requires m == 2^31-1, a < 2^16 */ 59 /* requires m == 2^31-1, a < 2^16 */
54 Hash bot = R_a * (seed & 0x7FFF); 60 Hash bot = R_a * (hash & 0x7FFF);
55 Hash top = R_a * (seed >> 15); 61 Hash top = R_a * (hash >> 15);
56 seed = bot + ((top & 0xFFFF) << 15) + (top >> 16); 62 hash = bot + ((top & 0xFFFF) << 15) + (top >> 16);
57 if(seed > R_m) 63 if(hash > R_m)
58 seed -= R_m; 64 hash -= R_m;
59 return seed; 65 return hash;
60} 66}
61 67
62 68
@@ -80,14 +86,14 @@ static Bool entryIsActive(Table table, TableEntry entry)
80} 86}
81 87
82 88
83/* TableFind -- finds the entry for this key, or NULL 89/* tableFind -- finds the entry for this key, or NULL
84 * 90 *
85 * .worst: In the worst case, this looks at every slot before giving up, 91 * .worst: In the worst case, this looks at every slot before giving up,
86 * but that's what you have to do in a closed hash table, to make sure 92 * but that's what you have to do in a closed hash table, to make sure
87 * that all the items still fit in after growing the table. 93 * that all the items still fit in after growing the table.
88 */ 94 */
89 95
90static TableEntry TableFind(Table table, Word key, Bool skip_deleted) 96static TableEntry tableFind(Table table, Word key, Bool skip_deleted)
91{ 97{
92 Hash hash; 98 Hash hash;
93 Index i; 99 Index i;
@@ -98,7 +104,7 @@ static TableEntry TableFind(Table table, Word key, Bool skip_deleted)
98 AVER(WordIsP2(table->length)); /* .find.visit */ 104 AVER(WordIsP2(table->length)); /* .find.visit */
99 105
100 mask = table->length - 1; 106 mask = table->length - 1;
101 hash = TableHash(key) & mask; 107 hash = tableHash(key) & mask;
102 i = hash; 108 i = hash;
103 do { 109 do {
104 Word k = table->array[i].key; 110 Word k = table->array[i].key;
@@ -191,7 +197,7 @@ Res TableGrow(Table table, Count extraCapacity)
191 for(i = 0; i < oldLength; ++i) { 197 for(i = 0; i < oldLength; ++i) {
192 if (entryIsActive(table, &oldArray[i])) { 198 if (entryIsActive(table, &oldArray[i])) {
193 TableEntry entry; 199 TableEntry entry;
194 entry = TableFind(table, oldArray[i].key, FALSE /* none deleted */); 200 entry = tableFind(table, oldArray[i].key, FALSE /* none deleted */);
195 AVER(entry != NULL); 201 AVER(entry != NULL);
196 AVER(entry->key == table->unusedKey); 202 AVER(entry->key == table->unusedKey);
197 entry->key = oldArray[i].key; 203 entry->key = oldArray[i].key;
@@ -275,7 +281,7 @@ extern void TableDestroy(Table table)
275 281
276extern Bool TableLookup(void **valueReturn, Table table, Word key) 282extern Bool TableLookup(void **valueReturn, Table table, Word key)
277{ 283{
278 TableEntry entry = TableFind(table, key, TRUE /* skip deleted */); 284 TableEntry entry = tableFind(table, key, TRUE /* skip deleted */);
279 285
280 if(entry == NULL || !entryIsActive(table, entry)) 286 if(entry == NULL || !entryIsActive(table, entry))
281 return FALSE; 287 return FALSE;
@@ -296,16 +302,16 @@ extern Res TableDefine(Table table, Word key, void *value)
296 if (table->count >= table->length * SPACEFRACTION) { 302 if (table->count >= table->length * SPACEFRACTION) {
297 Res res = TableGrow(table, 1); 303 Res res = TableGrow(table, 1);
298 if(res != ResOK) return res; 304 if(res != ResOK) return res;
299 entry = TableFind(table, key, FALSE /* no deletions yet */); 305 entry = tableFind(table, key, FALSE /* no deletions yet */);
300 AVER(entry != NULL); 306 AVER(entry != NULL);
301 if (entryIsActive(table, entry)) 307 if (entryIsActive(table, entry))
302 return ResFAIL; 308 return ResFAIL;
303 } else { 309 } else {
304 entry = TableFind(table, key, TRUE /* skip deleted */); 310 entry = tableFind(table, key, TRUE /* skip deleted */);
305 if (entry != NULL && entryIsActive(table, entry)) 311 if (entry != NULL && entryIsActive(table, entry))
306 return ResFAIL; 312 return ResFAIL;
307 /* Search again to find the best slot, deletions included. */ 313 /* Search again to find the best slot, deletions included. */
308 entry = TableFind(table, key, FALSE /* don't skip deleted */); 314 entry = tableFind(table, key, FALSE /* don't skip deleted */);
309 AVER(entry != NULL); 315 AVER(entry != NULL);
310 } 316 }
311 317
@@ -321,8 +327,12 @@ extern Res TableDefine(Table table, Word key, void *value)
321 327
322extern Res TableRedefine(Table table, Word key, void *value) 328extern Res TableRedefine(Table table, Word key, void *value)
323{ 329{
324 TableEntry entry = TableFind(table, key, TRUE /* skip deletions */); 330 TableEntry entry;
325 331
332 AVER(key != table->unusedKey);
333 AVER(key != table->deletedKey);
334
335 entry = tableFind(table, key, TRUE /* skip deletions */);
326 if (entry == NULL || !entryIsActive(table, entry)) 336 if (entry == NULL || !entryIsActive(table, entry))
327 return ResFAIL; 337 return ResFAIL;
328 AVER(entry->key == key); 338 AVER(entry->key == key);
@@ -335,8 +345,12 @@ extern Res TableRedefine(Table table, Word key, void *value)
335 345
336extern Res TableRemove(Table table, Word key) 346extern Res TableRemove(Table table, Word key)
337{ 347{
338 TableEntry entry = TableFind(table, key, TRUE); 348 TableEntry entry;
349
350 AVER(key != table->unusedKey);
351 AVER(key != table->deletedKey);
339 352
353 entry = tableFind(table, key, TRUE);
340 if (entry == NULL || !entryIsActive(table, entry)) 354 if (entry == NULL || !entryIsActive(table, entry))
341 return ResFAIL; 355 return ResFAIL;
342 entry->key = table->deletedKey; 356 entry->key = table->deletedKey;
diff --git a/mps/code/than.c b/mps/code/than.c
index 96553c7cd75..752ef3ed64c 100644
--- a/mps/code/than.c
+++ b/mps/code/than.c
@@ -17,7 +17,7 @@
17SRCID(than, "$Id$"); 17SRCID(than, "$Id$");
18 18
19 19
20typedef struct ThreadStruct { /* ANSI fake thread structure */ 20typedef struct mps_thr_s { /* ANSI fake thread structure */
21 Sig sig; /* <design/sig/> */ 21 Sig sig; /* <design/sig/> */
22 Serial serial; /* from arena->threadSerial */ 22 Serial serial; /* from arena->threadSerial */
23 Arena arena; /* owning arena */ 23 Arena arena; /* owning arena */
diff --git a/mps/code/thix.c b/mps/code/thix.c
index 5089f33f56e..b792cd96783 100644
--- a/mps/code/thix.c
+++ b/mps/code/thix.c
@@ -43,7 +43,7 @@ SRCID(thix, "$Id$");
43 43
44/* ThreadStruct -- thread desriptor */ 44/* ThreadStruct -- thread desriptor */
45 45
46typedef struct ThreadStruct { /* PThreads thread structure */ 46typedef struct mps_thr_s { /* PThreads thread structure */
47 Sig sig; /* <design/sig/> */ 47 Sig sig; /* <design/sig/> */
48 Serial serial; /* from arena->threadSerial */ 48 Serial serial; /* from arena->threadSerial */
49 Arena arena; /* owning arena */ 49 Arena arena; /* owning arena */
diff --git a/mps/code/thw3.h b/mps/code/thw3.h
index b3e67cb319d..7e3cd68e2f1 100644
--- a/mps/code/thw3.h
+++ b/mps/code/thw3.h
@@ -21,7 +21,7 @@
21 21
22#include "mpswin.h" 22#include "mpswin.h"
23 23
24typedef struct ThreadStruct { /* Win32 thread structure */ 24typedef struct mps_thr_s { /* Win32 thread structure */
25 Sig sig; /* <design/sig/> */ 25 Sig sig; /* <design/sig/> */
26 Serial serial; /* from arena->threadSerial */ 26 Serial serial; /* from arena->threadSerial */
27 Arena arena; /* owning arena */ 27 Arena arena; /* owning arena */
diff --git a/mps/code/version.c b/mps/code/version.c
index 08b562ce09f..03e7b78334e 100644
--- a/mps/code/version.c
+++ b/mps/code/version.c
@@ -29,7 +29,7 @@ SRCID(version, "$Id$");
29 * (Note: before 2006-02-01 the style was "release.epcore.chub") 29 * (Note: before 2006-02-01 the style was "release.epcore.chub")
30 */ 30 */
31 31
32#define MPS_RELEASE "release/1.109.0" 32#define MPS_RELEASE "release/1.110.0"
33 33
34 34
35/* MPSCopyrightNotice -- copyright notice for the binary 35/* MPSCopyrightNotice -- copyright notice for the binary
diff --git a/mps/code/w3build.bat b/mps/code/w3build.bat
deleted file mode 100755
index ae84606bff6..00000000000
--- a/mps/code/w3build.bat
+++ /dev/null
@@ -1,79 +0,0 @@
1@rem impl.bat.gathconf: GATHERING A RELEASE FOR CONFIGURA
2@rem
3@rem $HopeName: !gathconf.bat(trunk.1) $
4@rem $Id$
5@rem Copyright (C) 2000 Harlequin Limited. All rights reserved.
6@rem Copyright (C) 2005-2010 Ravenbrook Limited. All rights reserved.
7
8
9@set mpsreleasename=rel-1_109_0
10
11
12rmdir /q/s w3i3mv
13nmake /f w3i3mv.nmk VARIETY=we mps.lib mpsplan.lib mpsplcb.lib mpsdy.dll
14nmake /f w3i3mv.nmk VARIETY=hi mps.lib mpsplan.lib mpsplcb.lib mpsdy.dll
15nmake /f w3i3mv.nmk VARIETY=di mps.lib mpsplan.lib mpsplcb.lib mpsdy.dll
16nmake /f w3i3mv.nmk VARIETY=ci mps.lib mpsplan.lib mpsplcb.lib mpsdy.dll
17
18rmdir /q/s %mpsreleasename%
19mkdir %mpsreleasename%
20
21mkdir %mpsreleasename%\include
22copy mps.h %mpsreleasename%\include
23copy mpstr.h %mpsreleasename%\include
24copy mpsavm.h %mpsreleasename%\include
25copy mpsacl.h %mpsreleasename%\include
26copy mpscamc.h %mpsreleasename%\include
27copy mpscams.h %mpsreleasename%\include
28copy mpscawl.h %mpsreleasename%\include
29copy mpsclo.h %mpsreleasename%\include
30copy mpscmv.h %mpsreleasename%\include
31copy mpscmvff.h %mpsreleasename%\include
32copy mpscsnc.h %mpsreleasename%\include
33copy mpsio.h %mpsreleasename%\include
34copy mpslib.h %mpsreleasename%\include
35copy mpslibcb.h %mpsreleasename%\include
36copy mpstd.h %mpsreleasename%\include
37copy mpsw3.h %mpsreleasename%\include
38copy mpswin.h %mpsreleasename%\include
39
40mkdir %mpsreleasename%\lib
41copy w3gen.def %mpsreleasename%\lib\mps-fns.def
42
43mkdir %mpsreleasename%\lib\w3i3
44
45mkdir %mpsreleasename%\lib\w3i3\we
46@echo we-%mpsreleasename% > %mpsreleasename%\lib\w3i3\we\we-%mpsreleasename%.txt
47copy w3i3mv\we\mps.lib %mpsreleasename%\lib\w3i3\we
48copy w3i3mv\we\mpsplan.lib %mpsreleasename%\lib\w3i3\we
49copy w3i3mv\we\mpsplcb.lib %mpsreleasename%\lib\w3i3\we
50copy w3i3mv\we\mpsdy.dll %mpsreleasename%\lib\w3i3\we
51copy w3i3mv\we\mpsdy.lib %mpsreleasename%\lib\w3i3\we
52
53mkdir %mpsreleasename%\lib\w3i3\hi
54@echo hi-%mpsreleasename% > %mpsreleasename%\lib\w3i3\hi\hi-%mpsreleasename%.txt
55copy w3i3mv\hi\mps.lib %mpsreleasename%\lib\w3i3\hi
56copy w3i3mv\hi\mpsplan.lib %mpsreleasename%\lib\w3i3\hi
57copy w3i3mv\hi\mpsplcb.lib %mpsreleasename%\lib\w3i3\hi
58copy w3i3mv\hi\mpsdy.dll %mpsreleasename%\lib\w3i3\hi
59copy w3i3mv\hi\mpsdy.lib %mpsreleasename%\lib\w3i3\hi
60
61mkdir %mpsreleasename%\lib\w3i3\di
62@echo di-%mpsreleasename% > %mpsreleasename%\lib\w3i3\di\di-%mpsreleasename%.txt
63copy w3i3mv\di\mps.lib %mpsreleasename%\lib\w3i3\di
64copy w3i3mv\di\mpsplan.lib %mpsreleasename%\lib\w3i3\di
65copy w3i3mv\di\mpsplcb.lib %mpsreleasename%\lib\w3i3\di
66copy w3i3mv\di\mpsdy.dll %mpsreleasename%\lib\w3i3\di
67copy w3i3mv\di\mpsdy.lib %mpsreleasename%\lib\w3i3\di
68
69mkdir %mpsreleasename%\lib\w3i3\ci
70@echo ci-%mpsreleasename% > %mpsreleasename%\lib\w3i3\ci\ci-%mpsreleasename%.txt
71copy w3i3mv\ci\mps.lib %mpsreleasename%\lib\w3i3\ci
72copy w3i3mv\ci\mpsplan.lib %mpsreleasename%\lib\w3i3\ci
73copy w3i3mv\ci\mpsplcb.lib %mpsreleasename%\lib\w3i3\ci
74copy w3i3mv\ci\mpsdy.dll %mpsreleasename%\lib\w3i3\ci
75copy w3i3mv\ci\mpsdy.lib %mpsreleasename%\lib\w3i3\ci
76
77mkdir %mpsreleasename%\src
78copy mpsliban.c %mpsreleasename%\src
79copy mpsioan.c %mpsreleasename%\src
diff --git a/mps/code/w3i3mv.nmk b/mps/code/w3i3mv.nmk
index 37d440235e8..ebe971e1626 100644
--- a/mps/code/w3i3mv.nmk
+++ b/mps/code/w3i3mv.nmk
@@ -19,7 +19,7 @@ MPM = <ring> <mpm> <bt> <protocol> <boot> \
19 <shield> <vmw3> <table> \ 19 <shield> <vmw3> <table> \
20 <thw3> <thw3i3> <ss> <ssw3i3mv> <mpsi> <mpsiw3> <ld> <spi3> \ 20 <thw3> <thw3i3> <ss> <ssw3i3mv> <mpsi> <mpsiw3> <ld> <spi3> \
21 <event> <seg> <sac> <poolmrg> <message> <dbgpool> <dbgpooli> \ 21 <event> <seg> <sac> <poolmrg> <message> <dbgpool> <dbgpooli> \
22 <abq> <meter> <cbs> <poolmv2> <splay> <diag> <version> 22 <abq> <meter> <cbs> <poolmv2> <splay> <diag>
23PLINTH = <mpsliban> <mpsioan> 23PLINTH = <mpsliban> <mpsioan>
24AMC = <poolamc> 24AMC = <poolamc>
25AMS = <poolams> <poolamsi> 25AMS = <poolams> <poolamsi>
diff --git a/mps/code/w3i6mv.nmk b/mps/code/w3i6mv.nmk
index 23fc63ef66d..729509f05dc 100644
--- a/mps/code/w3i6mv.nmk
+++ b/mps/code/w3i6mv.nmk
@@ -20,7 +20,7 @@ MPM = <ring> <mpm> <bt> <protocol> <boot> \
20 <shield> <vmw3> <table> \ 20 <shield> <vmw3> <table> \
21 <thw3> <thw3i6> <ss> <ssw3i6mv> <mpsi> <mpsiw3> <ld> <span> \ 21 <thw3> <thw3i6> <ss> <ssw3i6mv> <mpsi> <mpsiw3> <ld> <span> \
22 <event> <seg> <sac> <poolmrg> <message> <dbgpool> <dbgpooli> \ 22 <event> <seg> <sac> <poolmrg> <message> <dbgpool> <dbgpooli> \
23 <abq> <meter> <cbs> <poolmv2> <splay> <diag> <version> 23 <abq> <meter> <cbs> <poolmv2> <splay> <diag>
24PLINTH = <mpsliban> <mpsioan> 24PLINTH = <mpsliban> <mpsioan>
25AMC = <poolamc> 25AMC = <poolamc>
26AMS = <poolams> <poolamsi> 26AMS = <poolams> <poolamsi>