* emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Set
load_base for orphans that follow a section with load_base set.
This commit is contained in:
parent
9b7400f84d
commit
36478e9d6f
2 changed files with 18 additions and 3 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2002-12-05 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Set
|
||||||
|
load_base for orphans that follow a section with load_base set.
|
||||||
|
|
||||||
2002-12-01 H.J. Lu <hjl@gnu.org>
|
2002-12-01 H.J. Lu <hjl@gnu.org>
|
||||||
|
|
||||||
* ld.texinfo: Remove the extra `;' in sample version script.
|
* ld.texinfo: Remove the extra `;' in sample version script.
|
||||||
|
|
|
@ -1093,6 +1093,7 @@ gld${EMULATION_NAME}_place_orphan (file, s)
|
||||||
const char *secname;
|
const char *secname;
|
||||||
const char *ps = NULL;
|
const char *ps = NULL;
|
||||||
lang_output_section_statement_type *os;
|
lang_output_section_statement_type *os;
|
||||||
|
etree_type *load_base;
|
||||||
int isdyn = 0;
|
int isdyn = 0;
|
||||||
|
|
||||||
secname = bfd_get_section_name (s->owner, s);
|
secname = bfd_get_section_name (s->owner, s);
|
||||||
|
@ -1227,16 +1228,25 @@ gld${EMULATION_NAME}_place_orphan (file, s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
address = NULL;
|
||||||
if (link_info.relocateable || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
|
if (link_info.relocateable || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
|
||||||
address = exp_intop ((bfd_vma) 0);
|
address = exp_intop ((bfd_vma) 0);
|
||||||
else
|
|
||||||
address = NULL;
|
load_base = NULL;
|
||||||
|
if (place != NULL && place->os->load_base != NULL)
|
||||||
|
{
|
||||||
|
etree_type *lma_from_vma;
|
||||||
|
lma_from_vma = exp_binop ('-', place->os->load_base,
|
||||||
|
exp_nameop (ADDR, place->os->name));
|
||||||
|
load_base = exp_binop ('+', lma_from_vma,
|
||||||
|
exp_nameop (ADDR, secname));
|
||||||
|
}
|
||||||
|
|
||||||
os = lang_enter_output_section_statement (secname, address, 0,
|
os = lang_enter_output_section_statement (secname, address, 0,
|
||||||
(bfd_vma) 0,
|
(bfd_vma) 0,
|
||||||
(etree_type *) NULL,
|
(etree_type *) NULL,
|
||||||
(etree_type *) NULL,
|
(etree_type *) NULL,
|
||||||
(etree_type *) NULL);
|
load_base);
|
||||||
|
|
||||||
lang_add_section (&os->children, s, os, file);
|
lang_add_section (&os->children, s, os, file);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue