summaryrefslogtreecommitdiff
path: root/read.c
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2013-05-17 01:20:39 -0400
committerPaul Smith <psmith@gnu.org>2013-05-17 01:20:39 -0400
commitb730fbc6b86d777e80856e997ddc56fc4a851769 (patch)
tree9ca4f2aae6b0f5d8669c7990f3b2f50f22cd1780 /read.c
parentc21c1455fdfc6e87d75941f48841c72903e1e0f4 (diff)
downloadgunmake-b730fbc6b86d777e80856e997ddc56fc4a851769.tar.gz
Remove the dlopen() pointer from struct filedef.
This pointer is almost never needed, and it increases the size of the filedef struct for all files (of which there are a huge number for large builds). Instead keep a bit field marking whether the file is a loaded object and if so call a new function to unload it. In load.c we keep a simple linked list of loaded objects (of which there will be very few typically) and their dlopen() pointers.
Diffstat (limited to 'read.c')
-rw-r--r--read.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/read.c b/read.c
index 50f8414..9dce583 100644
--- a/read.c
+++ b/read.c
@@ -937,12 +937,11 @@ eval (struct ebuffer *ebuf, int set_default)
struct nameseq *next = files->next;
const char *name = files->name;
struct dep *deps;
- void *dlp;
free_ns (files);
files = next;
- if (! load_file (&ebuf->floc, &name, noerror, &dlp) && ! noerror)
+ if (! load_file (&ebuf->floc, &name, noerror) && ! noerror)
fatal (&ebuf->floc, _("%s: failed to load"), name);
deps = alloc_dep ();
@@ -951,7 +950,7 @@ eval (struct ebuffer *ebuf, int set_default)
deps->file = lookup_file (name);
if (deps->file == 0)
deps->file = enter_file (name);
- deps->file->dlopen_ptr = dlp;
+ deps->file->loaded = 1;
}
continue;