Author: avg
Date: Sat Aug 21 18:38:56 2010
New Revision: 211583
URL: http://svn.freebsd.org/changeset/base/211583

Log:
  MFC r210245: binutils/ld: fix incorrect placement of __start_SECNAME in
  some cases

Modified:
  stable/8/contrib/binutils/ld/emultempl/elf32.em
Directory Properties:
  stable/8/contrib/binutils/   (props changed)

Modified: stable/8/contrib/binutils/ld/emultempl/elf32.em
==============================================================================
--- stable/8/contrib/binutils/ld/emultempl/elf32.em     Sat Aug 21 18:26:55 
2010        (r211582)
+++ stable/8/contrib/binutils/ld/emultempl/elf32.em     Sat Aug 21 18:38:56 
2010        (r211583)
@@ -1314,26 +1314,6 @@ gld${EMULATION_NAME}_place_orphan (lang_
       lang_list_init (stat_ptr);
     }
 
-  if (config.build_constructors)
-    {
-      /* If the name of the section is representable in C, then create
-        symbols to mark the start and the end of the section.  */
-      for (ps = secname; *ps != '\0'; ps++)
-       if (! ISALNUM (*ps) && *ps != '_')
-         break;
-      if (*ps == '\0')
-       {
-         char *symname;
-         etree_type *e_align;
-
-         symname = (char *) xmalloc (ps - secname + sizeof "__start_");
-         sprintf (symname, "__start_%s", secname);
-         e_align = exp_unop (ALIGN_K,
-                             exp_intop ((bfd_vma) 1 << s->alignment_power));
-         lang_add_assignment (exp_assop ('=', symname, e_align));
-       }
-    }
-
   address = NULL;
   if (link_info.relocatable || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
     address = exp_intop ((bfd_vma) 0);
@@ -1354,6 +1334,26 @@ gld${EMULATION_NAME}_place_orphan (lang_
                                            (etree_type *) NULL,
                                            load_base);
 
+  if (config.build_constructors)
+    {
+      /* If the name of the section is representable in C, then create
+        symbols to mark the start and the end of the section.  */
+      for (ps = secname; *ps != '\0'; ps++)
+       if (! ISALNUM (*ps) && *ps != '_')
+         break;
+      if (*ps == '\0')
+       {
+         char *symname;
+         etree_type *e_align;
+
+         symname = (char *) xmalloc (ps - secname + sizeof "__start_");
+         sprintf (symname, "__start_%s", secname);
+         lang_add_assignment (exp_assop ('=', symname,
+                                         exp_unop (ABSOLUTE,
+                                                   exp_nameop (NAME, "."))));
+       }
+    }
+
   lang_add_section (&os->children, s, os, file);
 
   lang_leave_output_section_statement
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to