svn commit: r211583 - stable/8/contrib/binutils/ld/emultempl

Andriy Gapon avg at FreeBSD.org
Sat Aug 21 18:38:57 UTC 2010


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


More information about the svn-src-all mailing list