summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2005-07-15 12:19:15 +0000
committerAlan Modra <amodra@bigpond.net.au>2005-07-15 12:19:15 +0000
commitfde0a363c3808536e48eb7afeb9193ea2705b9b3 (patch)
treef5e138545fbba3a13d1ffc45a7f2bced4d1a71d6
parent6dbaacf1109bee562003db5b38b662d146505194 (diff)
downloadbinutils-redhat-fde0a363c3808536e48eb7afeb9193ea2705b9b3.tar.gz
* ldemul.c (ldemul_do_assignments): New function.
(do_assignments_default): New function. * ldemul.h (ldemul_do_assignments): Declare. (do_assignments_default): Declare. (struct ld_emulation_xfer_struct): Add do_assignments. * ldlang.c (lang_do_assignments) Call ldemul_do_assignments. * emultempl/aix.em (ld_*_emulation): Init do_assignments field. * emultempl/armcoff.em: Likewise. * emultempl/beos.em: Likewise. * emultempl/generic.em: Likewise. * emultempl/gld960.em: Likewise. * emultempl/gld960c.em: Likewise. * emultempl/linux.em: Likewise. * emultempl/lnk960.em: Likewise. * emultempl/m68kcoff.em: Likewise. * emultempl/pe.em: Likewise. * emultempl/sunos.em: Likewise. * emultempl/ticoff.em: Likewise. * emultempl/vanilla.em: Likewise. * emultempl/elf32.em: Likewise, to call gld*_provide_init_fini_syms. (gld*_find_exp_assignment): Adjust bfd_elf_record_link_assignment call.
-rw-r--r--ld/ChangeLog24
-rw-r--r--ld/emultempl/aix.em1
-rw-r--r--ld/emultempl/armcoff.em1
-rw-r--r--ld/emultempl/beos.em1
-rw-r--r--ld/emultempl/elf32.em5
-rw-r--r--ld/emultempl/generic.em1
-rw-r--r--ld/emultempl/gld960.em1
-rw-r--r--ld/emultempl/gld960c.em1
-rw-r--r--ld/emultempl/linux.em1
-rw-r--r--ld/emultempl/lnk960.em1
-rw-r--r--ld/emultempl/m68kcoff.em1
-rw-r--r--ld/emultempl/pe.em1
-rw-r--r--ld/emultempl/sunos.em1
-rw-r--r--ld/emultempl/ticoff.em1
-rw-r--r--ld/emultempl/vanilla.em1
-rw-r--r--ld/ldemul.c11
-rw-r--r--ld/ldemul.h9
-rw-r--r--ld/ldlang.c1
18 files changed, 60 insertions, 3 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 1fe6ae0613..1de79acccf 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,27 @@
+2005-07-15 Alan Modra <amodra@bigpond.net.au>
+
+ * ldemul.c (ldemul_do_assignments): New function.
+ (do_assignments_default): New function.
+ * ldemul.h (ldemul_do_assignments): Declare.
+ (do_assignments_default): Declare.
+ (struct ld_emulation_xfer_struct): Add do_assignments.
+ * ldlang.c (lang_do_assignments) Call ldemul_do_assignments.
+ * emultempl/aix.em (ld_*_emulation): Init do_assignments field.
+ * emultempl/armcoff.em: Likewise.
+ * emultempl/beos.em: Likewise.
+ * emultempl/generic.em: Likewise.
+ * emultempl/gld960.em: Likewise.
+ * emultempl/gld960c.em: Likewise.
+ * emultempl/linux.em: Likewise.
+ * emultempl/lnk960.em: Likewise.
+ * emultempl/m68kcoff.em: Likewise.
+ * emultempl/pe.em: Likewise.
+ * emultempl/sunos.em: Likewise.
+ * emultempl/ticoff.em: Likewise.
+ * emultempl/vanilla.em: Likewise.
+ * emultempl/elf32.em: Likewise, to call gld*_provide_init_fini_syms.
+ (gld*_find_exp_assignment): Adjust bfd_elf_record_link_assignment call.
+
2005-07-14 Jim Blandy <jimb@redhat.com>
Add support for the Renesas M32C and M16C.
diff --git a/ld/emultempl/aix.em b/ld/emultempl/aix.em
index ac476825dd..8030b477c0 100644
--- a/ld/emultempl/aix.em
+++ b/ld/emultempl/aix.em
@@ -1340,6 +1340,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = {
gld${EMULATION_NAME}_set_output_arch,
gld${EMULATION_NAME}_choose_target,
gld${EMULATION_NAME}_before_allocation,
+ do_assignments_default,
gld${EMULATION_NAME}_get_script,
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",
diff --git a/ld/emultempl/armcoff.em b/ld/emultempl/armcoff.em
index 86a6002456..64a2b32d82 100644
--- a/ld/emultempl/armcoff.em
+++ b/ld/emultempl/armcoff.em
@@ -260,6 +260,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
set_output_arch_default,
ldemul_default_target,
gld${EMULATION_NAME}_before_allocation,
+ do_assignments_default,
gld${EMULATION_NAME}_get_script,
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",
diff --git a/ld/emultempl/beos.em b/ld/emultempl/beos.em
index 4e06372fd2..7a014ce210 100644
--- a/ld/emultempl/beos.em
+++ b/ld/emultempl/beos.em
@@ -767,6 +767,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
set_output_arch_default,
ldemul_default_target,
gld_${EMULATION_NAME}_before_allocation,
+ do_assignments_default,
gld_${EMULATION_NAME}_get_script,
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em
index 9480c2c6ab..3899a02df6 100644
--- a/ld/emultempl/elf32.em
+++ b/ld/emultempl/elf32.em
@@ -981,8 +981,8 @@ gld${EMULATION_NAME}_find_exp_assignment (etree_type *exp)
will do no harm. */
if (strcmp (exp->assign.dst, ".") != 0)
{
- if (!bfd_elf_record_link_assignment (output_bfd, &link_info,
- exp->assign.dst, provide))
+ if (!bfd_elf_record_link_assignment (&link_info, exp->assign.dst,
+ provide))
einfo ("%P%F: failed to record assignment to %s: %E\n",
exp->assign.dst);
}
@@ -1881,6 +1881,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
${LDEMUL_BEFORE_ALLOCATION-gld${EMULATION_NAME}_before_allocation},
+ ${LDEMUL_DO_ASSIGNMENTS-gld${EMULATION_NAME}_provide_init_fini_syms},
${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",
diff --git a/ld/emultempl/generic.em b/ld/emultempl/generic.em
index e808cb1f26..a37bdc6cb1 100644
--- a/ld/emultempl/generic.em
+++ b/ld/emultempl/generic.em
@@ -128,6 +128,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
${LDEMUL_BEFORE_ALLOCATION-before_allocation_default},
+ ${LDEMUL_DO_ASSIGNMENTS-do_assignments_default},
${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",
diff --git a/ld/emultempl/gld960.em b/ld/emultempl/gld960.em
index c202d6db50..acacac762a 100644
--- a/ld/emultempl/gld960.em
+++ b/ld/emultempl/gld960.em
@@ -134,6 +134,7 @@ struct ld_emulation_xfer_struct ld_gld960_emulation =
gld960_set_output_arch,
gld960_choose_target,
before_allocation_default,
+ do_assignments_default,
gld960_get_script,
"960",
"",
diff --git a/ld/emultempl/gld960c.em b/ld/emultempl/gld960c.em
index 7c14179e03..452c194b45 100644
--- a/ld/emultempl/gld960c.em
+++ b/ld/emultempl/gld960c.em
@@ -149,6 +149,7 @@ struct ld_emulation_xfer_struct ld_gld960coff_emulation =
gld960_set_output_arch,
gld960_choose_target,
before_allocation_default,
+ do_assignments_default,
gld960_get_script,
"960coff",
"",
diff --git a/ld/emultempl/linux.em b/ld/emultempl/linux.em
index a9b27f6380..277d1e950b 100644
--- a/ld/emultempl/linux.em
+++ b/ld/emultempl/linux.em
@@ -189,6 +189,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
set_output_arch_default,
ldemul_default_target,
gld${EMULATION_NAME}_before_allocation,
+ do_assignments_default,
gld${EMULATION_NAME}_get_script,
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",
diff --git a/ld/emultempl/lnk960.em b/ld/emultempl/lnk960.em
index 924dd4724b..1c820655cf 100644
--- a/ld/emultempl/lnk960.em
+++ b/ld/emultempl/lnk960.em
@@ -269,6 +269,7 @@ struct ld_emulation_xfer_struct ld_lnk960_emulation =
lnk960_set_output_arch,
lnk960_choose_target,
before_allocation_default,
+ do_assignments_default,
lnk960_get_script,
"lnk960",
"",
diff --git a/ld/emultempl/m68kcoff.em b/ld/emultempl/m68kcoff.em
index 29c61ce0f9..9b011d3eac 100644
--- a/ld/emultempl/m68kcoff.em
+++ b/ld/emultempl/m68kcoff.em
@@ -222,6 +222,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
set_output_arch_default,
ldemul_default_target,
before_allocation_default,
+ do_assignments_default,
gld${EMULATION_NAME}_get_script,
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",
diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em
index 7c0fb95bc3..aefe3aad60 100644
--- a/ld/emultempl/pe.em
+++ b/ld/emultempl/pe.em
@@ -1822,6 +1822,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
set_output_arch_default,
ldemul_default_target,
gld_${EMULATION_NAME}_before_allocation,
+ do_assignments_default,
gld_${EMULATION_NAME}_get_script,
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",
diff --git a/ld/emultempl/sunos.em b/ld/emultempl/sunos.em
index d8e576dacb..b114737167 100644
--- a/ld/emultempl/sunos.em
+++ b/ld/emultempl/sunos.em
@@ -1013,6 +1013,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
set_output_arch_default,
ldemul_default_target,
gld${EMULATION_NAME}_before_allocation,
+ do_assignments_default,
gld${EMULATION_NAME}_get_script,
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",
diff --git a/ld/emultempl/ticoff.em b/ld/emultempl/ticoff.em
index 59e67260f7..9c4ec2b052 100644
--- a/ld/emultempl/ticoff.em
+++ b/ld/emultempl/ticoff.em
@@ -162,6 +162,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
set_output_arch_default,
ldemul_default_target,
before_allocation_default,
+ do_assignments_default,
gld_${EMULATION_NAME}_get_script,
"${EMULATION_NAME}",
"${OUTPUT_FORMAT}",
diff --git a/ld/emultempl/vanilla.em b/ld/emultempl/vanilla.em
index e2f098954c..769fb30f8e 100644
--- a/ld/emultempl/vanilla.em
+++ b/ld/emultempl/vanilla.em
@@ -65,6 +65,7 @@ struct ld_emulation_xfer_struct ld_vanilla_emulation =
vanilla_set_output_arch,
ldemul_default_target,
before_allocation_default,
+ do_assignments_default,
vanilla_get_script,
"vanilla",
"a.out-sunos-big",
diff --git a/ld/ldemul.c b/ld/ldemul.c
index 8e6669dce2..fbe3e1dd56 100644
--- a/ld/ldemul.c
+++ b/ld/ldemul.c
@@ -80,6 +80,12 @@ ldemul_before_allocation (void)
}
void
+ldemul_do_assignments (void)
+{
+ ld_emulation->do_assignments ();
+}
+
+void
ldemul_set_output_arch (void)
{
ld_emulation->set_output_arch ();
@@ -217,6 +223,11 @@ before_allocation_default (void)
}
void
+do_assignments_default (void)
+{
+}
+
+void
set_output_arch_default (void)
{
/* Set the output architecture and machine if possible. */
diff --git a/ld/ldemul.h b/ld/ldemul.h
index 1170c0a021..1a42cb63de 100644
--- a/ld/ldemul.h
+++ b/ld/ldemul.h
@@ -1,6 +1,6 @@
/* ld-emul.h - Linker emulation header file
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001,
- 2002, 2003, 2004
+ 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
This file is part of GLD, the Gnu Linker.
@@ -35,6 +35,8 @@ extern void ldemul_after_allocation
(void);
extern void ldemul_before_allocation
(void);
+extern void ldemul_do_assignments
+ (void);
extern void ldemul_set_output_arch
(void);
extern char *ldemul_choose_target
@@ -77,6 +79,8 @@ extern void after_allocation_default
(void);
extern void before_allocation_default
(void);
+extern void do_assignments_default
+ (void);
extern void set_output_arch_default
(void);
extern void syslib_default
@@ -117,6 +121,9 @@ typedef struct ld_emulation_xfer_struct {
/* Run before allocating output sections. */
void (*before_allocation) (void);
+ /* Run to set special symbols at the same time as link script syms. */
+ void (*do_assignments) (void);
+
/* Return the appropriate linker script. */
char * (*get_script) (int *isfile);
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 35c507525f..dc8aa1497e 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -4585,6 +4585,7 @@ lang_do_assignments (void)
{
lang_statement_iteration++;
lang_do_assignments_1 (statement_list.head, abs_output_section, NULL, 0);
+ ldemul_do_assignments ();
}
/* Fix any .startof. or .sizeof. symbols. When the assemblers see the