diff options
author | Ori Bernstein <ori@eigenstate.org> | 2020-03-09 08:02:22 -0700 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2020-03-09 08:02:22 -0700 |
commit | 698837e7150af19ff6a3f0bf2144dffc81202a55 (patch) | |
tree | c974d22046f6b89e62750ef0ab555cafd8e10691 | |
parent | 446e454c5a19d1ce2e8da699686159b3a31e8bc7 (diff) |
fix alignment in ape malloc
We used to have a padding int in the structure
after the next pointer, to align it to 16 bytes.
On 64 bit architectures, the pointer was already
8 bits, so the padding misaligned things to 20
bytes.
This fixes it so that we're explcit about the
data alignment we want, instead of hoping that
the various sizes line up.
-rw-r--r-- | sys/src/ape/lib/ap/plan9/malloc.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/sys/src/ape/lib/ap/plan9/malloc.c b/sys/src/ape/lib/ap/plan9/malloc.c index 2bfa176fc..4f828a033 100644 --- a/sys/src/ape/lib/ap/plan9/malloc.c +++ b/sys/src/ape/lib/ap/plan9/malloc.c @@ -11,13 +11,22 @@ enum CUTOFF = 12, }; +#define NPAD(t, align) \ + ((sizeof(t) + align - 1) & ~(align - 1)) typedef struct Bucket Bucket; -struct Bucket -{ +typedef struct Header Header; +struct Header { int size; int magic; Bucket *next; - int pad; +}; + +struct Bucket +{ + union { + Header; + char _pad[NPAD(Header, 16)]; + }; char data[1]; }; |