X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=ld%2Fldlang.c;h=3ec534e1fc191be0710e7f7249e5c086b64d11c7;hb=36983a93bb338b7cdd6f7d6f9f91dc9ce9815b4e;hp=8119cfc45bf95ea8949ecab19639ad75f13382a3;hpb=8be90e963138c88d7648c1eb2146e45f048d616e;p=external%2Fbinutils.git diff --git a/ld/ldlang.c b/ld/ldlang.c index 8119cfc..3ec534e 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -1026,6 +1026,15 @@ lang_list_init (lang_statement_list_type *list) list->tail = &list->head; } +static void +lang_statement_append (lang_statement_list_type *list, + void *element, + void *field) +{ + *(list->tail) = element; + list->tail = field; +} + void push_stat_ptr (lang_statement_list_type *new_ptr) { @@ -1142,9 +1151,7 @@ new_afile (const char *name, FAIL (); } - lang_statement_append (&input_file_chain, - (lang_statement_union_type *) p, - &p->next_real_file); + lang_statement_append (&input_file_chain, p, &p->next_real_file); return p; } @@ -1234,9 +1241,7 @@ output_section_statement_newfunc (struct bfd_hash_entry *entry, address, so we store the pointer in a variable and cast that instead. */ nextp = &ret->s.output_section_statement.next; - lang_statement_append (&lang_os_list, - &ret->s, - (lang_statement_union_type **) nextp); + lang_statement_append (&lang_os_list, &ret->s, nextp); return &ret->root; } @@ -2843,9 +2848,9 @@ lookup_name (const char *name) { lang_input_statement_type *search; - for (search = (lang_input_statement_type *) input_file_chain.head; + for (search = &input_file_chain.head->input_statement; search != NULL; - search = (lang_input_statement_type *) search->next_real_file) + search = search->next_real_file) { /* Use the local_sym_name as the name of the file that has already been loaded as filename might have been transformed @@ -6522,18 +6527,20 @@ ignore_bfd_errors (const char *fmt ATTRIBUTE_UNUSED, static void lang_check (void) { - lang_statement_union_type *file; + lang_input_statement_type *file; bfd *input_bfd; const bfd_arch_info_type *compatible; - for (file = file_chain.head; file != NULL; file = file->input_statement.next) + for (file = &file_chain.head->input_statement; + file != NULL; + file = file->next) { #ifdef ENABLE_PLUGINS /* Don't check format of files claimed by plugin. */ - if (file->input_statement.flags.claimed) + if (file->flags.claimed) continue; #endif /* ENABLE_PLUGINS */ - input_bfd = file->input_statement.the_bfd; + input_bfd = file->the_bfd; compatible = bfd_arch_get_compatible (input_bfd, link_info.output_bfd, command_line.accept_unknown_input_arch); @@ -6868,7 +6875,7 @@ lang_for_each_input_file (void (*func) (lang_input_statement_type *)) for (f = &input_file_chain.head->input_statement; f != NULL; - f = &f->next_real_file->input_statement) + f = f->next_real_file) func (f); } @@ -6888,9 +6895,7 @@ lang_for_each_file (void (*func) (lang_input_statement_type *)) void ldlang_add_file (lang_input_statement_type *entry) { - lang_statement_append (&file_chain, - (lang_statement_union_type *) entry, - &entry->next); + lang_statement_append (&file_chain, entry, &entry->next); /* The BFD linker needs to have a list of all input BFDs involved in a link. */ @@ -7232,7 +7237,7 @@ find_replacements_insert_point (bfd_boolean *before) lastobject = &input_file_chain.head->input_statement; for (claim1 = &file_chain.head->input_statement; claim1 != NULL; - claim1 = &claim1->next->input_statement) + claim1 = claim1->next) { if (claim1->flags.claimed) { @@ -7253,14 +7258,14 @@ find_replacements_insert_point (bfd_boolean *before) /* Find where to insert ADD, an archive element or shared library added during a rescan. */ -static lang_statement_union_type ** +static lang_input_statement_type ** find_rescan_insertion (lang_input_statement_type *add) { bfd *add_bfd = add->the_bfd; lang_input_statement_type *f; lang_input_statement_type *last_loaded = NULL; lang_input_statement_type *before = NULL; - lang_statement_union_type **iter = NULL; + lang_input_statement_type **iter = NULL; if (add_bfd->my_archive != NULL) add_bfd = add_bfd->my_archive; @@ -7274,13 +7279,13 @@ find_rescan_insertion (lang_input_statement_type *add) then their input_statement->next points at it. */ for (f = &input_file_chain.head->input_statement; f != NULL; - f = &f->next_real_file->input_statement) + f = f->next_real_file) { if (f->the_bfd == add_bfd) { before = last_loaded; if (f->next != NULL) - return &f->next->input_statement.next; + return &f->next->next; } if (f->the_bfd != NULL && f->next != NULL) last_loaded = f; @@ -7288,9 +7293,9 @@ find_rescan_insertion (lang_input_statement_type *add) for (iter = before ? &before->next : &file_chain.head->input_statement.next; *iter != NULL; - iter = &(*iter)->input_statement.next) - if (!(*iter)->input_statement.flags.claim_archive - && (*iter)->input_statement.the_bfd->my_archive == NULL) + iter = &(*iter)->next) + if (!(*iter)->flags.claim_archive + && (*iter)->the_bfd->my_archive == NULL) break; return iter; @@ -7496,7 +7501,7 @@ lang_process (void) if (before) { prev = find_next_input_statement (prev); - if (*prev != plugin_insert->next_real_file) + if (*prev != (void *) plugin_insert->next_real_file) { /* Huh? We didn't find the expected input statement. */ ASSERT (0); @@ -7506,12 +7511,13 @@ lang_process (void) lang_list_insert_after (stat_ptr, &added, prev); /* Likewise for the file chains. */ lang_list_insert_after (&input_file_chain, &inputfiles, - &plugin_insert->next_real_file); + (void *) &plugin_insert->next_real_file); /* We must be careful when relinking file_chain; we may need to insert the new files at the head of the list if the insert point chosen is the dummy first input file. */ if (plugin_insert->filename) - lang_list_insert_after (&file_chain, &files, &plugin_insert->next); + lang_list_insert_after (&file_chain, &files, + (void *) &plugin_insert->next); else lang_list_insert_after (&file_chain, &files, &file_chain.head); @@ -7522,8 +7528,8 @@ lang_process (void) lang_list_remove_tail (&file_chain, &files); while (files.head != NULL) { - lang_statement_union_type **insert; - lang_statement_union_type **iter, *temp; + lang_input_statement_type **insert; + lang_input_statement_type **iter, *temp; bfd *my_arch; insert = find_rescan_insertion (&files.head->input_statement); @@ -7531,18 +7537,18 @@ lang_process (void) iter = &files.head->input_statement.next; my_arch = files.head->input_statement.the_bfd->my_archive; if (my_arch != NULL) - for (; *iter != NULL; iter = &(*iter)->input_statement.next) - if ((*iter)->input_statement.the_bfd->my_archive != my_arch) + for (; *iter != NULL; iter = &(*iter)->next) + if ((*iter)->the_bfd->my_archive != my_arch) break; temp = *insert; - *insert = files.head; - files.head = *iter; + *insert = &files.head->input_statement; + files.head = (lang_statement_union_type *) *iter; *iter = temp; if (my_arch != NULL) { lang_input_statement_type *parent = my_arch->usrdata; if (parent != NULL) - parent->next = (lang_statement_union_type *) + parent->next = (lang_input_statement_type *) ((char *) iter - offsetof (lang_input_statement_type, next)); } @@ -7954,15 +7960,6 @@ lang_leave_output_section_statement (fill_type *fill, const char *memspec, pop_stat_ptr (); } -void -lang_statement_append (lang_statement_list_type *list, - lang_statement_union_type *element, - lang_statement_union_type **field) -{ - *(list->tail) = element; - list->tail = field; -} - /* Set the output format type. -oformat overrides scripts. */ void