* ldemul.h (ldemul_place_orphan): Update prototype.
(struct ld_emulation_xfer_struct <place_orphan>): Likewise. * ldemul.c (ldemul_place_orphan): Return pointer to output section statement. * emultempl/beos.em (gld${EMULATION_NAME}_place_orphan): Likewise. * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Likewise. * emultempl/mmo.em (mmo_place_orphan): Likewise. * emultempl/pe.em (gld_${EMULATION_NAME}_place_orphan): Likewise. * emultempl/pep.em (gld_${EMULATION_NAME}_place_orphan): Likewise.
This commit is contained in:
parent
7d9616d756
commit
c2edb4b89e
12
ld/ChangeLog
12
ld/ChangeLog
@ -1,3 +1,15 @@
|
|||||||
|
2008-10-20 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* ldemul.h (ldemul_place_orphan): Update prototype.
|
||||||
|
(struct ld_emulation_xfer_struct <place_orphan>): Likewise.
|
||||||
|
* ldemul.c (ldemul_place_orphan): Return pointer to output
|
||||||
|
section statement.
|
||||||
|
* emultempl/beos.em (gld${EMULATION_NAME}_place_orphan): Likewise.
|
||||||
|
* emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Likewise.
|
||||||
|
* emultempl/mmo.em (mmo_place_orphan): Likewise.
|
||||||
|
* emultempl/pe.em (gld_${EMULATION_NAME}_place_orphan): Likewise.
|
||||||
|
* emultempl/pep.em (gld_${EMULATION_NAME}_place_orphan): Likewise.
|
||||||
|
|
||||||
2008-10-08 Nick Clifton <nickc@redhat.com>
|
2008-10-08 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* configure.in (ALL_LINGUAS): Add "id".
|
* configure.in (ALL_LINGUAS): Add "id".
|
||||||
|
@ -664,7 +664,7 @@ gld_${EMULATION_NAME}_before_allocation (void)
|
|||||||
but I'm leaving this here in case we want to enable it for sections
|
but I'm leaving this here in case we want to enable it for sections
|
||||||
which are not mentioned in the linker script. */
|
which are not mentioned in the linker script. */
|
||||||
|
|
||||||
static bfd_boolean
|
static lang_output_section_statement_type *
|
||||||
gld${EMULATION_NAME}_place_orphan (asection *s,
|
gld${EMULATION_NAME}_place_orphan (asection *s,
|
||||||
const char *secname,
|
const char *secname,
|
||||||
int constraint)
|
int constraint)
|
||||||
@ -674,21 +674,21 @@ gld${EMULATION_NAME}_place_orphan (asection *s,
|
|||||||
lang_statement_union_type *l;
|
lang_statement_union_type *l;
|
||||||
|
|
||||||
if ((s->flags & SEC_ALLOC) == 0)
|
if ((s->flags & SEC_ALLOC) == 0)
|
||||||
return FALSE;
|
return NULL;
|
||||||
|
|
||||||
/* Don't process grouped sections unless doing a final link.
|
/* Don't process grouped sections unless doing a final link.
|
||||||
If they're marked as COMDAT sections, we don't want .text\$foo to
|
If they're marked as COMDAT sections, we don't want .text\$foo to
|
||||||
end up in .text and then have .text disappear because it's marked
|
end up in .text and then have .text disappear because it's marked
|
||||||
link-once-discard. */
|
link-once-discard. */
|
||||||
if (link_info.relocatable)
|
if (link_info.relocatable)
|
||||||
return FALSE;
|
return NULL;
|
||||||
|
|
||||||
/* Everything from the '\$' on gets deleted so don't allow '\$' as the
|
/* Everything from the '\$' on gets deleted so don't allow '\$' as the
|
||||||
first character. */
|
first character. */
|
||||||
if (*secname == '\$')
|
if (*secname == '\$')
|
||||||
einfo ("%P%F: section %s has '\$' as first character\n", secname);
|
einfo ("%P%F: section %s has '\$' as first character\n", secname);
|
||||||
if (strchr (secname + 1, '\$') == NULL)
|
if (strchr (secname + 1, '\$') == NULL)
|
||||||
return FALSE;
|
return NULL;
|
||||||
|
|
||||||
/* Look up the output section. The Microsoft specs say sections names in
|
/* Look up the output section. The Microsoft specs say sections names in
|
||||||
image files never contain a '\$'. Fortunately, lang_..._lookup creates
|
image files never contain a '\$'. Fortunately, lang_..._lookup creates
|
||||||
@ -726,7 +726,7 @@ gld${EMULATION_NAME}_place_orphan (asection *s,
|
|||||||
sort_sections. */
|
sort_sections. */
|
||||||
lang_add_section (&l->wild_statement.children, s, os);
|
lang_add_section (&l->wild_statement.children, s, os);
|
||||||
|
|
||||||
return TRUE;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
|
@ -62,7 +62,7 @@ fragment <<EOF
|
|||||||
static void gld${EMULATION_NAME}_before_parse (void);
|
static void gld${EMULATION_NAME}_before_parse (void);
|
||||||
static void gld${EMULATION_NAME}_after_open (void);
|
static void gld${EMULATION_NAME}_after_open (void);
|
||||||
static void gld${EMULATION_NAME}_before_allocation (void);
|
static void gld${EMULATION_NAME}_before_allocation (void);
|
||||||
static bfd_boolean gld${EMULATION_NAME}_place_orphan
|
static lang_output_section_statement_type *gld${EMULATION_NAME}_place_orphan
|
||||||
(asection *, const char *, int);
|
(asection *, const char *, int);
|
||||||
static void gld${EMULATION_NAME}_finish (void);
|
static void gld${EMULATION_NAME}_finish (void);
|
||||||
|
|
||||||
@ -1635,7 +1635,7 @@ output_rel_find (asection *sec, int isdyn)
|
|||||||
/* Place an orphan section. We use this to put random SHF_ALLOC
|
/* Place an orphan section. We use this to put random SHF_ALLOC
|
||||||
sections in the right segment. */
|
sections in the right segment. */
|
||||||
|
|
||||||
static bfd_boolean
|
static lang_output_section_statement_type *
|
||||||
gld${EMULATION_NAME}_place_orphan (asection *s,
|
gld${EMULATION_NAME}_place_orphan (asection *s,
|
||||||
const char *secname,
|
const char *secname,
|
||||||
int constraint)
|
int constraint)
|
||||||
@ -1723,7 +1723,7 @@ gld${EMULATION_NAME}_place_orphan (asection *s,
|
|||||||
set, then it has been created by the linker, probably as a
|
set, then it has been created by the linker, probably as a
|
||||||
result of a --section-start command line switch. */
|
result of a --section-start command line switch. */
|
||||||
lang_add_section (&os->children, s, os);
|
lang_add_section (&os->children, s, os);
|
||||||
return TRUE;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!orphan_init_done)
|
if (!orphan_init_done)
|
||||||
@ -1746,9 +1746,9 @@ gld${EMULATION_NAME}_place_orphan (asection *s,
|
|||||||
&& CONST_STRNEQ (s->name, ".gnu.warning.")
|
&& CONST_STRNEQ (s->name, ".gnu.warning.")
|
||||||
&& hold[orphan_text].os != NULL)
|
&& hold[orphan_text].os != NULL)
|
||||||
{
|
{
|
||||||
lang_add_section (&hold[orphan_text].os->children, s,
|
os = hold[orphan_text].os;
|
||||||
hold[orphan_text].os);
|
lang_add_section (&os->children, s, os);
|
||||||
return TRUE;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Decide which segment the section should go in based on the
|
/* Decide which segment the section should go in based on the
|
||||||
@ -1798,9 +1798,7 @@ gld${EMULATION_NAME}_place_orphan (asection *s,
|
|||||||
after = &lang_output_section_statement.head->output_section_statement;
|
after = &lang_output_section_statement.head->output_section_statement;
|
||||||
}
|
}
|
||||||
|
|
||||||
lang_insert_orphan (s, secname, constraint, after, place, NULL, NULL);
|
return lang_insert_orphan (s, secname, constraint, after, place, NULL, NULL);
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
@ -46,7 +46,7 @@ fragment <<EOF
|
|||||||
SEC_READONLY sections right after MMO_TEXT_SECTION_NAME. Much borrowed
|
SEC_READONLY sections right after MMO_TEXT_SECTION_NAME. Much borrowed
|
||||||
from elf32.em. */
|
from elf32.em. */
|
||||||
|
|
||||||
static bfd_boolean
|
static lang_output_section_statement_type *
|
||||||
mmo_place_orphan (asection *s,
|
mmo_place_orphan (asection *s,
|
||||||
const char *secname,
|
const char *secname,
|
||||||
int constraint ATTRIBUTE_UNUSED)
|
int constraint ATTRIBUTE_UNUSED)
|
||||||
@ -64,7 +64,7 @@ mmo_place_orphan (asection *s,
|
|||||||
/* We have nothing to say for anything other than a final link. */
|
/* We have nothing to say for anything other than a final link. */
|
||||||
if (link_info.relocatable
|
if (link_info.relocatable
|
||||||
|| (s->flags & (SEC_EXCLUDE | SEC_LOAD)) != SEC_LOAD)
|
|| (s->flags & (SEC_EXCLUDE | SEC_LOAD)) != SEC_LOAD)
|
||||||
return FALSE;
|
return NULL;
|
||||||
|
|
||||||
/* Only care for sections we're going to load. */
|
/* Only care for sections we're going to load. */
|
||||||
os = lang_output_section_find (secname);
|
os = lang_output_section_find (secname);
|
||||||
@ -74,13 +74,13 @@ mmo_place_orphan (asection *s,
|
|||||||
if (os != NULL)
|
if (os != NULL)
|
||||||
{
|
{
|
||||||
lang_add_section (&os->children, s, os);
|
lang_add_section (&os->children, s, os);
|
||||||
return TRUE;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If this section does not have .text-type section flags or there's no
|
/* If this section does not have .text-type section flags or there's no
|
||||||
MMO_TEXT_SECTION_NAME, we don't have anything to say. */
|
MMO_TEXT_SECTION_NAME, we don't have anything to say. */
|
||||||
if ((s->flags & (SEC_CODE | SEC_READONLY)) == 0)
|
if ((s->flags & (SEC_CODE | SEC_READONLY)) == 0)
|
||||||
return FALSE;
|
return NULL;
|
||||||
|
|
||||||
if (hold_text.os == NULL)
|
if (hold_text.os == NULL)
|
||||||
hold_text.os = lang_output_section_find (hold_text.name);
|
hold_text.os = lang_output_section_find (hold_text.name);
|
||||||
@ -102,7 +102,7 @@ mmo_place_orphan (asection *s,
|
|||||||
if (hold_text.os == NULL)
|
if (hold_text.os == NULL)
|
||||||
hold_text.os = os;
|
hold_text.os = os;
|
||||||
|
|
||||||
return TRUE;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remove the spurious settings of SEC_RELOC that make it to the output at
|
/* Remove the spurious settings of SEC_RELOC that make it to the output at
|
||||||
|
@ -1612,7 +1612,7 @@ gld_${EMULATION_NAME}_finish (void)
|
|||||||
default linker script using wildcards, and are sorted by
|
default linker script using wildcards, and are sorted by
|
||||||
sort_sections. */
|
sort_sections. */
|
||||||
|
|
||||||
static bfd_boolean
|
static lang_output_section_statement_type *
|
||||||
gld_${EMULATION_NAME}_place_orphan (asection *s,
|
gld_${EMULATION_NAME}_place_orphan (asection *s,
|
||||||
const char *secname,
|
const char *secname,
|
||||||
int constraint)
|
int constraint)
|
||||||
@ -1768,7 +1768,7 @@ gld_${EMULATION_NAME}_place_orphan (asection *s,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bfd_boolean
|
static bfd_boolean
|
||||||
|
@ -1371,7 +1371,7 @@ gld_${EMULATION_NAME}_finish (void)
|
|||||||
default linker script using wildcards, and are sorted by
|
default linker script using wildcards, and are sorted by
|
||||||
sort_sections. */
|
sort_sections. */
|
||||||
|
|
||||||
static bfd_boolean
|
static lang_output_section_statement_type *
|
||||||
gld_${EMULATION_NAME}_place_orphan (asection *s,
|
gld_${EMULATION_NAME}_place_orphan (asection *s,
|
||||||
const char *secname,
|
const char *secname,
|
||||||
int constraint)
|
int constraint)
|
||||||
@ -1527,7 +1527,7 @@ gld_${EMULATION_NAME}_place_orphan (asection *s,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bfd_boolean
|
static bfd_boolean
|
||||||
|
@ -119,12 +119,12 @@ ldemul_open_dynamic_archive (const char *arch, search_dirs_type *search,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bfd_boolean
|
lang_output_section_statement_type *
|
||||||
ldemul_place_orphan (asection *s, const char *name, int constraint)
|
ldemul_place_orphan (asection *s, const char *name, int constraint)
|
||||||
{
|
{
|
||||||
if (ld_emulation->place_orphan)
|
if (ld_emulation->place_orphan)
|
||||||
return (*ld_emulation->place_orphan) (s, name, constraint);
|
return (*ld_emulation->place_orphan) (s, name, constraint);
|
||||||
return FALSE;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -58,7 +58,7 @@ extern void ldemul_set_symbols
|
|||||||
(void);
|
(void);
|
||||||
extern void ldemul_create_output_section_statements
|
extern void ldemul_create_output_section_statements
|
||||||
(void);
|
(void);
|
||||||
extern bfd_boolean ldemul_place_orphan
|
extern lang_output_section_statement_type *ldemul_place_orphan
|
||||||
(asection *, const char *, int);
|
(asection *, const char *, int);
|
||||||
extern bfd_boolean ldemul_parse_args
|
extern bfd_boolean ldemul_parse_args
|
||||||
(int, char **);
|
(int, char **);
|
||||||
@ -151,7 +151,7 @@ typedef struct ld_emulation_xfer_struct {
|
|||||||
/* Place an orphan section. Return TRUE if it was placed, FALSE if
|
/* Place an orphan section. Return TRUE if it was placed, FALSE if
|
||||||
the default action should be taken. This field may be NULL, in
|
the default action should be taken. This field may be NULL, in
|
||||||
which case the default action will always be taken. */
|
which case the default action will always be taken. */
|
||||||
bfd_boolean (*place_orphan)
|
lang_output_section_statement_type *(*place_orphan)
|
||||||
(asection *, const char *, int);
|
(asection *, const char *, int);
|
||||||
|
|
||||||
/* Run after assigning parsing with the args, but before
|
/* Run after assigning parsing with the args, but before
|
||||||
|
Loading…
Reference in New Issue
Block a user