malloc: change malloc and realloc tag types to uintptr

This commit is contained in:
cinap_lenrek 2014-01-20 00:09:53 +01:00
parent 43ae553195
commit b99ecee6cd
3 changed files with 47 additions and 47 deletions

View file

@ -97,10 +97,10 @@ extern ulong msize(void*);
extern void* mallocalign(ulong, ulong, long, ulong); extern void* mallocalign(ulong, ulong, long, ulong);
extern void* calloc(ulong, ulong); extern void* calloc(ulong, ulong);
extern void* realloc(void*, ulong); extern void* realloc(void*, ulong);
extern void setmalloctag(void*, ulong); extern void setmalloctag(void*, uintptr);
extern void setrealloctag(void*, ulong); extern void setrealloctag(void*, uintptr);
extern ulong getmalloctag(void*); extern uintptr getmalloctag(void*);
extern ulong getrealloctag(void*); extern uintptr getrealloctag(void*);
extern void* malloctopoolblock(void*); extern void* malloctopoolblock(void*);
/* /*

View file

@ -135,7 +135,7 @@ mallocsummary(void)
/* - except the code for smalloc(), which lives only in the kernel. */ /* - except the code for smalloc(), which lives only in the kernel. */
/* /*
* Npadlong is the number of 32-bit longs to leave at the beginning of * Npadlong is the number of uintptr's to leave at the beginning of
* each allocated buffer for our own bookkeeping. We return to the callers * each allocated buffer for our own bookkeeping. We return to the callers
* a pointer that points immediately after our bookkeeping area. Incoming pointers * a pointer that points immediately after our bookkeeping area. Incoming pointers
* must be decremented by that much, and outgoing pointers incremented. * must be decremented by that much, and outgoing pointers incremented.
@ -171,7 +171,7 @@ smalloc(ulong size)
void *v; void *v;
for(;;) { for(;;) {
v = poolalloc(mainmem, size+Npadlong*sizeof(ulong)); v = poolalloc(mainmem, size+Npadlong*sizeof(uintptr));
if(v != nil) if(v != nil)
break; break;
if(!waserror()){ if(!waserror()){
@ -180,7 +180,7 @@ smalloc(ulong size)
} }
} }
if(Npadlong){ if(Npadlong){
v = (ulong*)v+Npadlong; v = (uintptr*)v+Npadlong;
setmalloctag(v, getcallerpc(&size)); setmalloctag(v, getcallerpc(&size));
} }
memset(v, 0, size); memset(v, 0, size);
@ -192,11 +192,11 @@ malloc(ulong size)
{ {
void *v; void *v;
v = poolalloc(mainmem, size+Npadlong*sizeof(ulong)); v = poolalloc(mainmem, size+Npadlong*sizeof(uintptr));
if(v == nil) if(v == nil)
return nil; return nil;
if(Npadlong){ if(Npadlong){
v = (ulong*)v+Npadlong; v = (uintptr*)v+Npadlong;
setmalloctag(v, getcallerpc(&size)); setmalloctag(v, getcallerpc(&size));
setrealloctag(v, 0); setrealloctag(v, 0);
} }
@ -209,9 +209,9 @@ mallocz(ulong size, int clr)
{ {
void *v; void *v;
v = poolalloc(mainmem, size+Npadlong*sizeof(ulong)); v = poolalloc(mainmem, size+Npadlong*sizeof(uintptr));
if(Npadlong && v != nil){ if(Npadlong && v != nil){
v = (ulong*)v+Npadlong; v = (uintptr*)v+Npadlong;
setmalloctag(v, getcallerpc(&size)); setmalloctag(v, getcallerpc(&size));
setrealloctag(v, 0); setrealloctag(v, 0);
} }
@ -225,9 +225,9 @@ mallocalign(ulong size, ulong align, long offset, ulong span)
{ {
void *v; void *v;
v = poolallocalign(mainmem, size+Npadlong*sizeof(ulong), align, offset-Npadlong*sizeof(ulong), span); v = poolallocalign(mainmem, size+Npadlong*sizeof(uintptr), align, offset-Npadlong*sizeof(uintptr), span);
if(Npadlong && v != nil){ if(Npadlong && v != nil){
v = (ulong*)v+Npadlong; v = (uintptr*)v+Npadlong;
setmalloctag(v, getcallerpc(&size)); setmalloctag(v, getcallerpc(&size));
setrealloctag(v, 0); setrealloctag(v, 0);
} }
@ -240,7 +240,7 @@ void
free(void *v) free(void *v)
{ {
if(v != nil) if(v != nil)
poolfree(mainmem, (ulong*)v-Npadlong); poolfree(mainmem, (uintptr*)v-Npadlong);
} }
void* void*
@ -249,12 +249,12 @@ realloc(void *v, ulong size)
void *nv; void *nv;
if(v != nil) if(v != nil)
v = (ulong*)v-Npadlong; v = (uintptr*)v-Npadlong;
if(Npadlong !=0 && size != 0) if(Npadlong !=0 && size != 0)
size += Npadlong*sizeof(ulong); size += Npadlong*sizeof(uintptr);
if(nv = poolrealloc(mainmem, v, size)){ if(nv = poolrealloc(mainmem, v, size)){
nv = (ulong*)nv+Npadlong; nv = (uintptr*)nv+Npadlong;
setrealloctag(nv, getcallerpc(&v)); setrealloctag(nv, getcallerpc(&v));
if(v == nil) if(v == nil)
setmalloctag(nv, getcallerpc(&v)); setmalloctag(nv, getcallerpc(&v));
@ -265,7 +265,7 @@ realloc(void *v, ulong size)
ulong ulong
msize(void *v) msize(void *v)
{ {
return poolmsize(mainmem, (ulong*)v-Npadlong)-Npadlong*sizeof(ulong); return poolmsize(mainmem, (uintptr*)v-Npadlong)-Npadlong*sizeof(uintptr);
} }
void* void*
@ -278,9 +278,9 @@ calloc(ulong n, ulong szelem)
} }
void void
setmalloctag(void *v, ulong pc) setmalloctag(void *v, uintptr pc)
{ {
ulong *u; uintptr *u;
USED(v, pc); USED(v, pc);
if(Npadlong <= MallocOffset || v == nil) if(Npadlong <= MallocOffset || v == nil)
return; return;
@ -289,9 +289,9 @@ setmalloctag(void *v, ulong pc)
} }
void void
setrealloctag(void *v, ulong pc) setrealloctag(void *v, uintptr pc)
{ {
ulong *u; uintptr *u;
USED(v, pc); USED(v, pc);
if(Npadlong <= ReallocOffset || v == nil) if(Npadlong <= ReallocOffset || v == nil)
return; return;
@ -299,20 +299,20 @@ setrealloctag(void *v, ulong pc)
u[-Npadlong+ReallocOffset] = pc; u[-Npadlong+ReallocOffset] = pc;
} }
ulong uintptr
getmalloctag(void *v) getmalloctag(void *v)
{ {
USED(v); USED(v);
if(Npadlong <= MallocOffset) if(Npadlong <= MallocOffset)
return ~0; return ~0;
return ((ulong*)v)[-Npadlong+MallocOffset]; return ((uintptr*)v)[-Npadlong+MallocOffset];
} }
ulong uintptr
getrealloctag(void *v) getrealloctag(void *v)
{ {
USED(v); USED(v);
if(Npadlong <= ReallocOffset) if(Npadlong <= ReallocOffset)
return ((ulong*)v)[-Npadlong+ReallocOffset]; return ((uintptr*)v)[-Npadlong+ReallocOffset];
return ~0; return ~0;
} }

View file

@ -170,7 +170,7 @@ ppanic(Pool *p, char *fmt, ...)
/* - except the code for malloc(), which alternately doesn't clear or does. - */ /* - except the code for malloc(), which alternately doesn't clear or does. - */
/* /*
* Npadlong is the number of 32-bit longs to leave at the beginning of * Npadlong is the number of uintptr's to leave at the beginning of
* each allocated buffer for our own bookkeeping. We return to the callers * each allocated buffer for our own bookkeeping. We return to the callers
* a pointer that points immediately after our bookkeeping area. Incoming pointers * a pointer that points immediately after our bookkeeping area. Incoming pointers
* must be decremented by that much, and outgoing pointers incremented. * must be decremented by that much, and outgoing pointers incremented.
@ -204,9 +204,9 @@ malloc(ulong size)
{ {
void *v; void *v;
v = poolalloc(mainmem, size+Npadlong*sizeof(ulong)); v = poolalloc(mainmem, size+Npadlong*sizeof(uintptr));
if(Npadlong && v != nil) { if(Npadlong && v != nil) {
v = (ulong*)v+Npadlong; v = (uintptr*)v+Npadlong;
setmalloctag(v, getcallerpc(&size)); setmalloctag(v, getcallerpc(&size));
setrealloctag(v, 0); setrealloctag(v, 0);
} }
@ -218,9 +218,9 @@ mallocz(ulong size, int clr)
{ {
void *v; void *v;
v = poolalloc(mainmem, size+Npadlong*sizeof(ulong)); v = poolalloc(mainmem, size+Npadlong*sizeof(uintptr));
if(Npadlong && v != nil){ if(Npadlong && v != nil){
v = (ulong*)v+Npadlong; v = (uintptr*)v+Npadlong;
setmalloctag(v, getcallerpc(&size)); setmalloctag(v, getcallerpc(&size));
setrealloctag(v, 0); setrealloctag(v, 0);
} }
@ -234,9 +234,9 @@ mallocalign(ulong size, ulong align, long offset, ulong span)
{ {
void *v; void *v;
v = poolallocalign(mainmem, size+Npadlong*sizeof(ulong), align, offset-Npadlong*sizeof(ulong), span); v = poolallocalign(mainmem, size+Npadlong*sizeof(uintptr), align, offset-Npadlong*sizeof(uintptr), span);
if(Npadlong && v != nil){ if(Npadlong && v != nil){
v = (ulong*)v+Npadlong; v = (uintptr*)v+Npadlong;
setmalloctag(v, getcallerpc(&size)); setmalloctag(v, getcallerpc(&size));
setrealloctag(v, 0); setrealloctag(v, 0);
} }
@ -247,7 +247,7 @@ void
free(void *v) free(void *v)
{ {
if(v != nil) if(v != nil)
poolfree(mainmem, (ulong*)v-Npadlong); poolfree(mainmem, (uintptr*)v-Npadlong);
} }
void* void*
@ -261,11 +261,11 @@ realloc(void *v, ulong size)
} }
if(v) if(v)
v = (ulong*)v-Npadlong; v = (uintptr*)v-Npadlong;
size += Npadlong*sizeof(ulong); size += Npadlong*sizeof(uintptr);
if(nv = poolrealloc(mainmem, v, size)){ if(nv = poolrealloc(mainmem, v, size)){
nv = (ulong*)nv+Npadlong; nv = (uintptr*)nv+Npadlong;
setrealloctag(nv, getcallerpc(&v)); setrealloctag(nv, getcallerpc(&v));
if(v == nil) if(v == nil)
setmalloctag(nv, getcallerpc(&v)); setmalloctag(nv, getcallerpc(&v));
@ -276,7 +276,7 @@ realloc(void *v, ulong size)
ulong ulong
msize(void *v) msize(void *v)
{ {
return poolmsize(mainmem, (ulong*)v-Npadlong)-Npadlong*sizeof(ulong); return poolmsize(mainmem, (uintptr*)v-Npadlong)-Npadlong*sizeof(uintptr);
} }
void* void*
@ -292,9 +292,9 @@ calloc(ulong n, ulong s)
} }
void void
setmalloctag(void *v, ulong pc) setmalloctag(void *v, uintptr pc)
{ {
ulong *u; uintptr *u;
USED(v, pc); USED(v, pc);
if(Npadlong <= MallocOffset || v == nil) if(Npadlong <= MallocOffset || v == nil)
return; return;
@ -303,9 +303,9 @@ setmalloctag(void *v, ulong pc)
} }
void void
setrealloctag(void *v, ulong pc) setrealloctag(void *v, uintptr pc)
{ {
ulong *u; uintptr *u;
USED(v, pc); USED(v, pc);
if(Npadlong <= ReallocOffset || v == nil) if(Npadlong <= ReallocOffset || v == nil)
return; return;
@ -313,21 +313,21 @@ setrealloctag(void *v, ulong pc)
u[-Npadlong+ReallocOffset] = pc; u[-Npadlong+ReallocOffset] = pc;
} }
ulong uintptr
getmalloctag(void *v) getmalloctag(void *v)
{ {
USED(v); USED(v);
if(Npadlong <= MallocOffset) if(Npadlong <= MallocOffset)
return ~0; return ~0;
return ((ulong*)v)[-Npadlong+MallocOffset]; return ((uintptr*)v)[-Npadlong+MallocOffset];
} }
ulong uintptr
getrealloctag(void *v) getrealloctag(void *v)
{ {
USED(v); USED(v);
if(Npadlong <= ReallocOffset) if(Npadlong <= ReallocOffset)
return ((ulong*)v)[-Npadlong+ReallocOffset]; return ((uintptr*)v)[-Npadlong+ReallocOffset];
return ~0; return ~0;
} }
@ -337,5 +337,5 @@ malloctopoolblock(void *v)
if(v == nil) if(v == nil)
return nil; return nil;
return &((ulong*)v)[-Npadlong]; return &((uintptr*)v)[-Npadlong];
} }