PR gas/12519
authorAlan Modra <amodra@gmail.com>
Fri, 25 Feb 2011 13:45:54 +0000 (13:45 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 25 Feb 2011 13:45:54 +0000 (13:45 +0000)
* config/obj-elf.c (elf_frob_symbol): Properly handle size expression.
* ld-mn10300/i135409-3.s: Correct .size label reference.
* ld-sh/sh64/stolib.s: Likewise.

gas/ChangeLog
gas/config/obj-elf.c
ld/testsuite/ChangeLog
ld/testsuite/ld-mn10300/i135409-3.s
ld/testsuite/ld-sh/sh64/stolib.s

index 73ee82a8958a916c8530d452ffd438f6b5817cf7..b90e75f2cd8387b7b1d90c19ed318f7aab8f24a8 100644 (file)
@@ -1,3 +1,8 @@
+2011-02-25  Alan Modra  <amodra@gmail.com>
+
+       PR gas/12519
+       * config/obj-elf.c (elf_frob_symbol): Properly handle size expression.
+
 2011-02-21  Maciej W. Rozycki  <macro@codesourcery.com>
 
        * config/tc-mips.c (mips_ip) <'o'>: Remove duplicate
index c6dc8d6e54d19fd12a1c42c3a25c621cda65625f..969a5091e8e8f70f1e17214d98a68bd65aef9d80 100644 (file)
@@ -1,6 +1,6 @@
 /* ELF object file format
    Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
    Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
@@ -1889,23 +1889,11 @@ elf_frob_symbol (symbolS *symp, int *puntp)
 
   if (sy_obj->size != NULL)
     {
-      switch (sy_obj->size->X_op)
-       {
-       case O_subtract:
-         S_SET_SIZE (symp,
-                     (S_GET_VALUE (sy_obj->size->X_add_symbol)
-                      + sy_obj->size->X_add_number
-                      - S_GET_VALUE (sy_obj->size->X_op_symbol)));
-         break;
-       case O_constant:
-         S_SET_SIZE (symp,
-                     (S_GET_VALUE (sy_obj->size->X_add_symbol)
-                      + sy_obj->size->X_add_number));
-         break;
-       default:
-         as_bad (_(".size expression too complicated to fix up"));
-         break;
-       }
+      if (resolve_expression (sy_obj->size)
+         && sy_obj->size->X_op == O_constant)
+       S_SET_SIZE (symp, sy_obj->size->X_add_number);
+      else
+       as_bad (_(".size expression does not evaluate to a constant"));
       free (sy_obj->size);
       sy_obj->size = NULL;
     }
index 1de772bd60ab5d4111f04cff593e68dcc0f917ed..b7de27d9363ef7c685c15f41e047bee52ee92c6d 100644 (file)
@@ -1,3 +1,8 @@
+2011-02-25  Alan Modra  <amodra@gmail.com>
+
+       * ld-mn10300/i135409-3.s: Correct .size label reference.
+       * ld-sh/sh64/stolib.s: Likewise.
+
 2011-02-23  H.J. Lu  <hongjiu.lu@intel.com>
 
        * ld-elf/new.cc: Don't include <exception_defines.h>.
index e83ad96d2ace2c9de9ca839c06ec3e7aa8406965..8113b7802f83d09a379ec0af7bbe6bd09336a344 100644 (file)
@@ -10,7 +10,7 @@ A:
 BOTTOM:
       .balign 0x8
       add     D0,D1
-      .size   _func, .-func
+      .size   _func, .-_func
 
       .data
 L001:
index 587faa6d161a85784cb387fa5b56f891ede4b3c1..a5dee2b28697638feaace111eba29b5ce7542031 100644 (file)
@@ -4,4 +4,4 @@
 bar:
        ptabs   r18, tr0
        blink   tr0, r63
-       .Lfe_bar: .size bar,.Lfe_bar-X
+.Lfe_bar: .size bar,.Lfe_bar-bar