mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-06-02 17:41:10 +00:00
Add and use FREE() to complement ALLOC().
Now it will be easy to test memory access with valgrind (just compile with DEBUG_QFCC_MEMORY defined).
This commit is contained in:
parent
0872961269
commit
98a0afa38f
9 changed files with 44 additions and 35 deletions
|
@ -123,6 +123,7 @@ char *fix_backslash (char *path);
|
||||||
#define NORMALIZE(x) x
|
#define NORMALIZE(x) x
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef DEBUG_QFCC_MEMORY
|
||||||
/** High-tide structure allocator for use in linked lists.
|
/** High-tide structure allocator for use in linked lists.
|
||||||
|
|
||||||
Using a free-list with the name of \c free_NAME, return a single element.
|
Using a free-list with the name of \c free_NAME, return a single element.
|
||||||
|
@ -153,6 +154,28 @@ char *fix_backslash (char *path);
|
||||||
memset (v, 0, sizeof (*v)); \
|
memset (v, 0, sizeof (*v)); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
/** Free a block allocated by #ALLOC
|
||||||
|
|
||||||
|
\param n The \c NAME portion of the \c free_NAME free-list.
|
||||||
|
\param p The pointer to the block to be freed.
|
||||||
|
|
||||||
|
\hideinitializer
|
||||||
|
*/
|
||||||
|
#define FREE(n, p) \
|
||||||
|
do { \
|
||||||
|
p->next = free_##n; \
|
||||||
|
free_##n = p->next; \
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
|
#define ALLOC(s, t, n, v) \
|
||||||
|
do { \
|
||||||
|
__attribute__((unused)) t **dummy = &free_##n; \
|
||||||
|
v = (t *) calloc (1, sizeof (t)); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define FREE(n, p) do { free (p); } while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
/** Round \a x up to the next multiple of \a a.
|
/** Round \a x up to the next multiple of \a a.
|
||||||
\note \a a must be a power of two or this will break.
|
\note \a a must be a power of two or this will break.
|
||||||
\note There are no side effects on \a x.
|
\note There are no side effects on \a x.
|
||||||
|
|
|
@ -75,8 +75,7 @@ pop_source_file (void)
|
||||||
}
|
}
|
||||||
tmp = pr.srcline_stack;
|
tmp = pr.srcline_stack;
|
||||||
pr.srcline_stack = tmp->next;
|
pr.srcline_stack = tmp->next;
|
||||||
tmp->next = free_srclines;
|
FREE (srclines, tmp);
|
||||||
free_srclines = tmp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -241,8 +241,7 @@ free_def (def_t *def)
|
||||||
}
|
}
|
||||||
def->return_addr = 0;
|
def->return_addr = 0;
|
||||||
def->free_addr = __builtin_return_address (0);
|
def->free_addr = __builtin_return_address (0);
|
||||||
def->next = free_defs;
|
FREE (defs, def);
|
||||||
free_defs = def;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -106,8 +106,7 @@ defspace_alloc_loc (defspace_t *space, int size)
|
||||||
if ((*l)->size == size) {
|
if ((*l)->size == size) {
|
||||||
loc = *l;
|
loc = *l;
|
||||||
*l = (*l)->next;
|
*l = (*l)->next;
|
||||||
loc->next = free_locrefs;
|
FREE (locrefs, loc);
|
||||||
free_locrefs = loc;
|
|
||||||
} else {
|
} else {
|
||||||
(*l)->ofs += size;
|
(*l)->ofs += size;
|
||||||
(*l)->size -= size;
|
(*l)->size -= size;
|
||||||
|
@ -163,8 +162,7 @@ defspace_free_loc (defspace_t *space, int ofs, int size)
|
||||||
loc->size += loc->next->size;
|
loc->size += loc->next->size;
|
||||||
loc = loc->next;
|
loc = loc->next;
|
||||||
*l = loc->next;
|
*l = loc->next;
|
||||||
loc->next = free_locrefs;
|
FREE (locrefs, loc);
|
||||||
free_locrefs = loc;
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,8 +99,7 @@ static void
|
||||||
delete_loop (flowloop_t *loop)
|
delete_loop (flowloop_t *loop)
|
||||||
{
|
{
|
||||||
set_delete (loop->nodes);
|
set_delete (loop->nodes);
|
||||||
loop->next = free_loops;
|
FREE (loops, loop);
|
||||||
free_loops = loop;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static flownode_t *
|
static flownode_t *
|
||||||
|
@ -122,8 +121,7 @@ delete_node (flownode_t *node)
|
||||||
set_delete (node->edges);
|
set_delete (node->edges);
|
||||||
if (node->dom)
|
if (node->dom)
|
||||||
set_delete (node->dom);
|
set_delete (node->dom);
|
||||||
node->next = free_nodes;
|
FREE (nodes, node);
|
||||||
free_nodes = node;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static flowgraph_t *
|
static flowgraph_t *
|
||||||
|
@ -150,8 +148,7 @@ delete_graph (flowgraph_t *graph)
|
||||||
set_delete (graph->dfst);
|
set_delete (graph->dfst);
|
||||||
if (graph->dfo)
|
if (graph->dfo)
|
||||||
free (graph->dfo);
|
free (graph->dfo);
|
||||||
graph->next = free_graphs;
|
FREE (graphs, graph);
|
||||||
free_graphs = graph;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static def_t *
|
static def_t *
|
||||||
|
|
|
@ -82,8 +82,7 @@ static void
|
||||||
frame_free (void *_f, void *unused)
|
frame_free (void *_f, void *unused)
|
||||||
{
|
{
|
||||||
frame_t *f = (frame_t *)_f;
|
frame_t *f = (frame_t *)_f;
|
||||||
f->next = free_frames;
|
FREE (frames, f);
|
||||||
free_frames = f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -62,8 +62,7 @@ new_setiter (void)
|
||||||
static void
|
static void
|
||||||
delete_setiter (set_iter_t *set_iter)
|
delete_setiter (set_iter_t *set_iter)
|
||||||
{
|
{
|
||||||
set_iter->next = free_set_iters;
|
FREE (set_iters, set_iter);
|
||||||
free_set_iters = set_iter;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -88,8 +87,7 @@ set_delete (set_t *set)
|
||||||
{
|
{
|
||||||
if (set->map != set->defmap)
|
if (set->map != set->defmap)
|
||||||
free (set->map);
|
free (set->map);
|
||||||
set->next = free_sets;
|
FREE (sets, set);
|
||||||
free_sets = set;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -256,7 +256,7 @@ new_operand (op_type_e op)
|
||||||
return operand;
|
return operand;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void __attribute__((unused)) //FIXME
|
||||||
free_operand (operand_t *op)
|
free_operand (operand_t *op)
|
||||||
{
|
{
|
||||||
if (op->next) {
|
if (op->next) {
|
||||||
|
@ -267,21 +267,19 @@ free_operand (operand_t *op)
|
||||||
}
|
}
|
||||||
if (op->op_type == op_alias)
|
if (op->op_type == op_alias)
|
||||||
free_operand (op->o.alias);
|
free_operand (op->o.alias);
|
||||||
op->next = free_operands;
|
FREE (operands, op);
|
||||||
free_operands = op;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
free_statement (statement_t *s)
|
free_statement (statement_t *s)
|
||||||
{
|
{
|
||||||
if (s->opa)
|
// if (s->opa)
|
||||||
free_operand (s->opa);
|
// free_operand (s->opa);
|
||||||
if (s->opb)
|
// if (s->opb)
|
||||||
free_operand (s->opb);
|
// free_operand (s->opb);
|
||||||
if (s->opc)
|
// if (s->opc)
|
||||||
free_operand (s->opc);
|
// free_operand (s->opc);
|
||||||
s->next = free_statements;
|
FREE (statements, s);
|
||||||
free_statements = s;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -292,8 +290,7 @@ free_sblock (sblock_t *sblock)
|
||||||
sblock->statements = s->next;
|
sblock->statements = s->next;
|
||||||
free_statement (s);
|
free_statement (s);
|
||||||
}
|
}
|
||||||
sblock->next = free_sblocks;
|
FREE (sblocks, sblock);
|
||||||
free_sblocks = sblock;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
operand_t *
|
operand_t *
|
||||||
|
|
|
@ -182,8 +182,7 @@ free_type (type_t *type)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
memset (type, 0, sizeof (type));
|
memset (type, 0, sizeof (type));
|
||||||
type->next = free_types;
|
FREE (types, type);
|
||||||
free_types = type;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type_t *
|
type_t *
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue