* ldemul.c (ldemul_do_assignments): New function.
authorAlan Modra <amodra@gmail.com>
Fri, 15 Jul 2005 12:19:15 +0000 (12:19 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 15 Jul 2005 12:19:15 +0000 (12:19 +0000)
(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.

18 files changed:
ld/ChangeLog
ld/emultempl/aix.em
ld/emultempl/armcoff.em
ld/emultempl/beos.em
ld/emultempl/elf32.em
ld/emultempl/generic.em
ld/emultempl/gld960.em
ld/emultempl/gld960c.em
ld/emultempl/linux.em
ld/emultempl/lnk960.em
ld/emultempl/m68kcoff.em
ld/emultempl/pe.em
ld/emultempl/sunos.em
ld/emultempl/ticoff.em
ld/emultempl/vanilla.em
ld/ldemul.c
ld/ldemul.h
ld/ldlang.c

index 1fe6ae0..1de79ac 100644 (file)
@@ -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.
index ac47682..8030b47 100644 (file)
@@ -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}",
index 86a6002..64a2b32 100644 (file)
@@ -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}",
index 4e06372..7a014ce 100644 (file)
@@ -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}",
index 9480c2c..3899a02 100644 (file)
@@ -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}",
index e808cb1..a37bdc6 100644 (file)
@@ -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}",
index c202d6d..acacac7 100644 (file)
@@ -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",
   "",
index 7c14179..452c194 100644 (file)
@@ -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",
   "",
index a9b27f6..277d1e9 100644 (file)
@@ -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}",
index 924dd47..1c82065 100644 (file)
@@ -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",
   "",
index 29c61ce..9b011d3 100644 (file)
@@ -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}",
index 7c0fb95..aefe3aa 100644 (file)
@@ -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}",
index d8e576d..b114737 100644 (file)
@@ -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}",
index 59e6726..9c4ec2b 100644 (file)
@@ -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}",
index e2f0989..769fb30 100644 (file)
@@ -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",
index 8e6669d..fbe3e1d 100644 (file)
@@ -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.  */
index 1170c0a..1a42cb6 100644 (file)
@@ -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);
 
index 35c5075..dc8aa14 100644 (file)
@@ -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