mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-24 12:23:31 +08:00
* ldlang.c (insert_pad): Use offsetof macro.
(lang_size_sections): Always neuter padding statements. * emultempl/hppaelf.em (hppaelf_delete_padding_statements): Delete.
This commit is contained in:
@ -1,5 +1,9 @@
|
|||||||
2001-08-20 Alan Modra <amodra@bigpond.net.au>
|
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
|
* pe-dll.c (pe_dll_fill_sections): Correct type of "relax" param
|
||||||
passed to lang_size_sections.
|
passed to lang_size_sections.
|
||||||
(pe_exe_fill_sections): Likewise.
|
(pe_exe_fill_sections): Likewise.
|
||||||
|
@ -29,8 +29,6 @@ cat >>e${EMULATION_NAME}.c <<EOF
|
|||||||
|
|
||||||
static void hppaelf_after_parse PARAMS((void));
|
static void hppaelf_after_parse PARAMS((void));
|
||||||
static void hppaelf_create_output_section_statements 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
|
static asection *hppaelf_add_stub_section
|
||||||
PARAMS ((const char *, asection *));
|
PARAMS ((const char *, asection *));
|
||||||
static void hppaelf_layaout_sections_again PARAMS ((void));
|
static void hppaelf_layaout_sections_again PARAMS ((void));
|
||||||
@ -88,63 +86,6 @@ hppaelf_create_output_section_statements ()
|
|||||||
ldlang_add_file (stub_file);
|
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
|
struct hook_stub_info
|
||||||
{
|
{
|
||||||
@ -281,9 +222,6 @@ hppaelf_layaout_sections_again ()
|
|||||||
to recalculate all the section offsets. This may mean we need to
|
to recalculate all the section offsets. This may mean we need to
|
||||||
add even more stubs. */
|
add even more stubs. */
|
||||||
|
|
||||||
/* Delete all the padding statements, they're no longer valid. */
|
|
||||||
hppaelf_delete_padding_statements (stat_ptr);
|
|
||||||
|
|
||||||
/* Resize the sections. */
|
/* Resize the sections. */
|
||||||
lang_size_sections (stat_ptr->head, abs_output_section,
|
lang_size_sections (stat_ptr->head, abs_output_section,
|
||||||
&stat_ptr->head, 0, (bfd_vma) 0, false);
|
&stat_ptr->head, 0, (bfd_vma) 0, false);
|
||||||
|
29
ld/ldlang.c
29
ld/ldlang.c
@ -2635,15 +2635,11 @@ insert_pad (ptr, fill, alignment_needed, output_section, dot)
|
|||||||
bfd_vma dot;
|
bfd_vma dot;
|
||||||
{
|
{
|
||||||
lang_statement_union_type *pad;
|
lang_statement_union_type *pad;
|
||||||
size_t ptr_off;
|
|
||||||
|
|
||||||
/* ptr_off is zero, but let's not be too fast and loose with
|
pad = ((lang_statement_union_type *)
|
||||||
pointers. */
|
((char *) ptr - offsetof (lang_statement_union_type *, header.next)));
|
||||||
ptr_off = ((char *) &((lang_statement_union_type *) 0)->header.next
|
|
||||||
- (char *) 0);
|
|
||||||
if (ptr != &statement_list.head
|
if (ptr != &statement_list.head
|
||||||
&& ((pad = (lang_statement_union_type *) ((char *) ptr - ptr_off))
|
&& pad->header.type == lang_padding_statement_enum)
|
||||||
->header.type == lang_padding_statement_enum)
|
|
||||||
&& pad->padding_statement.output_section == output_section)
|
&& pad->padding_statement.output_section == output_section)
|
||||||
{
|
{
|
||||||
/* Use the existing pad statement. The above test on output
|
/* Use the existing pad statement. The above test on output
|
||||||
@ -3163,19 +3159,13 @@ lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case lang_padding_statement_enum:
|
case lang_padding_statement_enum:
|
||||||
if (relax)
|
/* If this is the first time lang_size_sections is called,
|
||||||
{
|
we won't have any padding statements. If this is the
|
||||||
/* If we are relaxing, and this is not the first pass,
|
second or later passes when relaxing, we should allow
|
||||||
we need to allow padding to shrink. If padding is
|
padding to shrink. If padding is needed on this pass, it
|
||||||
needed on this pass, it will be added back in. */
|
will be added back in. */
|
||||||
s->padding_statement.size = 0;
|
s->padding_statement.size = 0;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
dot += s->padding_statement.size / opb;
|
|
||||||
output_section_statement->bfd_section->_raw_size +=
|
|
||||||
s->padding_statement.size;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case lang_group_statement_enum:
|
case lang_group_statement_enum:
|
||||||
dot = lang_size_sections (s->group_statement.children.head,
|
dot = lang_size_sections (s->group_statement.children.head,
|
||||||
@ -3188,8 +3178,7 @@ lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
|
|||||||
FAIL ();
|
FAIL ();
|
||||||
break;
|
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:
|
case lang_address_statement_enum:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user