diff --git a/mps/code/comm.gmk b/mps/code/comm.gmk
index 1d0da403bf6..1714cf46d5a 100644
--- a/mps/code/comm.gmk
+++ b/mps/code/comm.gmk
@@ -251,6 +251,7 @@ FMTDYOBJ = $(FMTDY:%.c=$(PFM)/$(VARIETY)/%.o)
FMTDYDEP = $(FMTDY:%.c=$(PFM)/$(VARIETY)/%.d)
FMTDYTSTOBJ = $(FMTDYTST:%.c=$(PFM)/$(VARIETY)/%.o)
FMTHETSTOBJ = $(FMTHETST:%.c=$(PFM)/$(VARIETY)/%.o)
+FMTHETSTDEP = $(FMTHETST:%.c=$(PFM)/$(VARIETY)/%.d)
PLINTHOBJ = $(PLINTH:%.c=$(PFM)/$(VARIETY)/%.o)
PLINTHDEP = $(PLINTH:%.c=$(PFM)/$(VARIETY)/%.d)
EVENTPROCOBJ = $(EVENTPROC:%.c=$(PFM)/$(VARIETY)/%.o)
@@ -505,7 +506,7 @@ ifdef VARIETY
ifdef TARGET
# %%PART: Add the dependency file macro for the new part here.
include $(MPMDEP) $(AMSDEP) $(AMCDEP) $(LODEP) $(SWDEP) \
- $(AWLDEP) $(POOLNDEP) $(TESTLIBDEP) $(FMTDYDEP) \
+ $(AWLDEP) $(POOLNDEP) $(TESTLIBDEP) $(FMTDYDEP) $(FMTHETSTDEP) \
$(PLINTHDEP) $(EVENTPROCDEP)
endif
endif
diff --git a/mps/code/fmthe.c b/mps/code/fmthe.c
index bf37111e7a5..2e291b52553 100644
--- a/mps/code/fmthe.c
+++ b/mps/code/fmthe.c
@@ -36,6 +36,7 @@ static mps_res_t dylan_header_scan(mps_ss_t mps_ss,
int header = *(int*)((char*)p - headerSIZE);
switch(headerType(header)) {
case realTYPE:
+ assert(header == realHeader);
break;
case padTYPE:
p = (mps_addr_t)((char*)p + headerPadSize(header));
@@ -66,6 +67,7 @@ static mps_res_t dylan_header_scan_weak(mps_ss_t mps_ss,
header = *(int*)((char*)base - headerSIZE);
switch(headerType(header)) {
case realTYPE:
+ assert(header == realHeader);
break;
case padTYPE:
base = (mps_addr_t)((char*)base + headerPadSize(header));
@@ -92,6 +94,7 @@ static mps_addr_t dylan_header_skip(mps_addr_t object)
header = *(int*)((char*)object - headerSIZE);
switch(headerType(header)) {
case realTYPE:
+ assert(header == realHeader);
break;
case padTYPE:
return (mps_addr_t)((char*)object + headerPadSize(header));
@@ -114,6 +117,8 @@ static mps_addr_t dylan_header_isfwd(mps_addr_t object)
if (headerType(header) != realTYPE)
return NULL;
+ assert(header == realHeader);
+
return dylan_format->isfwd(object);
}
@@ -199,18 +204,18 @@ mps_res_t HeaderWeakFormatCheck(mps_addr_t addr)
* Copyright (C) 2001-2002 Ravenbrook Limited .
* All rights reserved. This is an open source license. Contact
* Ravenbrook for commercial licensing options.
- *
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- *
+ *
* 3. Redistributions in any form must be accompanied by information on how
* to obtain complete source code for this software and any accompanying
* software that uses this software. The source code must either be
@@ -221,7 +226,7 @@ mps_res_t HeaderWeakFormatCheck(mps_addr_t addr)
* include source code for modules or files that typically accompany the
* major components of the operating system on which the executable file
* runs.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
diff --git a/mps/code/fmthe.h b/mps/code/fmthe.h
index 5033a9a1bf3..391ead0ef55 100644
--- a/mps/code/fmthe.h
+++ b/mps/code/fmthe.h
@@ -17,10 +17,10 @@ extern mps_res_t HeaderFormatCheck(mps_addr_t addr);
extern mps_res_t HeaderWeakFormatCheck(mps_addr_t addr);
#define headerSIZE (32)
-#define headerTypeBits 1
-#define realTYPE 0
-#define realHeader realTYPE
-#define padTYPE 1
+#define headerTypeBits 8
+#define realTYPE 0x33
+#define realHeader (realTYPE + 0x12345600)
+#define padTYPE 0xaa
#define headerType(header) ((header) & ((1 << headerTypeBits) - 1))
#define headerPadSize(header) ((header) >> headerTypeBits)
#define padHeader(size) ((size << headerTypeBits) | padTYPE)
@@ -33,18 +33,18 @@ extern mps_res_t HeaderWeakFormatCheck(mps_addr_t addr);
* Copyright (C) 2001-2002 Ravenbrook Limited .
* All rights reserved. This is an open source license. Contact
* Ravenbrook for commercial licensing options.
- *
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- *
+ *
* 3. Redistributions in any form must be accompanied by information on how
* to obtain complete source code for this software and any accompanying
* software that uses this software. The source code must either be
@@ -55,7 +55,7 @@ extern mps_res_t HeaderWeakFormatCheck(mps_addr_t addr);
* include source code for modules or files that typically accompany the
* major components of the operating system on which the executable file
* runs.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR