From bea7f0cc7c9cdd883340c80697abc0be028bf944 Mon Sep 17 00:00:00 2001 From: Valery Ushakov Date: Thu, 19 Dec 2019 14:01:01 +0300 Subject: Properly ensure 16-byte alignment on NetBSD. --- emu/port/alloc.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'emu') diff --git a/emu/port/alloc.c b/emu/port/alloc.c index 8b623de0..3cb45552 100644 --- a/emu/port/alloc.c +++ b/emu/port/alloc.c @@ -75,11 +75,7 @@ enum { /* tracing */ enum { -#ifdef __NetBSD__ - Npadlong = 4, /* XXX: preserve 16-byte alignment */ -#else Npadlong = 2, -#endif MallocOffset = 0, ReallocOffset = 1 }; @@ -383,9 +379,22 @@ dopoolalloc(Pool *p, ulong asize, ulong pc) unlock(&p->l); return nil; } +#ifdef __NetBSD__ + /* Align allocations to 16 bytes */ + { + const size_t off = __builtin_offsetof(struct Bhdr, u.data) + + Npadlong*sizeof(ulong); + struct assert_align { + unsigned int align_ok : (off % 8 == 0) ? 1 : -1; + }; + + const ulong align = (off - 1) % 16; + t = (Bhdr *)(((ulong)t + align) & ~align); + } +#else /* Double alignment */ t = (Bhdr *)(((ulong)t + 7) & ~7); - +#endif if(p->chain != nil && (char*)t-(char*)B2LIMIT(p->chain)-ldr == 0){ /* can merge chains */ if(0)print("merging chains %p and %p in %s\n", p->chain, t, p->name); -- cgit v1.2.3 From 3e420305d50f67d3ee641e8f6e1632b6aa9a717c Mon Sep 17 00:00:00 2001 From: Valery Ushakov Date: Thu, 19 Dec 2019 14:02:31 +0300 Subject: G/c misguided NetBSD/powerpc kludge. The problem was the alignment bug (alloc.c) that I thought I had fixed, but did't. Now that that bug is fixed properly drop the bogus kludge I left here while investigating the problem. --- emu/port/kproc-pthreads.c | 6 ------ 1 file changed, 6 deletions(-) (limited to 'emu') diff --git a/emu/port/kproc-pthreads.c b/emu/port/kproc-pthreads.c index c6caded6..a15a7cd3 100644 --- a/emu/port/kproc-pthreads.c +++ b/emu/port/kproc-pthreads.c @@ -122,12 +122,6 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) panic("kproc: no memory"); os->self = 0; /* set by tramp */ sem_init(&os->sem, 0, 0); -#if defined(__NetBSD__) && defined(__powerpc__) - { /* XXX: Work around a problem on macppc with kernel semaphores. */ - int val; - sem_getvalue(&os->sem, &val); - } -#endif p->os = os; if(flags & KPDUPPG) { -- cgit v1.2.3