diff options
-rw-r--r-- | ld/ChangeLog | 9 | ||||
-rw-r--r-- | ld/emultempl/ppc32elf.em | 8 | ||||
-rw-r--r-- | ld/emultempl/ppc64elf.em | 11 | ||||
-rw-r--r-- | ld/ldlex.h | 113 | ||||
-rw-r--r-- | ld/lexsup.c | 113 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-srec/srec.exp | 6 |
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 @@ -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" |