ld:
authorZack Weinberg <zackw@panix.com>
Wed, 1 Jun 2005 04:04:19 +0000 (04:04 +0000)
committerZack Weinberg <zackw@panix.com>
Wed, 1 Jun 2005 04:04:19 +0000 (04:04 +0000)
* ldlang.c (entry_symbol_default): New file-scope global.
(lang_finish): Use it, not a hardwired "start".
(lang_default_entry): Set it.
* ldlang.h: Declare lang_default_entry.
* emultempl/beos.em, emultempl/pe.em: Use lang_default_entry,
not lang_add_entry, to override default entry point symbol.

ld/testsuite:
* ld-scripts/align.exp: Mark align1 XFAIL on PECOFF targets.
* ld-scripts/data.exp: Mark data UNSUPPORTED on a.out targets.
* ld-scripts/provide.exp, ld-scripts/size.exp: Mark all tests
UNSUPPORTED on a.out targets.  Tidy.

ld/ChangeLog
ld/emultempl/beos.em
ld/emultempl/pe.em
ld/ldlang.c
ld/ldlang.h
ld/testsuite/ChangeLog
ld/testsuite/ld-scripts/align.exp
ld/testsuite/ld-scripts/data.exp
ld/testsuite/ld-scripts/provide.exp
ld/testsuite/ld-scripts/size.exp

index 32362d506255d5a9af2977d8640d43f51fdce9d7..e6f8abd770170b40f1dab5bd0fb24f17c001c082 100644 (file)
@@ -1,3 +1,12 @@
+2005-05-31  Zack Weinberg  <zack@codesourcery.com>
+
+       * ldlang.c (entry_symbol_default): New file-scope global.
+       (lang_finish): Use it, not a hardwired "start".
+       (lang_default_entry): Set it.
+       * ldlang.h: Declare lang_default_entry.
+       * emultempl/beos.em, emultempl/pe.em: Use lang_default_entry,
+       not lang_add_entry, to override default entry point symbol.
+
 2005-05-29  Richard Henderson  <rth@redhat.com>
 
        * emulparams/elf64alpha.sh (PLT): New.
index 24d4c442105fa6deb2d4025d206acb636e2c8294..4e06372fd29b79a249ef9b02348b74c799725df0 100644 (file)
@@ -216,23 +216,8 @@ set_pe_subsystem (void)
          set_pe_name ("__subsystem__", v[i].value);
 
          /* If the subsystem is windows, we use a different entry
-            point.  We also register the entry point as an undefined
-            symbol. from lang_add_entry() The reason we do
-            this is so that the user
-            doesn't have to because they would have to use the -u
-            switch if they were specifying an entry point other than
-            _mainCRTStartup.  Specifically, if creating a windows
-            application, entry point _WinMainCRTStartup must be
-            specified.  What I have found for non console
-            applications (entry not _mainCRTStartup) is that the .obj
-            that contains mainCRTStartup is brought in since it is
-            the first encountered in libc.lib and it has other
-            symbols in it which will be pulled in by the link
-            process.  To avoid this, adding -u with the entry point
-            name specified forces the correct .obj to be used.  We
-            can avoid making the user do this by always adding the
-            entry point name as an undefined symbol.  */
-         lang_add_entry (v[i].entry, 1);
+            point.  */
+         lang_default_entry (v[i].entry);
 
          return;
        }
index 1336a318999558b13daa777de987cc8d0b134c63..bd6f191b8127424437d85cba28eeea1f4196e495 100644 (file)
@@ -139,9 +139,9 @@ gld_${EMULATION_NAME}_before_parse (void)
 
 #if (PE_DEF_SUBSYSTEM == 9) || (PE_DEF_SUBSYSTEM == 2)
 #if defined TARGET_IS_mipspe || defined TARGET_IS_armpe
-  lang_add_entry ("WinMainCRTStartup", FALSE);
+  lang_default_entry ("WinMainCRTStartup");
 #else
-  lang_add_entry ("_WinMainCRTStartup", FALSE);
+  lang_default_entry ("_WinMainCRTStartup");
 #endif
 #endif
 #endif
@@ -457,7 +457,7 @@ set_pe_subsystem (void)
     {
       char *alc_entry;
 
-      /* lang_add_entry expects its argument to be permanently
+      /* lang_default_entry expects its argument to be permanently
         allocated, so we don't free this string.  */
       alc_entry = xmalloc (strlen (initial_symbol_char)
                           + strlen (entry)
@@ -467,7 +467,7 @@ set_pe_subsystem (void)
       entry = alc_entry;
     }
 
-  lang_add_entry (entry, FALSE);
+  lang_default_entry (entry);
 
   return;
 }
index 835c93a838476f4e1718103c8ffbe522e8d0988d..25374cc34cb02c0987e02560a4ea8b3d43657288 100644 (file)
@@ -91,6 +91,7 @@ lang_statement_list_type lang_output_section_statement;
 lang_statement_list_type *stat_ptr = &statement_list;
 lang_statement_list_type file_chain = { NULL, NULL };
 struct bfd_sym_chain entry_symbol = { NULL, NULL };
+static const char *entry_symbol_default = "start";
 const char *entry_section = ".text";
 bfd_boolean entry_from_cmdline;
 bfd_boolean lang_has_input_file = FALSE;
@@ -4743,9 +4744,9 @@ lang_finish (void)
 
   if (entry_symbol.name == NULL)
     {
-      /* No entry has been specified.  Look for start, but don't warn
-        if we don't find it.  */
-      entry_symbol.name = "start";
+      /* No entry has been specified.  Look for the default entry, but
+        don't warn if we don't find it.  */
+      entry_symbol.name = entry_symbol_default;
       warn = FALSE;
     }
 
@@ -5582,6 +5583,16 @@ lang_add_entry (const char *name, bfd_boolean cmdline)
     }
 }
 
+/* Set the default start symbol to NAME.  .em files should use this,
+   not lang_add_entry, to override the use of "start" if neither the
+   linker script nor the command line specifies an entry point.  NAME
+   must be permanently allocated.  */
+void
+lang_default_entry (const char *name)
+{
+  entry_symbol_default = name;
+}
+
 void
 lang_add_target (const char *name)
 {
index eb4fc5ec0e21824fa7a20debff73ab521f2c0f78..7b88647865512ac7e835b4068d1fd817f248cc1d 100644 (file)
@@ -474,6 +474,8 @@ extern void lang_section_start
   (const char *, union etree_union *, const segment_type *);
 extern void lang_add_entry
   (const char *, bfd_boolean);
+extern void lang_default_entry
+  (const char *);
 extern void lang_add_target
   (const char *);
 extern void lang_add_wild
index 00e4d270021aec2c1838f994afae6ff48363081d..98944087864459d7a74cf5c39091b7938b55ae68 100644 (file)
@@ -1,10 +1,17 @@
+2005-05-31  Zack Weinberg  <zack@codesourcery.com>
+
+       * ld-scripts/align.exp: Mark align1 XFAIL on PECOFF targets.
+       * ld-scripts/data.exp: Mark data UNSUPPORTED on a.out targets.
+       * ld-scripts/provide.exp, ld-scripts/size.exp: Mark all tests
+       UNSUPPORTED on a.out targets.  Tidy.
+
 2005-05-27  Mark Mitchell  <mark@codesourcery.com>
 
        * config/default.exp (CC): Use find_gcc.
        (CFLAGS): Define, if no definition has been provided by the user.
        (CXX): Likewise.
        (CXXFLAGS): Likewise.
-       
+
 2005-05-24  H.J. Lu  <hongjiu.lu@intel.com>
 
        * ld-mmix/bpo-6.d: Updated.
        ld-sparc/tlssunpic64.dd, ld-sparc/tlssunpic64.rd,
        ld-sparc/tlssunpic64.sd, ld-sparc/tlssunpic64.td): Update now
        that sparc64 ELF does support TLS.
-       
+
 2005-04-13  H.J. Lu  <hongjiu.lu@intel.com>
 
        * ld-elf/empty.d: New file.
        * config/default.exp: Do not load libpath.exp if it does not
        exist.
        (CC): Provide fallback definition.
-       
+
 2005-03-24  Eric Christopher  <echristo@redhat.com>
 
        * ld-mips-elf/rel32-n32.d: Revert changes.
index 6f3a9de42ff19313da02dc94043dd2da01cb3e3e..8bcd222dba71baf6e2aa1d37056e7a6efb96339d 100644 (file)
@@ -29,6 +29,12 @@ if ![ld_assemble $as $srcdir/$subdir/align.s tmpdir/align.o] {
     return
 }
 
+# Doesn't work on PECOFF, appears to be a genuine bug
+if [is_pecoff_format] {
+  global target_triplet
+  setup_xfail $target_triplet
+}
+
 if ![ld_simple_link $ld tmpdir/align "-T $srcdir/$subdir/align.t tmpdir/align.o"] {
     fail $testname
 } else {
index 7f631109adeb08acd4cfeab429978659918a430d..8dd173a336002a16e2e9a6f9c39c018f3b91e008 100644 (file)
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
 
+# An a.out "objdump -s -j .text" has the file header visible inside the
+# text segment, confusing run_dump_test.
+if {[is_aout_format]} {
+       unsupported data
+       return
+}
+
 run_dump_test data
index 6589e17c954201f19c2b9b322c18591a9bb23dfa..7e2c0e7e01d6797cde43303d817d812d0766cfad 100644 (file)
 # 
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+# USA.
 
-if [istarget "rs6000-*-aix*"] {
-    # Target maps .text and .data to other sections.
+# AIX maps .text and .data to other sections.
+# a.out objdump displays the file header inside the text segment,
+# confusing run_dump_test.
+
+if {[istarget "rs6000-*-aix*"] || [is_aout_format]} {
+    unsupported provide-1
+    unsupported provide-2
+    unsupported provide-3
     return
 }
 
-set testname "provide"
-
 run_dump_test provide-1
 run_dump_test provide-2
 setup_xfail *-*-*
index ba08fe270d7135c53e7e401d40c540262a988bdf..49405cb89d95f65405f09874b559d467febe223f 100644 (file)
 # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
 #
 
-if [istarget "rs6000-*-aix*"] {
-    # Target maps .text and .data to other sections.
+# AIX maps .text and .data to other sections.
+# a.out objdump displays the file header inside the text segment,
+# confusing run_dump_test.
+
+if {[istarget "rs6000-*-aix*"] || [is_aout_format]} {
+    unsupported size-1
+    unsupported size-2
     return
 }
 
 run_dump_test size-1
 
-if ![is_elf_format] {
-    return
-}
-
-if [istarget "mips*-*-*"] {
-    # MIPS inserts a REGINFO PHDR
+# size-2 only works on ELF targets.
+# MIPS inserts a REGINFO PHDR
+if {![is_elf_format] || [istarget "mips*-*-*"]} {
+    unsupported size-2
     return
 }