diff options
author | Alan Modra <amodra@gmail.com> | 2001-08-20 01:21:08 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2001-08-20 01:21:08 +0000 |
commit | c0c330a70f2a352d6bfe279336c8337c3d670dba (patch) | |
tree | 504785be07213f4c231c805f13188afca1919e68 /ld | |
parent | ae7fb08f1a002acd930c38897b9993b780d8798c (diff) | |
download | gdb-c0c330a70f2a352d6bfe279336c8337c3d670dba.zip gdb-c0c330a70f2a352d6bfe279336c8337c3d670dba.tar.gz gdb-c0c330a70f2a352d6bfe279336c8337c3d670dba.tar.bz2 |
* ldlang.c (insert_pad): Use offsetof macro.
(lang_size_sections): Always neuter padding statements.
* emultempl/hppaelf.em (hppaelf_delete_padding_statements): Delete.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 4 | ||||
-rw-r--r-- | ld/emultempl/hppaelf.em | 62 | ||||
-rw-r--r-- | ld/ldlang.c | 31 |
3 files changed, 14 insertions, 83 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index e9bb45d..3c53837 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,5 +1,9 @@ 2001-08-20 Alan Modra <amodra@bigpond.net.au> + * ldlang.c (insert_pad): Use offsetof macro. + (lang_size_sections): Always neuter padding statements. + * emultempl/hppaelf.em (hppaelf_delete_padding_statements): Delete. + * pe-dll.c (pe_dll_fill_sections): Correct type of "relax" param passed to lang_size_sections. (pe_exe_fill_sections): Likewise. diff --git a/ld/emultempl/hppaelf.em b/ld/emultempl/hppaelf.em index 93e847d..f367673 100644 --- a/ld/emultempl/hppaelf.em +++ b/ld/emultempl/hppaelf.em @@ -29,8 +29,6 @@ cat >>e${EMULATION_NAME}.c <<EOF static void hppaelf_after_parse PARAMS((void)); static void hppaelf_create_output_section_statements PARAMS ((void)); -static void hppaelf_delete_padding_statements - PARAMS ((lang_statement_list_type *)); static asection *hppaelf_add_stub_section PARAMS ((const char *, asection *)); static void hppaelf_layaout_sections_again PARAMS ((void)); @@ -88,63 +86,6 @@ hppaelf_create_output_section_statements () ldlang_add_file (stub_file); } -/* Walk all the lang statements splicing out any padding statements from - the list. */ - -static void -hppaelf_delete_padding_statements (list) - lang_statement_list_type *list; -{ - lang_statement_union_type *s; - lang_statement_union_type **ps; - for (ps = &list->head; (s = *ps) != NULL; ps = &s->next) - { - switch (s->header.type) - { - - /* We want to recursively walk these sections. */ - case lang_constructors_statement_enum: - hppaelf_delete_padding_statements (&constructor_list); - break; - - case lang_output_section_statement_enum: - hppaelf_delete_padding_statements (&s->output_section_statement.children); - break; - - case lang_group_statement_enum: - hppaelf_delete_padding_statements (&s->group_statement.children); - break; - - case lang_wild_statement_enum: - hppaelf_delete_padding_statements (&s->wild_statement.children); - break; - - /* Here's what we are really looking for. Splice these out of - the list. */ - case lang_padding_statement_enum: - *ps = s->next; - if (*ps == NULL) - list->tail = ps; - break; - - /* We don't care about these cases. */ - case lang_data_statement_enum: - case lang_object_symbols_statement_enum: - case lang_output_statement_enum: - case lang_target_statement_enum: - case lang_input_section_enum: - case lang_input_statement_enum: - case lang_assignment_statement_enum: - case lang_address_statement_enum: - break; - - default: - abort (); - break; - } - } -} - struct hook_stub_info { @@ -281,9 +222,6 @@ hppaelf_layaout_sections_again () to recalculate all the section offsets. This may mean we need to add even more stubs. */ - /* Delete all the padding statements, they're no longer valid. */ - hppaelf_delete_padding_statements (stat_ptr); - /* Resize the sections. */ lang_size_sections (stat_ptr->head, abs_output_section, &stat_ptr->head, 0, (bfd_vma) 0, false); diff --git a/ld/ldlang.c b/ld/ldlang.c index 905d08c..4b0a57e 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -2635,15 +2635,11 @@ insert_pad (ptr, fill, alignment_needed, output_section, dot) bfd_vma dot; { lang_statement_union_type *pad; - size_t ptr_off; - /* ptr_off is zero, but let's not be too fast and loose with - pointers. */ - ptr_off = ((char *) &((lang_statement_union_type *) 0)->header.next - - (char *) 0); + pad = ((lang_statement_union_type *) + ((char *) ptr - offsetof (lang_statement_union_type *, header.next))); if (ptr != &statement_list.head - && ((pad = (lang_statement_union_type *) ((char *) ptr - ptr_off)) - ->header.type == lang_padding_statement_enum) + && pad->header.type == lang_padding_statement_enum) && pad->padding_statement.output_section == output_section) { /* Use the existing pad statement. The above test on output @@ -3163,18 +3159,12 @@ lang_size_sections (s, output_section_statement, prev, fill, dot, relax) break; case lang_padding_statement_enum: - if (relax) - { - /* If we are relaxing, and this is not the first pass, - we need to allow padding to shrink. If padding is - needed on this pass, it will be added back in. */ - s->padding_statement.size = 0; - break; - } - - dot += s->padding_statement.size / opb; - output_section_statement->bfd_section->_raw_size += - s->padding_statement.size; + /* If this is the first time lang_size_sections is called, + we won't have any padding statements. If this is the + second or later passes when relaxing, we should allow + padding to shrink. If padding is needed on this pass, it + will be added back in. */ + s->padding_statement.size = 0; break; case lang_group_statement_enum: @@ -3188,8 +3178,7 @@ lang_size_sections (s, output_section_statement, prev, fill, dot, relax) FAIL (); break; - /* This can only get here when relaxing is turned on. */ - + /* We can only get here when relaxing is turned on. */ case lang_address_statement_enum: break; } |