PR ld/12356
authorAlan Modra <amodra@gmail.com>
Thu, 13 Jan 2011 13:06:22 +0000 (13:06 +0000)
committerAlan Modra <amodra@gmail.com>
Thu, 13 Jan 2011 13:06:22 +0000 (13:06 +0000)
* ldexp.h (exp_assop): Delete.
(exp_assign, exp_defsym): Declare.
* ldexp.c (exp_assop): Make static, handle all assignment variations.
(exp_assign, exp_defsym): New functions.
(exp_provide): Use exp_assop.
* ldgram.y (defsym_expr): Use exp_defsym.
* ldctor.c, * ldgram.y, * ldlang.c, * mri.c, * emultempl/beos.em,
* emultempl/pe.em, * emultempl/pep.em, * emultempl/spuelf.em,
* emultempl/xtensaelf.em: Update exp_assop -> exp_assign.

12 files changed:
ld/ChangeLog
ld/emultempl/beos.em
ld/emultempl/pe.em
ld/emultempl/pep.em
ld/emultempl/spuelf.em
ld/emultempl/xtensaelf.em
ld/ldctor.c
ld/ldexp.c
ld/ldexp.h
ld/ldgram.y
ld/ldlang.c
ld/mri.c

index 457e380c6eac3983e49efb4204f4023ebe272025..a6a49f3168c7c5486a3c75472ae25e02d45e2cec 100644 (file)
@@ -1,3 +1,16 @@
+2011-01-13  Alan Modra  <amodra@gmail.com>
+
+       PR ld/12356
+       * ldexp.h (exp_assop): Delete.
+       (exp_assign, exp_defsym): Declare.
+       * ldexp.c (exp_assop): Make static, handle all assignment variations.
+       (exp_assign, exp_defsym): New functions.
+       (exp_provide): Use exp_assop.
+       * ldgram.y (defsym_expr): Use exp_defsym.
+       * ldctor.c, * ldgram.y, * ldlang.c, * mri.c, * emultempl/beos.em,
+       * emultempl/pe.em, * emultempl/pep.em, * emultempl/spuelf.em,
+       * emultempl/xtensaelf.em: Update exp_assop -> exp_assign.
+
 2011-01-12  Alan Modra  <amodra@gmail.com>
 
        PR ld/12380
index abd3979b38140654028485d3856efb1bbc5e75b1..708a2a9d3b78546f9a136f870ecb7f810869a5c2 100644 (file)
@@ -8,7 +8,7 @@ fi
 fragment <<EOF
 /* This file is part of GLD, the Gnu Linker.
    Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+   2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 
    This file is part of the GNU Binutils.
 
@@ -351,7 +351,7 @@ gld_${EMULATION_NAME}_set_symbols (void)
   for (j = 0; init[j].ptr; j++)
     {
       long val = init[j].value;
-      lang_add_assignment (exp_assop ('=', init[j].symbol, exp_intop (val)));
+      lang_add_assignment (exp_assign (init[j].symbol, exp_intop (val)));
       if (init[j].size == sizeof(short))
        *(short *)init[j].ptr = val;
       else if (init[j].size == sizeof(int))
index b4d7a63671f5ebf5ab3533200d8d8f628105790c..0231fa77a7a2a166296677819a92a8e57fe9d876 100644 (file)
@@ -9,7 +9,7 @@ rm -f e${EMULATION_NAME}.c
 (echo;echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)
 fragment <<EOF
 /* Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+   2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 
    This file is part of the GNU Binutils.
 
@@ -946,8 +946,8 @@ gld_${EMULATION_NAME}_set_symbols (void)
       long val = init[j].value;
       lang_assignment_statement_type *rv;
 
-      rv = lang_add_assignment (exp_assop ('=', GET_INIT_SYMBOL_NAME (j),
-                                          exp_intop (val)));
+      rv = lang_add_assignment (exp_assign (GET_INIT_SYMBOL_NAME (j),
+                                           exp_intop (val)));
       if (init[j].size == sizeof (short))
        *(short *) init[j].ptr = val;
       else if (init[j].size == sizeof (int))
@@ -1722,8 +1722,8 @@ gld_${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIB
                = pe_def_file->base_address;
              init[IMAGEBASEOFF].inited = 1;
              if (image_base_statement)
-               image_base_statement->exp = exp_assop ('=', "__image_base__",
-                                                      exp_intop (pe.ImageBase));
+               image_base_statement->exp = exp_assign ("__image_base__",
+                                                       exp_intop (pe.ImageBase));
            }
 
          if (pe_def_file->stack_reserve != -1
index e4072962978508d109179972074fc3105c6720a5..56687d673ea0042ef1733625ebd776625a2eb90e 100644 (file)
@@ -8,7 +8,8 @@ fi
 rm -f e${EMULATION_NAME}.c
 (echo;echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)
 fragment <<EOF
-/* Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+/* Copyright 2006, 2007, 2008, 2009, 2010, 2011
+   Free Software Foundation, Inc.
    Written by Kai Tietz, OneVision Software GmbH&CoKg.
 
    This file is part of the GNU Binutils.
@@ -858,8 +859,8 @@ gld_${EMULATION_NAME}_set_symbols (void)
       bfd_vma val = init[j].value;
       lang_assignment_statement_type *rv;
 
-      rv = lang_add_assignment (exp_assop ('=', GET_INIT_SYMBOL_NAME (j),
-                                          exp_intop (val)));
+      rv = lang_add_assignment (exp_assign (GET_INIT_SYMBOL_NAME (j),
+                                           exp_intop (val)));
       if (init[j].size == sizeof (short))
        *(short *) init[j].ptr = (short) val;
       else if (init[j].size == sizeof (int))
@@ -1525,8 +1526,8 @@ gld_${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIB
                = pep_def_file->base_address;
              init[IMAGEBASEOFF].inited = 1;
              if (image_base_statement)
-               image_base_statement->exp = exp_assop ('=', "__image_base__",
-                                                      exp_intop (pep.ImageBase));
+               image_base_statement->exp = exp_assign ("__image_base__",
+                                                       exp_intop (pep.ImageBase));
            }
 
          if (pep_def_file->stack_reserve != -1
index ff6785ca6e27c2dcf48e7e7743de690ad8475b59..92f2d163d3d229eb8f662dd14002548ed0b76509 100644 (file)
@@ -1,5 +1,6 @@
 # This shell script emits a C file. -*- C -*-
-#   Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+#   Copyright 2006, 2007, 2008, 2009, 2010, 2011
+#   Free Software Foundation, Inc.
 #
 # This file is part of the GNU Binutils.
 #
@@ -164,7 +165,7 @@ spu_place_special_section (asection *s, asection *o, const char *output_name)
 
          push_stat_ptr (&os->children);
          e_size = exp_intop (params.line_size - s->size);
-         lang_add_assignment (exp_assop ('=', ".", e_size));
+         lang_add_assignment (exp_assign (".", e_size));
          pop_stat_ptr ();
        }
       lang_add_section (&os->children, s, os);
index b7da721d9a6d01dcfc70bf9a4ba2a7996dc789b4..ed015a23c6ae775efa4192964adc9733d813cd66 100644 (file)
@@ -1,5 +1,5 @@
 # This shell script emits a C file. -*- C -*-
-#   Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+#   Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 #   Free Software Foundation, Inc.
 #
 # This file is part of the GNU Binutils.
@@ -1885,7 +1885,7 @@ ld_xtensa_insert_page_offsets (bfd_vma dot,
                etree_type *name_op = exp_nameop (NAME, ".");
                etree_type *addend_op = exp_intop (1 << xtensa_page_power);
                etree_type *add_op = exp_binop ('+', name_op, addend_op);
-               etree_type *assign_op = exp_assop ('=', ".", add_op);
+               etree_type *assign_op = exp_assign (".", add_op);
 
                lang_assignment_statement_type *assign_stmt;
                lang_statement_union_type *assign_union;
index c4fd9e8f720fe65d543ea676ad89474d7aee67fd..1a86eb38e893412a1cd18097c058fc59254942a6 100644 (file)
@@ -1,6 +1,6 @@
 /* ldctor.c -- constructor support routines
    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-   2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+   2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011
    Free Software Foundation, Inc.
    By Steve Chamberlain <sac@cygnus.com>
 
@@ -319,11 +319,11 @@ ldctor_build_sets (void)
          break;
        }
 
-      lang_add_assignment (exp_assop ('=', ".",
-                                     exp_unop (ALIGN_K,
-                                               exp_intop (reloc_size))));
-      lang_add_assignment (exp_assop ('=', p->h->root.string,
-                                     exp_nameop (NAME, ".")));
+      lang_add_assignment (exp_assign (".",
+                                      exp_unop (ALIGN_K,
+                                                exp_intop (reloc_size))));
+      lang_add_assignment (exp_assign (p->h->root.string,
+                                      exp_nameop (NAME, ".")));
       lang_add_data (size, exp_intop (p->count));
 
       for (e = p->elements; e != NULL; e = e->next)
index 9aad09214f2280ea640f70b554799225392a52f7..326a0aa1f20d724e9329cad6638ab31b52094bc8 100644 (file)
@@ -974,37 +974,44 @@ exp_nameop (int code, const char *name)
 
 }
 
-etree_type *
-exp_assop (int code, const char *dst, etree_type *src)
-{
-  etree_type *new_e;
-
-  new_e = (etree_type *) stat_alloc (sizeof (new_e->assign));
-  new_e->type.node_code = code;
-  new_e->type.lineno = src->type.lineno;
-  new_e->type.node_class = etree_assign;
-  new_e->assign.src = src;
-  new_e->assign.dst = dst;
-  return new_e;
-}
-
-/* Handle PROVIDE.  */
-
-etree_type *
-exp_provide (const char *dst, etree_type *src, bfd_boolean hidden)
+static etree_type *
+exp_assop (const char *dst,
+          etree_type *src,
+          enum node_tree_enum class,
+          bfd_boolean hidden)
 {
   etree_type *n;
 
   n = (etree_type *) stat_alloc (sizeof (n->assign));
   n->assign.type.node_code = '=';
   n->assign.type.lineno = src->type.lineno;
-  n->assign.type.node_class = etree_provide;
+  n->assign.type.node_class = class;
   n->assign.src = src;
   n->assign.dst = dst;
   n->assign.hidden = hidden;
   return n;
 }
 
+etree_type *
+exp_assign (const char *dst, etree_type *src)
+{
+  return exp_assop (dst, src, etree_assign, FALSE);
+}
+
+etree_type *
+exp_defsym (const char *dst, etree_type *src)
+{
+  return exp_assop (dst, src, etree_assign, TRUE);
+}
+
+/* Handle PROVIDE.  */
+
+etree_type *
+exp_provide (const char *dst, etree_type *src, bfd_boolean hidden)
+{
+  return exp_assop (dst, src, etree_provide, hidden);
+}
+
 /* Handle ASSERT.  */
 
 etree_type *
index 6c94be2eaba3fc80d81b686b563c961648d3a06c..2fdb7daeb55d9030ddbcfbcc5b6f0ff024eec6ac 100644 (file)
@@ -46,7 +46,7 @@ enum node_tree_enum {
 typedef struct {
   int node_code;
   unsigned int lineno;
-  enum  node_tree_enum node_class;
+  enum node_tree_enum node_class;
 } node_type;
 
 typedef union etree_union {
@@ -190,8 +190,10 @@ etree_type *exp_unop
   (int, etree_type *);
 etree_type *exp_nameop
   (int, const char *);
-etree_type *exp_assop
-  (int, const char *, etree_type *);
+etree_type *exp_assign
+  (const char *, etree_type *);
+etree_type *exp_defsym
+  (const char *, etree_type *);
 etree_type *exp_provide
   (const char *, etree_type *, bfd_boolean);
 etree_type *exp_assert
index ed0aaa76259933ba42e4eef343779ed173d1d354..49d212b170bf4cff0e8efb686fba19dfdb74a0d3 100644 (file)
@@ -1,6 +1,6 @@
 /* A YACC grammar to parse a superset of the AT&T linker scripting language.
    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
    Free Software Foundation, Inc.
    Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com).
 
@@ -176,7 +176,7 @@ defsym_expr:
                NAME '=' exp
                {
                  ldlex_popstate();
-                 lang_add_assignment(exp_assop($3,$2,$4));
+                 lang_add_assignment (exp_defsym ($2, $4));
                }
        ;
 
@@ -657,15 +657,15 @@ end:      ';' | ','
 assignment:
                NAME '=' mustbe_exp
                {
-                 lang_add_assignment (exp_assop ($2, $1, $3));
+                 lang_add_assignment (exp_assign ($1, $3));
                }
        |       NAME assign_op mustbe_exp
                {
-                 lang_add_assignment (exp_assop ('=', $1,
-                                                 exp_binop ($2,
-                                                            exp_nameop (NAME,
-                                                                        $1),
-                                                            $3)));
+                 lang_add_assignment (exp_assign ($1,
+                                                  exp_binop ($2,
+                                                             exp_nameop (NAME,
+                                                                         $1),
+                                                             $3)));
                }
        |       PROVIDE '(' NAME '=' mustbe_exp ')'
                {
@@ -983,7 +983,7 @@ section:    NAME            { ldlex_expression(); }
                opt_exp_with_type
                {
                  ldlex_popstate ();
-                 lang_add_assignment (exp_assop ('=', ".", $3));
+                 lang_add_assignment (exp_assign (".", $3));
                }
                '{' sec_or_group_p1 '}'
        |       INCLUDE filename
index 4fe80a8f6ca8bf44fb79251d6e61152dbc3e3529..2bae4abc6edaacf92406f01aa374ac07aaf9cdb5 100644 (file)
@@ -1809,7 +1809,7 @@ lang_insert_orphan (asection *s,
          sprintf (symname + (symname[0] != 0), "__start_%s", secname);
          e_align = exp_unop (ALIGN_K,
                              exp_intop ((bfd_vma) 1 << s->alignment_power));
-         lang_add_assignment (exp_assop ('=', ".", e_align));
+         lang_add_assignment (exp_assign (".", e_align));
          lang_add_assignment (exp_provide (symname,
                                            exp_unop (ABSOLUTE,
                                                      exp_nameop (NAME, ".")),
@@ -7229,7 +7229,7 @@ lang_leave_overlay (etree_type *lma_expr,
      overlay region.  */
   if (overlay_list != NULL)
     overlay_list->os->update_dot_tree
-      = exp_assop ('=', ".", exp_binop ('+', overlay_vma, overlay_max));
+      = exp_assign (".", exp_binop ('+', overlay_vma, overlay_max));
 
   l = overlay_list;
   while (l != NULL)
index 1932a939ed6d4f61aae4ff77eefa6bc219d38c05..ce1406af339e86af5ba2e782651bf758fdfb8d22 100644 (file)
--- a/ld/mri.c
+++ b/ld/mri.c
@@ -1,6 +1,6 @@
 /* mri.c -- handle MRI style linker scripts
    Copyright 1991, 1992, 1993, 1994, 1996, 1997, 1998, 1999, 2000, 2001,
-   2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+   2002, 2003, 2004, 2005, 2007, 2011 Free Software Foundation, Inc.
    Contributed by Steve Chamberlain <sac@cygnus.com>.
 
    This file is part of the GNU Binutils.
@@ -295,7 +295,7 @@ mri_format (const char *name)
 void
 mri_public (const char *name, etree_type *exp)
 {
-  lang_add_assignment (exp_assop ('=', name, exp));
+  lang_add_assignment (exp_assign (name, exp));
 }
 
 void