on sparc64, secalloc needs to return 8 byte aligned pointer, so we allocate two ulongs instead of one and use the first one for the magic constant 0x5ECA110C.
Unified · Split
| @@ -16,19 +16,25 @@ malloc(ulong n) · 15 unmodified lines | ||
| 16 | 16 | return mallocz(n, 1); |
| 17 | 17 | } |
| 18 | 18 | |
| 19 | +enum { | |
| 20 | + SECMAGIC = 0x5ECA110C, | |
| 21 | +}; | |
| 22 | + | |
| 19 | 23 | void* |
| 20 | 24 | secalloc(ulong n) |
| 21 | 25 | { |
| 22 | − void *p = mallocz(n+sizeof(ulong), 1); | |
| 23 | − *(ulong*)p = n; | |
| 24 | − return (ulong*)p+1; | |
| 26 | + void *p = mallocz(n+sizeof(ulong)*2, 1); | |
| 27 | + ((ulong*)p)[0] = SECMAGIC; | |
| 28 | + ((ulong*)p)[1] = n; | |
| 29 | + return (ulong*)p+2; | |
| 25 | 30 | } |
| 26 | 31 | |
| 27 | 32 | void |
| 28 | 33 | secfree(void *p) |
| 29 | 34 | { |
| 30 | 35 | if(p != nil){ |
| 36 | + assert(((ulong*)p)[-2] == SECMAGIC); | |
| 31 | 37 | memset(p, 0, ((ulong*)p)[-1]); |
| 32 | − free((ulong*)p-1); | |
| 38 | + free((ulong*)p-2); | |
| 33 | 39 | } |
| 34 | 40 | } |