~helenos-nicf/helenos/nicf

« back to all changes in this revision

Viewing changes to uspace/lib/c/generic/rtld/symbol.c

  • Committer: Radim Vansa
  • Date: 2011-09-20 21:55:59 UTC
  • mfrom: (697.1.517 HelenOS.mainline)
  • Revision ID: radim.vansa@matfyz.cz-20110920215559-7fjpai6wt5ieurcq
Merge with mainline

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
#include <stdio.h>
38
38
#include <stdlib.h>
39
39
 
 
40
#include <elf/elf.h>
40
41
#include <rtld/rtld.h>
41
42
#include <rtld/rtld_debug.h>
42
43
#include <rtld/symbol.h>
43
 
#include <elf.h>
44
44
 
45
45
/*
46
46
 * Hash tables are 32-bit (elf_word) even for 64-bit ELF files.
117
117
{
118
118
        module_t *m, *dm;
119
119
        elf_symbol_t *sym, *s;
120
 
        link_t queue_head;
 
120
        list_t queue;
121
121
        size_t i;
122
122
 
123
123
        /*
131
131
        modules_untag();
132
132
 
133
133
        /* Insert root (the program) into the queue and tag it */
134
 
        list_initialize(&queue_head);
 
134
        list_initialize(&queue);
135
135
        start->bfs_tag = true;
136
 
        list_append(&start->queue_link, &queue_head);
 
136
        list_append(&start->queue_link, &queue);
137
137
 
138
138
        /* If the symbol is found, it will be stored in 'sym' */
139
139
        sym = NULL;
140
140
 
141
141
        /* While queue is not empty */
142
 
        while (!list_empty(&queue_head)) {
 
142
        while (!list_empty(&queue)) {
143
143
                /* Pop first element from the queue */
144
 
                m = list_get_instance(queue_head.next, module_t, queue_link);
 
144
                m = list_get_instance(list_first(&queue), module_t, queue_link);
145
145
                list_remove(&m->queue_link);
146
146
 
147
147
                s = def_find_in_module(name, m);
161
161
 
162
162
                        if (dm->bfs_tag == false) {
163
163
                                dm->bfs_tag = true;
164
 
                                list_append(&dm->queue_link, &queue_head);
 
164
                                list_append(&dm->queue_link, &queue);
165
165
                        }
166
166
                }
167
167
        }
168
168
 
169
169
        /* Empty the queue so that we leave it in a clean state */
170
 
        while (!list_empty(&queue_head))
171
 
                list_remove(queue_head.next);
 
170
        while (!list_empty(&queue))
 
171
                list_remove(list_first(&queue));
172
172
 
173
173
        if (!sym) {
174
174
                return NULL; /* Not found */