* ldlang.h (lang_output_section_statement_type): Add prev.
* ldlang.c (output_statement_newfunc): Set os.prev. (lang_insert_orphan): Likewise. (output_prev_sec_find): Use os.prev.
This commit is contained in:
parent
3555e8e589
commit
218868ba41
@ -1,3 +1,10 @@
|
|||||||
|
2005-12-24 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* ldlang.h (lang_output_section_statement_type): Add prev.
|
||||||
|
* ldlang.c (output_statement_newfunc): Set os.prev.
|
||||||
|
(lang_insert_orphan): Likewise.
|
||||||
|
(output_prev_sec_find): Use os.prev.
|
||||||
|
|
||||||
2005-12-22 Santosh Raktawan <santoshr2@kpitcummins.com>
|
2005-12-22 Santosh Raktawan <santoshr2@kpitcummins.com>
|
||||||
|
|
||||||
* ld/emulparms/h8300helf.sh (TINY_READONLY_SECTION,
|
* ld/emulparms/h8300helf.sh (TINY_READONLY_SECTION,
|
||||||
|
22
ld/ldlang.c
22
ld/ldlang.c
@ -912,6 +912,14 @@ output_statement_newfunc (struct bfd_hash_entry *entry,
|
|||||||
(lang_statement_union_type *) &ret->os,
|
(lang_statement_union_type *) &ret->os,
|
||||||
&ret->os.header.next);
|
&ret->os.header.next);
|
||||||
|
|
||||||
|
/* For every output section statement added to the list, except the
|
||||||
|
first one, lang_output_section_statement.tail points to the "next"
|
||||||
|
field of the last element of the list. */
|
||||||
|
if (lang_output_section_statement.head != NULL)
|
||||||
|
ret->os.prev = (lang_output_section_statement_type *)
|
||||||
|
((char *) lang_output_section_statement.tail
|
||||||
|
- offsetof (lang_output_section_statement_type, next));
|
||||||
|
|
||||||
/* GCC's strict aliasing rules prevent us from just casting the
|
/* GCC's strict aliasing rules prevent us from just casting the
|
||||||
address, so we store the pointer in a variable and cast that
|
address, so we store the pointer in a variable and cast that
|
||||||
instead. */
|
instead. */
|
||||||
@ -1290,20 +1298,15 @@ lang_output_section_find_by_flags (const asection *sec,
|
|||||||
static asection *
|
static asection *
|
||||||
output_prev_sec_find (lang_output_section_statement_type *os)
|
output_prev_sec_find (lang_output_section_statement_type *os)
|
||||||
{
|
{
|
||||||
asection *s = (asection *) NULL;
|
|
||||||
lang_output_section_statement_type *lookup;
|
lang_output_section_statement_type *lookup;
|
||||||
|
|
||||||
for (lookup = &lang_output_section_statement.head->output_section_statement;
|
for (lookup = os->prev; lookup != NULL; lookup = lookup->prev)
|
||||||
lookup != NULL;
|
|
||||||
lookup = lookup->next)
|
|
||||||
{
|
{
|
||||||
if (lookup->constraint == -1)
|
if (lookup->constraint == -1)
|
||||||
continue;
|
continue;
|
||||||
if (lookup == os)
|
|
||||||
return s;
|
|
||||||
|
|
||||||
if (lookup->bfd_section != NULL && lookup->bfd_section->owner != NULL)
|
if (lookup->bfd_section != NULL && lookup->bfd_section->owner != NULL)
|
||||||
s = lookup->bfd_section;
|
return lookup->bfd_section;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -1544,7 +1547,12 @@ lang_insert_orphan (asection *s,
|
|||||||
/* Do the same for the list of output section statements. */
|
/* Do the same for the list of output section statements. */
|
||||||
newly_added_os = *os_tail;
|
newly_added_os = *os_tail;
|
||||||
*os_tail = NULL;
|
*os_tail = NULL;
|
||||||
|
newly_added_os->prev = (lang_output_section_statement_type *)
|
||||||
|
((char *) place->os_tail
|
||||||
|
- offsetof (lang_output_section_statement_type, next));
|
||||||
newly_added_os->next = *place->os_tail;
|
newly_added_os->next = *place->os_tail;
|
||||||
|
if (newly_added_os->next != NULL)
|
||||||
|
newly_added_os->next->prev = newly_added_os;
|
||||||
*place->os_tail = newly_added_os;
|
*place->os_tail = newly_added_os;
|
||||||
place->os_tail = &newly_added_os->next;
|
place->os_tail = &newly_added_os->next;
|
||||||
|
|
||||||
|
@ -130,6 +130,7 @@ typedef struct lang_output_section_statement_struct
|
|||||||
lang_statement_header_type header;
|
lang_statement_header_type header;
|
||||||
lang_statement_list_type children;
|
lang_statement_list_type children;
|
||||||
struct lang_output_section_statement_struct *next;
|
struct lang_output_section_statement_struct *next;
|
||||||
|
struct lang_output_section_statement_struct *prev;
|
||||||
const char *name;
|
const char *name;
|
||||||
asection *bfd_section;
|
asection *bfd_section;
|
||||||
lang_memory_region_type *region;
|
lang_memory_region_type *region;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user