summaryrefslogtreecommitdiff
path: root/os/port/xalloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'os/port/xalloc.c')
-rw-r--r--os/port/xalloc.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/os/port/xalloc.c b/os/port/xalloc.c
index 73310089..286881c2 100644
--- a/os/port/xalloc.c
+++ b/os/port/xalloc.c
@@ -163,9 +163,14 @@ xmerge(void *vp, void *vq)
{
Xhdr *p, *q;
- p = vp;
- if((uchar*)vp+p->size == (uchar*)vq) {
- q = vq;
+ p = (Xhdr*)(((ulong)vp - offsetof(Xhdr, data[0])));
+ q = (Xhdr*)(((ulong)vq - offsetof(Xhdr, data[0])));
+ if(p->magix != Magichole || q->magix != Magichole) {
+ xsummary();
+ panic("xmerge(%#p, %#p) bad magic %#lux, %#lux\n",
+ vp, vq, p->magix, q->magix);
+ }
+ if((uchar*)p+p->size == (uchar*)q) {
p->size += q->size;
return 1;
}