aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ld/ChangeLog9
-rw-r--r--ld/emultempl/ppc32elf.em8
-rw-r--r--ld/emultempl/ppc64elf.em11
-rw-r--r--ld/ldlex.h113
-rw-r--r--ld/lexsup.c113
-rw-r--r--ld/testsuite/ChangeLog4
-rw-r--r--ld/testsuite/ld-srec/srec.exp6
7 files changed, 145 insertions, 119 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index d9cf590..f513cc6 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,12 @@
+2012-05-26 Alan Modra <amodra@gmail.com>
+
+ * ldlex.h (enum option_values): Move from..
+ * lexsup.c: ..here.
+ * emultempl/ppc32elf.em: Include ldlex.h.
+ (PARSE_AND_LIST_ARGS_CASES): Disable optimisations when
+ --traditional-format.
+ * emultempl/ppc64elf.em: Likewise.
+
2012-05-25 Alan Modra <amodra@gmail.com>
PR ld/13909
diff --git a/ld/emultempl/ppc32elf.em b/ld/emultempl/ppc32elf.em
index d9d7c03..6843770 100644
--- a/ld/emultempl/ppc32elf.em
+++ b/ld/emultempl/ppc32elf.em
@@ -1,5 +1,5 @@
# This shell script emits a C file. -*- C -*-
-# Copyright 2003, 2005, 2007, 2008, 2009, 2010, 2011
+# Copyright 2003, 2005, 2007, 2008, 2009, 2010, 2011, 2012
# Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
@@ -27,6 +27,7 @@ fragment <<EOF
#include "libbfd.h"
#include "elf32-ppc.h"
+#include "ldlex.h"
#define is_ppc_elf(bfd) \
(bfd_get_flavour (bfd) == bfd_target_elf_flavour \
@@ -237,6 +238,11 @@ PARSE_AND_LIST_ARGS_CASES=${PARSE_AND_LIST_ARGS_CASES}'
case OPTION_OLD_GOT:
old_got = 1;
break;
+
+ case OPTION_TRADITIONAL_FORMAT:
+ notlsopt = 1;
+ no_tls_get_addr_opt = 1;
+ return FALSE;
'
# Put these extra ppc32elf routines in ld_${EMULATION_NAME}_emulation
diff --git a/ld/emultempl/ppc64elf.em b/ld/emultempl/ppc64elf.em
index 40882ab..d578f7f 100644
--- a/ld/emultempl/ppc64elf.em
+++ b/ld/emultempl/ppc64elf.em
@@ -29,6 +29,7 @@ fragment <<EOF
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf64-ppc.h"
+#include "ldlex.h"
/* Fake input file for stubs. */
static lang_input_statement_type *stub_file;
@@ -850,6 +851,16 @@ PARSE_AND_LIST_ARGS_CASES=${PARSE_AND_LIST_ARGS_CASES}'
case OPTION_NON_OVERLAPPING_OPD:
non_overlapping_opd = 1;
break;
+
+ case OPTION_TRADITIONAL_FORMAT:
+ no_tls_opt = 1;
+ no_tls_get_addr_opt = 1;
+ no_opd_opt = 1;
+ no_toc_opt = 1;
+ no_multi_toc = 1;
+ no_toc_sort = 1;
+ plt_static_chain = 1;
+ return FALSE;
'
# Put these extra ppc64elf routines in ld_${EMULATION_NAME}_emulation
diff --git a/ld/ldlex.h b/ld/ldlex.h
index 739a9b0..5e3d2fc 100644
--- a/ld/ldlex.h
+++ b/ld/ldlex.h
@@ -24,6 +24,119 @@
#include <stdio.h>
+/* Codes used for the long options with no short synonyms. 150 isn't
+ special; it's just an arbitrary non-ASCII char value. */
+enum option_values
+{
+ OPTION_ASSERT = 150,
+ OPTION_CALL_SHARED,
+ OPTION_CREF,
+ OPTION_DEFSYM,
+ OPTION_DEMANGLE,
+ OPTION_DYNAMIC_LINKER,
+ OPTION_SYSROOT,
+ OPTION_EB,
+ OPTION_EL,
+ OPTION_EMBEDDED_RELOCS,
+ OPTION_EXPORT_DYNAMIC,
+ OPTION_NO_EXPORT_DYNAMIC,
+ OPTION_HELP,
+ OPTION_IGNORE,
+ OPTION_MAP,
+ OPTION_NO_DEMANGLE,
+ OPTION_NO_KEEP_MEMORY,
+ OPTION_NO_WARN_MISMATCH,
+ OPTION_NO_WARN_SEARCH_MISMATCH,
+ OPTION_NOINHIBIT_EXEC,
+ OPTION_NON_SHARED,
+ OPTION_NO_WHOLE_ARCHIVE,
+ OPTION_OFORMAT,
+ OPTION_RELAX,
+ OPTION_NO_RELAX,
+ OPTION_RETAIN_SYMBOLS_FILE,
+ OPTION_RPATH,
+ OPTION_RPATH_LINK,
+ OPTION_SHARED,
+ OPTION_SONAME,
+ OPTION_SORT_COMMON,
+ OPTION_SORT_SECTION,
+ OPTION_STATS,
+ OPTION_SYMBOLIC,
+ OPTION_SYMBOLIC_FUNCTIONS,
+ OPTION_TASK_LINK,
+ OPTION_TBSS,
+ OPTION_TDATA,
+ OPTION_TTEXT,
+ OPTION_TTEXT_SEGMENT,
+ OPTION_TRADITIONAL_FORMAT,
+ OPTION_UR,
+ OPTION_VERBOSE,
+ OPTION_VERSION,
+ OPTION_VERSION_SCRIPT,
+ OPTION_VERSION_EXPORTS_SECTION,
+ OPTION_DYNAMIC_LIST,
+ OPTION_DYNAMIC_LIST_CPP_NEW,
+ OPTION_DYNAMIC_LIST_CPP_TYPEINFO,
+ OPTION_DYNAMIC_LIST_DATA,
+ OPTION_WARN_COMMON,
+ OPTION_WARN_CONSTRUCTORS,
+ OPTION_WARN_FATAL,
+ OPTION_NO_WARN_FATAL,
+ OPTION_WARN_MULTIPLE_GP,
+ OPTION_WARN_ONCE,
+ OPTION_WARN_SECTION_ALIGN,
+ OPTION_SPLIT_BY_RELOC,
+ OPTION_SPLIT_BY_FILE ,
+ OPTION_WHOLE_ARCHIVE,
+ OPTION_ADD_DT_NEEDED_FOR_DYNAMIC,
+ OPTION_NO_ADD_DT_NEEDED_FOR_DYNAMIC,
+ OPTION_ADD_DT_NEEDED_FOR_REGULAR,
+ OPTION_NO_ADD_DT_NEEDED_FOR_REGULAR,
+ OPTION_WRAP,
+ OPTION_FORCE_EXE_SUFFIX,
+ OPTION_GC_SECTIONS,
+ OPTION_NO_GC_SECTIONS,
+ OPTION_PRINT_GC_SECTIONS,
+ OPTION_NO_PRINT_GC_SECTIONS,
+ OPTION_HASH_SIZE,
+ OPTION_CHECK_SECTIONS,
+ OPTION_NO_CHECK_SECTIONS,
+ OPTION_NO_UNDEFINED,
+ OPTION_INIT,
+ OPTION_FINI,
+ OPTION_SECTION_START,
+ OPTION_UNIQUE,
+ OPTION_TARGET_HELP,
+ OPTION_ALLOW_SHLIB_UNDEFINED,
+ OPTION_NO_ALLOW_SHLIB_UNDEFINED,
+ OPTION_ALLOW_MULTIPLE_DEFINITION,
+ OPTION_NO_UNDEFINED_VERSION,
+ OPTION_DEFAULT_SYMVER,
+ OPTION_DEFAULT_IMPORTED_SYMVER,
+ OPTION_DISCARD_NONE,
+ OPTION_SPARE_DYNAMIC_TAGS,
+ OPTION_NO_DEFINE_COMMON,
+ OPTION_NOSTDLIB,
+ OPTION_NO_OMAGIC,
+ OPTION_STRIP_DISCARDED,
+ OPTION_NO_STRIP_DISCARDED,
+ OPTION_ACCEPT_UNKNOWN_INPUT_ARCH,
+ OPTION_NO_ACCEPT_UNKNOWN_INPUT_ARCH,
+ OPTION_PIE,
+ OPTION_UNRESOLVED_SYMBOLS,
+ OPTION_WARN_UNRESOLVED_SYMBOLS,
+ OPTION_ERROR_UNRESOLVED_SYMBOLS,
+ OPTION_WARN_SHARED_TEXTREL,
+ OPTION_WARN_ALTERNATE_EM,
+ OPTION_REDUCE_MEMORY_OVERHEADS,
+#ifdef ENABLE_PLUGINS
+ OPTION_PLUGIN,
+ OPTION_PLUGIN_OPT,
+#endif /* ENABLE_PLUGINS */
+ OPTION_DEFAULT_SCRIPT,
+ OPTION_PRINT_OUTPUT_FORMAT,
+};
+
/* The initial parser states. */
typedef enum input_enum {
input_selected, /* We've set the initial state. */
diff --git a/ld/lexsup.c b/ld/lexsup.c
index ea34104..b5e3468 100644
--- a/ld/lexsup.c
+++ b/ld/lexsup.c
@@ -62,119 +62,6 @@ static void set_section_start (char *, char *);
static void set_segment_start (const char *, char *);
static void help (void);
-/* Codes used for the long options with no short synonyms. 150 isn't
- special; it's just an arbitrary non-ASCII char value. */
-enum option_values
-{
- OPTION_ASSERT = 150,
- OPTION_CALL_SHARED,
- OPTION_CREF,
- OPTION_DEFSYM,
- OPTION_DEMANGLE,
- OPTION_DYNAMIC_LINKER,
- OPTION_SYSROOT,
- OPTION_EB,
- OPTION_EL,
- OPTION_EMBEDDED_RELOCS,
- OPTION_EXPORT_DYNAMIC,
- OPTION_NO_EXPORT_DYNAMIC,
- OPTION_HELP,
- OPTION_IGNORE,
- OPTION_MAP,
- OPTION_NO_DEMANGLE,
- OPTION_NO_KEEP_MEMORY,
- OPTION_NO_WARN_MISMATCH,
- OPTION_NO_WARN_SEARCH_MISMATCH,
- OPTION_NOINHIBIT_EXEC,
- OPTION_NON_SHARED,
- OPTION_NO_WHOLE_ARCHIVE,
- OPTION_OFORMAT,
- OPTION_RELAX,
- OPTION_NO_RELAX,
- OPTION_RETAIN_SYMBOLS_FILE,
- OPTION_RPATH,
- OPTION_RPATH_LINK,
- OPTION_SHARED,
- OPTION_SONAME,
- OPTION_SORT_COMMON,
- OPTION_SORT_SECTION,
- OPTION_STATS,
- OPTION_SYMBOLIC,
- OPTION_SYMBOLIC_FUNCTIONS,
- OPTION_TASK_LINK,
- OPTION_TBSS,
- OPTION_TDATA,
- OPTION_TTEXT,
- OPTION_TTEXT_SEGMENT,
- OPTION_TRADITIONAL_FORMAT,
- OPTION_UR,
- OPTION_VERBOSE,
- OPTION_VERSION,
- OPTION_VERSION_SCRIPT,
- OPTION_VERSION_EXPORTS_SECTION,
- OPTION_DYNAMIC_LIST,
- OPTION_DYNAMIC_LIST_CPP_NEW,
- OPTION_DYNAMIC_LIST_CPP_TYPEINFO,
- OPTION_DYNAMIC_LIST_DATA,
- OPTION_WARN_COMMON,
- OPTION_WARN_CONSTRUCTORS,
- OPTION_WARN_FATAL,
- OPTION_NO_WARN_FATAL,
- OPTION_WARN_MULTIPLE_GP,
- OPTION_WARN_ONCE,
- OPTION_WARN_SECTION_ALIGN,
- OPTION_SPLIT_BY_RELOC,
- OPTION_SPLIT_BY_FILE ,
- OPTION_WHOLE_ARCHIVE,
- OPTION_ADD_DT_NEEDED_FOR_DYNAMIC,
- OPTION_NO_ADD_DT_NEEDED_FOR_DYNAMIC,
- OPTION_ADD_DT_NEEDED_FOR_REGULAR,
- OPTION_NO_ADD_DT_NEEDED_FOR_REGULAR,
- OPTION_WRAP,
- OPTION_FORCE_EXE_SUFFIX,
- OPTION_GC_SECTIONS,
- OPTION_NO_GC_SECTIONS,
- OPTION_PRINT_GC_SECTIONS,
- OPTION_NO_PRINT_GC_SECTIONS,
- OPTION_HASH_SIZE,
- OPTION_CHECK_SECTIONS,
- OPTION_NO_CHECK_SECTIONS,
- OPTION_NO_UNDEFINED,
- OPTION_INIT,
- OPTION_FINI,
- OPTION_SECTION_START,
- OPTION_UNIQUE,
- OPTION_TARGET_HELP,
- OPTION_ALLOW_SHLIB_UNDEFINED,
- OPTION_NO_ALLOW_SHLIB_UNDEFINED,
- OPTION_ALLOW_MULTIPLE_DEFINITION,
- OPTION_NO_UNDEFINED_VERSION,
- OPTION_DEFAULT_SYMVER,
- OPTION_DEFAULT_IMPORTED_SYMVER,
- OPTION_DISCARD_NONE,
- OPTION_SPARE_DYNAMIC_TAGS,
- OPTION_NO_DEFINE_COMMON,
- OPTION_NOSTDLIB,
- OPTION_NO_OMAGIC,
- OPTION_STRIP_DISCARDED,
- OPTION_NO_STRIP_DISCARDED,
- OPTION_ACCEPT_UNKNOWN_INPUT_ARCH,
- OPTION_NO_ACCEPT_UNKNOWN_INPUT_ARCH,
- OPTION_PIE,
- OPTION_UNRESOLVED_SYMBOLS,
- OPTION_WARN_UNRESOLVED_SYMBOLS,
- OPTION_ERROR_UNRESOLVED_SYMBOLS,
- OPTION_WARN_SHARED_TEXTREL,
- OPTION_WARN_ALTERNATE_EM,
- OPTION_REDUCE_MEMORY_OVERHEADS,
-#ifdef ENABLE_PLUGINS
- OPTION_PLUGIN,
- OPTION_PLUGIN_OPT,
-#endif /* ENABLE_PLUGINS */
- OPTION_DEFAULT_SCRIPT,
- OPTION_PRINT_OUTPUT_FORMAT,
-};
-
/* The long options. This structure is used for both the option
parsing and the help text. */
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 8147215..1b30b3b 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2012-05-26 Alan Modra <amodra@gmail.com>
+
+ * ld-srec/srec.exp: Remove powerpc64 flag setting.
+
2012-05-22 H.J. Lu <hongjiu.lu@intel.com>
* ld-elf/eh1.d: Don't skip x86_64-*-linux-gnux32.
diff --git a/ld/testsuite/ld-srec/srec.exp b/ld/testsuite/ld-srec/srec.exp
index 4c21320..7f13e9c 100644
--- a/ld/testsuite/ld-srec/srec.exp
+++ b/ld/testsuite/ld-srec/srec.exp
@@ -1,6 +1,6 @@
# Test linking directly to S-records.
# By Ian Lance Taylor, Cygnus Support.
-# Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2009, 2011
+# Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2009, 2011, 2012
# Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
@@ -266,10 +266,6 @@ proc run_srec_test { test objs } {
set flags "$flags -no-relax"
}
- if [istarget powerpc64*-*-*] {
- set flags "$flags --no-toc-optimize"
- }
-
# Epiphany needs some help too
if [istarget epiphany*-*-*] {
set flags "$flags --defsym _start=00000060"