summaryrefslogtreecommitdiff
path: root/sys/kern/kern_linker.c
diff options
context:
space:
mode:
authorAndrew R. Reiter <arr@FreeBSD.org>2001-11-18 18:19:35 +0000
committerAndrew R. Reiter <arr@FreeBSD.org>2001-11-18 18:19:35 +0000
commitb489b4075c24449483a358a4f417fc76c31b794f (patch)
tree7736597570471d49b80fcf81411fd2535fcdb9a2 /sys/kern/kern_linker.c
parent6971b3c7d12b77bbcb2662221234b370fc6cf46b (diff)
Notes
Diffstat (limited to 'sys/kern/kern_linker.c')
-rw-r--r--sys/kern/kern_linker.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c
index ca032a9ae124..bc969e4bdff7 100644
--- a/sys/kern/kern_linker.c
+++ b/sys/kern/kern_linker.c
@@ -70,6 +70,20 @@ static linker_class_list_t classes;
static linker_file_list_t linker_files;
static int next_file_id = 1;
+#define LINKER_GET_NEXT_FILE_ID(a) do { \
+ linker_file_t lftmp; \
+ \
+retry: \
+ TAILQ_FOREACH(lftmp, &linker_files, link) { \
+ if (next_file_id == lftmp->id) { \
+ next_file_id++; \
+ goto retry; \
+ } \
+ } \
+ (a) = next_file_id; \
+} while(0)
+
+
/* XXX wrong name; we're looking at version provision tags here, not modules */
typedef TAILQ_HEAD(, modlist) modlisthead_t;
struct modlist {
@@ -401,7 +415,7 @@ linker_make_file(const char* pathname, linker_class_t lc)
lf->userrefs = 0;
lf->flags = 0;
lf->filename = linker_strdup(filename);
- lf->id = next_file_id++;
+ LINKER_GET_NEXT_FILE_ID(lf->id);
lf->ndeps = 0;
lf->deps = NULL;
STAILQ_INIT(&lf->common);