mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-10 15:22:04 +00:00
make data handling a little easier
This commit is contained in:
parent
1db26eea86
commit
2df43ef941
3 changed files with 31 additions and 7 deletions
|
@ -108,6 +108,7 @@ extern def_t def_function;
|
|||
|
||||
scope_t *new_scope (scope_type type, defspace_t *space, scope_t *parent);
|
||||
defspace_t *new_defspace (void);
|
||||
void defspace_adddata (defspace_t *space, pr_type_t *data, int size);
|
||||
|
||||
def_t *get_def (struct type_s *type, const char *name, scope_t *scope,
|
||||
storage_class_t storage);
|
||||
|
|
|
@ -117,6 +117,18 @@ new_defspace (void)
|
|||
return space;
|
||||
}
|
||||
|
||||
void
|
||||
defspace_adddata (defspace_t *space, pr_type_t *data, int size)
|
||||
{
|
||||
if (space->size + size > space->max_size) {
|
||||
space->max_size = (space->size + size + 1023) & ~1023;
|
||||
space->data = realloc (space->data,
|
||||
space->max_size * sizeof (pr_type_t));
|
||||
}
|
||||
if (data)
|
||||
memcpy (space->data, data, space->max_size * sizeof (pr_type_t));
|
||||
}
|
||||
|
||||
scope_t *
|
||||
new_scope (scope_type type, defspace_t *space, scope_t *parent)
|
||||
{
|
||||
|
|
|
@ -53,8 +53,15 @@ static const char rcsid[] =
|
|||
|
||||
static hashtab_t *extern_defs;
|
||||
static hashtab_t *defined_defs;
|
||||
|
||||
static codespace_t *code;
|
||||
static defspace_t *data;
|
||||
static defspace_t *far_data;
|
||||
static strpool_t *strings;
|
||||
static strpool_t *type_strings;
|
||||
static int code_base;
|
||||
static int data_base;
|
||||
static int far_data_base;
|
||||
|
||||
static const char *
|
||||
defs_get_key (void *_def, void *unused)
|
||||
|
@ -64,11 +71,6 @@ defs_get_key (void *_def, void *unused)
|
|||
return G_GETSTR (def->name);
|
||||
}
|
||||
|
||||
void
|
||||
add_code (qfo_t *qfo)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
add_defs (qfo_t *qfo)
|
||||
{
|
||||
|
@ -97,7 +99,7 @@ add_defs (qfo_t *qfo)
|
|||
QFO_var (qfo, string, def->ofs) = s;
|
||||
}
|
||||
if (def->ofs)
|
||||
def->ofs += pr.near_data->size;
|
||||
def->ofs += data_base;
|
||||
if (def->flags & QFOD_GLOBAL) {
|
||||
while ((d = Hash_Find (extern_defs, G_GETSTR (def->name)))) {
|
||||
Hash_Del (extern_defs, G_GETSTR (d->name));
|
||||
|
@ -134,6 +136,9 @@ linker_begin (void)
|
|||
{
|
||||
extern_defs = Hash_NewTable (16381, defs_get_key, 0, 0);
|
||||
defined_defs = Hash_NewTable (16381, defs_get_key, 0, 0);
|
||||
code = codespace_new ();
|
||||
data = new_defspace ();
|
||||
far_data = new_defspace ();
|
||||
strings = strpool_new ();
|
||||
type_strings = strpool_new ();
|
||||
}
|
||||
|
@ -146,10 +151,16 @@ linker_add_object_file (const char *filename)
|
|||
qfo = read_obj_file (filename);
|
||||
if (!qfo)
|
||||
return;
|
||||
|
||||
puts(filename);
|
||||
|
||||
code_base = code->size;
|
||||
data_base = data->size;
|
||||
far_data_base = far_data->size;
|
||||
|
||||
add_defs (qfo);
|
||||
add_functions (qfo);
|
||||
add_code (qfo);
|
||||
codespace_addcode (code, qfo->code, qfo->code_size);
|
||||
//add_data (qfo);
|
||||
//add_far_data (qfo);
|
||||
//add_strings (qfo);
|
||||
|
|
Loading…
Reference in a new issue