mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-21 09:51:41 +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
|
||||
#endif
|
||||
|
||||
#ifndef DEBUG_QFCC_MEMORY
|
||||
/** High-tide structure allocator for use in linked lists.
|
||||
|
||||
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)); \
|
||||
} 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.
|
||||
\note \a a must be a power of two or this will break.
|
||||
\note There are no side effects on \a x.
|
||||
|
|
|
@ -75,8 +75,7 @@ pop_source_file (void)
|
|||
}
|
||||
tmp = pr.srcline_stack;
|
||||
pr.srcline_stack = tmp->next;
|
||||
tmp->next = free_srclines;
|
||||
free_srclines = tmp;
|
||||
FREE (srclines, tmp);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -241,8 +241,7 @@ free_def (def_t *def)
|
|||
}
|
||||
def->return_addr = 0;
|
||||
def->free_addr = __builtin_return_address (0);
|
||||
def->next = free_defs;
|
||||
free_defs = def;
|
||||
FREE (defs, def);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -106,8 +106,7 @@ defspace_alloc_loc (defspace_t *space, int size)
|
|||
if ((*l)->size == size) {
|
||||
loc = *l;
|
||||
*l = (*l)->next;
|
||||
loc->next = free_locrefs;
|
||||
free_locrefs = loc;
|
||||
FREE (locrefs, loc);
|
||||
} else {
|
||||
(*l)->ofs += size;
|
||||
(*l)->size -= size;
|
||||
|
@ -163,8 +162,7 @@ defspace_free_loc (defspace_t *space, int ofs, int size)
|
|||
loc->size += loc->next->size;
|
||||
loc = loc->next;
|
||||
*l = loc->next;
|
||||
loc->next = free_locrefs;
|
||||
free_locrefs = loc;
|
||||
FREE (locrefs, loc);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -99,8 +99,7 @@ static void
|
|||
delete_loop (flowloop_t *loop)
|
||||
{
|
||||
set_delete (loop->nodes);
|
||||
loop->next = free_loops;
|
||||
free_loops = loop;
|
||||
FREE (loops, loop);
|
||||
}
|
||||
|
||||
static flownode_t *
|
||||
|
@ -122,8 +121,7 @@ delete_node (flownode_t *node)
|
|||
set_delete (node->edges);
|
||||
if (node->dom)
|
||||
set_delete (node->dom);
|
||||
node->next = free_nodes;
|
||||
free_nodes = node;
|
||||
FREE (nodes, node);
|
||||
}
|
||||
|
||||
static flowgraph_t *
|
||||
|
@ -150,8 +148,7 @@ delete_graph (flowgraph_t *graph)
|
|||
set_delete (graph->dfst);
|
||||
if (graph->dfo)
|
||||
free (graph->dfo);
|
||||
graph->next = free_graphs;
|
||||
free_graphs = graph;
|
||||
FREE (graphs, graph);
|
||||
}
|
||||
|
||||
static def_t *
|
||||
|
|
|
@ -82,8 +82,7 @@ static void
|
|||
frame_free (void *_f, void *unused)
|
||||
{
|
||||
frame_t *f = (frame_t *)_f;
|
||||
f->next = free_frames;
|
||||
free_frames = f;
|
||||
FREE (frames, f);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
@ -62,8 +62,7 @@ new_setiter (void)
|
|||
static void
|
||||
delete_setiter (set_iter_t *set_iter)
|
||||
{
|
||||
set_iter->next = free_set_iters;
|
||||
free_set_iters = set_iter;
|
||||
FREE (set_iters, set_iter);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -88,8 +87,7 @@ set_delete (set_t *set)
|
|||
{
|
||||
if (set->map != set->defmap)
|
||||
free (set->map);
|
||||
set->next = free_sets;
|
||||
free_sets = set;
|
||||
FREE (sets, set);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -256,7 +256,7 @@ new_operand (op_type_e op)
|
|||
return operand;
|
||||
}
|
||||
|
||||
static void
|
||||
static void __attribute__((unused)) //FIXME
|
||||
free_operand (operand_t *op)
|
||||
{
|
||||
if (op->next) {
|
||||
|
@ -267,21 +267,19 @@ free_operand (operand_t *op)
|
|||
}
|
||||
if (op->op_type == op_alias)
|
||||
free_operand (op->o.alias);
|
||||
op->next = free_operands;
|
||||
free_operands = op;
|
||||
FREE (operands, op);
|
||||
}
|
||||
|
||||
static void
|
||||
free_statement (statement_t *s)
|
||||
{
|
||||
if (s->opa)
|
||||
free_operand (s->opa);
|
||||
if (s->opb)
|
||||
free_operand (s->opb);
|
||||
if (s->opc)
|
||||
free_operand (s->opc);
|
||||
s->next = free_statements;
|
||||
free_statements = s;
|
||||
// if (s->opa)
|
||||
// free_operand (s->opa);
|
||||
// if (s->opb)
|
||||
// free_operand (s->opb);
|
||||
// if (s->opc)
|
||||
// free_operand (s->opc);
|
||||
FREE (statements, s);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -292,8 +290,7 @@ free_sblock (sblock_t *sblock)
|
|||
sblock->statements = s->next;
|
||||
free_statement (s);
|
||||
}
|
||||
sblock->next = free_sblocks;
|
||||
free_sblocks = sblock;
|
||||
FREE (sblocks, sblock);
|
||||
}
|
||||
|
||||
operand_t *
|
||||
|
|
|
@ -182,8 +182,7 @@ free_type (type_t *type)
|
|||
break;
|
||||
}
|
||||
memset (type, 0, sizeof (type));
|
||||
type->next = free_types;
|
||||
free_types = type;
|
||||
FREE (types, type);
|
||||
}
|
||||
|
||||
type_t *
|
||||
|
|
Loading…
Reference in a new issue