X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/ac52e3bd03bcaf6ad5c48c01a4697aa201000433..f0c86e1c7c8f755f5bd880e8499c5b741102ffb1:/toolchain/binutils/patches/2.17/500-avr32.patch diff --git a/toolchain/binutils/patches/2.17/500-avr32.patch b/toolchain/binutils/patches/2.17/500-avr32.patch index eec6edff2..c343d1a1f 100644 --- a/toolchain/binutils/patches/2.17/500-avr32.patch +++ b/toolchain/binutils/patches/2.17/500-avr32.patch @@ -1,6 +1,6 @@ -diff -Nrup binutils-2.17/bfd/aclocal.m4 binutils-2.17-atmel/bfd/aclocal.m4 +diff -Nrup binutils-2.17/bfd/aclocal.m4 binutils-2.17.atmel.1.3.0/bfd/aclocal.m4 --- binutils-2.17/bfd/aclocal.m4 2005-09-30 20:38:50.000000000 +0200 -+++ binutils-2.17-atmel/bfd/aclocal.m4 2007-02-20 16:07:03.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/aclocal.m4 2007-03-26 10:30:51.000000000 +0200 @@ -1,4 +1,4 @@ -# generated automatically by aclocal 1.9.5 -*- Autoconf -*- +# generated automatically by aclocal 1.9.6 -*- Autoconf -*- @@ -16,9 +16,9 @@ diff -Nrup binutils-2.17/bfd/aclocal.m4 binutils-2.17-atmel/bfd/aclocal.m4 # AM_AUX_DIR_EXPAND -*- Autoconf -*- -diff -Nrup binutils-2.17/bfd/archures.c binutils-2.17-atmel/bfd/archures.c +diff -Nrup binutils-2.17/bfd/archures.c binutils-2.17.atmel.1.3.0/bfd/archures.c --- binutils-2.17/bfd/archures.c 2006-03-06 14:42:03.000000000 +0100 -+++ binutils-2.17-atmel/bfd/archures.c 2007-02-12 15:37:09.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/archures.c 2007-03-26 10:20:30.000000000 +0200 @@ -334,6 +334,9 @@ DESCRIPTION .#define bfd_mach_avr3 3 .#define bfd_mach_avr4 4 @@ -45,9 +45,9 @@ diff -Nrup binutils-2.17/bfd/archures.c binutils-2.17-atmel/bfd/archures.c &bfd_bfin_arch, &bfd_cr16c_arch, &bfd_cris_arch, -diff -Nrup binutils-2.17/bfd/bfd-in2.h binutils-2.17-atmel/bfd/bfd-in2.h +diff -Nrup binutils-2.17/bfd/bfd-in2.h binutils-2.17.atmel.1.3.0/bfd/bfd-in2.h --- binutils-2.17/bfd/bfd-in2.h 2006-03-26 01:38:42.000000000 +0100 -+++ binutils-2.17-atmel/bfd/bfd-in2.h 2007-02-20 16:08:43.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/bfd-in2.h 2007-03-26 10:33:41.000000000 +0200 @@ -1931,6 +1931,9 @@ enum bfd_architecture #define bfd_mach_avr3 3 #define bfd_mach_avr4 4 @@ -146,9 +146,9 @@ diff -Nrup binutils-2.17/bfd/bfd-in2.h binutils-2.17-atmel/bfd/bfd-in2.h /* Direct 12 bit. */ BFD_RELOC_390_12, -diff -Nrup binutils-2.17/bfd/config.bfd binutils-2.17-atmel/bfd/config.bfd +diff -Nrup binutils-2.17/bfd/config.bfd binutils-2.17.atmel.1.3.0/bfd/config.bfd --- binutils-2.17/bfd/config.bfd 2006-04-05 14:41:57.000000000 +0200 -+++ binutils-2.17-atmel/bfd/config.bfd 2007-02-12 15:37:09.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/config.bfd 2007-03-26 10:20:30.000000000 +0200 @@ -317,6 +317,10 @@ case "${targ}" in targ_underscore=yes ;; @@ -160,9 +160,9 @@ diff -Nrup binutils-2.17/bfd/config.bfd binutils-2.17-atmel/bfd/config.bfd c30-*-*aout* | tic30-*-*aout*) targ_defvec=tic30_aout_vec ;; -diff -Nrup binutils-2.17/bfd/config.in binutils-2.17-atmel/bfd/config.in +diff -Nrup binutils-2.17/bfd/config.in binutils-2.17.atmel.1.3.0/bfd/config.in --- binutils-2.17/bfd/config.in 2005-11-03 17:06:10.000000000 +0100 -+++ binutils-2.17-atmel/bfd/config.in 2007-02-20 16:07:07.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/config.in 2007-03-26 10:30:55.000000000 +0200 @@ -313,18 +313,18 @@ /* Define to the version of this package. */ #undef PACKAGE_VERSION @@ -197,9 +197,9 @@ diff -Nrup binutils-2.17/bfd/config.in binutils-2.17-atmel/bfd/config.in -/* Define to `unsigned' if does not define. */ +/* Define to `unsigned int' if does not define. */ #undef size_t -diff -Nrup binutils-2.17/bfd/configure binutils-2.17-atmel/bfd/configure +diff -Nrup binutils-2.17/bfd/configure binutils-2.17.atmel.1.3.0/bfd/configure --- binutils-2.17/bfd/configure 2006-06-23 20:17:03.000000000 +0200 -+++ binutils-2.17-atmel/bfd/configure 2007-02-20 16:07:06.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/configure 2007-03-26 10:30:54.000000000 +0200 @@ -1,25 +1,54 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. @@ -3671,15 +3671,6 @@ diff -Nrup binutils-2.17/bfd/configure binutils-2.17-atmel/bfd/configure if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' -@@ -2836,7 +3321,7 @@ fi - - # Define the identity of the package. - PACKAGE=bfd -- VERSION=2.17 -+ VERSION=2.17.atmel.0.0.99 - - - cat >>confdefs.h <<_ACEOF @@ -2874,8 +3359,8 @@ if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. @@ -17291,29 +17282,9 @@ diff -Nrup binutils-2.17/bfd/configure binutils-2.17-atmel/bfd/configure { (exit 0); exit 0; } _ACEOF -diff -Nrup binutils-2.17/bfd/configure.in binutils-2.17-atmel/bfd/configure.in ---- binutils-2.17/bfd/configure.in 2006-06-23 20:17:07.000000000 +0200 -+++ binutils-2.17-atmel/bfd/configure.in 2007-02-12 15:37:09.000000000 +0100 -@@ -8,7 +8,7 @@ AC_CONFIG_SRCDIR([libbfd.c]) - AC_CANONICAL_TARGET - AC_ISC_POSIX - --AM_INIT_AUTOMAKE(bfd, 2.17) -+AM_INIT_AUTOMAKE(bfd, 2.17.atmel.0.0.99) - - dnl These must be called before AM_PROG_LIBTOOL, because it may want - dnl to call AC_CHECK_PROG. -@@ -583,6 +583,7 @@ do - bfd_efi_app_ia64_vec) tb="$tb efi-app-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;; - bfd_elf32_am33lin_vec) tb="$tb elf32-am33lin.lo elf32.lo $elf" ;; - bfd_elf32_avr_vec) tb="$tb elf32-avr.lo elf32.lo $elf" ;; -+ bfd_elf32_avr32_vec) tb="$tb elf32-avr32.lo elf32.lo $elf" ;; - bfd_elf32_bfin_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; - bfd_elf32_bfinfdpic_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; - bfd_elf32_big_generic_vec) tb="$tb elf32-gen.lo elf32.lo $elf" ;; -diff -Nrup binutils-2.17/bfd/cpu-avr32.c binutils-2.17-atmel/bfd/cpu-avr32.c +diff -Nrup binutils-2.17/bfd/cpu-avr32.c binutils-2.17.atmel.1.3.0/bfd/cpu-avr32.c --- binutils-2.17/bfd/cpu-avr32.c 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/bfd/cpu-avr32.c 2006-11-10 15:05:48.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/cpu-avr32.c 2007-05-31 17:03:36.000000000 +0200 @@ -0,0 +1,49 @@ +/* BFD library support routines for AVR32. + Copyright 2003-2006 Atmel Corporation. @@ -17363,10 +17334,153 @@ diff -Nrup binutils-2.17/bfd/cpu-avr32.c binutils-2.17-atmel/bfd/cpu-avr32.c +}; + +const bfd_arch_info_type bfd_avr32_arch = -+ N(bfd_mach_avr32_ap, "avr32:ap", TRUE, &cpu_info[0]); -diff -Nrup binutils-2.17/bfd/doc/Makefile.in binutils-2.17-atmel/bfd/doc/Makefile.in ++ N(bfd_mach_avr32_ap, "avr32", TRUE, &cpu_info[0]); +diff -Nrup binutils-2.17/bfd/doc/bfd.info binutils-2.17.atmel.1.3.0/bfd/doc/bfd.info +--- binutils-2.17/bfd/doc/bfd.info 2006-06-12 15:37:32.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/bfd/doc/bfd.info 2007-03-26 10:34:02.000000000 +0200 +@@ -1,5 +1,7 @@ +-This is ../.././bfd/doc/bfd.info, produced by makeinfo version 4.8 from +-../.././bfd/doc/bfd.texinfo. ++This is ++/home/hcegtvedt/svnwork/tools/T0243-GNU_Toolchain/50-Source/binutils/trunk/bfd/doc/bfd.info, ++produced by makeinfo version 4.8 from ++/home/hcegtvedt/svnwork/tools/T0243-GNU_Toolchain/50-Source/binutils/trunk/bfd/doc/bfd.texinfo. + + START-INFO-DIR-ENTRY + * Bfd: (bfd). The Binary File Descriptor library. +@@ -10239,67 +10241,67 @@ Index + +  + Tag Table: +-Node: Top724 +-Node: Overview1056 +-Node: History2107 +-Node: How It Works3053 +-Node: What BFD Version 2 Can Do4595 +-Node: BFD information loss5910 +-Node: Canonical format8442 +-Node: BFD front end12814 +-Node: Memory Usage38428 +-Node: Initialization39656 +-Node: Sections40115 +-Node: Section Input40598 +-Node: Section Output41963 +-Node: typedef asection44449 +-Node: section prototypes69406 +-Node: Symbols79086 +-Node: Reading Symbols80681 +-Node: Writing Symbols81788 +-Node: Mini Symbols83497 +-Node: typedef asymbol84471 +-Node: symbol handling functions89389 +-Node: Archives94731 +-Node: Formats98457 +-Node: Relocations101405 +-Node: typedef arelent102132 +-Node: howto manager117943 +-Node: Core Files180223 +-Node: Targets182040 +-Node: bfd_target184010 +-Node: Architectures204090 +-Node: Opening and Closing225522 +-Node: Internal236524 +-Node: File Caching242857 +-Node: Linker Functions244771 +-Node: Creating a Linker Hash Table246444 +-Node: Adding Symbols to the Hash Table248182 +-Node: Differing file formats249082 +-Node: Adding symbols from an object file250830 +-Node: Adding symbols from an archive252981 +-Node: Performing the Final Link255395 +-Node: Information provided by the linker256637 +-Node: Relocating the section contents257791 +-Node: Writing the symbol table259542 +-Node: Hash Tables262535 +-Node: Creating and Freeing a Hash Table263733 +-Node: Looking Up or Entering a String264983 +-Node: Traversing a Hash Table266236 +-Node: Deriving a New Hash Table Type267025 +-Node: Define the Derived Structures268091 +-Node: Write the Derived Creation Routine269172 +-Node: Write Other Derived Routines271796 +-Node: BFD back ends273111 +-Node: What to Put Where273381 +-Node: aout273519 +-Node: coff279837 +-Node: elf304314 +-Node: mmo305177 +-Node: File layout306105 +-Node: Symbol-table311752 +-Node: mmo section mapping315521 +-Node: GNU Free Documentation License319173 +-Node: Index338898 ++Node: Top858 ++Node: Overview1190 ++Node: History2241 ++Node: How It Works3187 ++Node: What BFD Version 2 Can Do4729 ++Node: BFD information loss6044 ++Node: Canonical format8576 ++Node: BFD front end12948 ++Node: Memory Usage38562 ++Node: Initialization39790 ++Node: Sections40249 ++Node: Section Input40732 ++Node: Section Output42097 ++Node: typedef asection44583 ++Node: section prototypes69540 ++Node: Symbols79220 ++Node: Reading Symbols80815 ++Node: Writing Symbols81922 ++Node: Mini Symbols83631 ++Node: typedef asymbol84605 ++Node: symbol handling functions89523 ++Node: Archives94865 ++Node: Formats98591 ++Node: Relocations101539 ++Node: typedef arelent102266 ++Node: howto manager118077 ++Node: Core Files180357 ++Node: Targets182174 ++Node: bfd_target184144 ++Node: Architectures204224 ++Node: Opening and Closing225656 ++Node: Internal236658 ++Node: File Caching242991 ++Node: Linker Functions244905 ++Node: Creating a Linker Hash Table246578 ++Node: Adding Symbols to the Hash Table248316 ++Node: Differing file formats249216 ++Node: Adding symbols from an object file250964 ++Node: Adding symbols from an archive253115 ++Node: Performing the Final Link255529 ++Node: Information provided by the linker256771 ++Node: Relocating the section contents257925 ++Node: Writing the symbol table259676 ++Node: Hash Tables262669 ++Node: Creating and Freeing a Hash Table263867 ++Node: Looking Up or Entering a String265117 ++Node: Traversing a Hash Table266370 ++Node: Deriving a New Hash Table Type267159 ++Node: Define the Derived Structures268225 ++Node: Write the Derived Creation Routine269306 ++Node: Write Other Derived Routines271930 ++Node: BFD back ends273245 ++Node: What to Put Where273515 ++Node: aout273653 ++Node: coff279971 ++Node: elf304448 ++Node: mmo305311 ++Node: File layout306239 ++Node: Symbol-table311886 ++Node: mmo section mapping315655 ++Node: GNU Free Documentation License319307 ++Node: Index339032 +  + End Tag Table +diff -Nrup binutils-2.17/bfd/doc/Makefile.in binutils-2.17.atmel.1.3.0/bfd/doc/Makefile.in --- binutils-2.17/bfd/doc/Makefile.in 2006-04-06 23:49:26.000000000 +0200 -+++ binutils-2.17-atmel/bfd/doc/Makefile.in 2007-02-20 16:07:07.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/doc/Makefile.in 2007-03-26 10:30:55.000000000 +0200 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.9.5 from Makefile.am. +# Makefile.in generated by automake 1.9.6 from Makefile.am. @@ -17457,10 +17571,10 @@ diff -Nrup binutils-2.17/bfd/doc/Makefile.in binutils-2.17-atmel/bfd/doc/Makefil done; \ done -diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c +diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17.atmel.1.3.0/bfd/elf32-avr32.c --- binutils-2.17/bfd/elf32-avr32.c 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/bfd/elf32-avr32.c 2007-02-12 15:37:09.000000000 +0100 -@@ -0,0 +1,3847 @@ ++++ binutils-2.17.atmel.1.3.0/bfd/elf32-avr32.c 2007-09-28 10:30:44.000000000 +0200 +@@ -0,0 +1,3881 @@ +/* AVR32-specific support for 32-bit ELF. + Copyright 2003-2006 Atmel Corporation. + @@ -17488,6 +17602,7 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c +#include "libbfd.h" +#include "elf-bfd.h" +#include "elf/avr32.h" ++#include "elf32-avr32.h" + +#define xDEBUG +#define xRELAX_DEBUG @@ -17761,7 +17876,6 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c + /* Shortcuts to get to dynamic linker sections. */ + asection *sgot; + asection *srelgot; -+ asection *sreldyn; + asection *sstub; + + /* We use a variation of Pigeonhole Sort to sort the GOT. After the @@ -17783,6 +17897,7 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c + bfd_boolean relocations_analyzed; + bfd_boolean symbols_adjusted; + bfd_boolean repeat_pass; ++ bfd_boolean direct_data_refs; + unsigned int relax_iteration; + unsigned int relax_pass; +}; @@ -17858,6 +17973,8 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c + /* Prevent the BFD core from creating bogus got_entry pointers */ + ret->root.init_got_refcount.glist = NULL; + ret->root.init_plt_refcount.glist = NULL; ++ ret->root.init_got_offset.glist = NULL; ++ ret->root.init_plt_offset.glist = NULL; + + return &ret->root.root; +} @@ -17934,8 +18051,9 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c + return TRUE; + + htab->sgot = create_dynamic_section(dynobj, ".got", flags, 2); -+ htab->srelgot = create_dynamic_section(dynobj, ".rela.got", -+ flags | SEC_READONLY, 2); ++ if (!htab->srelgot) ++ htab->srelgot = create_dynamic_section(dynobj, ".rela.got", ++ flags | SEC_READONLY, 2); + + if (!htab->sgot || !htab->srelgot) + return FALSE; @@ -17969,14 +18087,11 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c + if (!avr32_elf_create_got_section (dynobj, info)) + return FALSE; + -+ if (!htab->sreldyn) -+ htab->sreldyn = create_dynamic_section(dynobj, ".rela.dyn", -+ flags | SEC_READONLY, 2); + if (!htab->sstub) + htab->sstub = create_dynamic_section(dynobj, ".stub", + flags | SEC_READONLY | SEC_CODE, 2); + -+ if (!htab->sreldyn || !htab->sstub) ++ if (!htab->sstub) + return FALSE; + + return TRUE; @@ -18132,12 +18247,12 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c + if ((info->shared || h != NULL) + && (sec->flags & SEC_ALLOC)) + { -+ if (htab->sreldyn == NULL) ++ if (htab->srelgot == NULL) + { -+ htab->sreldyn = create_dynamic_section(dynobj, ".rela.dyn", ++ htab->srelgot = create_dynamic_section(dynobj, ".rela.got", + bed->dynamic_sec_flags + | SEC_READONLY, 2); -+ if (htab->sreldyn == NULL) ++ if (htab->srelgot == NULL) + return FALSE; + } + @@ -18525,7 +18640,7 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c + { + pr_debug("Allocating %d dynamic reloc against symbol %s...\n", + havr->possibly_dynamic_relocs, h->root.root.string); -+ htab->sreldyn->size += (havr->possibly_dynamic_relocs ++ htab->srelgot->size += (havr->possibly_dynamic_relocs + * sizeof(Elf32_External_Rela)); + } + @@ -18619,7 +18734,7 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c + /* Allocate space for local sym dynamic relocs */ + BFD_ASSERT(htab->local_dynamic_relocs == 0 || info->shared); + if (htab->local_dynamic_relocs) -+ htab->sreldyn->size += (htab->local_dynamic_relocs ++ htab->srelgot->size += (htab->local_dynamic_relocs + * sizeof(Elf32_External_Rela)); + + /* We now have determined the sizes of the various dynamic @@ -18848,6 +18963,8 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c + RS_NOPIC_LDW4, + RS_NOPIC_LDDPC, + RS_NOPIC_SUB5, ++ RS_NOPIC_MOV2, ++ RS_NOPIC_MOV1, + RS_RCALL2, + RS_RCALL1, + RS_BRC2, @@ -18988,6 +19105,15 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c +#define LDDPC_RANGE_MIN 0 +#define LDDPC_RANGE_MAX 508 + ++#define NOPIC_MOV2_OPCODE 0xe0600000 ++#define NOPIC_MOV2_MASK 0xe1e00000 ++#define NOPIC_MOV2_RANGE_MIN (-1048576) ++#define NOPIC_MOV2_RANGE_MAX (1048575) ++#define NOPIC_MOV1_OPCODE 0x30000000 ++#define NOPIC_MOV1_MASK 0xf0000000 ++#define NOPIC_MOV1_RANGE_MIN (-128) ++#define NOPIC_MOV1_RANGE_MAX (127) ++ +/* Only brc2 variants with cond[3] == 0 is considered, since the + others are not relaxable. bral is a special case and is handled + separately. */ @@ -19025,6 +19151,12 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c + R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ + opc##_RANGE_MIN, opc##_RANGE_MAX, size } + ++/* Define a relax state using non-pc-relative direct reference */ ++#define RD(id, dir, next, prev, r_type, opc, size) \ ++ { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_ABSOLUTE, \ ++ R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ ++ opc##_RANGE_MIN, opc##_RANGE_MAX, size } ++ +/* Define a relax state that will be handled specially */ +#define RS(id, r_type, size) \ + { "RS_"#id, RS_##id, RS_NONE, RS_NONE, RS_NONE, REF_ABSOLUTE, \ @@ -19049,9 +19181,11 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c + RP(NOPIC_RCALL2, NONE, NOPIC_RCALL1, NOPIC_MCALL, 22H_PCREL, RCALL2, 4), + RP(NOPIC_RCALL1, NONE, NONE, NOPIC_RCALL2, 11H_PCREL, RCALL1, 2), + -+ RC(NOPIC_LDW4, NOPIC_SUB5, NOPIC_LDDPC, NONE, 16_CP, NOPIC_LDW4, 4), -+ RC(NOPIC_LDDPC, NOPIC_SUB5, NONE, NOPIC_LDW4, 9W_CP, LDDPC, 2), -+ RP(NOPIC_SUB5, NONE, NONE, NOPIC_LDDPC, 16N_PCREL, SUB5_PC, 4), ++ RC(NOPIC_LDW4, NOPIC_MOV1, NOPIC_LDDPC, NONE, 16_CP, NOPIC_LDW4, 4), ++ RC(NOPIC_LDDPC, NOPIC_MOV1, NONE, NOPIC_LDW4, 9W_CP, LDDPC, 2), ++ RP(NOPIC_SUB5, NOPIC_MOV1, NONE, NOPIC_LDDPC, 16N_PCREL, SUB5_PC, 4), ++ RD(NOPIC_MOV2, NONE, NOPIC_MOV1, NOPIC_SUB5, 21S, NOPIC_MOV2, 4), ++ RD(NOPIC_MOV1, NONE, NONE, NOPIC_MOV2, 8S, NOPIC_MOV1, 2), + + RP(RCALL2, NONE, RCALL1, NONE, 22H_PCREL, RCALL2, 4), + RP(RCALL1, NONE, NONE, RCALL2, 11H_PCREL, RCALL1, 2), @@ -19912,9 +20046,14 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c + after the relaxation code is done, so we can't really + trust that our "distance" is correct. There's really no + easy solution to this problem, so we'll just disallow -+ direct references to SEC_DATA sections. */ ++ direct references to SEC_DATA sections. ++ ++ Oh, and .bss isn't actually SEC_DATA, so we disallow ++ !SEC_HAS_CONTENTS as well. */ + if (!dynamic && defined -+ && !(sym_sec->flags & SEC_DATA) ++ && (htab->direct_data_refs ++ || (!(sym_sec->flags & SEC_DATA) ++ && (sym_sec->flags & SEC_HAS_CONTENTS))) + && next_state->direct) + { + next_state = &relax_state[next_state->direct]; @@ -20654,7 +20793,6 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c + struct got_entry **local_got_ents; + asection *sgot; + asection *srelgot; -+ asection *sreldyn; + + pr_debug("(6) relocate section %s:<%s> (size 0x%lx)\n", + input_bfd->filename, input_section->name, input_section->size); @@ -20670,7 +20808,6 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c + local_got_ents = elf_local_got_ents(input_bfd); + sgot = htab->sgot; + srelgot = htab->srelgot; -+ sreldyn = htab->sreldyn; + + relend = relocs + input_section->reloc_count; + for (rel = relocs; rel < relend; rel++) @@ -20907,15 +21044,15 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c + } + } + -+ pr_debug("sreldyn reloc_count: %d, size %lu\n", -+ sreldyn->reloc_count, sreldyn->size); ++ pr_debug("srelgot reloc_count: %d, size %lu\n", ++ srelgot->reloc_count, srelgot->size); + -+ loc = sreldyn->contents; -+ loc += sreldyn->reloc_count++ * sizeof(Elf32_External_Rela); ++ loc = srelgot->contents; ++ loc += srelgot->reloc_count++ * sizeof(Elf32_External_Rela); + bfd_elf32_swap_reloca_out(output_bfd, &outrel, loc); + -+ BFD_ASSERT(sreldyn->reloc_count * sizeof(Elf32_External_Rela) -+ <= sreldyn->size); ++ BFD_ASSERT(srelgot->reloc_count * sizeof(Elf32_External_Rela) ++ <= srelgot->size); + + if (!relocate) + continue; @@ -21202,6 +21339,17 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c + return TRUE; +} + ++/* Set avr32-specific linker options. */ ++void bfd_elf32_avr32_set_options(struct bfd_link_info *info, ++ int direct_data_refs) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ ++ htab = avr32_elf_hash_table (info); ++ htab->direct_data_refs = !!direct_data_refs; ++} ++ ++ + +/* Understanding core dumps */ + @@ -21308,36286 +21456,24691 @@ diff -Nrup binutils-2.17/bfd/elf32-avr32.c binutils-2.17-atmel/bfd/elf32-avr32.c +#define elf_backend_got_header_size AVR32_GOT_HEADER_SIZE + +#include "elf32-target.h" -diff -Nrup binutils-2.17/bfd/elf-bfd.h binutils-2.17-atmel/bfd/elf-bfd.h ---- binutils-2.17/bfd/elf-bfd.h 2006-03-16 13:20:15.000000000 +0100 -+++ binutils-2.17-atmel/bfd/elf-bfd.h 2007-02-12 15:37:09.000000000 +0100 -@@ -1307,6 +1307,10 @@ struct elf_obj_tdata - find_nearest_line. */ - struct mips_elf_find_line *find_line_info; - -+ /* Used by AVR32 ELF relaxation code. Contains an array of pointers -+ for each local symbol to the fragment where it is defined. */ -+ struct fragment **local_sym_frag; +diff -Nrup binutils-2.17/bfd/elf32-avr32.c.orig binutils-2.17.atmel.1.3.0/bfd/elf32-avr32.c.orig +--- binutils-2.17/bfd/elf32-avr32.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/elf32-avr32.c.orig 2007-05-31 17:03:36.000000000 +0200 +@@ -0,0 +1,3880 @@ ++/* AVR32-specific support for 32-bit ELF. ++ Copyright 2003-2006 Atmel Corporation. + - /* A place to stash dwarf1 info for this bfd. */ - struct dwarf1_debug *dwarf1_find_line_info; - -diff -Nrup binutils-2.17/bfd/libbfd.h binutils-2.17-atmel/bfd/libbfd.h ---- binutils-2.17/bfd/libbfd.h 2006-03-26 01:38:42.000000000 +0100 -+++ binutils-2.17-atmel/bfd/libbfd.h 2007-02-20 16:08:43.000000000 +0100 -@@ -1518,6 +1518,47 @@ static const char *const bfd_reloc_code_ - "BFD_RELOC_AVR_LDI", - "BFD_RELOC_AVR_6", - "BFD_RELOC_AVR_6_ADIW", -+ "BFD_RELOC_AVR32_DIFF32", -+ "BFD_RELOC_AVR32_DIFF16", -+ "BFD_RELOC_AVR32_DIFF8", -+ "BFD_RELOC_AVR32_GOT32", -+ "BFD_RELOC_AVR32_GOT16", -+ "BFD_RELOC_AVR32_GOT8", -+ "BFD_RELOC_AVR32_21S", -+ "BFD_RELOC_AVR32_16U", -+ "BFD_RELOC_AVR32_16S", -+ "BFD_RELOC_AVR32_SUB5", -+ "BFD_RELOC_AVR32_8S_EXT", -+ "BFD_RELOC_AVR32_8S", -+ "BFD_RELOC_AVR32_22H_PCREL", -+ "BFD_RELOC_AVR32_18W_PCREL", -+ "BFD_RELOC_AVR32_16B_PCREL", -+ "BFD_RELOC_AVR32_16N_PCREL", -+ "BFD_RELOC_AVR32_14UW_PCREL", -+ "BFD_RELOC_AVR32_11H_PCREL", -+ "BFD_RELOC_AVR32_10UW_PCREL", -+ "BFD_RELOC_AVR32_9H_PCREL", -+ "BFD_RELOC_AVR32_9UW_PCREL", -+ "BFD_RELOC_AVR32_GOTPC", -+ "BFD_RELOC_AVR32_GOTCALL", -+ "BFD_RELOC_AVR32_LDA_GOT", -+ "BFD_RELOC_AVR32_GOT21S", -+ "BFD_RELOC_AVR32_GOT18SW", -+ "BFD_RELOC_AVR32_GOT16S", -+ "BFD_RELOC_AVR32_32_CPENT", -+ "BFD_RELOC_AVR32_CPCALL", -+ "BFD_RELOC_AVR32_16_CP", -+ "BFD_RELOC_AVR32_9W_CP", -+ "BFD_RELOC_AVR32_ALIGN", -+ "BFD_RELOC_AVR32_14UW", -+ "BFD_RELOC_AVR32_10UW", -+ "BFD_RELOC_AVR32_10SW", -+ "BFD_RELOC_AVR32_STHH_W", -+ "BFD_RELOC_AVR32_7UW", -+ "BFD_RELOC_AVR32_6S", -+ "BFD_RELOC_AVR32_6UW", -+ "BFD_RELOC_AVR32_4UH", -+ "BFD_RELOC_AVR32_3U", - "BFD_RELOC_390_12", - "BFD_RELOC_390_GOT12", - "BFD_RELOC_390_PLT32", -diff -Nrup binutils-2.17/bfd/Makefile.am binutils-2.17-atmel/bfd/Makefile.am ---- binutils-2.17/bfd/Makefile.am 2006-06-23 20:17:17.000000000 +0200 -+++ binutils-2.17-atmel/bfd/Makefile.am 2007-02-12 15:37:09.000000000 +0100 -@@ -3,7 +3,7 @@ - AUTOMAKE_OPTIONS = 1.9 cygnus - - # Uncomment the following line when doing a release. --RELEASE=y -+# RELEASE=y - - INCDIR = $(srcdir)/../include - CSEARCH = -I. -I$(srcdir) -I$(INCDIR) -@@ -62,6 +62,7 @@ ALL_MACHINES = \ - cpu-arc.lo \ - cpu-arm.lo \ - cpu-avr.lo \ -+ cpu-avr32.lo \ - cpu-bfin.lo \ - cpu-cr16c.lo \ - cpu-cris.lo \ -@@ -234,6 +235,7 @@ BFD32_BACKENDS = \ - elf32-arc.lo \ - elf32-arm.lo \ - elf32-avr.lo \ -+ elf32-avr32.lo \ - elf32-bfin.lo \ - elf32-cr16c.lo \ - elf32-cris.lo \ -@@ -1265,6 +1267,10 @@ elf32-bfin.lo: elf32-bfin.c $(INCDIR)/fi - elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ - $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/bfin.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -+elf32-avr32.lo: elf32-avr32.c $(INCDIR)/filenames.h elf-bfd.h \ -+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ -+ $(INCDIR)/bfdlink.h $(INCDIR)/elf/avr32.h $(INCDIR)/elf/reloc-macros.h \ -+ elf32-target.h - elf32-cr16c.lo: elf32-cr16c.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/cr16c.h \ - $(INCDIR)/elf/reloc-macros.h elf-bfd.h $(INCDIR)/elf/common.h \ -diff -Nrup binutils-2.17/bfd/Makefile.in binutils-2.17-atmel/bfd/Makefile.in ---- binutils-2.17/bfd/Makefile.in 2006-06-23 20:17:19.000000000 +0200 -+++ binutils-2.17-atmel/bfd/Makefile.in 2007-02-20 16:07:07.000000000 +0100 -@@ -1,4 +1,4 @@ --# Makefile.in generated by automake 1.9.5 from Makefile.am. -+# Makefile.in generated by automake 1.9.6 from Makefile.am. - # @configure_input@ - - # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -@@ -15,8 +15,6 @@ - @SET_MAKE@ - - --SOURCES = $(libbfd_a_SOURCES) $(libbfd_la_SOURCES) -- - srcdir = @srcdir@ - top_srcdir = @top_srcdir@ - VPATH = @srcdir@ -@@ -141,6 +139,7 @@ EXEEXT = @EXEEXT@ - EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ - GMOFILES = @GMOFILES@ - GMSGFMT = @GMSGFMT@ -+GREP = @GREP@ - GT_NO = @GT_NO@ - GT_YES = @GT_YES@ - HDEFINES = @HDEFINES@ -@@ -190,10 +189,7 @@ WARN_CFLAGS = @WARN_CFLAGS@ - WIN32LDFLAGS = @WIN32LDFLAGS@ - WIN32LIBADD = @WIN32LIBADD@ - XGETTEXT = @XGETTEXT@ --ac_ct_AR = @ac_ct_AR@ - ac_ct_CC = @ac_ct_CC@ --ac_ct_RANLIB = @ac_ct_RANLIB@ --ac_ct_STRIP = @ac_ct_STRIP@ - all_backends = @all_backends@ - am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ - am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -@@ -219,6 +215,7 @@ build_vendor = @build_vendor@ - datadir = @datadir@ - datarootdir = @datarootdir@ - docdir = @docdir@ -+dvidir = @dvidir@ - exec_prefix = @exec_prefix@ - host = @host@ - host_alias = @host_alias@ -@@ -233,12 +230,15 @@ install_sh = @install_sh@ - l = @l@ - libdir = @libdir@ - libexecdir = @libexecdir@ -+localedir = @localedir@ - localstatedir = @localstatedir@ - mandir = @mandir@ - mkdir_p = @mkdir_p@ - oldincludedir = @oldincludedir@ -+pdfdir = @pdfdir@ - prefix = @prefix@ - program_transform_name = @program_transform_name@ -+psdir = @psdir@ - sbindir = @sbindir@ - sharedstatedir = @sharedstatedir@ - sysconfdir = @sysconfdir@ -@@ -253,7 +253,7 @@ wordsize = @wordsize@ - AUTOMAKE_OPTIONS = 1.9 cygnus - - # Uncomment the following line when doing a release. --RELEASE=y -+# RELEASE=y - INCDIR = $(srcdir)/../include - CSEARCH = -I. -I$(srcdir) -I$(INCDIR) - MKDEP = gcc -MM -@@ -298,6 +298,7 @@ ALL_MACHINES = \ - cpu-arc.lo \ - cpu-arm.lo \ - cpu-avr.lo \ -+ cpu-avr32.lo \ - cpu-bfin.lo \ - cpu-cr16c.lo \ - cpu-cris.lo \ -@@ -471,6 +472,7 @@ BFD32_BACKENDS = \ - elf32-arc.lo \ - elf32-arm.lo \ - elf32-avr.lo \ -+ elf32-avr32.lo \ - elf32-bfin.lo \ - elf32-cr16c.lo \ - elf32-cris.lo \ -@@ -1831,6 +1833,10 @@ elf32-bfin.lo: elf32-bfin.c $(INCDIR)/fi - elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ - $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/bfin.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -+elf32-avr32.lo: elf32-avr32.c $(INCDIR)/filenames.h elf-bfd.h \ -+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ -+ $(INCDIR)/bfdlink.h $(INCDIR)/elf/avr32.h $(INCDIR)/elf/reloc-macros.h \ -+ elf32-target.h - elf32-cr16c.lo: elf32-cr16c.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/cr16c.h \ - $(INCDIR)/elf/reloc-macros.h elf-bfd.h $(INCDIR)/elf/common.h \ -diff -Nrup binutils-2.17/bfd/reloc.c binutils-2.17-atmel/bfd/reloc.c ---- binutils-2.17/bfd/reloc.c 2006-03-26 01:38:42.000000000 +0100 -+++ binutils-2.17-atmel/bfd/reloc.c 2007-02-12 15:37:09.000000000 +0100 -@@ -3714,6 +3714,129 @@ ENUMDOC - instructions - - ENUM -+ BFD_RELOC_AVR32_DIFF32 -+ENUMX -+ BFD_RELOC_AVR32_DIFF16 -+ENUMX -+ BFD_RELOC_AVR32_DIFF8 -+ENUMDOC -+ Difference between two labels: L2 - L1. The value of L1 is encoded -+ as sym + addend, while the initial difference after assembly is -+ inserted into the object file by the assembler. -+ENUM -+ BFD_RELOC_AVR32_GOT32 -+ENUMX -+ BFD_RELOC_AVR32_GOT16 -+ENUMX -+ BFD_RELOC_AVR32_GOT8 -+ENUMDOC -+ Reference to a symbol through the Global Offset Table. The linker -+ will allocate an entry for symbol in the GOT and insert the offset -+ of this entry as the relocation value. -+ENUM -+ BFD_RELOC_AVR32_21S -+ENUMX -+ BFD_RELOC_AVR32_16U -+ENUMX -+ BFD_RELOC_AVR32_16S -+ENUMX -+ BFD_RELOC_AVR32_SUB5 -+ENUMX -+ BFD_RELOC_AVR32_8S_EXT -+ENUMX -+ BFD_RELOC_AVR32_8S -+ENUMDOC -+ Normal (non-pc-relative) code relocations. Alignment and signedness -+ is indicated by the suffixes. S means signed, U means unsigned. W -+ means word-aligned, H means halfword-aligned, neither means -+ byte-aligned (no alignment.) SUB5 is the same relocation as 16S. -+ENUM -+ BFD_RELOC_AVR32_22H_PCREL -+ENUMX -+ BFD_RELOC_AVR32_18W_PCREL -+ENUMX -+ BFD_RELOC_AVR32_16B_PCREL -+ENUMX -+ BFD_RELOC_AVR32_16N_PCREL -+ENUMX -+ BFD_RELOC_AVR32_14UW_PCREL -+ENUMX -+ BFD_RELOC_AVR32_11H_PCREL -+ENUMX -+ BFD_RELOC_AVR32_10UW_PCREL -+ENUMX -+ BFD_RELOC_AVR32_9H_PCREL -+ENUMX -+ BFD_RELOC_AVR32_9UW_PCREL -+ENUMDOC -+ PC-relative relocations are signed if neither 'U' nor 'S' is -+ specified. However, we explicitly tack on a 'B' to indicate no -+ alignment, to avoid confusion with data relocs. All of these resolve -+ to sym + addend - offset, except the one with 'N' (negated) suffix. -+ This particular one resolves to offset - sym - addend. -+ENUM -+ BFD_RELOC_AVR32_GOTPC -+ENUMDOC -+ Subtract the link-time address of the GOT from (symbol + addend) -+ and insert the result. -+ENUM -+ BFD_RELOC_AVR32_GOTCALL -+ENUMX -+ BFD_RELOC_AVR32_LDA_GOT -+ENUMX -+ BFD_RELOC_AVR32_GOT21S -+ENUMX -+ BFD_RELOC_AVR32_GOT18SW -+ENUMX -+ BFD_RELOC_AVR32_GOT16S -+ENUMDOC -+ Reference to a symbol through the GOT. The linker will allocate an -+ entry for symbol in the GOT and insert the offset of this entry as -+ the relocation value. addend must be zero. As usual, 'S' means -+ signed, 'W' means word-aligned, etc. -+ENUM -+ BFD_RELOC_AVR32_32_CPENT -+ENUMDOC -+ 32-bit constant pool entry. I don't think 8- and 16-bit entries make -+ a whole lot of sense. -+ENUM -+ BFD_RELOC_AVR32_CPCALL -+ENUMX -+ BFD_RELOC_AVR32_16_CP -+ENUMX -+ BFD_RELOC_AVR32_9W_CP -+ENUMDOC -+ Constant pool references. Some of these relocations are signed, -+ others are unsigned. It doesn't really matter, since the constant -+ pool always comes after the code that references it. -+ENUM -+ BFD_RELOC_AVR32_ALIGN -+ENUMDOC -+ sym must be the absolute symbol. The addend specifies the alignment -+ order, e.g. if addend is 2, the linker must add padding so that the -+ next address is aligned to a 4-byte boundary. -+ENUM -+ BFD_RELOC_AVR32_14UW -+ENUMX -+ BFD_RELOC_AVR32_10UW -+ENUMX -+ BFD_RELOC_AVR32_10SW -+ENUMX -+ BFD_RELOC_AVR32_STHH_W -+ENUMX -+ BFD_RELOC_AVR32_7UW -+ENUMX -+ BFD_RELOC_AVR32_6S -+ENUMX -+ BFD_RELOC_AVR32_6UW -+ENUMX -+ BFD_RELOC_AVR32_4UH -+ENUMX -+ BFD_RELOC_AVR32_3U -+ENUMDOC -+ Code relocations that will never make it to the output file. ++ Written by Haavard Skinnemoen, Atmel Norway, + -+ENUM - BFD_RELOC_390_12 - ENUMDOC - Direct 12 bit. -diff -Nrup binutils-2.17/bfd/targets.c binutils-2.17-atmel/bfd/targets.c ---- binutils-2.17/bfd/targets.c 2006-04-05 14:41:57.000000000 +0200 -+++ binutils-2.17-atmel/bfd/targets.c 2007-02-12 15:37:09.000000000 +0100 -@@ -553,6 +553,7 @@ extern const bfd_target b_out_vec_little - extern const bfd_target bfd_efi_app_ia32_vec; - extern const bfd_target bfd_efi_app_ia64_vec; - extern const bfd_target bfd_elf32_avr_vec; -+extern const bfd_target bfd_elf32_avr32_vec; - extern const bfd_target bfd_elf32_bfin_vec; - extern const bfd_target bfd_elf32_bfinfdpic_vec; - extern const bfd_target bfd_elf32_big_generic_vec; -@@ -855,6 +856,7 @@ static const bfd_target * const _bfd_tar - &bfd_efi_app_ia64_vec, - #endif - &bfd_elf32_avr_vec, -+ &bfd_elf32_avr32_vec, - &bfd_elf32_bfin_vec, - &bfd_elf32_bfinfdpic_vec, - -diff -Nrup binutils-2.17/binutils/config.in binutils-2.17-atmel/binutils/config.in ---- binutils-2.17/binutils/config.in 2006-02-14 09:59:10.000000000 +0100 -+++ binutils-2.17-atmel/binutils/config.in 2007-02-20 16:07:22.000000000 +0100 -@@ -218,7 +218,7 @@ - - /* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be -- automatically deduced at run-time. -+ automatically deduced at runtime. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ -@@ -260,8 +260,8 @@ - #undef inline - #endif - --/* Define to `long' if does not define. */ -+/* Define to `long int' if does not define. */ - #undef off_t - --/* Define to `unsigned' if does not define. */ -+/* Define to `unsigned int' if does not define. */ - #undef size_t -diff -Nrup binutils-2.17/binutils/configure binutils-2.17-atmel/binutils/configure ---- binutils-2.17/binutils/configure 2006-04-06 23:49:29.000000000 +0200 -+++ binutils-2.17-atmel/binutils/configure 2007-02-20 16:07:20.000000000 +0100 -@@ -1,25 +1,54 @@ - #! /bin/sh - # Guess values for system-dependent variables and create Makefiles. --# Generated by GNU Autoconf 2.59. -+# Generated by GNU Autoconf 2.61. - # --# Copyright (C) 2003 Free Software Foundation, Inc. -+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -+# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - # This configure script is free software; the Free Software Foundation - # gives unlimited permission to copy, distribute and modify it. - ## --------------------- ## - ## M4sh Initialization. ## - ## --------------------- ## - --# Be Bourne compatible -+# Be more Bourne compatible -+DUALCASE=1; export DUALCASE # for MKS sh - if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' --elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then -- set -o posix -+ setopt NO_GLOB_SUBST -+else -+ case `(set -o) 2>/dev/null` in -+ *posix*) set -o posix ;; -+esac ++ This file is part of BFD, the Binary File Descriptor library. + -+fi ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. + ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. + ++ 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + ++#include "bfd.h" ++#include "sysdep.h" ++#include "bfdlink.h" ++#include "libbfd.h" ++#include "elf-bfd.h" ++#include "elf/avr32.h" + -+# PATH needs CR -+# Avoid depending upon Character Ranges. -+as_cr_letters='abcdefghijklmnopqrstuvwxyz' -+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -+as_cr_Letters=$as_cr_letters$as_cr_LETTERS -+as_cr_digits='0123456789' -+as_cr_alnum=$as_cr_Letters$as_cr_digits ++#define xDEBUG ++#define xRELAX_DEBUG + -+# The user is always right. -+if test "${PATH_SEPARATOR+set}" != set; then -+ echo "#! /bin/sh" >conf$$.sh -+ echo "exit 0" >>conf$$.sh -+ chmod +x conf$$.sh -+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then -+ PATH_SEPARATOR=';' -+ else -+ PATH_SEPARATOR=: -+ fi -+ rm -f conf$$.sh - fi --DUALCASE=1; export DUALCASE # for MKS sh - - # Support unset when possible. - if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then -@@ -29,8 +58,43 @@ else - fi - - -+# IFS -+# We need space, tab and new line, in precisely that order. Quoting is -+# there to prevent editors from complaining about space-tab. -+# (If _AS_PATH_WALK were called with IFS unset, it would disable word -+# splitting by setting IFS to empty value.) -+as_nl=' -+' -+IFS=" "" $as_nl" ++#ifdef DEBUG ++# define pr_debug(fmt, args...) fprintf(stderr, fmt, ##args) ++#else ++# define pr_debug(fmt, args...) do { } while (0) ++#endif + -+# Find who we are. Look in the path if we contain no directory separator. -+case $0 in -+ *[\\/]* ) as_myself=$0 ;; -+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -+done -+IFS=$as_save_IFS ++#ifdef RELAX_DEBUG ++# define RDBG(fmt, args...) fprintf(stderr, fmt, ##args) ++#else ++# define RDBG(fmt, args...) do { } while (0) ++#endif + -+ ;; -+esac -+# We did not find ourselves, most probably we were run as `sh COMMAND' -+# in which case we are not to be found in the path. -+if test "x$as_myself" = x; then -+ as_myself=$0 -+fi -+if test ! -f "$as_myself"; then -+ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 -+ { (exit 1); exit 1; } -+fi -+ - # Work around bugs in pre-3.0 UWIN ksh. --$as_unset ENV MAIL MAILPATH -+for as_var in ENV MAIL MAILPATH -+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -+done - PS1='$ ' - PS2='> ' - PS4='+ ' -@@ -44,18 +108,19 @@ do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else -- $as_unset $as_var -+ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi - done - - # Required to use basename. --if expr a : '\(a\)' >/dev/null 2>&1; then -+if expr a : '\(a\)' >/dev/null 2>&1 && -+ test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr - else - as_expr=false - fi - --if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then -+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename - else - as_basename=false -@@ -63,157 +128,388 @@ fi - - - # Name of the executable. --as_me=`$as_basename "$0" || -+as_me=`$as_basename -- "$0" || - $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ -- X"$0" : 'X\(/\)$' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$0" : 'X\(/\)' \| . 2>/dev/null || - echo X/"$0" | -- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } -- /^X\/\(\/\/\)$/{ s//\1/; q; } -- /^X\/\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -+ sed '/^.*\/\([^/][^/]*\)\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\/\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\/\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` - -+# CDPATH. -+$as_unset CDPATH - --# PATH needs CR, and LINENO needs CR and PATH. --# Avoid depending upon Character Ranges. --as_cr_letters='abcdefghijklmnopqrstuvwxyz' --as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' --as_cr_Letters=$as_cr_letters$as_cr_LETTERS --as_cr_digits='0123456789' --as_cr_alnum=$as_cr_Letters$as_cr_digits - --# The user is always right. --if test "${PATH_SEPARATOR+set}" != set; then -- echo "#! /bin/sh" >conf$$.sh -- echo "exit 0" >>conf$$.sh -- chmod +x conf$$.sh -- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then -- PATH_SEPARATOR=';' -- else -- PATH_SEPARATOR=: -- fi -- rm -f conf$$.sh -+if test "x$CONFIG_SHELL" = x; then -+ if (eval ":") 2>/dev/null; then -+ as_have_required=yes -+else -+ as_have_required=no -+fi ++/* When things go wrong, we want it to blow up, damnit! */ ++#undef BFD_ASSERT ++#undef abort ++#define BFD_ASSERT(expr) \ ++ do \ ++ { \ ++ if (!(expr)) \ ++ { \ ++ bfd_assert(__FILE__, __LINE__); \ ++ abort(); \ ++ } \ ++ } \ ++ while (0) + -+ if test $as_have_required = yes && (eval ": -+(as_func_return () { -+ (exit \$1) -+} -+as_func_success () { -+ as_func_return 0 -+} -+as_func_failure () { -+ as_func_return 1 -+} -+as_func_ret_success () { -+ return 0 -+} -+as_func_ret_failure () { -+ return 1 -+} ++/* The name of the dynamic interpreter. This is put in the .interp section. */ ++#define ELF_DYNAMIC_INTERPRETER "/lib/ld.so.1" + -+exitcode=0 -+if as_func_success; then -+ : -+else -+ exitcode=1 -+ echo as_func_success failed. - fi - -+if as_func_failure; then -+ exitcode=1 -+ echo as_func_failure succeeded. -+fi - -- as_lineno_1=$LINENO -- as_lineno_2=$LINENO -- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` -- test "x$as_lineno_1" != "x$as_lineno_2" && -- test "x$as_lineno_3" = "x$as_lineno_2" || { -- # Find who we are. Look in the path if we contain no path at all -- # relative or not. -- case $0 in -- *[\\/]* ) as_myself=$0 ;; -- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break --done -+if as_func_ret_success; then -+ : -+else -+ exitcode=1 -+ echo as_func_ret_success failed. -+fi - -- ;; -- esac -- # We did not find ourselves, most probably we were run as `sh COMMAND' -- # in which case we are not to be found in the path. -- if test "x$as_myself" = x; then -- as_myself=$0 -- fi -- if test ! -f "$as_myself"; then -- { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 -- { (exit 1); exit 1; }; } -- fi -- case $CONFIG_SHELL in -- '') -+if as_func_ret_failure; then -+ exitcode=1 -+ echo as_func_ret_failure succeeded. -+fi ++#define AVR32_GOT_HEADER_SIZE 8 ++#define AVR32_FUNCTION_STUB_SIZE 8 + -+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then -+ : -+else -+ exitcode=1 -+ echo positional parameters were not saved. -+fi ++#define ELF_R_INFO(x, y) ELF32_R_INFO(x, y) ++#define ELF_R_TYPE(x) ELF32_R_TYPE(x) ++#define ELF_R_SYM(x) ELF32_R_SYM(x) + -+test \$exitcode = 0) || { (exit 1); exit 1; } ++#define NOP_OPCODE 0xd703 + -+( -+ as_lineno_1=\$LINENO -+ as_lineno_2=\$LINENO -+ test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && -+ test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } -+") 2> /dev/null; then -+ : -+else -+ as_candidate_shells= - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- for as_base in sh bash ksh sh5; do -- case $as_dir in -+ case $as_dir in - /*) -- if ("$as_dir/$as_base" -c ' -+ for as_base in sh bash ksh sh5; do -+ as_candidate_shells="$as_candidate_shells $as_dir/$as_base" -+ done;; -+ esac -+done -+IFS=$as_save_IFS ++ ++/* Mapping between BFD relocations and ELF relocations */ + ++static reloc_howto_type * ++bfd_elf32_bfd_reloc_type_lookup(bfd *abfd, bfd_reloc_code_real_type code); ++static void ++avr32_info_to_howto (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst); + -+ for as_shell in $as_candidate_shells $SHELL; do -+ # Try only shells that exist, to save several forks. -+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } && -+ { ("$as_shell") 2> /dev/null <<\_ASEOF -+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then -+ emulate sh -+ NULLCMD=: -+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which -+ # is contrary to our usage. Disable this feature. -+ alias -g '${1+"$@"}'='"$@"' -+ setopt NO_GLOB_SUBST -+else -+ case `(set -o) 2>/dev/null` in -+ *posix*) set -o posix ;; -+esac ++/* Generic HOWTO */ ++#define GENH(name, align, size, bitsize, pcrel, bitpos, complain, mask) \ ++ HOWTO(name, align, size, bitsize, pcrel, bitpos, \ ++ complain_overflow_##complain, bfd_elf_generic_reloc, #name, \ ++ FALSE, 0, mask, pcrel) + -+fi ++static reloc_howto_type elf_avr32_howto_table[] = { ++ /* NAME ALN SZ BSZ PCREL BP COMPLAIN MASK */ ++ GENH(R_AVR32_NONE, 0, 0, 0, FALSE, 0, dont, 0x00000000), + ++ GENH(R_AVR32_32, 0, 2, 32, FALSE, 0, dont, 0xffffffff), ++ GENH(R_AVR32_16, 0, 1, 16, FALSE, 0, bitfield, 0x0000ffff), ++ GENH(R_AVR32_8, 0, 0, 8, FALSE, 0, bitfield, 0x000000ff), ++ GENH(R_AVR32_32_PCREL, 0, 2, 32, TRUE, 0, signed, 0xffffffff), ++ GENH(R_AVR32_16_PCREL, 0, 1, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_8_PCREL, 0, 0, 8, TRUE, 0, signed, 0x000000ff), + -+: -+_ASEOF -+}; then -+ CONFIG_SHELL=$as_shell -+ as_have_required=yes -+ if { "$as_shell" 2> /dev/null <<\_ASEOF -+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then -+ emulate sh -+ NULLCMD=: -+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which -+ # is contrary to our usage. Disable this feature. -+ alias -g '${1+"$@"}'='"$@"' -+ setopt NO_GLOB_SUBST -+else -+ case `(set -o) 2>/dev/null` in -+ *posix*) set -o posix ;; -+esac ++ /* Difference between two symbol (sym2 - sym1). The reloc encodes ++ the value of sym1. The field contains the difference before any ++ relaxing is done. */ ++ GENH(R_AVR32_DIFF32, 0, 2, 32, FALSE, 0, dont, 0xffffffff), ++ GENH(R_AVR32_DIFF16, 0, 1, 16, FALSE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_DIFF8, 0, 0, 8, FALSE, 0, signed, 0x000000ff), + -+fi ++ GENH(R_AVR32_GOT32, 0, 2, 32, FALSE, 0, signed, 0xffffffff), ++ GENH(R_AVR32_GOT16, 0, 1, 16, FALSE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_GOT8, 0, 0, 8, FALSE, 0, signed, 0x000000ff), + ++ GENH(R_AVR32_21S, 0, 2, 21, FALSE, 0, signed, 0x1e10ffff), ++ GENH(R_AVR32_16U, 0, 2, 16, FALSE, 0, unsigned, 0x0000ffff), ++ GENH(R_AVR32_16S, 0, 2, 16, FALSE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_8S, 0, 1, 8, FALSE, 4, signed, 0x00000ff0), ++ GENH(R_AVR32_8S_EXT, 0, 2, 8, FALSE, 0, signed, 0x000000ff), + -+: -+(as_func_return () { -+ (exit $1) -+} -+as_func_success () { -+ as_func_return 0 -+} -+as_func_failure () { -+ as_func_return 1 -+} -+as_func_ret_success () { -+ return 0 -+} -+as_func_ret_failure () { -+ return 1 -+} ++ GENH(R_AVR32_22H_PCREL, 1, 2, 21, TRUE, 0, signed, 0x1e10ffff), ++ GENH(R_AVR32_18W_PCREL, 2, 2, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_16B_PCREL, 0, 2, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_16N_PCREL, 0, 2, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_14UW_PCREL, 2, 2, 12, TRUE, 0, unsigned, 0x0000f0ff), ++ GENH(R_AVR32_11H_PCREL, 1, 1, 10, TRUE, 4, signed, 0x00000ff3), ++ GENH(R_AVR32_10UW_PCREL, 2, 2, 8, TRUE, 0, unsigned, 0x000000ff), ++ GENH(R_AVR32_9H_PCREL, 1, 1, 8, TRUE, 4, signed, 0x00000ff0), ++ GENH(R_AVR32_9UW_PCREL, 2, 1, 7, TRUE, 4, unsigned, 0x000007f0), + -+exitcode=0 -+if as_func_success; then -+ : -+else -+ exitcode=1 -+ echo as_func_success failed. -+fi ++ GENH(R_AVR32_HI16, 16, 2, 16, FALSE, 0, dont, 0x0000ffff), ++ GENH(R_AVR32_LO16, 0, 2, 16, FALSE, 0, dont, 0x0000ffff), + -+if as_func_failure; then -+ exitcode=1 -+ echo as_func_failure succeeded. -+fi ++ GENH(R_AVR32_GOTPC, 0, 2, 32, FALSE, 0, dont, 0xffffffff), ++ GENH(R_AVR32_GOTCALL, 2, 2, 21, FALSE, 0, signed, 0x1e10ffff), ++ GENH(R_AVR32_LDA_GOT, 2, 2, 21, FALSE, 0, signed, 0x1e10ffff), ++ GENH(R_AVR32_GOT21S, 0, 2, 21, FALSE, 0, signed, 0x1e10ffff), ++ GENH(R_AVR32_GOT18SW, 2, 2, 16, FALSE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_GOT16S, 0, 2, 16, FALSE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_GOT7UW, 2, 1, 5, FALSE, 4, unsigned, 0x000001f0), + -+if as_func_ret_success; then -+ : -+else -+ exitcode=1 -+ echo as_func_ret_success failed. -+fi ++ GENH(R_AVR32_32_CPENT, 0, 2, 32, FALSE, 0, dont, 0xffffffff), ++ GENH(R_AVR32_CPCALL, 2, 2, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_16_CP, 0, 2, 16, TRUE, 0, signed, 0x0000ffff), ++ GENH(R_AVR32_9W_CP, 2, 1, 7, TRUE, 4, unsigned, 0x000007f0), + -+if as_func_ret_failure; then -+ exitcode=1 -+ echo as_func_ret_failure succeeded. -+fi ++ GENH(R_AVR32_RELATIVE, 0, 2, 32, FALSE, 0, signed, 0xffffffff), ++ GENH(R_AVR32_GLOB_DAT, 0, 2, 32, FALSE, 0, dont, 0xffffffff), ++ GENH(R_AVR32_JMP_SLOT, 0, 2, 32, FALSE, 0, dont, 0xffffffff), + -+if ( set x; as_func_ret_success y && test x = "$1" ); then -+ : -+else -+ exitcode=1 -+ echo positional parameters were not saved. -+fi ++ GENH(R_AVR32_ALIGN, 0, 1, 0, FALSE, 0, unsigned, 0x00000000), ++}; + -+test $exitcode = 0) || { (exit 1); exit 1; } ++struct elf_reloc_map ++{ ++ bfd_reloc_code_real_type bfd_reloc_val; ++ unsigned char elf_reloc_val; ++}; + -+( - as_lineno_1=$LINENO - as_lineno_2=$LINENO -- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && -- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then -- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } -- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } -- CONFIG_SHELL=$as_dir/$as_base -- export CONFIG_SHELL -- exec "$CONFIG_SHELL" "$0" ${1+"$@"} -- fi;; -- esac -- done --done --;; -- esac -+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } ++static const struct elf_reloc_map avr32_reloc_map[] = ++{ ++ { BFD_RELOC_NONE, R_AVR32_NONE }, + -+_ASEOF -+}; then -+ break -+fi ++ { BFD_RELOC_32, R_AVR32_32 }, ++ { BFD_RELOC_16, R_AVR32_16 }, ++ { BFD_RELOC_8, R_AVR32_8 }, ++ { BFD_RELOC_32_PCREL, R_AVR32_32_PCREL }, ++ { BFD_RELOC_16_PCREL, R_AVR32_16_PCREL }, ++ { BFD_RELOC_8_PCREL, R_AVR32_8_PCREL }, ++ { BFD_RELOC_AVR32_DIFF32, R_AVR32_DIFF32 }, ++ { BFD_RELOC_AVR32_DIFF16, R_AVR32_DIFF16 }, ++ { BFD_RELOC_AVR32_DIFF8, R_AVR32_DIFF8 }, ++ { BFD_RELOC_AVR32_GOT32, R_AVR32_GOT32 }, ++ { BFD_RELOC_AVR32_GOT16, R_AVR32_GOT16 }, ++ { BFD_RELOC_AVR32_GOT8, R_AVR32_GOT8 }, + -+fi ++ { BFD_RELOC_AVR32_21S, R_AVR32_21S }, ++ { BFD_RELOC_AVR32_16U, R_AVR32_16U }, ++ { BFD_RELOC_AVR32_16S, R_AVR32_16S }, ++ { BFD_RELOC_AVR32_SUB5, R_AVR32_16S }, ++ { BFD_RELOC_AVR32_8S_EXT, R_AVR32_8S_EXT }, ++ { BFD_RELOC_AVR32_8S, R_AVR32_8S }, + -+ done ++ { BFD_RELOC_AVR32_22H_PCREL, R_AVR32_22H_PCREL }, ++ { BFD_RELOC_AVR32_18W_PCREL, R_AVR32_18W_PCREL }, ++ { BFD_RELOC_AVR32_16B_PCREL, R_AVR32_16B_PCREL }, ++ { BFD_RELOC_AVR32_16N_PCREL, R_AVR32_16N_PCREL }, ++ { BFD_RELOC_AVR32_11H_PCREL, R_AVR32_11H_PCREL }, ++ { BFD_RELOC_AVR32_10UW_PCREL, R_AVR32_10UW_PCREL }, ++ { BFD_RELOC_AVR32_9H_PCREL, R_AVR32_9H_PCREL }, ++ { BFD_RELOC_AVR32_9UW_PCREL, R_AVR32_9UW_PCREL }, + -+ if test "x$CONFIG_SHELL" != x; then -+ for as_var in BASH_ENV ENV -+ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -+ done -+ export CONFIG_SHELL -+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -+fi ++ { BFD_RELOC_HI16, R_AVR32_HI16 }, ++ { BFD_RELOC_LO16, R_AVR32_LO16 }, + ++ { BFD_RELOC_AVR32_GOTPC, R_AVR32_GOTPC }, ++ { BFD_RELOC_AVR32_GOTCALL, R_AVR32_GOTCALL }, ++ { BFD_RELOC_AVR32_LDA_GOT, R_AVR32_LDA_GOT }, ++ { BFD_RELOC_AVR32_GOT21S, R_AVR32_GOT21S }, ++ { BFD_RELOC_AVR32_GOT18SW, R_AVR32_GOT18SW }, ++ { BFD_RELOC_AVR32_GOT16S, R_AVR32_GOT16S }, ++ /* GOT7UW should never be generated by the assembler */ + -+ if test $as_have_required = no; then -+ echo This script requires a shell more modern than all the -+ echo shells that I found on your system. Please install a -+ echo modern shell, or manually run the script under such a -+ echo shell if you do have one. -+ { (exit 1); exit 1; } -+fi ++ { BFD_RELOC_AVR32_32_CPENT, R_AVR32_32_CPENT }, ++ { BFD_RELOC_AVR32_CPCALL, R_AVR32_CPCALL }, ++ { BFD_RELOC_AVR32_16_CP, R_AVR32_16_CP }, ++ { BFD_RELOC_AVR32_9W_CP, R_AVR32_9W_CP }, + ++ { BFD_RELOC_AVR32_ALIGN, R_AVR32_ALIGN }, ++}; + -+fi ++static reloc_howto_type * ++bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, ++ bfd_reloc_code_real_type code) ++{ ++ unsigned int i; + -+fi ++ for (i = 0; i < sizeof(avr32_reloc_map) / sizeof(struct elf_reloc_map); i++) ++ { ++ if (avr32_reloc_map[i].bfd_reloc_val == code) ++ return &elf_avr32_howto_table[avr32_reloc_map[i].elf_reloc_val]; ++ } + ++ return NULL; ++} + ++static void ++avr32_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, ++ arelent *cache_ptr, ++ Elf_Internal_Rela *dst) ++{ ++ unsigned int r_type; + -+(eval "as_func_return () { -+ (exit \$1) -+} -+as_func_success () { -+ as_func_return 0 -+} -+as_func_failure () { -+ as_func_return 1 -+} -+as_func_ret_success () { -+ return 0 -+} -+as_func_ret_failure () { -+ return 1 ++ r_type = ELF32_R_TYPE (dst->r_info); ++ BFD_ASSERT (r_type < (unsigned int) R_AVR32_max); ++ cache_ptr->howto = &elf_avr32_howto_table[r_type]; +} + -+exitcode=0 -+if as_func_success; then -+ : -+else -+ exitcode=1 -+ echo as_func_success failed. -+fi ++ ++/* AVR32 ELF linker hash table and associated hash entries. */ + -+if as_func_failure; then -+ exitcode=1 -+ echo as_func_failure succeeded. -+fi ++static struct bfd_hash_entry * ++avr32_elf_link_hash_newfunc(struct bfd_hash_entry *entry, ++ struct bfd_hash_table *table, ++ const char *string); ++static void ++avr32_elf_copy_indirect_symbol(struct bfd_link_info *info, ++ struct elf_link_hash_entry *dir, ++ struct elf_link_hash_entry *ind); ++static struct bfd_link_hash_table * ++avr32_elf_link_hash_table_create(bfd *abfd); + -+if as_func_ret_success; then -+ : -+else -+ exitcode=1 -+ echo as_func_ret_success failed. -+fi ++/* ++ Try to limit memory usage to something reasonable when sorting the ++ GOT. If we ever get more than this many references to the same ++ symbol, we may need to do something special. ++*/ ++#define MAX_NR_GOT_HOLES 8192 + -+if as_func_ret_failure; then -+ exitcode=1 -+ echo as_func_ret_failure succeeded. -+fi ++/* ++ AVR32 GOT entry. We need to keep track of refcounts and offsets ++ simultaneously, since we need the offsets during relaxation, and we ++ also want to be able to drop GOT entries during relaxation. In ++ addition to this, we want to keep the list of GOT entries sorted so ++ that we can keep the most-used entries at the lowest offsets. ++*/ ++struct got_entry ++{ ++ struct got_entry *next; ++ struct got_entry **pprev; ++ int refcount; ++ bfd_signed_vma offset; ++}; + -+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then -+ : -+else -+ exitcode=1 -+ echo positional parameters were not saved. -+fi ++struct elf_avr32_link_hash_entry ++{ ++ struct elf_link_hash_entry root; + -+test \$exitcode = 0") || { -+ echo No shell found that supports shell functions. -+ echo Please tell autoconf@gnu.org about your system, -+ echo including any error possibly output before this -+ echo message ++ /* Number of runtime relocations against this symbol. */ ++ unsigned int possibly_dynamic_relocs; ++ ++ /* If there are anything but R_AVR32_GOT18 relocations against this ++ symbol, it means that someone may be taking the address of the ++ function, and we should therefore not create a stub. */ ++ bfd_boolean no_fn_stub; ++ ++ /* If there is a R_AVR32_32 relocation in a read-only section ++ against this symbol, we could be in trouble. If we're linking a ++ shared library or this symbol is defined in one, it means we must ++ emit a run-time reloc for it and that's not allowed in read-only ++ sections. */ ++ asection *readonly_reloc_sec; ++ bfd_vma readonly_reloc_offset; ++ ++ /* Record which frag (if any) contains the symbol. This is used ++ during relaxation in order to avoid having to update all symbols ++ whenever we move something. For local symbols, this information ++ is in the local_sym_frag member of struct elf_obj_tdata. */ ++ struct fragment *sym_frag; ++}; ++#define avr32_elf_hash_entry(ent) ((struct elf_avr32_link_hash_entry *)(ent)) ++ ++struct elf_avr32_link_hash_table ++{ ++ struct elf_link_hash_table root; ++ ++ /* Shortcuts to get to dynamic linker sections. */ ++ asection *sgot; ++ asection *srelgot; ++ asection *sstub; ++ ++ /* We use a variation of Pigeonhole Sort to sort the GOT. After the ++ initial refcounts have been determined, we initialize ++ nr_got_holes to the highest refcount ever seen and allocate an ++ array of nr_got_holes entries for got_hole. Each GOT entry is ++ then stored in this array at the index given by its refcount. ++ ++ When a GOT entry has its refcount decremented during relaxation, ++ it is moved to a lower index in the got_hole array. ++ */ ++ struct got_entry **got_hole; ++ int nr_got_holes; ++ ++ /* Dynamic relocations to local symbols. Only used when linking a ++ shared library and -Bsymbolic is not given. */ ++ unsigned int local_dynamic_relocs; ++ ++ bfd_boolean relocations_analyzed; ++ bfd_boolean symbols_adjusted; ++ bfd_boolean repeat_pass; ++ unsigned int relax_iteration; ++ unsigned int relax_pass; ++}; ++#define avr32_elf_hash_table(p) \ ++ ((struct elf_avr32_link_hash_table *)((p)->hash)) ++ ++static struct bfd_hash_entry * ++avr32_elf_link_hash_newfunc(struct bfd_hash_entry *entry, ++ struct bfd_hash_table *table, ++ const char *string) ++{ ++ struct elf_avr32_link_hash_entry *ret = avr32_elf_hash_entry(entry); ++ ++ /* Allocate the structure if it hasn't already been allocated by a ++ subclass */ ++ if (ret == NULL) ++ ret = (struct elf_avr32_link_hash_entry *) ++ bfd_hash_allocate(table, sizeof(struct elf_avr32_link_hash_entry)); ++ ++ if (ret == NULL) ++ return NULL; ++ ++ memset(ret, 0, sizeof(struct elf_avr32_link_hash_entry)); ++ ++ /* Give the superclass a chance */ ++ ret = (struct elf_avr32_link_hash_entry *) ++ _bfd_elf_link_hash_newfunc((struct bfd_hash_entry *)ret, table, string); ++ ++ return (struct bfd_hash_entry *)ret; +} + ++/* Copy data from an indirect symbol to its direct symbol, hiding the ++ old indirect symbol. Process additional relocation information. ++ Also called for weakdefs, in which case we just let ++ _bfd_elf_link_hash_copy_indirect copy the flags for us. */ + ++static void ++avr32_elf_copy_indirect_symbol(struct bfd_link_info *info, ++ struct elf_link_hash_entry *dir, ++ struct elf_link_hash_entry *ind) ++{ ++ struct elf_avr32_link_hash_entry *edir, *eind; + -+ as_lineno_1=$LINENO -+ as_lineno_2=$LINENO -+ test "x$as_lineno_1" != "x$as_lineno_2" && -+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a -- # line-number line before each line; the second 'sed' does the real -- # work. The second script uses 'N' to pair each line-number line -- # with the numbered line, and appends trailing '-' during -- # substitution so that $LINENO is not a special case at line end. -+ # line-number line after each line using $LINENO; the second 'sed' -+ # does the real work. The second script uses 'N' to pair each -+ # line-number line with the line containing $LINENO, and appends -+ # trailing '-' during substitution so that $LINENO is not a special -+ # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the -- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) -- sed '=' <$as_myself | -+ # scripts with optimization help from Paolo Bonzini. Blame Lee -+ # E. McMahon (1931-1989) for sed's syntax. :-) -+ sed -n ' -+ p -+ /[$]LINENO/= -+ ' <$as_myself | - sed ' -+ s/[$]LINENO.*/&-/ -+ t lineno -+ b -+ :lineno - N -- s,$,-, -- : loop -- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, -+ :loop -+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop -- s,-$,, -- s,^['$as_cr_digits']*\n,, -+ s/-\n.*// - ' >$as_me.lineno && -- chmod +x $as_me.lineno || -+ chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the -- # original and so on. Autoconf is especially sensible to this). -- . ./$as_me.lineno -+ # original and so on. Autoconf is especially sensitive to this). -+ . "./$as_me.lineno" - # Exit status is that of the last command. - exit - } - - --case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in -- *c*,-n*) ECHO_N= ECHO_C=' --' ECHO_T=' ' ;; -- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; -- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then -+ as_dirname=dirname -+else -+ as_dirname=false -+fi ++ _bfd_elf_link_hash_copy_indirect (info, dir, ind); + -+ECHO_C= ECHO_N= ECHO_T= -+case `echo -n x` in -+-n*) -+ case `echo 'x\c'` in -+ *c*) ECHO_T=' ';; # ECHO_T is single tab character. -+ *) ECHO_C='\c';; -+ esac;; -+*) -+ ECHO_N='-n';; - esac - --if expr a : '\(a\)' >/dev/null 2>&1; then -+if expr a : '\(a\)' >/dev/null 2>&1 && -+ test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr - else - as_expr=false - fi - - rm -f conf$$ conf$$.exe conf$$.file -+if test -d conf$$.dir; then -+ rm -f conf$$.dir/conf$$.file -+else -+ rm -f conf$$.dir -+ mkdir conf$$.dir -+fi - echo >conf$$.file - if ln -s conf$$.file conf$$ 2>/dev/null; then -- # We could just check for DJGPP; but this test a) works b) is more generic -- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). -- if test -f conf$$.exe; then -- # Don't use ln at all; we don't have any links -+ as_ln_s='ln -s' -+ # ... but there are two gotchas: -+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. -+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. -+ # In both cases, we have to default to `cp -p'. -+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -- else -- as_ln_s='ln -s' -- fi - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi --rm -f conf$$ conf$$.exe conf$$.file -+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -+rmdir conf$$.dir 2>/dev/null - - if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -@@ -222,7 +518,28 @@ else - as_mkdir_p=false - fi - --as_executable_p="test -f" -+if test -x / >/dev/null 2>&1; then -+ as_test_x='test -x' -+else -+ if ls -dL / >/dev/null 2>&1; then -+ as_ls_L_option=L -+ else -+ as_ls_L_option= -+ fi -+ as_test_x=' -+ eval sh -c '\'' -+ if test -d "$1"; then -+ test -d "$1/."; ++ if (ind->root.type != bfd_link_hash_indirect) ++ return; ++ ++ edir = (struct elf_avr32_link_hash_entry *)dir; ++ eind = (struct elf_avr32_link_hash_entry *)ind; ++ ++ edir->possibly_dynamic_relocs += eind->possibly_dynamic_relocs; ++ edir->no_fn_stub = edir->no_fn_stub || eind->no_fn_stub; ++} ++ ++static struct bfd_link_hash_table * ++avr32_elf_link_hash_table_create(bfd *abfd) ++{ ++ struct elf_avr32_link_hash_table *ret; ++ ++ ret = bfd_zmalloc(sizeof(*ret)); ++ if (ret == NULL) ++ return NULL; ++ ++ if (! _bfd_elf_link_hash_table_init(&ret->root, abfd, ++ avr32_elf_link_hash_newfunc, ++ sizeof (struct elf_avr32_link_hash_entry))) ++ { ++ free(ret); ++ return NULL; ++ } ++ ++ /* Prevent the BFD core from creating bogus got_entry pointers */ ++ ret->root.init_got_refcount.glist = NULL; ++ ret->root.init_plt_refcount.glist = NULL; ++ ++ return &ret->root.root; ++} ++ ++ ++/* Initial analysis and creation of dynamic sections and symbols */ ++ ++static asection * ++create_dynamic_section(bfd *dynobj, const char *name, flagword flags, ++ unsigned int align_power); ++static struct elf_link_hash_entry * ++create_dynamic_symbol(bfd *dynobj, struct bfd_link_info *info, ++ const char *name, asection *sec, ++ bfd_vma offset); ++static bfd_boolean ++avr32_elf_create_got_section (bfd *dynobj, struct bfd_link_info *info); ++static bfd_boolean ++avr32_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info); ++static bfd_boolean ++avr32_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, ++ const Elf_Internal_Rela *relocs); ++static bfd_boolean ++avr32_elf_adjust_dynamic_symbol(struct bfd_link_info *info, ++ struct elf_link_hash_entry *h); ++ ++static asection * ++create_dynamic_section(bfd *dynobj, const char *name, flagword flags, ++ unsigned int align_power) ++{ ++ asection *sec; ++ ++ sec = bfd_make_section(dynobj, name); ++ if (!sec ++ || !bfd_set_section_flags(dynobj, sec, flags) ++ || !bfd_set_section_alignment(dynobj, sec, align_power)) ++ return NULL; ++ ++ return sec; ++} ++ ++static struct elf_link_hash_entry * ++create_dynamic_symbol(bfd *dynobj, struct bfd_link_info *info, ++ const char *name, asection *sec, ++ bfd_vma offset) ++{ ++ struct bfd_link_hash_entry *bh = NULL; ++ struct elf_link_hash_entry *h; ++ const struct elf_backend_data *bed = get_elf_backend_data (dynobj); ++ ++ if (!(_bfd_generic_link_add_one_symbol ++ (info, dynobj, name, BSF_GLOBAL, sec, offset, NULL, FALSE, ++ bed->collect, &bh))) ++ return NULL; ++ ++ h = (struct elf_link_hash_entry *)bh; ++ h->def_regular = 1; ++ h->type = STT_OBJECT; ++ h->other = STV_HIDDEN; ++ ++ return h; ++} ++ ++static bfd_boolean ++avr32_elf_create_got_section (bfd *dynobj, struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ flagword flags; ++ const struct elf_backend_data *bed = get_elf_backend_data (dynobj); ++ ++ htab = avr32_elf_hash_table(info); ++ flags = bed->dynamic_sec_flags; ++ ++ if (htab->sgot) ++ return TRUE; ++ ++ htab->sgot = create_dynamic_section(dynobj, ".got", flags, 2); ++ if (!htab->srelgot) ++ htab->srelgot = create_dynamic_section(dynobj, ".rela.got", ++ flags | SEC_READONLY, 2); ++ ++ if (!htab->sgot || !htab->srelgot) ++ return FALSE; ++ ++ htab->root.hgot = create_dynamic_symbol(dynobj, info, "_GLOBAL_OFFSET_TABLE_", ++ htab->sgot, 0); ++ if (!htab->root.hgot) ++ return FALSE; ++ ++ /* Make room for the GOT header */ ++ htab->sgot->size += bed->got_header_size; ++ ++ return TRUE; ++} ++ ++/* (1) Create all dynamic (i.e. linker generated) sections that we may ++ need during the link */ ++ ++static bfd_boolean ++avr32_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ flagword flags; ++ const struct elf_backend_data *bed = get_elf_backend_data (dynobj); ++ ++ pr_debug("(1) create dynamic sections\n"); ++ ++ htab = avr32_elf_hash_table(info); ++ flags = bed->dynamic_sec_flags; ++ ++ if (!avr32_elf_create_got_section (dynobj, info)) ++ return FALSE; ++ ++ if (!htab->sstub) ++ htab->sstub = create_dynamic_section(dynobj, ".stub", ++ flags | SEC_READONLY | SEC_CODE, 2); ++ ++ if (!htab->sstub) ++ return FALSE; ++ ++ return TRUE; ++} ++ ++/* (2) Go through all the relocs and count any potential GOT- or ++ PLT-references to each symbol */ ++ ++static bfd_boolean ++avr32_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, ++ const Elf_Internal_Rela *relocs) ++{ ++ Elf_Internal_Shdr *symtab_hdr; ++ struct elf_avr32_link_hash_table *htab; ++ struct elf_link_hash_entry **sym_hashes; ++ const Elf_Internal_Rela *rel, *rel_end; ++ struct got_entry **local_got_ents; ++ struct got_entry *got; ++ const struct elf_backend_data *bed = get_elf_backend_data (abfd); ++ asection *sgot; ++ bfd *dynobj; ++ ++ pr_debug("(2) check relocs for %s:<%s> (size 0x%lx)\n", ++ abfd->filename, sec->name, sec->size); ++ ++ if (info->relocatable) ++ return TRUE; ++ ++ dynobj = elf_hash_table(info)->dynobj; ++ symtab_hdr = &elf_tdata(abfd)->symtab_hdr; ++ sym_hashes = elf_sym_hashes(abfd); ++ htab = avr32_elf_hash_table(info); ++ local_got_ents = elf_local_got_ents(abfd); ++ sgot = htab->sgot; ++ ++ rel_end = relocs + sec->reloc_count; ++ for (rel = relocs; rel < rel_end; rel++) ++ { ++ unsigned long r_symndx, r_type; ++ struct elf_avr32_link_hash_entry *h; ++ ++ r_symndx = ELF32_R_SYM(rel->r_info); ++ r_type = ELF32_R_TYPE(rel->r_info); ++ ++ /* Local symbols use local_got_ents, while others store the same ++ information in the hash entry */ ++ if (r_symndx < symtab_hdr->sh_info) ++ { ++ pr_debug(" (2a) processing local symbol %lu\n", r_symndx); ++ h = NULL; ++ } + else -+ case $1 in -+ -*)set "./$1";; -+ esac; -+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in -+ ???[sx]*):;;*)false;;esac;fi -+ '\'' sh -+ ' -+fi -+as_executable_p=$as_test_x - - # Sed expression to map a string onto a valid CPP name. - as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" -@@ -231,39 +548,27 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P - as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - --# IFS --# We need space, tab and new line, in precisely that order. --as_nl=' --' --IFS=" $as_nl" -- --# CDPATH. --$as_unset CDPATH - -+exec 7<&0 &1 - - # Name of the host. - # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, - # so uname gets run too. - ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - --exec 6>&1 -- - # - # Initializations. - # - ac_default_prefix=/usr/local -+ac_clean_files= - ac_config_libobj_dir=. -+LIBOBJS= - cross_compiling=no - subdirs= - MFLAGS= - MAKEFLAGS= - SHELL=${CONFIG_SHELL-/bin/sh} - --# Maximum number of lines to put in a shell here document. --# This variable seems obsolete. It should probably be removed, and --# only ac_max_sed_lines should be used. --: ${ac_max_here_lines=38} -- - # Identity of this package. - PACKAGE_NAME= - PACKAGE_TARNAME= -@@ -275,42 +580,193 @@ ac_unique_file="ar.c" - # Factoring default headers for most tests. - ac_includes_default="\ - #include --#if HAVE_SYS_TYPES_H -+#ifdef HAVE_SYS_TYPES_H - # include - #endif --#if HAVE_SYS_STAT_H -+#ifdef HAVE_SYS_STAT_H - # include - #endif --#if STDC_HEADERS -+#ifdef STDC_HEADERS - # include - # include - #else --# if HAVE_STDLIB_H -+# ifdef HAVE_STDLIB_H - # include - # endif - #endif --#if HAVE_STRING_H --# if !STDC_HEADERS && HAVE_MEMORY_H -+#ifdef HAVE_STRING_H -+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H - # include - # endif - # include - #endif --#if HAVE_STRINGS_H -+#ifdef HAVE_STRINGS_H - # include - #endif --#if HAVE_INTTYPES_H -+#ifdef HAVE_INTTYPES_H - # include --#else --# if HAVE_STDINT_H --# include --# endif - #endif --#if HAVE_UNISTD_H -+#ifdef HAVE_STDINT_H -+# include -+#endif -+#ifdef HAVE_UNISTD_H - # include - #endif" - --ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE LN_S RANLIB ac_ct_RANLIB LIBTOOL WARN_CFLAGS NO_WERROR YACC LEX LEXLIB LEX_OUTPUT_ROOT CPP EGREP ALLOCA USE_NLS MSGFMT GMSGFMT XGETTEXT USE_INCLUDED_LIBINTL CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLDEPS INTLLIBS INTLOBJS POFILES POSUB INCLUDE_LOCALE_H GT_NO GT_YES MKINSTALLDIRS l MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT HDEFINES AR CC_FOR_BUILD EXEEXT_FOR_BUILD DEMANGLER_NAME NLMCONV_DEFS BUILD_NLMCONV BUILD_SRCONV BUILD_DLLTOOL DLLTOOL_DEFS BUILD_WINDRES BUILD_DLLWRAP BUILD_MISC OBJDUMP_DEFS EMULATION EMULATION_VECTOR datarootdir docdir htmldir LIBOBJS LTLIBOBJS' -+ac_subst_vars='SHELL -+PATH_SEPARATOR -+PACKAGE_NAME -+PACKAGE_TARNAME -+PACKAGE_VERSION -+PACKAGE_STRING -+PACKAGE_BUGREPORT -+exec_prefix -+prefix -+program_transform_name -+bindir -+sbindir -+libexecdir -+datarootdir -+datadir -+sysconfdir -+sharedstatedir -+localstatedir -+includedir -+oldincludedir -+docdir -+infodir -+htmldir -+dvidir -+pdfdir -+psdir -+libdir -+localedir -+mandir -+DEFS -+ECHO_C -+ECHO_N -+ECHO_T -+LIBS -+build_alias -+host_alias -+target_alias -+build -+build_cpu -+build_vendor -+build_os -+host -+host_cpu -+host_vendor -+host_os -+target -+target_cpu -+target_vendor -+target_os -+CC -+CFLAGS -+LDFLAGS -+CPPFLAGS -+ac_ct_CC -+EXEEXT -+OBJEXT -+INSTALL_PROGRAM -+INSTALL_SCRIPT -+INSTALL_DATA -+CYGPATH_W -+PACKAGE -+VERSION -+ACLOCAL -+AUTOCONF -+AUTOMAKE -+AUTOHEADER -+MAKEINFO -+install_sh -+STRIP -+INSTALL_STRIP_PROGRAM -+mkdir_p -+AWK -+SET_MAKE -+am__leading_dot -+AMTAR -+am__tar -+am__untar -+DEPDIR -+am__include -+am__quote -+AMDEP_TRUE -+AMDEP_FALSE -+AMDEPBACKSLASH -+CCDEPMODE -+am__fastdepCC_TRUE -+am__fastdepCC_FALSE -+LN_S -+RANLIB -+LIBTOOL -+WARN_CFLAGS -+NO_WERROR -+YACC -+YFLAGS -+LEX -+LEX_OUTPUT_ROOT -+LEXLIB -+CPP -+GREP -+EGREP -+ALLOCA -+USE_NLS -+MSGFMT -+GMSGFMT -+XGETTEXT -+USE_INCLUDED_LIBINTL -+CATALOGS -+CATOBJEXT -+DATADIRNAME -+GMOFILES -+INSTOBJEXT -+INTLDEPS -+INTLLIBS -+INTLOBJS -+POFILES -+POSUB -+INCLUDE_LOCALE_H -+GT_NO -+GT_YES -+MKINSTALLDIRS -+l -+MAINTAINER_MODE_TRUE -+MAINTAINER_MODE_FALSE -+MAINT -+HDEFINES -+AR -+CC_FOR_BUILD -+EXEEXT_FOR_BUILD -+DEMANGLER_NAME -+NLMCONV_DEFS -+BUILD_NLMCONV -+BUILD_SRCONV -+BUILD_DLLTOOL -+DLLTOOL_DEFS -+BUILD_WINDRES -+BUILD_DLLWRAP -+BUILD_MISC -+OBJDUMP_DEFS -+EMULATION -+EMULATION_VECTOR -+LIBOBJS -+LTLIBOBJS' - ac_subst_files='' -+ ac_precious_vars='build_alias -+host_alias -+target_alias -+CC -+CFLAGS -+LDFLAGS -+LIBS -+CPPFLAGS -+YACC -+YFLAGS -+CPP' ++ { ++ h = (struct elf_avr32_link_hash_entry *) ++ sym_hashes[r_symndx - symtab_hdr->sh_info]; ++ while (h->root.type == bfd_link_hash_indirect ++ || h->root.type == bfd_link_hash_warning) ++ h = (struct elf_avr32_link_hash_entry *)h->root.root.u.i.link; ++ pr_debug(" (2a) processing symbol %s\n", h->root.root.root.string); ++ } + - - # Initialize some variables set by options. - ac_init_help= -@@ -337,34 +793,48 @@ x_libraries=NONE - # and all the variables that are supposed to be based on exec_prefix - # by default will actually change. - # Use braces instead of parens because sh, perl, etc. also accept them. -+# (The list follows the same order as the GNU Coding Standards.) - bindir='${exec_prefix}/bin' - sbindir='${exec_prefix}/sbin' - libexecdir='${exec_prefix}/libexec' --datadir='${prefix}/share' -+datarootdir='${prefix}/share' -+datadir='${datarootdir}' - sysconfdir='${prefix}/etc' - sharedstatedir='${prefix}/com' - localstatedir='${prefix}/var' --libdir='${exec_prefix}/lib' - includedir='${prefix}/include' - oldincludedir='/usr/include' --infodir='${prefix}/info' --mandir='${prefix}/man' -+docdir='${datarootdir}/doc/${PACKAGE}' -+infodir='${datarootdir}/info' -+htmldir='${docdir}' -+dvidir='${docdir}' -+pdfdir='${docdir}' -+psdir='${docdir}' -+libdir='${exec_prefix}/lib' -+localedir='${datarootdir}/locale' -+mandir='${datarootdir}/man' - - ac_prev= -+ac_dashdash= - for ac_option - do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then -- eval "$ac_prev=\$ac_option" -+ eval $ac_prev=\$ac_option - ac_prev= - continue - fi - -- ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` -+ case $ac_option in -+ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; -+ *) ac_optarg=yes ;; -+ esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - -- case $ac_option in -+ case $ac_dashdash$ac_option in -+ --) -+ ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; -@@ -386,33 +856,45 @@ do - --config-cache | -C) - cache_file=config.cache ;; - -- -datadir | --datadir | --datadi | --datad | --data | --dat | --da) -+ -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; -- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ -- | --da=*) -+ -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - -+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ -+ | --dataroo | --dataro | --datar) -+ ac_prev=datarootdir ;; -+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ -+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) -+ datarootdir=$ac_optarg ;; ++ /* Some relocs require special sections to be created. */ ++ switch (r_type) ++ { ++ case R_AVR32_GOT32: ++ case R_AVR32_GOT16: ++ case R_AVR32_GOT8: ++ case R_AVR32_GOT21S: ++ case R_AVR32_GOT18SW: ++ case R_AVR32_GOT16S: ++ case R_AVR32_GOT7UW: ++ case R_AVR32_LDA_GOT: ++ case R_AVR32_GOTCALL: ++ if (rel->r_addend) ++ { ++ if (info->callbacks->reloc_dangerous ++ (info, _("Non-zero addend on GOT-relative relocation"), ++ abfd, sec, rel->r_offset) == FALSE) ++ return FALSE; ++ } ++ /* fall through */ ++ case R_AVR32_GOTPC: ++ if (dynobj == NULL) ++ elf_hash_table(info)->dynobj = dynobj = abfd; ++ if (sgot == NULL && !avr32_elf_create_got_section(dynobj, info)) ++ return FALSE; ++ break; ++ case R_AVR32_32: ++ /* We may need to create .rela.dyn later on. */ ++ if (dynobj == NULL ++ && (info->shared || h != NULL) ++ && (sec->flags & SEC_ALLOC)) ++ elf_hash_table(info)->dynobj = dynobj = abfd; ++ break; ++ } + - -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. -- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && -+ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } -- ac_feature=`echo $ac_feature | sed 's/-/_/g'` -- eval "enable_$ac_feature=no" ;; -+ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` -+ eval enable_$ac_feature=no ;; ++ if (h != NULL && r_type != R_AVR32_GOT18SW) ++ h->no_fn_stub = TRUE; + -+ -docdir | --docdir | --docdi | --doc | --do) -+ ac_prev=docdir ;; -+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) -+ docdir=$ac_optarg ;; ++ switch (r_type) ++ { ++ case R_AVR32_GOT32: ++ case R_AVR32_GOT16: ++ case R_AVR32_GOT8: ++ case R_AVR32_GOT21S: ++ case R_AVR32_GOT18SW: ++ case R_AVR32_GOT16S: ++ case R_AVR32_GOT7UW: ++ case R_AVR32_LDA_GOT: ++ case R_AVR32_GOTCALL: ++ if (h != NULL) ++ { ++ got = h->root.got.glist; ++ if (!got) ++ { ++ got = bfd_zalloc(abfd, sizeof(struct got_entry)); ++ if (!got) ++ return FALSE; ++ h->root.got.glist = got; ++ } ++ } ++ else ++ { ++ if (!local_got_ents) ++ { ++ bfd_size_type size; ++ bfd_size_type i; ++ struct got_entry *tmp_entry; + -+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) -+ ac_prev=dvidir ;; -+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) -+ dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. -- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && -+ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } -- ac_feature=`echo $ac_feature | sed 's/-/_/g'` -- case $ac_option in -- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; -- *) ac_optarg=yes ;; -- esac -- eval "enable_$ac_feature='$ac_optarg'" ;; -+ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` -+ eval enable_$ac_feature=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ -@@ -439,6 +921,12 @@ do - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - -+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) -+ ac_prev=htmldir ;; -+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ -+ | --ht=*) -+ htmldir=$ac_optarg ;; ++ size = symtab_hdr->sh_info; ++ size *= sizeof(struct got_entry *) + sizeof(struct got_entry); ++ local_got_ents = bfd_zalloc(abfd, size); ++ if (!local_got_ents) ++ return FALSE; + - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; -@@ -463,13 +951,16 @@ do - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - -+ -localedir | --localedir | --localedi | --localed | --locale) -+ ac_prev=localedir ;; -+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) -+ localedir=$ac_optarg ;; ++ elf_local_got_ents(abfd) = local_got_ents; + - -localstatedir | --localstatedir | --localstatedi | --localstated \ -- | --localstate | --localstat | --localsta | --localst \ -- | --locals | --local | --loca | --loc | --lo) -+ | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ -- | --localstate=* | --localstat=* | --localsta=* | --localst=* \ -- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) -+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) -@@ -534,6 +1025,16 @@ do - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - -+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) -+ ac_prev=pdfdir ;; -+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) -+ pdfdir=$ac_optarg ;; ++ tmp_entry = (struct got_entry *)(local_got_ents ++ + symtab_hdr->sh_info); ++ for (i = 0; i < symtab_hdr->sh_info; i++) ++ local_got_ents[i] = &tmp_entry[i]; ++ } + -+ -psdir | --psdir | --psdi | --psd | --ps) -+ ac_prev=psdir ;; -+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) -+ psdir=$ac_optarg ;; ++ got = local_got_ents[r_symndx]; ++ } + - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; -@@ -586,24 +1087,20 @@ do - -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. -- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && -+ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } -- ac_package=`echo $ac_package| sed 's/-/_/g'` -- case $ac_option in -- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; -- *) ac_optarg=yes ;; -- esac -- eval "with_$ac_package='$ac_optarg'" ;; -+ ac_package=`echo $ac_package | sed 's/[-.]/_/g'` -+ eval with_$ac_package=\$ac_optarg ;; - - -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. -- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && -+ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } -- ac_package=`echo $ac_package | sed 's/-/_/g'` -- eval "with_$ac_package=no" ;; -+ ac_package=`echo $ac_package | sed 's/[-.]/_/g'` -+ eval with_$ac_package=no ;; - - --x) - # Obsolete; use --with-x. -@@ -634,8 +1131,7 @@ Try \`$0 --help' for more information." - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } -- ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` -- eval "$ac_envvar='$ac_optarg'" -+ eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) -@@ -655,27 +1151,19 @@ if test -n "$ac_prev"; then - { (exit 1); exit 1; }; } - fi - --# Be sure to have absolute paths. --for ac_var in exec_prefix prefix --do -- eval ac_val=$`echo $ac_var` -- case $ac_val in -- [\\/$]* | ?:[\\/]* | NONE | '' ) ;; -- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 -- { (exit 1); exit 1; }; };; -- esac --done -- --# Be sure to have absolute paths. --for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ -- localstatedir libdir includedir oldincludedir infodir mandir -+# Be sure to have absolute directory names. -+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ -+ datadir sysconfdir sharedstatedir localstatedir includedir \ -+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ -+ libdir localedir mandir - do -- eval ac_val=$`echo $ac_var` -+ eval ac_val=\$$ac_var - case $ac_val in -- [\\/$]* | ?:[\\/]* ) ;; -- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 -- { (exit 1); exit 1; }; };; -+ [\\/$]* | ?:[\\/]* ) continue;; -+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac -+ { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 -+ { (exit 1); exit 1; }; } - done - - # There might be people who depend on the old broken behavior: `$host' -@@ -702,74 +1190,76 @@ test -n "$host_alias" && ac_tool_prefix= - test "$silent" = yes && exec 6>/dev/null - - -+ac_pwd=`pwd` && test -n "$ac_pwd" && -+ac_ls_di=`ls -di .` && -+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || -+ { echo "$as_me: error: Working directory cannot be determined" >&2 -+ { (exit 1); exit 1; }; } -+test "X$ac_ls_di" = "X$ac_pwd_ls_di" || -+ { echo "$as_me: error: pwd does not report name of working directory" >&2 -+ { (exit 1); exit 1; }; } ++ got->refcount++; ++ if (got->refcount > htab->nr_got_holes) ++ htab->nr_got_holes = got->refcount; ++ break; + ++ case R_AVR32_32: ++ if ((info->shared || h != NULL) ++ && (sec->flags & SEC_ALLOC)) ++ { ++ if (htab->srelgot == NULL) ++ { ++ htab->srelgot = create_dynamic_section(dynobj, ".rela.got", ++ bed->dynamic_sec_flags ++ | SEC_READONLY, 2); ++ if (htab->srelgot == NULL) ++ return FALSE; ++ } + - # Find the source files, if location was not specified. - if test -z "$srcdir"; then - ac_srcdir_defaulted=yes -- # Try the directory containing this script, then its parent. -- ac_confdir=`(dirname "$0") 2>/dev/null || -+ # Try the directory containing this script, then the parent directory. -+ ac_confdir=`$as_dirname -- "$0" || - $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ -- X"$0" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$0" : 'X\(/\)' \| . 2>/dev/null || - echo X"$0" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)[^/].*/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` - srcdir=$ac_confdir -- if test ! -r $srcdir/$ac_unique_file; then -+ if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi - else - ac_srcdir_defaulted=no - fi --if test ! -r $srcdir/$ac_unique_file; then -- if test "$ac_srcdir_defaulted" = yes; then -- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 -- { (exit 1); exit 1; }; } -- else -- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 -- { (exit 1); exit 1; }; } -- fi --fi --(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || -- { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 -- { (exit 1); exit 1; }; } --srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` --ac_env_build_alias_set=${build_alias+set} --ac_env_build_alias_value=$build_alias --ac_cv_env_build_alias_set=${build_alias+set} --ac_cv_env_build_alias_value=$build_alias --ac_env_host_alias_set=${host_alias+set} --ac_env_host_alias_value=$host_alias --ac_cv_env_host_alias_set=${host_alias+set} --ac_cv_env_host_alias_value=$host_alias --ac_env_target_alias_set=${target_alias+set} --ac_env_target_alias_value=$target_alias --ac_cv_env_target_alias_set=${target_alias+set} --ac_cv_env_target_alias_value=$target_alias --ac_env_CC_set=${CC+set} --ac_env_CC_value=$CC --ac_cv_env_CC_set=${CC+set} --ac_cv_env_CC_value=$CC --ac_env_CFLAGS_set=${CFLAGS+set} --ac_env_CFLAGS_value=$CFLAGS --ac_cv_env_CFLAGS_set=${CFLAGS+set} --ac_cv_env_CFLAGS_value=$CFLAGS --ac_env_LDFLAGS_set=${LDFLAGS+set} --ac_env_LDFLAGS_value=$LDFLAGS --ac_cv_env_LDFLAGS_set=${LDFLAGS+set} --ac_cv_env_LDFLAGS_value=$LDFLAGS --ac_env_CPPFLAGS_set=${CPPFLAGS+set} --ac_env_CPPFLAGS_value=$CPPFLAGS --ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} --ac_cv_env_CPPFLAGS_value=$CPPFLAGS --ac_env_CPP_set=${CPP+set} --ac_env_CPP_value=$CPP --ac_cv_env_CPP_set=${CPP+set} --ac_cv_env_CPP_value=$CPP -+if test ! -r "$srcdir/$ac_unique_file"; then -+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." -+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 -+ { (exit 1); exit 1; }; } -+fi -+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -+ac_abs_confdir=`( -+ cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 -+ { (exit 1); exit 1; }; } -+ pwd)` -+# When building in place, set srcdir=. -+if test "$ac_abs_confdir" = "$ac_pwd"; then -+ srcdir=. -+fi -+# Remove unnecessary trailing slashes from srcdir. -+# Double slashes in file names in object file debugging info -+# mess up M-x gdb in Emacs. -+case $srcdir in -+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -+esac -+for ac_var in $ac_precious_vars; do -+ eval ac_env_${ac_var}_set=\${${ac_var}+set} -+ eval ac_env_${ac_var}_value=\$${ac_var} -+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} -+ eval ac_cv_env_${ac_var}_value=\$${ac_var} -+done - - # - # Report the --help message. -@@ -798,9 +1288,6 @@ Configuration: - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - --_ACEOF -- -- cat <<_ACEOF - Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] -@@ -818,15 +1305,22 @@ Fine tuning of the installation director - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] -- --datadir=DIR read-only architecture-independent data [PREFIX/share] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] -- --infodir=DIR info documentation [PREFIX/info] -- --mandir=DIR man documentation [PREFIX/man] -+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] -+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR] -+ --infodir=DIR info documentation [DATAROOTDIR/info] -+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale] -+ --mandir=DIR man documentation [DATAROOTDIR/man] -+ --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] -+ --htmldir=DIR html documentation [DOCDIR] -+ --dvidir=DIR dvi documentation [DOCDIR] -+ --pdfdir=DIR pdf documentation [DOCDIR] -+ --psdir=DIR ps documentation [DOCDIR] - _ACEOF - - cat <<\_ACEOF -@@ -876,126 +1370,100 @@ Some influential environment variables: - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory -- CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have -- headers in a nonstandard directory -+ LIBS libraries to pass to the linker, e.g. -l -+ CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if -+ you have headers in a nonstandard directory -+ YACC The `Yet Another C Compiler' implementation to use. Defaults to -+ the first program found out of: `bison -y', `byacc', `yacc'. -+ YFLAGS The list of arguments that will be passed by default to $YACC. -+ This script will default YFLAGS to the empty string to avoid a -+ default value of `-d' given by some make applications. - CPP C preprocessor - - Use these variables to override the choices made by `configure' or to help - it to find libraries and programs with nonstandard names/locations. - - _ACEOF -+ac_status=$? - fi - - if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. -- ac_popdir=`pwd` - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue -- test -d $ac_dir || continue -+ test -d "$ac_dir" || continue - ac_builddir=. - --if test "$ac_dir" != .; then -+case "$ac_dir" in -+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -+*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` -- # A "../" for each directory in $ac_dir_suffix. -- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` --else -- ac_dir_suffix= ac_top_builddir= --fi -+ # A ".." for each directory in $ac_dir_suffix. -+ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` -+ case $ac_top_builddir_sub in -+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;; -+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; -+ esac ;; -+esac -+ac_abs_top_builddir=$ac_pwd -+ac_abs_builddir=$ac_pwd$ac_dir_suffix -+# for backward compatibility: -+ac_top_builddir=$ac_top_build_prefix - - case $srcdir in -- .) # No --srcdir option. We are building in place. -+ .) # We are building in place. - ac_srcdir=. -- if test -z "$ac_top_builddir"; then -- ac_top_srcdir=. -- else -- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` -- fi ;; -- [\\/]* | ?:[\\/]* ) # Absolute path. -+ ac_top_srcdir=$ac_top_builddir_sub -+ ac_abs_top_srcdir=$ac_pwd ;; -+ [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; -- ac_top_srcdir=$srcdir ;; -- *) # Relative path. -- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix -- ac_top_srcdir=$ac_top_builddir$srcdir ;; --esac -- --# Do not use `cd foo && pwd` to compute absolute paths, because --# the directories may not exist. --case `pwd` in --.) ac_abs_builddir="$ac_dir";; --*) -- case "$ac_dir" in -- .) ac_abs_builddir=`pwd`;; -- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; -- *) ac_abs_builddir=`pwd`/"$ac_dir";; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_builddir=${ac_top_builddir}.;; --*) -- case ${ac_top_builddir}. in -- .) ac_abs_top_builddir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; -- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_srcdir=$ac_srcdir;; --*) -- case $ac_srcdir in -- .) ac_abs_srcdir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; -- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_srcdir=$ac_top_srcdir;; --*) -- case $ac_top_srcdir in -- .) ac_abs_top_srcdir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; -- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; -- esac;; --esac -- -- cd $ac_dir -- # Check for guested configure; otherwise get Cygnus style configure. -- if test -f $ac_srcdir/configure.gnu; then -- echo -- $SHELL $ac_srcdir/configure.gnu --help=recursive -- elif test -f $ac_srcdir/configure; then -- echo -- $SHELL $ac_srcdir/configure --help=recursive -- elif test -f $ac_srcdir/configure.ac || -- test -f $ac_srcdir/configure.in; then -- echo -- $ac_configure --help -+ ac_top_srcdir=$srcdir -+ ac_abs_top_srcdir=$srcdir ;; -+ *) # Relative name. -+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix -+ ac_top_srcdir=$ac_top_build_prefix$srcdir -+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -+esac -+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix ++ if (sec->flags & SEC_READONLY ++ && !h->readonly_reloc_sec) ++ { ++ h->readonly_reloc_sec = sec; ++ h->readonly_reloc_offset = rel->r_offset; ++ } + -+ cd "$ac_dir" || { ac_status=$?; continue; } -+ # Check for guested configure. -+ if test -f "$ac_srcdir/configure.gnu"; then -+ echo && -+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive -+ elif test -f "$ac_srcdir/configure"; then -+ echo && -+ $SHELL "$ac_srcdir/configure" --help=recursive - else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 -- fi -- cd $ac_popdir -+ fi || ac_status=$? -+ cd "$ac_pwd" || { ac_status=$?; break; } - done - fi - --test -n "$ac_init_help" && exit 0 -+test -n "$ac_init_help" && exit $ac_status - if $ac_init_version; then - cat <<\_ACEOF -+configure -+generated by GNU Autoconf 2.61 - --Copyright (C) 2003 Free Software Foundation, Inc. -+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -+2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - This configure script is free software; the Free Software Foundation - gives unlimited permission to copy, distribute and modify it. - _ACEOF -- exit 0 -+ exit - fi --exec 5>config.log --cat >&5 <<_ACEOF -+cat >config.log <<_ACEOF - This file contains any messages produced by compilers while - running configure, to aid debugging if configure makes a mistake. - - It was created by $as_me, which was --generated by GNU Autoconf 2.59. Invocation command line was -+generated by GNU Autoconf 2.61. Invocation command line was - - $ $0 $@ - - _ACEOF -+exec 5>>config.log - { - cat <<_ASUNAME - ## --------- ## -@@ -1014,7 +1482,7 @@ uname -v = `(uname -v) 2>/dev/null || ec - /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` - /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` - /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` --hostinfo = `(hostinfo) 2>/dev/null || echo unknown` -+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` - /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` - /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` - /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` -@@ -1028,6 +1496,7 @@ do - test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" - done -+IFS=$as_save_IFS - - } >&5 - -@@ -1049,7 +1518,6 @@ _ACEOF - ac_configure_args= - ac_configure_args0= - ac_configure_args1= --ac_sep= - ac_must_keep_next=false - for ac_pass in 1 2 - do -@@ -1060,7 +1528,7 @@ do - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; -- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) -+ *\'*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in -@@ -1082,9 +1550,7 @@ do - -* ) ac_must_keep_next=true ;; - esac - fi -- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" -- # Get rid of the leading space. -- ac_sep=" " -+ ac_configure_args="$ac_configure_args '$ac_arg'" - ;; - esac - done -@@ -1095,8 +1561,8 @@ $as_unset ac_configure_args1 || test "${ - # When interrupted or exit'd, cleanup temporary files, and complete - # config.log. We remove comments because anyway the quotes in there - # would cause problems or look ugly. --# WARNING: Be sure not to use single quotes in there, as some shells, --# such as our DU 5.0 friend, will then `close' the trap. -+# WARNING: Use '\'' to represent an apostrophe within the trap. -+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. - trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { -@@ -1109,20 +1575,34 @@ trap 'exit_status=$? - _ASBOX - echo - # The following way of writing the cache mishandles newlines in values, --{ -+( -+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do -+ eval ac_val=\$$ac_var -+ case $ac_val in #( -+ *${as_nl}*) -+ case $ac_var in #( -+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; -+ esac -+ case $ac_var in #( -+ _ | IFS | as_nl) ;; #( -+ *) $as_unset $ac_var ;; -+ esac ;; -+ esac -+ done - (set) 2>&1 | -- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in -- *ac_space=\ *) -+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( -+ *${as_nl}ac_space=\ *) - sed -n \ -- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; -- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" -- ;; -+ "s/'\''/'\''\\\\'\'''\''/g; -+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" -+ ;; #( - *) -- sed -n \ -- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" -+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; -- esac; --} -+ esac | -+ sort -+) - echo - - cat <<\_ASBOX -@@ -1133,22 +1613,28 @@ _ASBOX - echo - for ac_var in $ac_subst_vars - do -- eval ac_val=$`echo $ac_var` -- echo "$ac_var='"'"'$ac_val'"'"'" -+ eval ac_val=\$$ac_var -+ case $ac_val in -+ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; -+ esac -+ echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX --## ------------- ## --## Output files. ## --## ------------- ## -+## ------------------- ## -+## File substitutions. ## -+## ------------------- ## - _ASBOX - echo - for ac_var in $ac_subst_files - do -- eval ac_val=$`echo $ac_var` -- echo "$ac_var='"'"'$ac_val'"'"'" -+ eval ac_val=\$$ac_var -+ case $ac_val in -+ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; -+ esac -+ echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi -@@ -1160,26 +1646,24 @@ _ASBOX - ## ----------- ## - _ASBOX - echo -- sed "/^$/d" confdefs.h | sort -+ cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" - } >&5 -- rm -f core *.core && -- rm -rf conftest* confdefs* conf$$* $ac_clean_files && -+ rm -f core *.core core.conftest.* && -+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -- ' 0 -+' 0 - for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal - done - ac_signal=0 - - # confdefs.h avoids OS command line length limits that DEFS can exceed. --rm -rf conftest* confdefs.h --# AIX cpp loses on an empty file, so make sure it contains at least a newline. --echo >confdefs.h -+rm -f -r conftest* confdefs.h - - # Predefined preprocessor variables. - -@@ -1210,14 +1694,17 @@ _ACEOF - - # Let the site file select an alternate cache file if it wants to. - # Prefer explicitly selected file to automatically selected ones. --if test -z "$CONFIG_SITE"; then -- if test "x$prefix" != xNONE; then -- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" -- else -- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" -- fi -+if test -n "$CONFIG_SITE"; then -+ set x "$CONFIG_SITE" -+elif test "x$prefix" != xNONE; then -+ set x "$prefix/share/config.site" "$prefix/etc/config.site" -+else -+ set x "$ac_default_prefix/share/config.site" \ -+ "$ac_default_prefix/etc/config.site" - fi --for ac_site_file in $CONFIG_SITE; do -+shift -+for ac_site_file -+do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 - echo "$as_me: loading site script $ac_site_file" >&6;} -@@ -1233,8 +1720,8 @@ if test -r "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 - echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in -- [\\/]* | ?:[\\/]* ) . $cache_file;; -- *) . ./$cache_file;; -+ [\\/]* | ?:[\\/]* ) . "$cache_file";; -+ *) . "./$cache_file";; - esac - fi - else -@@ -1246,12 +1733,11 @@ fi - # Check that the precious variables saved in the cache have kept the same - # value. - ac_cache_corrupted=false --for ac_var in `(set) 2>&1 | -- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do -+for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set -- eval ac_old_val="\$ac_cv_env_${ac_var}_value" -- eval ac_new_val="\$ac_env_${ac_var}_value" -+ eval ac_old_val=\$ac_cv_env_${ac_var}_value -+ eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -@@ -1276,8 +1762,7 @@ echo "$as_me: current value: $ac_new_v - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in -- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) -- ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; -+ *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in -@@ -1294,12 +1779,6 @@ echo "$as_me: error: run \`make distclea - { (exit 1); exit 1; }; } - fi - --ac_ext=c --ac_cpp='$CPP $CPPFLAGS' --ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' --ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' --ac_compiler_gnu=$ac_cv_c_compiler_gnu -- - - - -@@ -1316,108 +1795,163 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -+ac_ext=c -+ac_cpp='$CPP $CPPFLAGS' -+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -+ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - ac_aux_dir= --for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do -- if test -f $ac_dir/install-sh; then -+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do -+ if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break -- elif test -f $ac_dir/install.sh; then -+ elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break -- elif test -f $ac_dir/shtool; then -+ elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi - done - if test -z "$ac_aux_dir"; then -- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 --echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} -+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 -+echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} - { (exit 1); exit 1; }; } - fi --ac_config_guess="$SHELL $ac_aux_dir/config.guess" --ac_config_sub="$SHELL $ac_aux_dir/config.sub" --ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. ++ if (h != NULL) ++ { ++ pr_debug("Non-GOT reference to symbol %s\n", ++ h->root.root.root.string); ++ h->possibly_dynamic_relocs++; ++ } ++ else ++ { ++ pr_debug("Non-GOT reference to local symbol %lu\n", ++ r_symndx); ++ htab->local_dynamic_relocs++; ++ } ++ } + -+# These three variables are undocumented and unsupported, -+# and are intended to be withdrawn in a future Autoconf release. -+# They can cause serious problems if a builder's source tree is in a directory -+# whose full name contains unusual characters. -+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ++ break; + - - # Make sure we can run config.sub. --$ac_config_sub sun4 >/dev/null 2>&1 || -- { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 --echo "$as_me: error: cannot run $ac_config_sub" >&2;} -+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || -+ { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 -+echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} - { (exit 1); exit 1; }; } - --echo "$as_me:$LINENO: checking build system type" >&5 --echo $ECHO_N "checking build system type... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking build system type" >&5 -+echo $ECHO_N "checking build system type... $ECHO_C" >&6; } - if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- ac_cv_build_alias=$build_alias --test -z "$ac_cv_build_alias" && -- ac_cv_build_alias=`$ac_config_guess` --test -z "$ac_cv_build_alias" && -+ ac_build_alias=$build_alias -+test "x$ac_build_alias" = x && -+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -+test "x$ac_build_alias" = x && - { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 - echo "$as_me: error: cannot guess build type; you must specify one" >&2;} - { (exit 1); exit 1; }; } --ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || -- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 --echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} -+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || -+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 -+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} - { (exit 1); exit 1; }; } - - fi --echo "$as_me:$LINENO: result: $ac_cv_build" >&5 --echo "${ECHO_T}$ac_cv_build" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 -+echo "${ECHO_T}$ac_cv_build" >&6; } -+case $ac_cv_build in -+*-*-*) ;; -+*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 -+echo "$as_me: error: invalid value of canonical build" >&2;} -+ { (exit 1); exit 1; }; };; -+esac - build=$ac_cv_build --build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` --build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` --build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -+ac_save_IFS=$IFS; IFS='-' -+set x $ac_cv_build -+shift -+build_cpu=$1 -+build_vendor=$2 -+shift; shift -+# Remember, the first character of IFS is used to create $*, -+# except with old shells: -+build_os=$* -+IFS=$ac_save_IFS -+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - --echo "$as_me:$LINENO: checking host system type" >&5 --echo $ECHO_N "checking host system type... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking host system type" >&5 -+echo $ECHO_N "checking host system type... $ECHO_C" >&6; } - if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- ac_cv_host_alias=$host_alias --test -z "$ac_cv_host_alias" && -- ac_cv_host_alias=$ac_cv_build_alias --ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || -- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 --echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} -+ if test "x$host_alias" = x; then -+ ac_cv_host=$ac_cv_build -+else -+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || -+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 -+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} - { (exit 1); exit 1; }; } -+fi - - fi --echo "$as_me:$LINENO: result: $ac_cv_host" >&5 --echo "${ECHO_T}$ac_cv_host" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -+echo "${ECHO_T}$ac_cv_host" >&6; } -+case $ac_cv_host in -+*-*-*) ;; -+*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 -+echo "$as_me: error: invalid value of canonical host" >&2;} -+ { (exit 1); exit 1; }; };; -+esac - host=$ac_cv_host --host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` --host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` --host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -+ac_save_IFS=$IFS; IFS='-' -+set x $ac_cv_host -+shift -+host_cpu=$1 -+host_vendor=$2 -+shift; shift -+# Remember, the first character of IFS is used to create $*, -+# except with old shells: -+host_os=$* -+IFS=$ac_save_IFS -+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - --echo "$as_me:$LINENO: checking target system type" >&5 --echo $ECHO_N "checking target system type... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking target system type" >&5 -+echo $ECHO_N "checking target system type... $ECHO_C" >&6; } - if test "${ac_cv_target+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- ac_cv_target_alias=$target_alias --test "x$ac_cv_target_alias" = "x" && -- ac_cv_target_alias=$ac_cv_host_alias --ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || -- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5 --echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} -+ if test "x$target_alias" = x; then -+ ac_cv_target=$ac_cv_host -+else -+ ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || -+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 -+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} - { (exit 1); exit 1; }; } -+fi - - fi --echo "$as_me:$LINENO: result: $ac_cv_target" >&5 --echo "${ECHO_T}$ac_cv_target" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5 -+echo "${ECHO_T}$ac_cv_target" >&6; } -+case $ac_cv_target in -+*-*-*) ;; -+*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 -+echo "$as_me: error: invalid value of canonical target" >&2;} -+ { (exit 1); exit 1; }; };; -+esac - target=$ac_cv_target --target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` --target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` --target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -+ac_save_IFS=$IFS; IFS='-' -+set x $ac_cv_target -+shift -+target_cpu=$1 -+target_vendor=$2 -+shift; shift -+# Remember, the first character of IFS is used to create $*, -+# except with old shells: -+target_os=$* -+IFS=$ac_save_IFS -+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - - - # The aliases save the names the user supplied, while $host etc. -@@ -1434,8 +1968,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. - set dummy ${ac_tool_prefix}gcc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -1448,32 +1982,34 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - CC=$ac_cv_prog_CC - if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 -+ { echo "$as_me:$LINENO: result: $CC" >&5 -+echo "${ECHO_T}$CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ /* TODO: GNU_VTINHERIT and GNU_VTENTRY */ ++ } ++ } + - fi - if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. - set dummy gcc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -1486,36 +2022,51 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - ac_ct_CC=$ac_cv_prog_ac_ct_CC - if test -n "$ac_ct_CC"; then -- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 --echo "${ECHO_T}$ac_ct_CC" >&6 -+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -+echo "${ECHO_T}$ac_ct_CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - -- CC=$ac_ct_CC -+ if test "x$ac_ct_CC" = x; then -+ CC="" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&5 -+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&2;} -+ac_tool_warned=yes ;; -+esac -+ CC=$ac_ct_CC -+ fi - else - CC="$ac_cv_prog_CC" - fi - - if test -z "$CC"; then -- if test -n "$ac_tool_prefix"; then -- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -+ if test -n "$ac_tool_prefix"; then -+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. - set dummy ${ac_tool_prefix}cc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -1528,74 +2079,34 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - CC=$ac_cv_prog_CC - if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- --fi --if test -z "$ac_cv_prog_CC"; then -- ac_ct_CC=$CC -- # Extract the first word of "cc", so it can be a program name with args. --set dummy cc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$ac_ct_CC"; then -- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_ac_ct_CC="cc" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- --fi --fi --ac_ct_CC=$ac_cv_prog_ac_ct_CC --if test -n "$ac_ct_CC"; then -- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 --echo "${ECHO_T}$ac_ct_CC" >&6 -+ { echo "$as_me:$LINENO: result: $CC" >&5 -+echo "${ECHO_T}$CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - -- CC=$ac_ct_CC --else -- CC="$ac_cv_prog_CC" --fi - -+ fi - fi - if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. - set dummy cc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -1609,7 +2120,7 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue -@@ -1620,6 +2131,7 @@ do - fi - done - done -+IFS=$as_save_IFS - - if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. -@@ -1637,22 +2149,23 @@ fi - fi - CC=$ac_cv_prog_CC - if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 -+ { echo "$as_me:$LINENO: result: $CC" >&5 -+echo "${ECHO_T}$CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ return TRUE; ++} + - fi - if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then -- for ac_prog in cl -+ for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. - set dummy $ac_tool_prefix$ac_prog; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -1665,36 +2178,38 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - CC=$ac_cv_prog_CC - if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 -+ { echo "$as_me:$LINENO: result: $CC" >&5 -+echo "${ECHO_T}$CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++/* (3) Adjust a symbol defined by a dynamic object and referenced by a ++ regular object. The current definition is in some section of the ++ dynamic object, but we're not including those sections. We have to ++ change the definition to something the rest of the link can ++ understand. */ + - test -n "$CC" && break - done - fi - if test -z "$CC"; then - ac_ct_CC=$CC -- for ac_prog in cl -+ for ac_prog in cl.exe - do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -1707,29 +2222,45 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - ac_ct_CC=$ac_cv_prog_ac_ct_CC - if test -n "$ac_ct_CC"; then -- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 --echo "${ECHO_T}$ac_ct_CC" >&6 -+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -+echo "${ECHO_T}$ac_ct_CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++static bfd_boolean ++avr32_elf_adjust_dynamic_symbol(struct bfd_link_info *info, ++ struct elf_link_hash_entry *h) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ struct elf_avr32_link_hash_entry *havr; ++ bfd *dynobj; + - test -n "$ac_ct_CC" && break - done - -- CC=$ac_ct_CC -+ if test "x$ac_ct_CC" = x; then -+ CC="" ++ pr_debug("(3) adjust dynamic symbol %s\n", h->root.root.string); ++ ++ htab = avr32_elf_hash_table(info); ++ havr = (struct elf_avr32_link_hash_entry *)h; ++ dynobj = elf_hash_table(info)->dynobj; ++ ++ /* Make sure we know what is going on here. */ ++ BFD_ASSERT (dynobj != NULL ++ && (h->u.weakdef != NULL ++ || (h->def_dynamic ++ && h->ref_regular ++ && !h->def_regular))); ++ ++ /* We don't want dynamic relocations in read-only sections. */ ++ if (havr->readonly_reloc_sec) ++ { ++ if (info->callbacks->reloc_dangerous ++ (info, _("dynamic relocation in read-only section"), ++ havr->readonly_reloc_sec->owner, havr->readonly_reloc_sec, ++ havr->readonly_reloc_offset) == FALSE) ++ return FALSE; ++ } ++ ++ /* If this is a function, create a stub if possible and set the ++ symbol to the stub location. */ ++ if (0 && !havr->no_fn_stub) ++ { ++ if (!h->def_regular) ++ { ++ asection *s = htab->sstub; ++ ++ BFD_ASSERT(s != NULL); ++ ++ h->root.u.def.section = s; ++ h->root.u.def.value = s->size; ++ h->plt.offset = s->size; ++ s->size += AVR32_FUNCTION_STUB_SIZE; ++ ++ return TRUE; ++ } ++ } ++ else if (h->type == STT_FUNC) ++ { ++ /* This will set the entry for this symbol in the GOT to 0, and ++ the dynamic linker will take care of this. */ ++ h->root.u.def.value = 0; ++ return TRUE; ++ } ++ ++ /* If this is a weak symbol, and there is a real definition, the ++ processor independent code will have arranged for us to see the ++ real definition first, and we can just use the same value. */ ++ if (h->u.weakdef != NULL) ++ { ++ BFD_ASSERT(h->u.weakdef->root.type == bfd_link_hash_defined ++ || h->u.weakdef->root.type == bfd_link_hash_defweak); ++ h->root.u.def.section = h->u.weakdef->root.u.def.section; ++ h->root.u.def.value = h->u.weakdef->root.u.def.value; ++ return TRUE; ++ } ++ ++ /* This is a reference to a symbol defined by a dynamic object which ++ is not a function. */ ++ ++ return TRUE; ++} ++ ++ ++/* Garbage-collection of unused sections */ ++ ++static asection * ++avr32_elf_gc_mark_hook(asection *sec, ++ struct bfd_link_info *info ATTRIBUTE_UNUSED, ++ Elf_Internal_Rela *rel, ++ struct elf_link_hash_entry *h, ++ Elf_Internal_Sym *sym) ++{ ++ if (h) ++ { ++ switch (ELF32_R_TYPE(rel->r_info)) ++ { ++ /* TODO: VTINHERIT/VTENTRY */ ++ default: ++ switch (h->root.type) ++ { ++ case bfd_link_hash_defined: ++ case bfd_link_hash_defweak: ++ return h->root.u.def.section; ++ ++ case bfd_link_hash_common: ++ return h->root.u.c.p->section; ++ ++ default: ++ break; ++ } ++ } ++ } + else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&5 -+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&2;} -+ac_tool_warned=yes ;; -+esac -+ CC=$ac_ct_CC -+ fi - fi - - fi -@@ -1742,21 +2273,35 @@ See \`config.log' for more details." >&2 - { (exit 1); exit 1; }; } - - # Provide some information about the compiler. --echo "$as_me:$LINENO:" \ -- "checking for C compiler version" >&5 -+echo "$as_me:$LINENO: checking for C compiler version" >&5 - ac_compiler=`set X $ac_compile; echo $2` --{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 -- (eval $ac_compiler --version &5) 2>&5 -+{ (ac_try="$ac_compiler --version >&5" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } --{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 -- (eval $ac_compiler -v &5) 2>&5 -+{ (ac_try="$ac_compiler -v >&5" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } --{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 -- (eval $ac_compiler -V &5) 2>&5 -+{ (ac_try="$ac_compiler -V >&5" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -@@ -1781,47 +2326,77 @@ ac_clean_files="$ac_clean_files a.out a. - # Try to create an executable without -o first, disregard a.out. - # It will help us diagnose broken compilers, and finding out an intuition - # of exeext. --echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 --echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } - ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` --if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 -- (eval $ac_link_default) 2>&5 -+# -+# List of possible output files, starting from the most likely. -+# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) -+# only as a last resort. b.out is created by i960 compilers. -+ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' -+# -+# The IRIX 6 linker writes into existing files which may not be -+# executable, retaining their permissions. Remove them first so a -+# subsequent execution test works. -+ac_rmfiles= -+for ac_file in $ac_files -+do -+ case $ac_file in -+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; -+ * ) ac_rmfiles="$ac_rmfiles $ac_file";; -+ esac -+done -+rm -f $ac_rmfiles ++ return bfd_section_from_elf_index(sec->owner, sym->st_shndx); + -+if { (ac_try="$ac_link_default" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link_default") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then -- # Find the output, starting from the most likely. This scheme is --# not robust to junk in `.', hence go to wildcards (a.*) only as a last --# resort. -- --# Be careful to initialize this variable, since it used to be cached. --# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. --ac_cv_exeext= --# b.out is created by i960 compilers. --for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out -+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -+# in a Makefile. We should not override ac_cv_exeext if it was cached, -+# so that the user can short-circuit this test for compilers unknown to -+# Autoconf. -+for ac_file in $ac_files '' - do - test -f "$ac_file" || continue - case $ac_file in -- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) -- ;; -- conftest.$ac_ext ) -- # This is the source file. -+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) -- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` -- # FIXME: I believe we export ac_cv_exeext for Libtool, -- # but it would be cool to find out if it's true. Does anybody -- # maintain Libtool? --akim. -- export ac_cv_exeext -+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; -+ then :; else -+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` -+ fi -+ # We set ac_cv_exeext here because the later test for it is not -+ # safe: cross compilers may not add the suffix if given an `-o' -+ # argument, so we may need to know it at that point already. -+ # Even if this section looks crufty: it has the advantage of -+ # actually working. - break;; - * ) - break;; - esac - done -+test "$ac_cv_exeext" = no && ac_cv_exeext= ++ return NULL; ++} + - else -+ ac_file='' -+fi ++/* Update the GOT entry reference counts for the section being removed. */ ++static bfd_boolean ++avr32_elf_gc_sweep_hook(bfd *abfd, ++ struct bfd_link_info *info ATTRIBUTE_UNUSED, ++ asection *sec, ++ const Elf_Internal_Rela *relocs) ++{ ++ Elf_Internal_Shdr *symtab_hdr; ++ struct elf_avr32_link_hash_entry **sym_hashes; ++ struct got_entry **local_got_ents; ++ const Elf_Internal_Rela *rel, *relend; + -+{ echo "$as_me:$LINENO: result: $ac_file" >&5 -+echo "${ECHO_T}$ac_file" >&6; } -+if test -z "$ac_file"; then - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - -@@ -1833,19 +2408,21 @@ See \`config.log' for more details." >&2 - fi - - ac_exeext=$ac_cv_exeext --echo "$as_me:$LINENO: result: $ac_file" >&5 --echo "${ECHO_T}$ac_file" >&6 - --# Check the compiler produces executables we can run. If not, either -+# Check that the compiler produces executables we can run. If not, either - # the compiler is broken, or we cross compile. --echo "$as_me:$LINENO: checking whether the C compiler works" >&5 --echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } - # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 - # If not cross compiling, check that we can run a simple program. - if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then -@@ -1864,22 +2441,27 @@ See \`config.log' for more details." >&2 - fi - fi - fi --echo "$as_me:$LINENO: result: yes" >&5 --echo "${ECHO_T}yes" >&6 -+{ echo "$as_me:$LINENO: result: yes" >&5 -+echo "${ECHO_T}yes" >&6; } - - rm -f a.out a.exe conftest$ac_cv_exeext b.out - ac_clean_files=$ac_clean_files_save --# Check the compiler produces executables we can run. If not, either -+# Check that the compiler produces executables we can run. If not, either - # the compiler is broken, or we cross compile. --echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 --echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 --echo "$as_me:$LINENO: result: $cross_compiling" >&5 --echo "${ECHO_T}$cross_compiling" >&6 -- --echo "$as_me:$LINENO: checking for suffix of executables" >&5 --echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&5 -+{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } -+{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 -+echo "${ECHO_T}$cross_compiling" >&6; } ++ if (!(sec->flags & SEC_ALLOC)) ++ return TRUE; + -+{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 -+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then -@@ -1890,9 +2472,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_l - for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in -- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; -+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` -- export ac_cv_exeext - break;; - * ) break;; - esac -@@ -1906,14 +2487,14 @@ See \`config.log' for more details." >&2 - fi - - rm -f conftest$ac_cv_exeext --echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 --echo "${ECHO_T}$ac_cv_exeext" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -+echo "${ECHO_T}$ac_cv_exeext" >&6; } - - rm -f conftest.$ac_ext - EXEEXT=$ac_cv_exeext - ac_exeext=$EXEEXT --echo "$as_me:$LINENO: checking for suffix of object files" >&5 --echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 -+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } - if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -1933,14 +2514,20 @@ main () - } - _ACEOF - rm -f conftest.o conftest.obj --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then -- for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do -+ for ac_file in conftest.o conftest.obj conftest.*; do -+ test -f "$ac_file" || continue; - case $ac_file in -- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; -+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -@@ -1958,12 +2545,12 @@ fi - - rm -f conftest.$ac_cv_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 --echo "${ECHO_T}$ac_cv_objext" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -+echo "${ECHO_T}$ac_cv_objext" >&6; } - OBJEXT=$ac_cv_objext - ac_objext=$OBJEXT --echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 --echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } - if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -1986,50 +2573,49 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_compiler_gnu=no -+ ac_compiler_gnu=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ symtab_hdr = &elf_tdata(abfd)->symtab_hdr; ++ sym_hashes = (struct elf_avr32_link_hash_entry **)elf_sym_hashes(abfd); ++ local_got_ents = elf_local_got_ents(abfd); + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_c_compiler_gnu=$ac_compiler_gnu - - fi --echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 --echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } - GCC=`test $ac_compiler_gnu = yes && echo yes` - ac_test_CFLAGS=${CFLAGS+set} - ac_save_CFLAGS=$CFLAGS --CFLAGS="-g" --echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 --echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } - if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- cat >conftest.$ac_ext <<_ACEOF -+ ac_save_c_werror_flag=$ac_c_werror_flag -+ ac_c_werror_flag=yes -+ ac_cv_prog_cc_g=no -+ CFLAGS="-g" -+ cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -2045,38 +2631,118 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_prog_cc_g=yes -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 ++ relend = relocs + sec->reloc_count; ++ for (rel = relocs; rel < relend; rel++) ++ { ++ unsigned long r_symndx; ++ unsigned int r_type; ++ struct elf_avr32_link_hash_entry *h = NULL; + -+ CFLAGS="" -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ ++ r_symndx = ELF32_R_SYM(rel->r_info); ++ if (r_symndx >= symtab_hdr->sh_info) ++ { ++ h = sym_hashes[r_symndx - symtab_hdr->sh_info]; ++ while (h->root.root.type == bfd_link_hash_indirect ++ || h->root.root.type == bfd_link_hash_warning) ++ h = (struct elf_avr32_link_hash_entry *)h->root.root.u.i.link; ++ } + -+int -+main () -+{ ++ r_type = ELF32_R_TYPE(rel->r_info); + -+ ; -+ return 0; ++ switch (r_type) ++ { ++ case R_AVR32_GOT32: ++ case R_AVR32_GOT16: ++ case R_AVR32_GOT8: ++ case R_AVR32_GOT21S: ++ case R_AVR32_GOT18SW: ++ case R_AVR32_GOT16S: ++ case R_AVR32_GOT7UW: ++ case R_AVR32_LDA_GOT: ++ case R_AVR32_GOTCALL: ++ if (h) ++ h->root.got.glist->refcount--; ++ else ++ local_got_ents[r_symndx]->refcount--; ++ break; ++ ++ case R_AVR32_32: ++ if (info->shared || h) ++ { ++ if (h) ++ h->possibly_dynamic_relocs--; ++ else ++ avr32_elf_hash_table(info)->local_dynamic_relocs--; ++ } ++ ++ default: ++ break; ++ } ++ } ++ ++ return TRUE; +} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 ++ ++/* Sizing and refcounting of dynamic sections */ + -+ ac_c_werror_flag=$ac_save_c_werror_flag -+ CFLAGS="-g" -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ ++static void ++insert_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got); ++static void ++unref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got); ++static void ++ref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got); ++static bfd_boolean ++assign_got_offsets(struct elf_avr32_link_hash_table *htab); ++static bfd_boolean ++allocate_dynrelocs(struct elf_link_hash_entry *h, void *_info); ++static bfd_boolean ++avr32_elf_size_dynamic_sections (bfd *output_bfd, ++ struct bfd_link_info *info); + -+int -+main () ++static void ++insert_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got) +{ ++ /* TODO: Support got_refcount > htab->nr_got_holes by using a ++ different sort algorithm for those. */ ++ BFD_ASSERT(got->refcount <= htab->nr_got_holes); + -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_prog_cc_g=no ++ got->pprev = &htab->got_hole[got->refcount]; ++ got->next = htab->got_hole[got->refcount]; ++ if (got->next) ++ got->next->pprev = &got->next; + -+fi ++ htab->got_hole[got->refcount] = got; ++} + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi ++/* Decrement the refcount of a GOT entry and update its position in ++ the pigeonhole array. */ ++static void ++unref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got) ++{ ++ BFD_ASSERT(got->refcount <= htab->nr_got_holes); ++ BFD_ASSERT(got->refcount > 0); + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ if (got->next) ++ got->next->pprev = got->pprev; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ ac_c_werror_flag=$ac_save_c_werror_flag - fi --echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 --echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } - if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS - elif test $ac_cv_prog_cc_g = yes; then -@@ -2092,12 +2758,12 @@ else - CFLAGS= - fi - fi --echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 --echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 --if test "${ac_cv_prog_cc_stdc+set}" = set; then -+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 -+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } -+if test "${ac_cv_prog_cc_c89+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- ac_cv_prog_cc_stdc=no -+ ac_cv_prog_cc_c89=no - ac_save_CC=$CC - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ -@@ -2131,12 +2797,17 @@ static char *f (char * (*g) (char **, in - /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated -- as 'x'. The following induces an error, until -std1 is added to get -+ as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something -- that's true only with -std1. */ -+ that's true only with -std. */ - int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters -+ inside strings and character constants. */ -+#define FOO(x) 'x' -+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; ++ *(got->pprev) = got->next; ++ got->refcount--; ++ insert_got_entry(htab, got); ++} + - int test (int i, double x); - struct s1 {int (*f) (int a);}; - struct s2 {int (*f) (double a);}; -@@ -2151,335 +2822,144 @@ return f (e, argv, 0) != argv[0] || f - return 0; - } - _ACEOF --# Don't try gcc -ansi; that turns off useful extensions and --# breaks some systems' header files. --# AIX -qlanglvl=ansi --# Ultrix and OSF/1 -std1 --# HP-UX 10.20 and later -Ae --# HP-UX older versions -Aa -D_HPUX_SOURCE --# SVR4 -Xc -D__EXTENSIONS__ --for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" - do - CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_prog_cc_stdc=$ac_arg --break -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_prog_cc_c89=$ac_arg - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - ++static void ++ref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got) ++{ ++ if (got->next) ++ got->next->pprev = got->pprev; + - fi --rm -f conftest.err conftest.$ac_objext ++ *(got->pprev) = got->next; ++ got->refcount++; ++ insert_got_entry(htab, got); + -+rm -f core conftest.err conftest.$ac_objext -+ test "x$ac_cv_prog_cc_c89" != "xno" && break - done --rm -f conftest.$ac_ext conftest.$ac_objext -+rm -f conftest.$ac_ext - CC=$ac_save_CC - - fi -- --case "x$ac_cv_prog_cc_stdc" in -- x|xno) -- echo "$as_me:$LINENO: result: none needed" >&5 --echo "${ECHO_T}none needed" >&6 ;; -+# AC_CACHE_VAL -+case "x$ac_cv_prog_cc_c89" in -+ x) -+ { echo "$as_me:$LINENO: result: none needed" >&5 -+echo "${ECHO_T}none needed" >&6; } ;; -+ xno) -+ { echo "$as_me:$LINENO: result: unsupported" >&5 -+echo "${ECHO_T}unsupported" >&6; } ;; - *) -- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 --echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 -- CC="$CC $ac_cv_prog_cc_stdc" ;; -+ CC="$CC $ac_cv_prog_cc_c89" -+ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 -+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; - esac - --# Some people use a C++ compiler to compile C. Since we use `exit', --# in C++ we need to declare it. In case someone uses the same compiler --# for both compiling C and C++ we need to have the C++ compiler decide --# the declaration of exit, since it's the most demanding environment. ++ BFD_ASSERT(got->refcount > 0); ++ BFD_ASSERT(got->refcount <= htab->nr_got_holes); ++} + -+ac_ext=c -+ac_cpp='$CPP $CPPFLAGS' -+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -+ac_compiler_gnu=$ac_cv_c_compiler_gnu ++/* Assign offsets to all GOT entries we intend to keep. The entries ++ that are referenced most often are placed at low offsets so that we ++ can use compact instructions as much as possible. + ++ Returns TRUE if any offsets or the total size of the GOT changed. */ + -+{ echo "$as_me:$LINENO: checking for library containing strerror" >&5 -+echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6; } -+if test "${ac_cv_search_strerror+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ ac_func_search_save_LIBS=$LIBS - cat >conftest.$ac_ext <<_ACEOF --#ifndef __cplusplus -- choke me --#endif --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- for ac_declaration in \ -- '' \ -- 'extern "C" void std::exit (int) throw (); using std::exit;' \ -- 'extern "C" void std::exit (int); using std::exit;' \ -- 'extern "C" void exit (int) throw ();' \ -- 'extern "C" void exit (int);' \ -- 'void exit (int);' --do -- cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --$ac_declaration --#include ++static bfd_boolean ++assign_got_offsets(struct elf_avr32_link_hash_table *htab) ++{ ++ struct got_entry *got; ++ bfd_size_type got_size = 0; ++ bfd_boolean changed = FALSE; ++ bfd_signed_vma offset; ++ int i; + -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ -+#ifdef __cplusplus -+extern "C" -+#endif -+char strerror (); - int - main () - { --exit (42); -+return strerror (); - ; - return 0; - } - _ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+for ac_lib in '' cposix; do -+ if test -z "$ac_lib"; then -+ ac_res="none required" -+ else -+ ac_res=-l$ac_lib -+ LIBS="-l$ac_lib $ac_func_search_save_LIBS" -+ fi -+ rm -f conftest.$ac_objext conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- : -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then -+ ac_cv_search_strerror=$ac_res - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --continue --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --$ac_declaration --int --main () --{ --exit (42); -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- break --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 - - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --done --rm -f conftest* --if test -n "$ac_declaration"; then -- echo '#ifdef __cplusplus' >>confdefs.h -- echo $ac_declaration >>confdefs.h -- echo '#endif' >>confdefs.h --fi -- --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 - -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ -+ conftest$ac_exeext -+ if test "${ac_cv_search_strerror+set}" = set; then -+ break - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --ac_ext=c --ac_cpp='$CPP $CPPFLAGS' --ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' --ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' --ac_compiler_gnu=$ac_cv_c_compiler_gnu -- -- --echo "$as_me:$LINENO: checking for library containing strerror" >&5 --echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6 -+done - if test "${ac_cv_search_strerror+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- ac_func_search_save_LIBS=$LIBS --ac_cv_search_strerror=no --cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --/* Override any gcc2 internal prototype to avoid an error. */ --#ifdef __cplusplus --extern "C" --#endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ --char strerror (); --int --main () --{ --strerror (); -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_search_strerror="none required" --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --if test "$ac_cv_search_strerror" = no; then -- for ac_lib in cposix; do -- LIBS="-l$ac_lib $ac_func_search_save_LIBS" -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --/* Override any gcc2 internal prototype to avoid an error. */ --#ifdef __cplusplus --extern "C" --#endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ --char strerror (); --int --main () --{ --strerror (); -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_search_strerror="-l$ac_lib" --break -+ : - else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- done -+ ac_cv_search_strerror=no - fi -+rm conftest.$ac_ext - LIBS=$ac_func_search_save_LIBS - fi --echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 --echo "${ECHO_T}$ac_cv_search_strerror" >&6 --if test "$ac_cv_search_strerror" != no; then -- test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS" -+{ echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 -+echo "${ECHO_T}$ac_cv_search_strerror" >&6; } -+ac_res=$ac_cv_search_strerror -+if test "$ac_res" != no; then -+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - - fi - -@@ -2499,8 +2979,8 @@ am__api_version="1.9" - # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" - # OS/2's system install, which has a completely different semantic - # ./install, which can be erroneously created by make from ./install.sh. --echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 --echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } - if test -z "$INSTALL"; then - if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -@@ -2522,7 +3002,7 @@ case $as_dir/ in - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. -@@ -2541,21 +3021,22 @@ case $as_dir/ in - ;; - esac - done -+IFS=$as_save_IFS - - - fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else -- # As a last resort, use the slow shell script. We don't cache a -- # path for INSTALL within a source directory, because that will -+ # As a last resort, use the slow shell script. Don't cache a -+ # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is -- # removed, or if the path is relative. -+ # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi - fi --echo "$as_me:$LINENO: result: $INSTALL" >&5 --echo "${ECHO_T}$INSTALL" >&6 -+{ echo "$as_me:$LINENO: result: $INSTALL" >&5 -+echo "${ECHO_T}$INSTALL" >&6; } - - # Use test -z because SunOS4 sh mishandles braces in ${var-val}. - # It thinks the first close brace ends the variable substitution. -@@ -2565,8 +3046,8 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCR - - test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - --echo "$as_me:$LINENO: checking whether build environment is sane" >&5 --echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 -+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } - # Just in case - sleep 1 - echo timestamp > conftest.file -@@ -2608,20 +3089,20 @@ echo "$as_me: error: newly created file - Check your system clock" >&2;} - { (exit 1); exit 1; }; } - fi --echo "$as_me:$LINENO: result: yes" >&5 --echo "${ECHO_T}yes" >&6 -+{ echo "$as_me:$LINENO: result: yes" >&5 -+echo "${ECHO_T}yes" >&6; } - test "$program_prefix" != NONE && -- program_transform_name="s,^,$program_prefix,;$program_transform_name" -+ program_transform_name="s&^&$program_prefix&;$program_transform_name" - # Use a double $ so make ignores it. - test "$program_suffix" != NONE && -- program_transform_name="s,\$,$program_suffix,;$program_transform_name" -+ program_transform_name="s&\$&$program_suffix&;$program_transform_name" - # Double any \ or $. echo might interpret backslashes. - # By default was `s,x,x', remove it if useless. - cat <<\_ACEOF >conftest.sed - s/[\\$]/&&/g;s/;s,x,x,$// - _ACEOF - program_transform_name=`echo $program_transform_name | sed -f conftest.sed` --rm conftest.sed -+rm -f conftest.sed - - # expand $ac_aux_dir to an absolute path - am_aux_dir=`cd $ac_aux_dir && pwd` -@@ -2673,8 +3154,8 @@ for ac_prog in gawk mawk nawk awk - do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -2687,54 +3168,57 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - AWK=$ac_cv_prog_AWK - if test -n "$AWK"; then -- echo "$as_me:$LINENO: result: $AWK" >&5 --echo "${ECHO_T}$AWK" >&6 -+ { echo "$as_me:$LINENO: result: $AWK" >&5 -+echo "${ECHO_T}$AWK" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ /* The GOT header provides the address of the DYNAMIC segment, so ++ we need that even if the GOT is otherwise empty. */ ++ if (htab->root.dynamic_sections_created) ++ got_size = AVR32_GOT_HEADER_SIZE; + - test -n "$AWK" && break - done - --echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 --echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 --set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` --if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } -+set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.make <<\_ACEOF -+SHELL = /bin/sh - all: -- @echo 'ac_maketemp="$(MAKE)"' -+ @echo '@@@%%%=$(MAKE)=@@@%%%' - _ACEOF - # GNU make sometimes prints "make[1]: Entering...", which would confuse us. --eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` --if test -n "$ac_maketemp"; then -- eval ac_cv_prog_make_${ac_make}_set=yes --else -- eval ac_cv_prog_make_${ac_make}_set=no --fi -+case `${MAKE-make} -f conftest.make 2>/dev/null` in -+ *@@@%%%=?*=@@@%%%*) -+ eval ac_cv_prog_make_${ac_make}_set=yes;; -+ *) -+ eval ac_cv_prog_make_${ac_make}_set=no;; -+esac - rm -f conftest.make - fi --if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then -- echo "$as_me:$LINENO: result: yes" >&5 --echo "${ECHO_T}yes" >&6 -+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then -+ { echo "$as_me:$LINENO: result: yes" >&5 -+echo "${ECHO_T}yes" >&6; } - SET_MAKE= - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" - fi - -@@ -2749,7 +3233,7 @@ rmdir .tst 2>/dev/null - - DEPDIR="${am__leading_dot}deps" - -- ac_config_commands="$ac_config_commands depfiles" -+ac_config_commands="$ac_config_commands depfiles" - - - am_make=${MAKE-make} -@@ -2759,8 +3243,8 @@ am__doit: - .PHONY: am__doit - END - # If we don't find an include directive, just comment out the code. --echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 --echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 -+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } - am__include="#" - am__quote= - _am_result=none -@@ -2787,15 +3271,15 @@ if test "$am__include" = "#"; then - fi - - --echo "$as_me:$LINENO: result: $_am_result" >&5 --echo "${ECHO_T}$_am_result" >&6 -+{ echo "$as_me:$LINENO: result: $_am_result" >&5 -+echo "${ECHO_T}$_am_result" >&6; } - rm -f confinc confmf - --# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. -+# Check whether --enable-dependency-tracking was given. - if test "${enable_dependency_tracking+set}" = set; then -- enableval="$enable_dependency_tracking" -+ enableval=$enable_dependency_tracking; -+fi - --fi; - if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -@@ -2870,8 +3354,8 @@ if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. - set dummy ${ac_tool_prefix}strip; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -2884,32 +3368,34 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - STRIP=$ac_cv_prog_STRIP - if test -n "$STRIP"; then -- echo "$as_me:$LINENO: result: $STRIP" >&5 --echo "${ECHO_T}$STRIP" >&6 -+ { echo "$as_me:$LINENO: result: $STRIP" >&5 -+echo "${ECHO_T}$STRIP" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ for (i = htab->nr_got_holes; i > 0; i--) ++ { ++ got = htab->got_hole[i]; ++ while (got) ++ { ++ if (got->refcount > 0) ++ { ++ offset = got_size; ++ if (got->offset != offset) ++ { ++ RDBG("GOT offset changed: %ld -> %ld\n", ++ got->offset, offset); ++ changed = TRUE; ++ } ++ got->offset = offset; ++ got_size += 4; ++ } ++ got = got->next; ++ } ++ } + - fi - if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. - set dummy strip; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -2922,27 +3408,41 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - -- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" - fi - fi - ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP - if test -n "$ac_ct_STRIP"; then -- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 --echo "${ECHO_T}$ac_ct_STRIP" >&6 -+ { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -+echo "${ECHO_T}$ac_ct_STRIP" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - -- STRIP=$ac_ct_STRIP -+ if test "x$ac_ct_STRIP" = x; then -+ STRIP=":" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&5 -+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&2;} -+ac_tool_warned=yes ;; -+esac -+ STRIP=$ac_ct_STRIP -+ fi - else - STRIP="$ac_cv_prog_STRIP" - fi -@@ -2963,8 +3463,8 @@ am__tar='${AMTAR} chof - "$$tardir"'; am - - depcc="$CC" am_compiler_list= - --echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 --echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } - if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3053,8 +3553,8 @@ else - fi - - fi --echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 --echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 -+{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } - CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - -@@ -3072,10 +3572,9 @@ fi - - - --# Check whether --enable-shared or --disable-shared was given. -+# Check whether --enable-shared was given. - if test "${enable_shared+set}" = set; then -- enableval="$enable_shared" -- p=${PACKAGE-default} -+ enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; -@@ -3093,11 +3592,11 @@ no) enable_shared=no ;; - esac - else - enable_shared=yes --fi; --# Check whether --enable-static or --disable-static was given. -+fi ++ if (htab->sgot->size != got_size) ++ { ++ RDBG("GOT size changed: %lu -> %lu\n", htab->sgot->size, ++ got_size); ++ changed = TRUE; ++ } ++ htab->sgot->size = got_size; + -+# Check whether --enable-static was given. - if test "${enable_static+set}" = set; then -- enableval="$enable_static" -- p=${PACKAGE-default} -+ enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; -@@ -3115,11 +3614,11 @@ no) enable_static=no ;; - esac - else - enable_static=yes --fi; --# Check whether --enable-fast-install or --disable-fast-install was given. -+fi ++ RDBG("assign_got_offsets: total size %lu (%s)\n", ++ got_size, changed ? "changed" : "no change"); + -+# Check whether --enable-fast-install was given. - if test "${enable_fast_install+set}" = set; then -- enableval="$enable_fast_install" -- p=${PACKAGE-default} -+ enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; -@@ -3137,20 +3636,21 @@ no) enable_fast_install=no ;; - esac - else - enable_fast_install=yes --fi; -+fi ++ return changed; ++} + - --# Check whether --with-gnu-ld or --without-gnu-ld was given. -+# Check whether --with-gnu-ld was given. - if test "${with_gnu_ld+set}" = set; then -- withval="$with_gnu_ld" -- test "$withval" = no || with_gnu_ld=yes -+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes - else - with_gnu_ld=no --fi; -+fi ++static bfd_boolean ++allocate_dynrelocs(struct elf_link_hash_entry *h, void *_info) ++{ ++ struct bfd_link_info *info = _info; ++ struct elf_avr32_link_hash_table *htab; ++ struct elf_avr32_link_hash_entry *havr; ++ struct got_entry *got; + - ac_prog=ld - if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. -- echo "$as_me:$LINENO: checking for ld used by GCC" >&5 --echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for ld used by GCC" >&5 -+echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw -@@ -3179,11 +3679,11 @@ echo $ECHO_N "checking for ld used by GC - ;; - esac - elif test "$with_gnu_ld" = yes; then -- echo "$as_me:$LINENO: checking for GNU ld" >&5 --echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for GNU ld" >&5 -+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } - else -- echo "$as_me:$LINENO: checking for non-GNU ld" >&5 --echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } - fi - if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -@@ -3212,17 +3712,17 @@ fi - - LD="$lt_cv_path_LD" - if test -n "$LD"; then -- echo "$as_me:$LINENO: result: $LD" >&5 --echo "${ECHO_T}$LD" >&6 -+ { echo "$as_me:$LINENO: result: $LD" >&5 -+echo "${ECHO_T}$LD" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 - echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } --echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 --echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } - if test "${lt_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3233,25 +3733,25 @@ else - lt_cv_prog_gnu_ld=no - fi - fi --echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 --echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 -+{ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 -+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } - with_gnu_ld=$lt_cv_prog_gnu_ld - - --echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 --echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 -+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } - if test "${lt_cv_ld_reload_flag+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - lt_cv_ld_reload_flag='-r' - fi --echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 --echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 -+{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 -+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } - reload_flag=$lt_cv_ld_reload_flag - test -n "$reload_flag" && reload_flag=" $reload_flag" - --echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 --echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 -+echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } - if test "${lt_cv_path_NM+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3286,22 +3786,22 @@ fi - fi - - NM="$lt_cv_path_NM" --echo "$as_me:$LINENO: result: $NM" >&5 --echo "${ECHO_T}$NM" >&6 -+{ echo "$as_me:$LINENO: result: $NM" >&5 -+echo "${ECHO_T}$NM" >&6; } - --echo "$as_me:$LINENO: checking whether ln -s works" >&5 --echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 -+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } - LN_S=$as_ln_s - if test "$LN_S" = "ln -s"; then -- echo "$as_me:$LINENO: result: yes" >&5 --echo "${ECHO_T}yes" >&6 -+ { echo "$as_me:$LINENO: result: yes" >&5 -+echo "${ECHO_T}yes" >&6; } - else -- echo "$as_me:$LINENO: result: no, using $LN_S" >&5 --echo "${ECHO_T}no, using $LN_S" >&6 -+ { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 -+echo "${ECHO_T}no, using $LN_S" >&6; } - fi - --echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5 --echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5 -+echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6; } - if test "${lt_cv_deplibs_check_method+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3463,8 +3963,8 @@ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - esac - - fi --echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 --echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 -+{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 -+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } - file_magic_cmd=$lt_cv_file_magic_cmd - deplibs_check_method=$lt_cv_deplibs_check_method - -@@ -3474,8 +3974,8 @@ deplibs_check_method=$lt_cv_deplibs_chec - # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! - - # find the maximum length of command line arguments --echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 --echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 -+echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } - if test "${lt_cv_sys_max_cmd_len+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3526,11 +4026,11 @@ else - fi - - if test -n "$lt_cv_sys_max_cmd_len" ; then -- echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 --echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 -+ { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 -+echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } - else -- echo "$as_me:$LINENO: result: none" >&5 --echo "${ECHO_T}none" >&6 -+ { echo "$as_me:$LINENO: result: none" >&5 -+echo "${ECHO_T}none" >&6; } - fi - - -@@ -3538,8 +4038,8 @@ fi - case $deplibs_check_method in - file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then -- echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 --echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 -+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } - if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3593,17 +4093,17 @@ fi - - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if test -n "$MAGIC_CMD"; then -- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 --echo "${ECHO_T}$MAGIC_CMD" >&6 -+ { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -+echo "${ECHO_T}$MAGIC_CMD" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - - if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then -- echo "$as_me:$LINENO: checking for file" >&5 --echo $ECHO_N "checking for file... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for file" >&5 -+echo $ECHO_N "checking for file... $ECHO_C" >&6; } - if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3657,11 +4157,11 @@ fi - - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if test -n "$MAGIC_CMD"; then -- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 --echo "${ECHO_T}$MAGIC_CMD" >&6 -+ { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -+echo "${ECHO_T}$MAGIC_CMD" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - - else -@@ -3676,8 +4176,8 @@ esac - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. - set dummy ${ac_tool_prefix}ranlib; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3690,32 +4190,34 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - RANLIB=$ac_cv_prog_RANLIB - if test -n "$RANLIB"; then -- echo "$as_me:$LINENO: result: $RANLIB" >&5 --echo "${ECHO_T}$RANLIB" >&6 -+ { echo "$as_me:$LINENO: result: $RANLIB" >&5 -+echo "${ECHO_T}$RANLIB" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ pr_debug(" (4b) allocate_dynrelocs: %s\n", h->root.root.string); + - fi - if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. - set dummy ranlib; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3728,27 +4230,41 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - -- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" - fi - fi - ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB - if test -n "$ac_ct_RANLIB"; then -- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 --echo "${ECHO_T}$ac_ct_RANLIB" >&6 -+ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -+echo "${ECHO_T}$ac_ct_RANLIB" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - -- RANLIB=$ac_ct_RANLIB -+ if test "x$ac_ct_RANLIB" = x; then -+ RANLIB=":" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&5 -+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&2;} -+ac_tool_warned=yes ;; -+esac -+ RANLIB=$ac_ct_RANLIB -+ fi - else - RANLIB="$ac_cv_prog_RANLIB" - fi -@@ -3756,8 +4272,8 @@ fi - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. - set dummy ${ac_tool_prefix}strip; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3770,32 +4286,34 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - STRIP=$ac_cv_prog_STRIP - if test -n "$STRIP"; then -- echo "$as_me:$LINENO: result: $STRIP" >&5 --echo "${ECHO_T}$STRIP" >&6 -+ { echo "$as_me:$LINENO: result: $STRIP" >&5 -+echo "${ECHO_T}$STRIP" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ if (h->root.type == bfd_link_hash_indirect) ++ return TRUE; + - fi - if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. - set dummy strip; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3808,27 +4326,41 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - -- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" - fi - fi - ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP - if test -n "$ac_ct_STRIP"; then -- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 --echo "${ECHO_T}$ac_ct_STRIP" >&6 -+ { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -+echo "${ECHO_T}$ac_ct_STRIP" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - -- STRIP=$ac_ct_STRIP -+ if test "x$ac_ct_STRIP" = x; then -+ STRIP=":" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&5 -+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&2;} -+ac_tool_warned=yes ;; -+esac -+ STRIP=$ac_ct_STRIP -+ fi - else - STRIP="$ac_cv_prog_STRIP" - fi -@@ -3843,22 +4375,22 @@ test "$GCC" = yes && libtool_flags="$lib - test "$lt_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" - - --# Check whether --enable-libtool-lock or --disable-libtool-lock was given. -+# Check whether --enable-libtool-lock was given. - if test "${enable_libtool_lock+set}" = set; then -- enableval="$enable_libtool_lock" -+ enableval=$enable_libtool_lock; -+fi - --fi; - test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" - test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" - - --# Check whether --with-pic or --without-pic was given. -+# Check whether --with-pic was given. - if test "${with_pic+set}" = set; then -- withval="$with_pic" -- pic_mode="$withval" -+ withval=$with_pic; pic_mode="$withval" - else - pic_mode=default --fi; -+fi ++ if (h->root.type == bfd_link_hash_warning) ++ /* When warning symbols are created, they **replace** the "real" ++ entry in the hash table, thus we never get to see the real ++ symbol in a hash traversal. So look at it now. */ ++ h = (struct elf_link_hash_entry *) h->root.u.i.link; + - test x"$pic_mode" = xyes && libtool_flags="$libtool_flags --prefer-pic" - test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic" - -@@ -3867,7 +4399,7 @@ test x"$pic_mode" = xno && libtool_flags - case $host in - *-*-irix6*) - # Find out which ABI we are using. -- echo '#line 3870 "configure"' > conftest.$ac_ext -+ echo '#line 4402 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? -@@ -3972,13 +4504,12 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*li - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" -- echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 --echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 -+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } - if test "${lt_cv_cc_needs_belf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - -- - ac_ext=c - ac_cpp='$CPP $CPPFLAGS' - ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -@@ -4001,35 +4532,32 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - lt_cv_cc_needs_belf=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --lt_cv_cc_needs_belf=no -+ lt_cv_cc_needs_belf=no - fi --rm -f conftest.err conftest.$ac_objext \ ++ htab = avr32_elf_hash_table(info); ++ havr = (struct elf_avr32_link_hash_entry *)h; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c - ac_cpp='$CPP $CPPFLAGS' -@@ -4038,8 +4566,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLA - ac_compiler_gnu=$ac_cv_c_compiler_gnu - - fi --echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 --echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 -+{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 -+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" -@@ -4069,39 +4597,58 @@ _ACEOF - - # The following way of writing the cache mishandles newlines in values, - # but we know of no workaround that is simple, portable, and efficient. --# So, don't put newlines in cache variables' values. -+# So, we kill variables containing newlines. - # Ultrix sh set writes to stderr and can't be redirected directly, - # and sets the high bit in the cache file unless we assign to the vars. --{ -+( -+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do -+ eval ac_val=\$$ac_var -+ case $ac_val in #( -+ *${as_nl}*) -+ case $ac_var in #( -+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; -+ esac -+ case $ac_var in #( -+ _ | IFS | as_nl) ;; #( -+ *) $as_unset $ac_var ;; -+ esac ;; -+ esac -+ done ++ got = h->got.glist; + - (set) 2>&1 | -- case `(ac_space=' '; set | grep ac_space) 2>&1` in -- *ac_space=\ *) -+ case $as_nl`(ac_space=' '; set) 2>&1` in #( -+ *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" -- ;; -+ ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. -- sed -n \ -- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" -+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; -- esac; --} | -+ esac | -+ sort -+) | - sed ' -+ /^ac_cv_env_/b end - t clear -- : clear -+ :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end -- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ -- : end' >>confcache --if diff $cache_file confcache >/dev/null 2>&1; then :; else -- if test -w $cache_file; then -- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" -+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ -+ :end' >>confcache -+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else -+ if test -w "$cache_file"; then -+ test "x$cache_file" != "x/dev/null" && -+ { echo "$as_me:$LINENO: updating cache $cache_file" >&5 -+echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else -- echo "not updating unwritable cache $cache_file" -+ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -+echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi - fi - rm -f confcache -@@ -4127,8 +4674,8 @@ if test -r "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 - echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in -- [\\/]* | ?:[\\/]* ) . $cache_file;; -- *) . ./$cache_file;; -+ [\\/]* | ?:[\\/]* ) . "$cache_file";; -+ *) . "./$cache_file";; - esac - fi - else -@@ -4154,10 +4701,9 @@ exec 5>>./config.log - - - --# Check whether --enable-targets or --disable-targets was given. -+# Check whether --enable-targets was given. - if test "${enable_targets+set}" = set; then -- enableval="$enable_targets" -- case "${enableval}" in -+ enableval=$enable_targets; case "${enableval}" in - yes | "") { { echo "$as_me:$LINENO: error: enable-targets option must specify target names or 'all'" >&5 - echo "$as_me: error: enable-targets option must specify target names or 'all'" >&2;} - { (exit 1); exit 1; }; } -@@ -4165,31 +4711,32 @@ echo "$as_me: error: enable-targets opti - no) enable_targets= ;; - *) enable_targets=$enableval ;; - esac --fi; # Check whether --enable-commonbfdlib or --disable-commonbfdlib was given. -+fi -+# Check whether --enable-commonbfdlib was given. - if test "${enable_commonbfdlib+set}" = set; then -- enableval="$enable_commonbfdlib" -- case "${enableval}" in -+ enableval=$enable_commonbfdlib; case "${enableval}" in - yes) commonbfdlib=true ;; - no) commonbfdlib=false ;; - *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for BFD commonbfdlib option" >&5 - echo "$as_me: error: bad value ${enableval} for BFD commonbfdlib option" >&2;} - { (exit 1); exit 1; }; } ;; - esac --fi; -+fi ++ /* If got is NULL, the symbol is never referenced through the GOT */ ++ if (got && got->refcount > 0) ++ { ++ insert_got_entry(htab, got); + - - GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes" - --# Check whether --enable-werror or --disable-werror was given. -+# Check whether --enable-werror was given. - if test "${enable_werror+set}" = set; then -- enableval="$enable_werror" -- case "${enableval}" in -+ enableval=$enable_werror; case "${enableval}" in - yes | y) ERROR_ON_WARNING="yes" ;; - no | n) ERROR_ON_WARNING="no" ;; - *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-werror" >&5 - echo "$as_me: error: bad value ${enableval} for --enable-werror" >&2;} - { (exit 1); exit 1; }; } ;; - esac --fi; -+fi ++ /* Shared libraries need relocs for all GOT entries unless the ++ symbol is forced local or -Bsymbolic is used. Others need ++ relocs for everything that is not guaranteed to be defined in ++ a regular object. */ ++ if ((info->shared ++ && !info->symbolic ++ && h->dynindx != -1) ++ || (htab->root.dynamic_sections_created ++ && h->def_dynamic ++ && !h->def_regular)) ++ htab->srelgot->size += sizeof(Elf32_External_Rela); ++ } + - - # Enable -Werror by default when using gcc - if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then -@@ -4206,10 +4753,9 @@ if test "${GCC}" = yes ; then - WARN_CFLAGS="${GCC_WARN_CFLAGS}" - fi - --# Check whether --enable-build-warnings or --disable-build-warnings was given. -+# Check whether --enable-build-warnings was given. - if test "${enable_build_warnings+set}" = set; then -- enableval="$enable_build_warnings" -- case "${enableval}" in -+ enableval=$enable_build_warnings; case "${enableval}" in - yes) WARN_CFLAGS="${GCC_WARN_CFLAGS}";; - no) if test "${GCC}" = yes ; then - WARN_CFLAGS="-w" -@@ -4220,7 +4766,8 @@ if test "${enable_build_warnings+set}" = - WARN_CFLAGS="${t} ${GCC_WARN_CFLAGS}";; - *) WARN_CFLAGS=`echo "${enableval}" | sed -e "s/,/ /g"`;; - esac --fi; -+fi ++ if (havr->possibly_dynamic_relocs ++ && (info->shared ++ || (elf_hash_table(info)->dynamic_sections_created ++ && h->def_dynamic ++ && !h->def_regular))) ++ { ++ pr_debug("Allocating %d dynamic reloc against symbol %s...\n", ++ havr->possibly_dynamic_relocs, h->root.root.string); ++ htab->srelgot->size += (havr->possibly_dynamic_relocs ++ * sizeof(Elf32_External_Rela)); ++ } + - - if test x"$silent" != x"yes" && test x"$WARN_CFLAGS" != x""; then - echo "Setting warning flags = $WARN_CFLAGS" 6>&1 -@@ -4230,7 +4777,7 @@ fi - - - -- ac_config_headers="$ac_config_headers config.h:config.in" -+ac_config_headers="$ac_config_headers config.h:config.in" - - - if test -z "$target" ; then -@@ -4252,8 +4799,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. - set dummy ${ac_tool_prefix}gcc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -4266,32 +4813,34 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - CC=$ac_cv_prog_CC - if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 -+ { echo "$as_me:$LINENO: result: $CC" >&5 -+echo "${ECHO_T}$CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ return TRUE; ++} + - fi - if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. - set dummy gcc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -4304,36 +4853,51 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - ac_ct_CC=$ac_cv_prog_ac_ct_CC - if test -n "$ac_ct_CC"; then -- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 --echo "${ECHO_T}$ac_ct_CC" >&6 -+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -+echo "${ECHO_T}$ac_ct_CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - -- CC=$ac_ct_CC -+ if test "x$ac_ct_CC" = x; then -+ CC="" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&5 -+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&2;} -+ac_tool_warned=yes ;; -+esac -+ CC=$ac_ct_CC -+ fi - else - CC="$ac_cv_prog_CC" - fi - - if test -z "$CC"; then -- if test -n "$ac_tool_prefix"; then -- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -+ if test -n "$ac_tool_prefix"; then -+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. - set dummy ${ac_tool_prefix}cc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -4346,74 +4910,34 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - CC=$ac_cv_prog_CC - if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- --fi --if test -z "$ac_cv_prog_CC"; then -- ac_ct_CC=$CC -- # Extract the first word of "cc", so it can be a program name with args. --set dummy cc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$ac_ct_CC"; then -- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_ac_ct_CC="cc" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- --fi --fi --ac_ct_CC=$ac_cv_prog_ac_ct_CC --if test -n "$ac_ct_CC"; then -- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 --echo "${ECHO_T}$ac_ct_CC" >&6 -+ { echo "$as_me:$LINENO: result: $CC" >&5 -+echo "${ECHO_T}$CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - -- CC=$ac_ct_CC --else -- CC="$ac_cv_prog_CC" --fi - -+ fi - fi - if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. - set dummy cc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -4427,7 +4951,7 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue -@@ -4438,6 +4962,7 @@ do - fi - done - done -+IFS=$as_save_IFS - - if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. -@@ -4455,22 +4980,23 @@ fi - fi - CC=$ac_cv_prog_CC - if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 -+ { echo "$as_me:$LINENO: result: $CC" >&5 -+echo "${ECHO_T}$CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++/* (4) Calculate the sizes of the linker-generated sections and ++ allocate memory for them. */ + - fi - if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then -- for ac_prog in cl -+ for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. - set dummy $ac_tool_prefix$ac_prog; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -4483,36 +5009,38 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - CC=$ac_cv_prog_CC - if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 -+ { echo "$as_me:$LINENO: result: $CC" >&5 -+echo "${ECHO_T}$CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++static bfd_boolean ++avr32_elf_size_dynamic_sections (bfd *output_bfd, ++ struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ bfd *dynobj; ++ asection *s; ++ bfd *ibfd; ++ bfd_boolean relocs; + - test -n "$CC" && break - done - fi - if test -z "$CC"; then - ac_ct_CC=$CC -- for ac_prog in cl -+ for ac_prog in cl.exe - do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -4525,29 +5053,45 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - ac_ct_CC=$ac_cv_prog_ac_ct_CC - if test -n "$ac_ct_CC"; then -- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 --echo "${ECHO_T}$ac_ct_CC" >&6 -+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -+echo "${ECHO_T}$ac_ct_CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ pr_debug("(4) size dynamic sections\n"); + - test -n "$ac_ct_CC" && break - done - -- CC=$ac_ct_CC -+ if test "x$ac_ct_CC" = x; then -+ CC="" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&5 -+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&2;} -+ac_tool_warned=yes ;; -+esac -+ CC=$ac_ct_CC -+ fi - fi - - fi -@@ -4560,27 +5104,41 @@ See \`config.log' for more details." >&2 - { (exit 1); exit 1; }; } - - # Provide some information about the compiler. --echo "$as_me:$LINENO:" \ -- "checking for C compiler version" >&5 -+echo "$as_me:$LINENO: checking for C compiler version" >&5 - ac_compiler=`set X $ac_compile; echo $2` --{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 -- (eval $ac_compiler --version &5) 2>&5 -+{ (ac_try="$ac_compiler --version >&5" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } --{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 -- (eval $ac_compiler -v &5) 2>&5 -+{ (ac_try="$ac_compiler -v >&5" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } --{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 -- (eval $ac_compiler -V &5) 2>&5 -+{ (ac_try="$ac_compiler -V >&5" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - --echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 --echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } - if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -4603,50 +5161,49 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_compiler_gnu=no -+ ac_compiler_gnu=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ htab = avr32_elf_hash_table(info); ++ dynobj = htab->root.dynobj; ++ BFD_ASSERT(dynobj != NULL); + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_c_compiler_gnu=$ac_compiler_gnu - - fi --echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 --echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } - GCC=`test $ac_compiler_gnu = yes && echo yes` - ac_test_CFLAGS=${CFLAGS+set} - ac_save_CFLAGS=$CFLAGS --CFLAGS="-g" --echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 --echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } - if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- cat >conftest.$ac_ext <<_ACEOF -+ ac_save_c_werror_flag=$ac_c_werror_flag -+ ac_c_werror_flag=yes -+ ac_cv_prog_cc_g=no -+ CFLAGS="-g" -+ cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -4662,311 +5219,248 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_prog_cc_g=no --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --fi --echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 --echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 --if test "$ac_test_CFLAGS" = set; then -- CFLAGS=$ac_save_CFLAGS --elif test $ac_cv_prog_cc_g = yes; then -- if test "$GCC" = yes; then -- CFLAGS="-g -O2" -- else -- CFLAGS="-g" -- fi --else -- if test "$GCC" = yes; then -- CFLAGS="-O2" -- else -- CFLAGS= -- fi --fi --echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 --echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 --if test "${ac_cv_prog_cc_stdc+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- ac_cv_prog_cc_stdc=no --ac_save_CC=$CC --cat >conftest.$ac_ext <<_ACEOF -+ CFLAGS="" -+ cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#include --#include --#include --#include --/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ --struct buf { int x; }; --FILE * (*rcsopen) (struct buf *, struct stat *, int); --static char *e (p, i) -- char **p; -- int i; --{ -- return p[i]; --} --static char *f (char * (*g) (char **, int), char **p, ...) --{ -- char *s; -- va_list v; -- va_start (v,p); -- s = g (p, va_arg (v,int)); -- va_end (v); -- return s; --} - --/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has -- function prototypes and stuff, but not '\xHH' hex character constants. -- These don't provoke an error unfortunately, instead are silently treated -- as 'x'. The following induces an error, until -std1 is added to get -- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an -- array size at least. It's necessary to write '\x00'==0 to get something -- that's true only with -std1. */ --int osf4_cc_array ['\x00' == 0 ? 1 : -1]; -- --int test (int i, double x); --struct s1 {int (*f) (int a);}; --struct s2 {int (*f) (double a);}; --int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); --int argc; --char **argv; - int - main () - { --return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ++ if (htab->root.dynamic_sections_created) ++ { ++ /* Initialize the contents of the .interp section to the name of ++ the dynamic loader */ ++ if (info->executable) ++ { ++ s = bfd_get_section_by_name(dynobj, ".interp"); ++ BFD_ASSERT(s != NULL); ++ s->size = sizeof(ELF_DYNAMIC_INTERPRETER); ++ s->contents = (unsigned char *)ELF_DYNAMIC_INTERPRETER; ++ } ++ } + - ; - return 0; - } - _ACEOF --# Don't try gcc -ansi; that turns off useful extensions and --# breaks some systems' header files. --# AIX -qlanglvl=ansi --# Ultrix and OSF/1 -std1 --# HP-UX 10.20 and later -Ae --# HP-UX older versions -Aa -D_HPUX_SOURCE --# SVR4 -Xc -D__EXTENSIONS__ --for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" --do -- CC="$ac_save_CC $ac_arg" -- rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_prog_cc_stdc=$ac_arg --break -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --fi --rm -f conftest.err conftest.$ac_objext --done --rm -f conftest.$ac_ext conftest.$ac_objext --CC=$ac_save_CC -- --fi -- --case "x$ac_cv_prog_cc_stdc" in -- x|xno) -- echo "$as_me:$LINENO: result: none needed" >&5 --echo "${ECHO_T}none needed" >&6 ;; -- *) -- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 --echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 -- CC="$CC $ac_cv_prog_cc_stdc" ;; --esac -- --# Some people use a C++ compiler to compile C. Since we use `exit', --# in C++ we need to declare it. In case someone uses the same compiler --# for both compiling C and C++ we need to have the C++ compiler decide --# the declaration of exit, since it's the most demanding environment. --cat >conftest.$ac_ext <<_ACEOF --#ifndef __cplusplus -- choke me --#endif --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- for ac_declaration in \ -- '' \ -- 'extern "C" void std::exit (int) throw (); using std::exit;' \ -- 'extern "C" void std::exit (int); using std::exit;' \ -- 'extern "C" void exit (int) throw ();' \ -- 'extern "C" void exit (int);' \ -- 'void exit (int);' --do -- cat >conftest.$ac_ext <<_ACEOF -+ ac_c_werror_flag=$ac_save_c_werror_flag -+ CFLAGS="-g" -+ cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --$ac_declaration --#include ++ if (htab->nr_got_holes > 0) ++ { ++ /* Allocate holes for the pigeonhole sort algorithm */ ++ pr_debug("Highest GOT refcount: %d\n", htab->nr_got_holes); ++ if (htab->nr_got_holes >= MAX_NR_GOT_HOLES) ++ { ++ /* TODO: Do something clever (different sorting algorithm) */ ++ _bfd_error_handler(_("Highest refcount %d too high (max %d)\n"), ++ htab->nr_got_holes, MAX_NR_GOT_HOLES); ++ bfd_set_error(bfd_error_no_memory); ++ return FALSE; ++ } ++ htab->got_hole = bfd_zalloc(output_bfd, ++ sizeof(struct got_entry *) ++ * (htab->nr_got_holes + 1)); ++ if (!htab->got_hole) ++ return FALSE; + - int - main () - { --exit (42); ++ /* Set up .got offsets for local syms. */ ++ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) ++ { ++ struct got_entry **local_got; ++ struct got_entry **end_local_got; ++ Elf_Internal_Shdr *symtab_hdr; ++ bfd_size_type locsymcount; + - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- : -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_prog_cc_g=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --continue ++ pr_debug(" (4a) processing file %s...\n", ibfd->filename); + - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -- cat >conftest.$ac_ext <<_ACEOF ++ BFD_ASSERT(bfd_get_flavour(ibfd) == bfd_target_elf_flavour); + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi ++ local_got = elf_local_got_ents(ibfd); ++ if (!local_got) ++ continue; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi ++ symtab_hdr = &elf_tdata(ibfd)->symtab_hdr; ++ locsymcount = symtab_hdr->sh_info; ++ end_local_got = local_got + locsymcount; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ ac_c_werror_flag=$ac_save_c_werror_flag -+fi -+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } -+if test "$ac_test_CFLAGS" = set; then -+ CFLAGS=$ac_save_CFLAGS -+elif test $ac_cv_prog_cc_g = yes; then -+ if test "$GCC" = yes; then -+ CFLAGS="-g -O2" -+ else -+ CFLAGS="-g" -+ fi -+else -+ if test "$GCC" = yes; then -+ CFLAGS="-O2" -+ else -+ CFLAGS= -+ fi -+fi -+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 -+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } -+if test "${ac_cv_prog_cc_c89+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ ac_cv_prog_cc_c89=no -+ac_save_CC=$CC -+cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --$ac_declaration -+#include -+#include -+#include -+#include -+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -+struct buf { int x; }; -+FILE * (*rcsopen) (struct buf *, struct stat *, int); -+static char *e (p, i) -+ char **p; -+ int i; -+{ -+ return p[i]; -+} -+static char *f (char * (*g) (char **, int), char **p, ...) -+{ -+ char *s; -+ va_list v; -+ va_start (v,p); -+ s = g (p, va_arg (v,int)); -+ va_end (v); -+ return s; -+} ++ for (; local_got < end_local_got; ++local_got) ++ insert_got_entry(htab, *local_got); ++ } ++ } + -+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has -+ function prototypes and stuff, but not '\xHH' hex character constants. -+ These don't provoke an error unfortunately, instead are silently treated -+ as 'x'. The following induces an error, until -std is added to get -+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an -+ array size at least. It's necessary to write '\x00'==0 to get something -+ that's true only with -std. */ -+int osf4_cc_array ['\x00' == 0 ? 1 : -1]; ++ /* Allocate global sym .got entries and space for global sym ++ dynamic relocs */ ++ elf_link_hash_traverse(&htab->root, allocate_dynrelocs, info); + -+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters -+ inside strings and character constants. */ -+#define FOO(x) 'x' -+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; ++ /* Now that we have sorted the GOT entries, we are ready to ++ assign offsets and determine the initial size of the GOT. */ ++ if (htab->sgot) ++ assign_got_offsets(htab); + -+int test (int i, double x); -+struct s1 {int (*f) (int a);}; -+struct s2 {int (*f) (double a);}; -+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -+int argc; -+char **argv; - int - main () - { --exit (42); -+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; - } - _ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -+do -+ CC="$ac_save_CC $ac_arg" -+ rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- break -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_prog_cc_c89=$ac_arg - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - ++ /* Allocate space for local sym dynamic relocs */ ++ BFD_ASSERT(htab->local_dynamic_relocs == 0 || info->shared); ++ if (htab->local_dynamic_relocs) ++ htab->srelgot->size += (htab->local_dynamic_relocs ++ * sizeof(Elf32_External_Rela)); + - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ /* We now have determined the sizes of the various dynamic ++ sections. Allocate memory for them. */ ++ relocs = FALSE; ++ for (s = dynobj->sections; s; s = s->next) ++ { ++ if ((s->flags & SEC_LINKER_CREATED) == 0) ++ continue; + -+rm -f core conftest.err conftest.$ac_objext -+ test "x$ac_cv_prog_cc_c89" != "xno" && break - done --rm -f conftest* --if test -n "$ac_declaration"; then -- echo '#ifdef __cplusplus' >>confdefs.h -- echo $ac_declaration >>confdefs.h -- echo '#endif' >>confdefs.h -+rm -f conftest.$ac_ext -+CC=$ac_save_CC ++ if (s == htab->sgot ++ || s == htab->sstub) ++ { ++ /* Strip this section if we don't need it */ ++ } ++ else if (strncmp (bfd_get_section_name(dynobj, s), ".rela", 5) == 0) ++ { ++ if (s->size != 0) ++ relocs = TRUE; + - fi -+# AC_CACHE_VAL -+case "x$ac_cv_prog_cc_c89" in -+ x) -+ { echo "$as_me:$LINENO: result: none needed" >&5 -+echo "${ECHO_T}none needed" >&6; } ;; -+ xno) -+ { echo "$as_me:$LINENO: result: unsupported" >&5 -+echo "${ECHO_T}unsupported" >&6; } ;; -+ *) -+ CC="$CC $ac_cv_prog_cc_c89" -+ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 -+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; -+esac - --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 - --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=c - ac_cpp='$CPP $CPPFLAGS' - ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -@@ -4984,8 +5478,8 @@ for ac_prog in 'bison -y' byacc - do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_YACC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -4998,25 +5492,27 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_YACC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - YACC=$ac_cv_prog_YACC - if test -n "$YACC"; then -- echo "$as_me:$LINENO: result: $YACC" >&5 --echo "${ECHO_T}$YACC" >&6 -+ { echo "$as_me:$LINENO: result: $YACC" >&5 -+echo "${ECHO_T}$YACC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ s->reloc_count = 0; ++ } ++ else ++ { ++ /* It's not one of our sections */ ++ continue; ++ } + - test -n "$YACC" && break - done - test -n "$YACC" || YACC="yacc" -@@ -5025,8 +5521,8 @@ for ac_prog in flex lex - do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_LEX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -5039,253 +5535,182 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_LEX="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - LEX=$ac_cv_prog_LEX - if test -n "$LEX"; then -- echo "$as_me:$LINENO: result: $LEX" >&5 --echo "${ECHO_T}$LEX" >&6 -+ { echo "$as_me:$LINENO: result: $LEX" >&5 -+echo "${ECHO_T}$LEX" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ if (s->size == 0) ++ { ++ /* Strip unneeded sections */ ++ pr_debug("Stripping section %s from output...\n", s->name); ++ /* deleted function in 2.17 ++ _bfd_strip_section_from_output(info, s); ++ */ ++ continue; ++ } + - test -n "$LEX" && break - done - test -n "$LEX" || LEX=":" - --if test -z "$LEXLIB" --then -- echo "$as_me:$LINENO: checking for yywrap in -lfl" >&5 --echo $ECHO_N "checking for yywrap in -lfl... $ECHO_C" >&6 --if test "${ac_cv_lib_fl_yywrap+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- ac_check_lib_save_LIBS=$LIBS --LIBS="-lfl $LIBS" --cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --/* Override any gcc2 internal prototype to avoid an error. */ --#ifdef __cplusplus --extern "C" -+if test "x$LEX" != "x:"; then -+ cat >conftest.l <<_ACEOF -+%% -+a { ECHO; } -+b { REJECT; } -+c { yymore (); } -+d { yyless (1); } -+e { yyless (input () != 0); } -+f { unput (yytext[0]); } -+. { BEGIN INITIAL; } -+%% -+#ifdef YYTEXT_POINTER -+extern char *yytext; - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ --char yywrap (); - int --main () -+main (void) - { --yywrap (); -- ; -- return 0; -+ return ! yylex () + ! yywrap (); - } - _ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -+{ (ac_try="$LEX conftest.l" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$LEX conftest.l") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_lib_fl_yywrap=yes -+ (exit $ac_status); } -+{ echo "$as_me:$LINENO: checking lex output file root" >&5 -+echo $ECHO_N "checking lex output file root... $ECHO_C" >&6; } -+if test "${ac_cv_prog_lex_root+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_lib_fl_yywrap=no -+if test -f lex.yy.c; then -+ ac_cv_prog_lex_root=lex.yy -+elif test -f lexyy.c; then -+ ac_cv_prog_lex_root=lexyy -+else -+ { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5 -+echo "$as_me: error: cannot find output from $LEX; giving up" >&2;} -+ { (exit 1); exit 1; }; } - fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --LIBS=$ac_check_lib_save_LIBS - fi --echo "$as_me:$LINENO: result: $ac_cv_lib_fl_yywrap" >&5 --echo "${ECHO_T}$ac_cv_lib_fl_yywrap" >&6 --if test $ac_cv_lib_fl_yywrap = yes; then -- LEXLIB="-lfl" --else -- echo "$as_me:$LINENO: checking for yywrap in -ll" >&5 --echo $ECHO_N "checking for yywrap in -ll... $ECHO_C" >&6 --if test "${ac_cv_lib_l_yywrap+set}" = set; then -+{ echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5 -+echo "${ECHO_T}$ac_cv_prog_lex_root" >&6; } -+LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root ++ s->contents = bfd_zalloc(dynobj, s->size); ++ if (s->contents == NULL) ++ return FALSE; ++ } + -+if test -z "${LEXLIB+set}"; then -+ { echo "$as_me:$LINENO: checking lex library" >&5 -+echo $ECHO_N "checking lex library... $ECHO_C" >&6; } -+if test "${ac_cv_lib_lex+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- ac_check_lib_save_LIBS=$LIBS --LIBS="-ll $LIBS" --cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ - --/* Override any gcc2 internal prototype to avoid an error. */ --#ifdef __cplusplus --extern "C" --#endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ --char yywrap (); --int --main () --{ --yywrap (); -- ; -- return 0; --} -+ ac_save_LIBS=$LIBS -+ ac_cv_lib_lex='none needed' -+ for ac_lib in '' -lfl -ll; do -+ LIBS="$ac_lib $ac_save_LIBS" -+ cat >conftest.$ac_ext <<_ACEOF -+`cat $LEX_OUTPUT_ROOT.c` - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_lib_l_yywrap=yes -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then -+ ac_cv_lib_lex=$ac_lib - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_lib_l_yywrap=no --fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --LIBS=$ac_check_lib_save_LIBS --fi --echo "$as_me:$LINENO: result: $ac_cv_lib_l_yywrap" >&5 --echo "${ECHO_T}$ac_cv_lib_l_yywrap" >&6 --if test $ac_cv_lib_l_yywrap = yes; then -- LEXLIB="-ll" --fi -- --fi -- --fi - --if test "x$LEX" != "x:"; then -- echo "$as_me:$LINENO: checking lex output file root" >&5 --echo $ECHO_N "checking lex output file root... $ECHO_C" >&6 --if test "${ac_cv_prog_lex_root+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- # The minimal lex program is just a single line: %%. But some broken lexes --# (Solaris, I think it was) want two %% lines, so accommodate them. --cat >conftest.l <<_ACEOF --%% --%% --_ACEOF --{ (eval echo "$as_me:$LINENO: \"$LEX conftest.l\"") >&5 -- (eval $LEX conftest.l) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } --if test -f lex.yy.c; then -- ac_cv_prog_lex_root=lex.yy --elif test -f lexyy.c; then -- ac_cv_prog_lex_root=lexyy --else -- { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5 --echo "$as_me: error: cannot find output from $LEX; giving up" >&2;} -- { (exit 1); exit 1; }; } - fi ++ if (htab->root.dynamic_sections_created) ++ { ++ /* Add some entries to the .dynamic section. We fill in the ++ values later, in sh_elf_finish_dynamic_sections, but we ++ must add the entries now so that we get the correct size for ++ the .dynamic section. The DT_DEBUG entry is filled in by the ++ dynamic linker and used by the debugger. */ ++#define add_dynamic_entry(TAG, VAL) _bfd_elf_add_dynamic_entry(info, TAG, VAL) + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ -+ conftest$ac_exeext conftest.$ac_ext -+ test "$ac_cv_lib_lex" != 'none needed' && break -+ done -+ LIBS=$ac_save_LIBS ++ if (!add_dynamic_entry(DT_PLTGOT, 0)) ++ return FALSE; ++ if (!add_dynamic_entry(DT_AVR32_GOTSZ, 0)) ++ return FALSE; + -+fi -+{ echo "$as_me:$LINENO: result: $ac_cv_lib_lex" >&5 -+echo "${ECHO_T}$ac_cv_lib_lex" >&6; } -+ test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex - fi --echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5 --echo "${ECHO_T}$ac_cv_prog_lex_root" >&6 --rm -f conftest.l --LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root - --echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5 --echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6 ++ if (info->executable) ++ { ++ if (!add_dynamic_entry(DT_DEBUG, 0)) ++ return FALSE; ++ } ++ if (relocs) ++ { ++ if (!add_dynamic_entry(DT_RELA, 0) ++ || !add_dynamic_entry(DT_RELASZ, 0) ++ || !add_dynamic_entry(DT_RELAENT, ++ sizeof(Elf32_External_Rela))) ++ return FALSE; ++ } ++ } ++#undef add_dynamic_entry + -+{ echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5 -+echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6; } - if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - # POSIX says lex can declare yytext either as a pointer or an array; the --# default is implementation-dependent. Figure out which it is, since -+# default is implementation-dependent. Figure out which it is, since - # not all implementations provide the %pointer and %array declarations. - ac_cv_prog_lex_yytext_pointer=no --echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c - ac_save_LIBS=$LIBS --LIBS="$LIBS $LEXLIB" -+LIBS="$LEXLIB $ac_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -+#define YYTEXT_POINTER 1 - `cat $LEX_OUTPUT_ROOT.c` - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - ac_cv_prog_lex_yytext_pointer=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - ++ return TRUE; ++} + - fi --rm -f conftest.err conftest.$ac_objext \ ++ ++/* Access to internal relocations, section contents and symbols. ++ (stolen from the xtensa port) */ + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - LIBS=$ac_save_LIBS --rm -f "${LEX_OUTPUT_ROOT}.c" - - fi --echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5 --echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5 -+echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6; } - if test $ac_cv_prog_lex_yytext_pointer = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -5293,6 +5718,7 @@ cat >>confdefs.h <<\_ACEOF - _ACEOF - - fi -+rm -f conftest.l $LEX_OUTPUT_ROOT.c - - fi - if test "$LEX" = :; then -@@ -5303,8 +5729,8 @@ ALL_LINGUAS="fr tr ja es sv da zh_CN ru - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. - set dummy ${ac_tool_prefix}ranlib; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -5317,32 +5743,34 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - RANLIB=$ac_cv_prog_RANLIB - if test -n "$RANLIB"; then -- echo "$as_me:$LINENO: result: $RANLIB" >&5 --echo "${ECHO_T}$RANLIB" >&6 -+ { echo "$as_me:$LINENO: result: $RANLIB" >&5 -+echo "${ECHO_T}$RANLIB" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++static Elf_Internal_Rela * ++retrieve_internal_relocs (bfd *abfd, asection *sec, bfd_boolean keep_memory); ++static void ++pin_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs); ++static void ++release_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs); ++static bfd_byte * ++retrieve_contents (bfd *abfd, asection *sec, bfd_boolean keep_memory); ++/* ++static void ++pin_contents (asection *sec, bfd_byte *contents); ++*/ ++static void ++release_contents (asection *sec, bfd_byte *contents); ++static Elf_Internal_Sym * ++retrieve_local_syms (bfd *input_bfd, bfd_boolean keep_memory); ++/* ++static void ++pin_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf); ++*/ ++static void ++release_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf); + - fi - if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. - set dummy ranlib; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -5355,27 +5783,41 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - -- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" - fi - fi - ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB - if test -n "$ac_ct_RANLIB"; then -- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 --echo "${ECHO_T}$ac_ct_RANLIB" >&6 -+ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -+echo "${ECHO_T}$ac_ct_RANLIB" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - -- RANLIB=$ac_ct_RANLIB -+ if test "x$ac_ct_RANLIB" = x; then -+ RANLIB=":" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&5 -+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&2;} -+ac_tool_warned=yes ;; -+esac -+ RANLIB=$ac_ct_RANLIB -+ fi - else - RANLIB="$ac_cv_prog_RANLIB" - fi -@@ -5385,8 +5827,8 @@ ac_cpp='$CPP $CPPFLAGS' - ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' - ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' - ac_compiler_gnu=$ac_cv_c_compiler_gnu --echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 --echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } - # On Suns, sometimes $CPP names a directory. - if test -n "$CPP" && test -d "$CPP"; then - CPP= -@@ -5420,24 +5862,22 @@ cat >>conftest.$ac_ext <<_ACEOF - #endif - Syntax error - _ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - : - else - echo "$as_me: failed program was:" >&5 -@@ -5446,9 +5886,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 - # Broken: fails on valid input. - continue - fi ++/* During relaxation, we need to modify relocations, section contents, ++ and symbol definitions, and we need to keep the original values from ++ being reloaded from the input files, i.e., we need to "pin" the ++ modified values in memory. We also want to continue to observe the ++ setting of the "keep-memory" flag. The following functions wrap the ++ standard BFD functions to take care of this for us. */ + - rm -f conftest.err conftest.$ac_ext - -- # OK, works on sane cases. Now check whether non-existent headers -+ # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ -@@ -5458,24 +5899,22 @@ cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - _ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - # Broken: success on invalid input. - continue - else -@@ -5486,6 +5925,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 - ac_preproc_ok=: - break - fi ++static Elf_Internal_Rela * ++retrieve_internal_relocs (bfd *abfd, asection *sec, bfd_boolean keep_memory) ++{ ++ /* _bfd_elf_link_read_relocs knows about caching, so no need for us ++ to be clever here. */ ++ return _bfd_elf_link_read_relocs(abfd, sec, NULL, NULL, keep_memory); ++} + - rm -f conftest.err conftest.$ac_ext - - done -@@ -5503,8 +5943,8 @@ fi - else - ac_cv_prog_CPP=$CPP - fi --echo "$as_me:$LINENO: result: $CPP" >&5 --echo "${ECHO_T}$CPP" >&6 -+{ echo "$as_me:$LINENO: result: $CPP" >&5 -+echo "${ECHO_T}$CPP" >&6; } - ac_preproc_ok=false - for ac_c_preproc_warn_flag in '' yes - do -@@ -5527,24 +5967,22 @@ cat >>conftest.$ac_ext <<_ACEOF - #endif - Syntax error - _ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - : - else - echo "$as_me: failed program was:" >&5 -@@ -5553,9 +5991,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 - # Broken: fails on valid input. - continue - fi ++static void ++pin_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs) ++{ ++ elf_section_data (sec)->relocs = internal_relocs; ++} + - rm -f conftest.err conftest.$ac_ext - -- # OK, works on sane cases. Now check whether non-existent headers -+ # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ -@@ -5565,24 +6004,22 @@ cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - _ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - # Broken: success on invalid input. - continue - else -@@ -5593,6 +6030,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 - ac_preproc_ok=: - break - fi ++static void ++release_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs) ++{ ++ if (internal_relocs ++ && elf_section_data (sec)->relocs != internal_relocs) ++ free (internal_relocs); ++} + - rm -f conftest.err conftest.$ac_ext - - done -@@ -5615,23 +6053,170 @@ ac_link='$CC -o conftest$ac_exeext $CFLA - ac_compiler_gnu=$ac_cv_c_compiler_gnu - - --echo "$as_me:$LINENO: checking for egrep" >&5 --echo $ECHO_N "checking for egrep... $ECHO_C" >&6 --if test "${ac_cv_prog_egrep+set}" = set; then -+{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 -+echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } -+if test "${ac_cv_path_GREP+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ # Extract the first word of "grep ggrep" to use in msg output -+if test -z "$GREP"; then -+set dummy grep ggrep; ac_prog_name=$2 -+if test "${ac_cv_path_GREP+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ ac_path_GREP_found=false -+# Loop through the user's path and test for each of PROGNAME-LIST -+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_prog in grep ggrep; do -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" -+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -+ # Check for GNU ac_path_GREP and select it if it is found. -+ # Check for GNU $ac_path_GREP -+case `"$ac_path_GREP" --version 2>&1` in -+*GNU*) -+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -+*) -+ ac_count=0 -+ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" -+ while : -+ do -+ cat "conftest.in" "conftest.in" >"conftest.tmp" -+ mv "conftest.tmp" "conftest.in" -+ cp "conftest.in" "conftest.nl" -+ echo 'GREP' >> "conftest.nl" -+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break -+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break -+ ac_count=`expr $ac_count + 1` -+ if test $ac_count -gt ${ac_path_GREP_max-0}; then -+ # Best one so far, save it but keep looking for a better one -+ ac_cv_path_GREP="$ac_path_GREP" -+ ac_path_GREP_max=$ac_count -+ fi -+ # 10*(2^10) chars as input seems more than enough -+ test $ac_count -gt 10 && break -+ done -+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -+esac ++static bfd_byte * ++retrieve_contents (bfd *abfd, asection *sec, bfd_boolean keep_memory) ++{ ++ bfd_byte *contents; ++ bfd_size_type sec_size; + ++ sec_size = bfd_get_section_limit (abfd, sec); ++ contents = elf_section_data (sec)->this_hdr.contents; + -+ $ac_path_GREP_found && break 3 -+ done -+done ++ if (contents == NULL && sec_size != 0) ++ { ++ if (!bfd_malloc_and_get_section (abfd, sec, &contents)) ++ { ++ if (contents) ++ free (contents); ++ return NULL; ++ } ++ if (keep_memory) ++ elf_section_data (sec)->this_hdr.contents = contents; ++ } ++ return contents; ++} + -+done -+IFS=$as_save_IFS ++/* ++static void ++pin_contents (asection *sec, bfd_byte *contents) ++{ ++ elf_section_data (sec)->this_hdr.contents = contents; ++} ++*/ ++static void ++release_contents (asection *sec, bfd_byte *contents) ++{ ++ if (contents && elf_section_data (sec)->this_hdr.contents != contents) ++ free (contents); ++} + ++static Elf_Internal_Sym * ++retrieve_local_syms (bfd *input_bfd, bfd_boolean keep_memory) ++{ ++ Elf_Internal_Shdr *symtab_hdr; ++ Elf_Internal_Sym *isymbuf; ++ size_t locsymcount; + -+fi ++ symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; ++ locsymcount = symtab_hdr->sh_info; + -+GREP="$ac_cv_path_GREP" -+if test -z "$GREP"; then -+ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} -+ { (exit 1); exit 1; }; } -+fi ++ isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; ++ if (isymbuf == NULL && locsymcount != 0) ++ { ++ isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0, ++ NULL, NULL, NULL); ++ if (isymbuf && keep_memory) ++ symtab_hdr->contents = (unsigned char *) isymbuf; ++ } + -+else -+ ac_cv_path_GREP=$GREP -+fi ++ return isymbuf; ++} + ++/* ++static void ++pin_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf) ++{ ++ elf_tdata (input_bfd)->symtab_hdr.contents = (unsigned char *)isymbuf; ++} + -+fi -+{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 -+echo "${ECHO_T}$ac_cv_path_GREP" >&6; } -+ GREP="$ac_cv_path_GREP" ++*/ ++static void ++release_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf) ++{ ++ if (isymbuf && (elf_tdata (input_bfd)->symtab_hdr.contents ++ != (unsigned char *)isymbuf)) ++ free (isymbuf); ++} + ++ /* Data structures used during relaxation. */ + -+{ echo "$as_me:$LINENO: checking for egrep" >&5 -+echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } -+if test "${ac_cv_path_EGREP+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 -+ then ac_cv_path_EGREP="$GREP -E" -+ else -+ # Extract the first word of "egrep" to use in msg output -+if test -z "$EGREP"; then -+set dummy egrep; ac_prog_name=$2 -+if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- if echo a | (grep -E '(a|b)') >/dev/null 2>&1 -- then ac_cv_prog_egrep='grep -E' -- else ac_cv_prog_egrep='egrep' -+ ac_path_EGREP_found=false -+# Loop through the user's path and test for each of PROGNAME-LIST -+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_prog in egrep; do -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" -+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -+ # Check for GNU ac_path_EGREP and select it if it is found. -+ # Check for GNU $ac_path_EGREP -+case `"$ac_path_EGREP" --version 2>&1` in -+*GNU*) -+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -+*) -+ ac_count=0 -+ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" -+ while : -+ do -+ cat "conftest.in" "conftest.in" >"conftest.tmp" -+ mv "conftest.tmp" "conftest.in" -+ cp "conftest.in" "conftest.nl" -+ echo 'EGREP' >> "conftest.nl" -+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break -+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break -+ ac_count=`expr $ac_count + 1` -+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then -+ # Best one so far, save it but keep looking for a better one -+ ac_cv_path_EGREP="$ac_path_EGREP" -+ ac_path_EGREP_max=$ac_count - fi -+ # 10*(2^10) chars as input seems more than enough -+ test $ac_count -gt 10 && break -+ done -+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -+esac ++enum relax_state_id { ++ RS_ERROR = -1, ++ RS_NONE = 0, ++ RS_ALIGN, ++ RS_CPENT, ++ RS_PIC_CALL, ++ RS_PIC_MCALL, ++ RS_PIC_RCALL2, ++ RS_PIC_RCALL1, ++ RS_PIC_LDA, ++ RS_PIC_LDW4, ++ RS_PIC_LDW3, ++ RS_PIC_SUB5, ++ RS_NOPIC_MCALL, ++ RS_NOPIC_RCALL2, ++ RS_NOPIC_RCALL1, ++ RS_NOPIC_LDW4, ++ RS_NOPIC_LDDPC, ++ RS_NOPIC_SUB5, ++#ifdef DHRYSTONE_FIX ++ RS_NOPIC_MOV2, ++ RS_NOPIC_MOV1, ++#endif ++ RS_RCALL2, ++ RS_RCALL1, ++ RS_BRC2, ++ RS_BRC1, ++ RS_BRAL, ++ RS_RJMP, ++ RS_MAX, ++}; + ++enum reference_type { ++ REF_ABSOLUTE, ++ REF_PCREL, ++ REF_CPOOL, ++ REF_GOT, ++}; + -+ $ac_path_EGREP_found && break 3 -+ done -+done ++struct relax_state ++{ ++ const char *name; ++ enum relax_state_id id; ++ enum relax_state_id direct; ++ enum relax_state_id next; ++ enum relax_state_id prev; + -+done -+IFS=$as_save_IFS ++ enum reference_type reftype; + ++ unsigned int r_type; + -+fi ++ bfd_vma opcode; ++ bfd_vma opcode_mask; + -+EGREP="$ac_cv_path_EGREP" -+if test -z "$EGREP"; then -+ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} -+ { (exit 1); exit 1; }; } -+fi ++ bfd_signed_vma range_min; ++ bfd_signed_vma range_max; + -+else -+ ac_cv_path_EGREP=$EGREP -+fi ++ bfd_size_type size; ++}; + ++/* ++ * This is for relocs that ++ * a) has an addend or is of type R_AVR32_DIFF32, and ++ * b) references a different section than it's in, and ++ * c) references a section that is relaxable ++ * ++ * as well as relocs that references the constant pool, in which case ++ * the add_frag member points to the frag containing the constant pool ++ * entry. ++ * ++ * Such relocs must be fixed up whenever we delete any code. Sections ++ * that don't have any relocs with all of the above properties don't ++ * have any additional reloc data, but sections that do will have ++ * additional data for all its relocs. ++ */ ++struct avr32_reloc_data ++{ ++ struct fragment *add_frag; ++ struct fragment *sub_frag; ++}; + -+ fi - fi --echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 --echo "${ECHO_T}$ac_cv_prog_egrep" >&6 -- EGREP=$ac_cv_prog_egrep -+{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 -+echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } -+ EGREP="$ac_cv_path_EGREP" - - --echo "$as_me:$LINENO: checking for ANSI C header files" >&5 --echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } - if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -5655,35 +6240,31 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_header_stdc=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_header_stdc=no -+ ac_cv_header_stdc=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. -@@ -5739,6 +6320,7 @@ cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include -+#include - #if ((' ' & 0x0FF) == 0x020) - # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') - # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -@@ -5758,18 +6340,27 @@ main () - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) -- exit(2); -- exit (0); -+ return 2; -+ return 0; - } - _ACEOF - rm -f conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&5 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then -@@ -5782,12 +6373,14 @@ sed 's/^/| /' conftest.$ac_ext >&5 - ( exit $ac_status ) - ac_cv_header_stdc=no - fi --rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext - fi ++/* ++ * A 'fragment' is a relaxable entity, that is, code may be added or ++ * deleted at the end of a fragment. When this happens, all subsequent ++ * fragments in the list will have their offsets updated. ++ */ ++struct fragment ++{ ++ enum relax_state_id state; ++ enum relax_state_id initial_state; + ++ Elf_Internal_Rela *rela; ++ bfd_size_type size; ++ bfd_vma offset; ++ int size_adjust; ++ int offset_adjust; ++ bfd_boolean has_grown; + - fi - fi --echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 --echo "${ECHO_T}$ac_cv_header_stdc" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -+echo "${ECHO_T}$ac_cv_header_stdc" >&6; } - if test $ac_cv_header_stdc = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -5796,8 +6389,8 @@ _ACEOF - - fi - --echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 --echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 -+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } - if test "${ac_cv_c_const+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -5815,10 +6408,10 @@ main () - #ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; -- const charset x; -+ const charset cs; - /* SunOS 4.1.1 cc rejects this. */ -- char const *const *ccp; -- char **p; -+ char const *const *pcpcc; -+ char **ppc; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; -@@ -5827,16 +6420,17 @@ main () - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; -- ccp = &g + (g ? g-g : 0); -+ pcpcc = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ -- ++ccp; -- p = (char**) ccp; -- ccp = (char const *const *) p; -+ ++pcpcc; -+ ppc = (char**) pcpcc; -+ pcpcc = (char const *const *) ppc; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; -+ if (s) return 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; -@@ -5855,7 +6449,9 @@ main () - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; -+ if (!foo) return 0; - } -+ return !cs[0] && !zero.x; - #endif - - ; -@@ -5863,38 +6459,34 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_c_const=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_c_const=no -+ ac_cv_c_const=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ /* Only used by constant pool entries. When this drops to zero, the ++ frag is discarded (i.e. size_adjust is set to -4.) */ ++ int refcount; ++}; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 --echo "${ECHO_T}$ac_cv_c_const" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 -+echo "${ECHO_T}$ac_cv_c_const" >&6; } - if test $ac_cv_c_const = no; then - - cat >>confdefs.h <<\_ACEOF -@@ -5903,8 +6495,8 @@ _ACEOF - - fi - --echo "$as_me:$LINENO: checking for inline" >&5 --echo $ECHO_N "checking for inline... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for inline" >&5 -+echo $ECHO_N "checking for inline... $ECHO_C" >&6; } - if test "${ac_cv_c_inline+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -5924,39 +6516,37 @@ $ac_kw foo_t foo () {return 0; } - - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_c_inline=$ac_kw; break -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_c_inline=$ac_kw - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - ++struct avr32_relax_data ++{ ++ unsigned int frag_count; ++ struct fragment *frag; ++ struct avr32_reloc_data *reloc_data; + - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ /* TRUE if this section has one or more relaxable relocations */ ++ bfd_boolean is_relaxable; ++ unsigned int iteration; ++}; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ test "$ac_cv_c_inline" != no && break - done - - fi --echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 --echo "${ECHO_T}$ac_cv_c_inline" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 -+echo "${ECHO_T}$ac_cv_c_inline" >&6; } - - - case $ac_cv_c_inline in -@@ -5988,9 +6578,9 @@ for ac_header in sys/types.h sys/stat.h - inttypes.h stdint.h unistd.h - do - as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_header" >&5 --echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 --if eval "test \"\${$as_ac_Header+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF -@@ -6004,38 +6594,35 @@ $ac_includes_default - #include <$ac_header> - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --eval "$as_ac_Header=no" -+ eval "$as_ac_Header=no" - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++struct avr32_section_data ++{ ++ struct bfd_elf_section_data elf; ++ struct avr32_relax_data relax_data; ++}; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_Header'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF - #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -@@ -6046,8 +6633,8 @@ fi - done - - --echo "$as_me:$LINENO: checking for off_t" >&5 --echo $ECHO_N "checking for off_t... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for off_t" >&5 -+echo $ECHO_N "checking for off_t... $ECHO_C" >&6; } - if test "${ac_cv_type_off_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -6058,62 +6645,59 @@ cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - $ac_includes_default -+typedef off_t ac__type_new_; - int - main () - { --if ((off_t *) 0) -+if ((ac__type_new_ *) 0) - return 0; --if (sizeof (off_t)) -+if (sizeof (ac__type_new_)) - return 0; - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_type_off_t=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_type_off_t=no -+ ac_cv_type_off_t=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ /* Relax state definitions */ + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 --echo "${ECHO_T}$ac_cv_type_off_t" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 -+echo "${ECHO_T}$ac_cv_type_off_t" >&6; } - if test $ac_cv_type_off_t = yes; then - : - else - - cat >>confdefs.h <<_ACEOF --#define off_t long -+#define off_t long int - _ACEOF - - fi - --echo "$as_me:$LINENO: checking for size_t" >&5 --echo $ECHO_N "checking for size_t... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for size_t" >&5 -+echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } - if test "${ac_cv_type_size_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -6124,64 +6708,61 @@ cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - $ac_includes_default -+typedef size_t ac__type_new_; - int - main () - { --if ((size_t *) 0) -+if ((ac__type_new_ *) 0) - return 0; --if (sizeof (size_t)) -+if (sizeof (ac__type_new_)) - return 0; - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_type_size_t=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_type_size_t=no -+ ac_cv_type_size_t=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++#define PIC_MOV2_OPCODE 0xe0600000 ++#define PIC_MOV2_MASK 0xe1e00000 ++#define PIC_MOV2_RANGE_MIN (-1048576 * 4) ++#define PIC_MOV2_RANGE_MAX (1048575 * 4) ++#define PIC_MCALL_OPCODE 0xf0160000 ++#define PIC_MCALL_MASK 0xffff0000 ++#define PIC_MCALL_RANGE_MIN (-131072) ++#define PIC_MCALL_RANGE_MAX (131068) ++#define RCALL2_OPCODE 0xe0a00000 ++#define RCALL2_MASK 0xe1ef0000 ++#define RCALL2_RANGE_MIN (-2097152) ++#define RCALL2_RANGE_MAX (2097150) ++#define RCALL1_OPCODE 0xc00c0000 ++#define RCALL1_MASK 0xf00c0000 ++#define RCALL1_RANGE_MIN (-1024) ++#define RCALL1_RANGE_MAX (1022) ++#define PIC_LDW4_OPCODE 0xecf00000 ++#define PIC_LDW4_MASK 0xfff00000 ++#define PIC_LDW4_RANGE_MIN (-32768) ++#define PIC_LDW4_RANGE_MAX (32767) ++#define PIC_LDW3_OPCODE 0x6c000000 ++#define PIC_LDW3_MASK 0xfe000000 ++#define PIC_LDW3_RANGE_MIN (0) ++#define PIC_LDW3_RANGE_MAX (124) ++#define SUB5_PC_OPCODE 0xfec00000 ++#define SUB5_PC_MASK 0xfff00000 ++#define SUB5_PC_RANGE_MIN (-32768) ++#define SUB5_PC_RANGE_MAX (32767) ++#define NOPIC_MCALL_OPCODE 0xf01f0000 ++#define NOPIC_MCALL_MASK 0xffff0000 ++#define NOPIC_MCALL_RANGE_MIN PIC_MCALL_RANGE_MIN ++#define NOPIC_MCALL_RANGE_MAX PIC_MCALL_RANGE_MAX ++#define NOPIC_LDW4_OPCODE 0xfef00000 ++#define NOPIC_LDW4_MASK 0xfff00000 ++#define NOPIC_LDW4_RANGE_MIN PIC_LDW4_RANGE_MIN ++#define NOPIC_LDW4_RANGE_MAX PIC_LDW4_RANGE_MAX ++#define LDDPC_OPCODE 0x48000000 ++#define LDDPC_MASK 0xf8000000 ++#define LDDPC_RANGE_MIN 0 ++#define LDDPC_RANGE_MAX 508 + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 --echo "${ECHO_T}$ac_cv_type_size_t" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 -+echo "${ECHO_T}$ac_cv_type_size_t" >&6; } - if test $ac_cv_type_size_t = yes; then - : - else - - cat >>confdefs.h <<_ACEOF --#define size_t unsigned -+#define size_t unsigned int - _ACEOF - - fi - - # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works - # for constant arguments. Useless! --echo "$as_me:$LINENO: checking for working alloca.h" >&5 --echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for working alloca.h" >&5 -+echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } - if test "${ac_cv_working_alloca_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -6196,44 +6777,42 @@ int - main () - { - char *p = (char *) alloca (2 * sizeof (int)); -+ if (p) return 0; - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - ac_cv_working_alloca_h=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_working_alloca_h=no -+ ac_cv_working_alloca_h=no - fi --rm -f conftest.err conftest.$ac_objext \ ++#ifdef DHRYSTONE_FIX ++#define NOPIC_MOV2_OPCODE 0xe0600000 ++#define NOPIC_MOV2_MASK 0xe1e00000 ++#define NOPIC_MOV2_RANGE_MIN (-1048576) ++#define NOPIC_MOV2_RANGE_MAX (1048575) ++#define NOPIC_MOV1_OPCODE 0x30000000 ++#define NOPIC_MOV1_MASK 0xf0000000 ++#define NOPIC_MOV1_RANGE_MIN (-128) ++#define NOPIC_MOV1_RANGE_MAX (127) ++#endif + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 --echo "${ECHO_T}$ac_cv_working_alloca_h" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 -+echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } - if test $ac_cv_working_alloca_h = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -6242,8 +6821,8 @@ _ACEOF - - fi - --echo "$as_me:$LINENO: checking for alloca" >&5 --echo $ECHO_N "checking for alloca... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for alloca" >&5 -+echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } - if test "${ac_cv_func_alloca_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -6260,7 +6839,7 @@ cat >>conftest.$ac_ext <<_ACEOF - # include - # define alloca _alloca - # else --# if HAVE_ALLOCA_H -+# ifdef HAVE_ALLOCA_H - # include - # else - # ifdef _AIX -@@ -6278,44 +6857,42 @@ int - main () - { - char *p = (char *) alloca (1); -+ if (p) return 0; - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - ac_cv_func_alloca_works=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_func_alloca_works=no -+ ac_cv_func_alloca_works=no - fi --rm -f conftest.err conftest.$ac_objext \ ++/* Only brc2 variants with cond[3] == 0 is considered, since the ++ others are not relaxable. bral is a special case and is handled ++ separately. */ ++#define BRC2_OPCODE 0xe0800000 ++#define BRC2_MASK 0xe1e80000 ++#define BRC2_RANGE_MIN (-2097152) ++#define BRC2_RANGE_MAX (2097150) ++#define BRC1_OPCODE 0xc0000000 ++#define BRC1_MASK 0xf0080000 ++#define BRC1_RANGE_MIN (-256) ++#define BRC1_RANGE_MAX (254) ++#define BRAL_OPCODE 0xe08f0000 ++#define BRAL_MASK 0xe1ef0000 ++#define BRAL_RANGE_MIN BRC2_RANGE_MIN ++#define BRAL_RANGE_MAX BRC2_RANGE_MAX ++#define RJMP_OPCODE 0xc0080000 ++#define RJMP_MASK 0xf00c0000 ++#define RJMP_RANGE_MIN (-1024) ++#define RJMP_RANGE_MAX (1022) + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 --echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 -+echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } - - if test $ac_cv_func_alloca_works = yes; then - -@@ -6329,15 +6906,15 @@ else - # contain a buggy version. If you still want to use their alloca, - # use ar to extract alloca.o from them instead of compiling alloca.c. - --ALLOCA=alloca.$ac_objext -+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext - - cat >>confdefs.h <<\_ACEOF - #define C_ALLOCA 1 - _ACEOF - - --echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 --echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 -+echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } - if test "${ac_cv_os_cray+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -6347,7 +6924,7 @@ _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#if defined(CRAY) && ! defined(CRAY2) -+#if defined CRAY && ! defined CRAY2 - webecray - #else - wenotbecray -@@ -6363,14 +6940,14 @@ fi - rm -f conftest* - - fi --echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 --echo "${ECHO_T}$ac_cv_os_cray" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 -+echo "${ECHO_T}$ac_cv_os_cray" >&6; } - if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_func" >&5 --echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 --if eval "test \"\${$as_ac_var+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF -@@ -6396,68 +6973,60 @@ cat >>conftest.$ac_ext <<_ACEOF - - #undef $ac_func - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" --{ - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char $ac_func (); - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ --#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -+#if defined __stub_$ac_func || defined __stub___$ac_func - choke me --#else --char (*f) () = $ac_func; --#endif --#ifdef __cplusplus --} - #endif - - int - main () - { --return f != $ac_func; -+return $ac_func (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --eval "$as_ac_var=no" -+ eval "$as_ac_var=no" - fi --rm -f conftest.err conftest.$ac_objext \ ++/* Define a relax state using the GOT */ ++#define RG(id, dir, next, prev, r_type, opc, size) \ ++ { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_GOT, \ ++ R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ ++ opc##_RANGE_MIN, opc##_RANGE_MAX, size } ++/* Define a relax state using the Constant Pool */ ++#define RC(id, dir, next, prev, r_type, opc, size) \ ++ { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_CPOOL, \ ++ R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ ++ opc##_RANGE_MIN, opc##_RANGE_MAX, size } + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_var'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_var'}'` = yes; then - - cat >>confdefs.h <<_ACEOF -@@ -6470,8 +7039,8 @@ fi - done - fi - --echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 --echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 -+echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } - if test "${ac_cv_c_stack_direction+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -6484,6 +7053,7 @@ _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ -+$ac_includes_default - int - find_stack_direction () - { -@@ -6501,17 +7071,26 @@ find_stack_direction () - int - main () - { -- exit (find_stack_direction () < 0); -+ return find_stack_direction () < 0; - } - _ACEOF - rm -f conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&5 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then -@@ -6524,11 +7103,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 - ( exit $ac_status ) - ac_cv_c_stack_direction=-1 - fi --rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext - fi ++/* Define a relax state using pc-relative direct reference */ ++#define RP(id, dir, next, prev, r_type, opc, size) \ ++ { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_PCREL, \ ++ R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ ++ opc##_RANGE_MIN, opc##_RANGE_MAX, size } + ++#ifdef DHRYSTONE_FIX ++/* Define a relax state using non-pc-relative direct reference */ ++#define RD(id, dir, next, prev, r_type, opc, size) \ ++ { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_ABSOLUTE, \ ++ R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ ++ opc##_RANGE_MIN, opc##_RANGE_MAX, size } + - fi --echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 --echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 -+echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } - - cat >>confdefs.h <<_ACEOF - #define STACK_DIRECTION $ac_cv_c_stack_direction -@@ -6542,18 +7123,19 @@ fi - for ac_header in stdlib.h unistd.h - do - as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` --if eval "test \"\${$as_ac_Header+set}\" = set"; then -- echo "$as_me:$LINENO: checking for $ac_header" >&5 --echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 --if eval "test \"\${$as_ac_Header+set}\" = set"; then -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then -+ { echo "$as_me:$LINENO: checking for $ac_header" >&5 -+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_Header'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - else - # Is the header compilable? --echo "$as_me:$LINENO: checking $ac_header usability" >&5 --echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -6564,41 +7146,37 @@ $ac_includes_default - #include <$ac_header> - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_header_compiler=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_header_compiler=no -+ ac_header_compiler=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 --echo "${ECHO_T}$ac_header_compiler" >&6 -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -+echo "${ECHO_T}$ac_header_compiler" >&6; } - - # Is the header present? --echo "$as_me:$LINENO: checking $ac_header presence" >&5 --echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -6607,24 +7185,22 @@ cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include <$ac_header> - _ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - ac_header_preproc=yes - else - echo "$as_me: failed program was:" >&5 -@@ -6632,9 +7208,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no - fi ++#endif + - rm -f conftest.err conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 --echo "${ECHO_T}$ac_header_preproc" >&6 -+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -+echo "${ECHO_T}$ac_header_preproc" >&6; } - - # So? What about this header? - case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in -@@ -6658,25 +7235,19 @@ echo "$as_me: WARNING: $ac_header: s - echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 - echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} -- ( -- cat <<\_ASBOX --## ------------------------------------------ ## --## Report this to the AC_PACKAGE_NAME lists. ## --## ------------------------------------------ ## --_ASBOX -- ) | -- sed "s/^/$as_me: WARNING: /" >&2 ++/* Define a relax state that will be handled specially */ ++#define RS(id, r_type, size) \ ++ { "RS_"#id, RS_##id, RS_NONE, RS_NONE, RS_NONE, REF_ABSOLUTE, \ ++ R_AVR32_##r_type, 0, 0, 0, 0, size } + - ;; - esac --echo "$as_me:$LINENO: checking for $ac_header" >&5 --echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 --if eval "test \"\${$as_ac_Header+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - eval "$as_ac_Header=\$ac_header_preproc" - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_Header'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - - fi - if test `eval echo '${'$as_ac_Header'}'` = yes; then -@@ -6692,9 +7263,9 @@ done - for ac_func in getpagesize - do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_func" >&5 --echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 --if eval "test \"\${$as_ac_var+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF -@@ -6720,68 +7291,60 @@ cat >>conftest.$ac_ext <<_ACEOF - - #undef $ac_func - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" --{ - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char $ac_func (); - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ --#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -+#if defined __stub_$ac_func || defined __stub___$ac_func - choke me --#else --char (*f) () = $ac_func; --#endif --#ifdef __cplusplus --} - #endif - - int - main () - { --return f != $ac_func; -+return $ac_func (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --eval "$as_ac_var=no" -+ eval "$as_ac_var=no" - fi --rm -f conftest.err conftest.$ac_objext \ ++const struct relax_state relax_state[RS_MAX] = { ++ RS(NONE, NONE, 0), ++ RS(ALIGN, ALIGN, 0), ++ RS(CPENT, 32_CPENT, 4), + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_var'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF - #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -@@ -6790,8 +7353,8 @@ _ACEOF - fi - done - --echo "$as_me:$LINENO: checking for working mmap" >&5 --echo $ECHO_N "checking for working mmap... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for working mmap" >&5 -+echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; } - if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -6833,21 +7396,21 @@ $ac_includes_default - #include - #include - --#if !STDC_HEADERS && !HAVE_STDLIB_H -+#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H - char *malloc (); - #endif - - /* This mess was copied from the GNU getpagesize.h. */ --#if !HAVE_GETPAGESIZE -+#ifndef HAVE_GETPAGESIZE - /* Assume that all systems that can run configure have sys/param.h. */ --# if !HAVE_SYS_PARAM_H -+# ifndef HAVE_SYS_PARAM_H - # define HAVE_SYS_PARAM_H 1 - # endif - - # ifdef _SC_PAGESIZE - # define getpagesize() sysconf(_SC_PAGESIZE) - # else /* no _SC_PAGESIZE */ --# if HAVE_SYS_PARAM_H -+# ifdef HAVE_SYS_PARAM_H - # include - # ifdef EXEC_PAGESIZE - # define getpagesize() EXEC_PAGESIZE -@@ -6886,15 +7449,15 @@ main () - /* First, make a file with some known garbage in it. */ - data = (char *) malloc (pagesize); - if (!data) -- exit (1); -+ return 1; - for (i = 0; i < pagesize; ++i) - *(data + i) = rand (); - umask (0); - fd = creat ("conftest.mmap", 0600); - if (fd < 0) -- exit (1); -+ return 1; - if (write (fd, data, pagesize) != pagesize) -- exit (1); -+ return 1; - close (fd); - - /* Next, try to mmap the file at a fixed address which already has -@@ -6902,17 +7465,17 @@ main () - we see the same garbage. */ - fd = open ("conftest.mmap", O_RDWR); - if (fd < 0) -- exit (1); -+ return 1; - data2 = (char *) malloc (2 * pagesize); - if (!data2) -- exit (1); -- data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1); -+ return 1; -+ data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1); - if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_FIXED, fd, 0L)) -- exit (1); -+ return 1; - for (i = 0; i < pagesize; ++i) - if (*(data + i) != *(data2 + i)) -- exit (1); -+ return 1; - - /* Finally, make sure that changes to the mapped area do not - percolate back to the file as seen by read(). (This is a bug on -@@ -6921,24 +7484,33 @@ main () - *(data2 + i) = *(data2 + i) + 1; - data3 = (char *) malloc (pagesize); - if (!data3) -- exit (1); -+ return 1; - if (read (fd, data3, pagesize) != pagesize) -- exit (1); -+ return 1; - for (i = 0; i < pagesize; ++i) - if (*(data + i) != *(data3 + i)) -- exit (1); -+ return 1; - close (fd); -- exit (0); -+ return 0; - } - _ACEOF - rm -f conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&5 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then -@@ -6951,11 +7523,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 - ( exit $ac_status ) - ac_cv_func_mmap_fixed_mapped=no - fi --rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext - fi ++ RG(PIC_CALL, PIC_RCALL1, PIC_MCALL, NONE, GOTCALL, PIC_MOV2, 10), ++ RG(PIC_MCALL, PIC_RCALL1, NONE, PIC_CALL, GOT18SW, PIC_MCALL, 4), ++ RP(PIC_RCALL2, NONE, PIC_RCALL1, PIC_MCALL, 22H_PCREL, RCALL2, 4), ++ RP(PIC_RCALL1, NONE, NONE, PIC_RCALL2, 11H_PCREL, RCALL1, 2), + ++ RG(PIC_LDA, PIC_SUB5, PIC_LDW4, NONE, LDA_GOT, PIC_MOV2, 8), ++ RG(PIC_LDW4, PIC_SUB5, PIC_LDW3, PIC_LDA, GOT16S, PIC_LDW4, 4), ++ RG(PIC_LDW3, PIC_SUB5, NONE, PIC_LDW4, GOT7UW, PIC_LDW3, 2), ++ RP(PIC_SUB5, NONE, NONE, PIC_LDW3, 16N_PCREL, SUB5_PC, 4), + - fi --echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 --echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 -+echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; } - if test $ac_cv_func_mmap_fixed_mapped = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -6979,18 +7553,19 @@ for ac_header in argz.h limits.h locale. - unistd.h values.h sys/param.h - do - as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` --if eval "test \"\${$as_ac_Header+set}\" = set"; then -- echo "$as_me:$LINENO: checking for $ac_header" >&5 --echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 --if eval "test \"\${$as_ac_Header+set}\" = set"; then -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then -+ { echo "$as_me:$LINENO: checking for $ac_header" >&5 -+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_Header'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - else - # Is the header compilable? --echo "$as_me:$LINENO: checking $ac_header usability" >&5 --echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -7001,41 +7576,37 @@ $ac_includes_default - #include <$ac_header> - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_header_compiler=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_header_compiler=no -+ ac_header_compiler=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 --echo "${ECHO_T}$ac_header_compiler" >&6 ++ RC(NOPIC_MCALL, NOPIC_RCALL1, NONE, NONE, CPCALL, NOPIC_MCALL, 4), ++ RP(NOPIC_RCALL2, NONE, NOPIC_RCALL1, NOPIC_MCALL, 22H_PCREL, RCALL2, 4), ++ RP(NOPIC_RCALL1, NONE, NONE, NOPIC_RCALL2, 11H_PCREL, RCALL1, 2), + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -+echo "${ECHO_T}$ac_header_compiler" >&6; } - - # Is the header present? --echo "$as_me:$LINENO: checking $ac_header presence" >&5 --echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -7044,24 +7615,22 @@ cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include <$ac_header> - _ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - ac_header_preproc=yes - else - echo "$as_me: failed program was:" >&5 -@@ -7069,9 +7638,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no - fi ++#ifdef DHRYSTONE_FIX ++ RC(NOPIC_LDW4, NOPIC_MOV1, NOPIC_LDDPC, NONE, 16_CP, NOPIC_LDW4, 4), ++ RC(NOPIC_LDDPC, NOPIC_MOV1, NONE, NOPIC_LDW4, 9W_CP, LDDPC, 2), ++ RP(NOPIC_SUB5, NOPIC_MOV1, NONE, NOPIC_LDDPC, 16N_PCREL, SUB5_PC, 4), ++ RD(NOPIC_MOV2, NONE, NOPIC_MOV1, NOPIC_SUB5, 21S, NOPIC_MOV2, 4), ++ RD(NOPIC_MOV1, NONE, NONE, NOPIC_MOV2, 8S, NOPIC_MOV1, 2), ++#else ++ RC(NOPIC_LDW4, NOPIC_SUB5, NOPIC_LDDPC, NONE, 16_CP, NOPIC_LDW4, 4), ++ RC(NOPIC_LDDPC, NOPIC_SUB5, NONE, NOPIC_LDW4, 9W_CP, LDDPC, 2), ++ RP(NOPIC_SUB5, NONE, NONE, NOPIC_LDDPC, 16N_PCREL, SUB5_PC, 4), ++#endif + - rm -f conftest.err conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 --echo "${ECHO_T}$ac_header_preproc" >&6 -+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -+echo "${ECHO_T}$ac_header_preproc" >&6; } - - # So? What about this header? - case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in -@@ -7095,25 +7665,19 @@ echo "$as_me: WARNING: $ac_header: s - echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 - echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} -- ( -- cat <<\_ASBOX --## ------------------------------------------ ## --## Report this to the AC_PACKAGE_NAME lists. ## --## ------------------------------------------ ## --_ASBOX -- ) | -- sed "s/^/$as_me: WARNING: /" >&2 ++ RP(RCALL2, NONE, RCALL1, NONE, 22H_PCREL, RCALL2, 4), ++ RP(RCALL1, NONE, NONE, RCALL2, 11H_PCREL, RCALL1, 2), ++ RP(BRC2, NONE, BRC1, NONE, 22H_PCREL, BRC2, 4), ++ RP(BRC1, NONE, NONE, BRC2, 9H_PCREL, BRC1, 2), ++ RP(BRAL, NONE, RJMP, NONE, 22H_PCREL, BRAL, 4), ++ RP(RJMP, NONE, NONE, BRAL, 11H_PCREL, RJMP, 2), ++}; + - ;; - esac --echo "$as_me:$LINENO: checking for $ac_header" >&5 --echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 --if eval "test \"\${$as_ac_Header+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - eval "$as_ac_Header=\$ac_header_preproc" - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_Header'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - - fi - if test `eval echo '${'$as_ac_Header'}'` = yes; then -@@ -7139,9 +7703,9 @@ for ac_func in getcwd munmap putenv sete - __argz_count __argz_stringify __argz_next - do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_func" >&5 --echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 --if eval "test \"\${$as_ac_var+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF -@@ -7167,68 +7731,60 @@ cat >>conftest.$ac_ext <<_ACEOF - - #undef $ac_func - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" --{ - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char $ac_func (); - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ --#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -+#if defined __stub_$ac_func || defined __stub___$ac_func - choke me --#else --char (*f) () = $ac_func; --#endif --#ifdef __cplusplus --} - #endif - - int - main () - { --return f != $ac_func; -+return $ac_func (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --eval "$as_ac_var=no" -+ eval "$as_ac_var=no" - fi --rm -f conftest.err conftest.$ac_objext \ ++static bfd_boolean ++avr32_elf_new_section_hook(bfd *abfd, asection *sec) ++{ ++ struct avr32_section_data *sdata; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_var'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF - #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -@@ -7243,9 +7799,9 @@ done - for ac_func in stpcpy - do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_func" >&5 --echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 --if eval "test \"\${$as_ac_var+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF -@@ -7271,68 +7827,60 @@ cat >>conftest.$ac_ext <<_ACEOF - - #undef $ac_func - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" --{ - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char $ac_func (); - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ --#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -+#if defined __stub_$ac_func || defined __stub___$ac_func - choke me --#else --char (*f) () = $ac_func; --#endif --#ifdef __cplusplus --} - #endif - - int - main () - { --return f != $ac_func; -+return $ac_func (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --eval "$as_ac_var=no" -+ eval "$as_ac_var=no" - fi --rm -f conftest.err conftest.$ac_objext \ ++ sdata = bfd_zalloc(abfd, sizeof(struct avr32_section_data)); ++ if (!sdata) ++ return FALSE; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_var'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF - #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -@@ -7351,8 +7899,8 @@ _ACEOF - fi - - if test $ac_cv_header_locale_h = yes; then -- echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 --echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 -+echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6; } - if test "${am_cv_val_LC_MESSAGES+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -7372,39 +7920,36 @@ return LC_MESSAGES - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - am_cv_val_LC_MESSAGES=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --am_cv_val_LC_MESSAGES=no -+ am_cv_val_LC_MESSAGES=no - fi --rm -f conftest.err conftest.$ac_objext \ ++ sec->used_by_bfd = sdata; ++ return _bfd_elf_new_section_hook(abfd, sec); ++} + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 --echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6 -+{ echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 -+echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6; } - if test $am_cv_val_LC_MESSAGES = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -7413,34 +7958,34 @@ _ACEOF - - fi - fi -- echo "$as_me:$LINENO: checking whether NLS is requested" >&5 --echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 -- # Check whether --enable-nls or --disable-nls was given. -+ { echo "$as_me:$LINENO: checking whether NLS is requested" >&5 -+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; } -+ # Check whether --enable-nls was given. - if test "${enable_nls+set}" = set; then -- enableval="$enable_nls" -- USE_NLS=$enableval -+ enableval=$enable_nls; USE_NLS=$enableval - else - USE_NLS=yes --fi; -- echo "$as_me:$LINENO: result: $USE_NLS" >&5 --echo "${ECHO_T}$USE_NLS" >&6 -+fi ++static struct avr32_relax_data * ++avr32_relax_data(asection *sec) ++{ ++ struct avr32_section_data *sdata; + -+ { echo "$as_me:$LINENO: result: $USE_NLS" >&5 -+echo "${ECHO_T}$USE_NLS" >&6; } - - - USE_INCLUDED_LIBINTL=no - - if test "$USE_NLS" = "yes"; then -- echo "$as_me:$LINENO: checking whether included gettext is requested" >&5 --echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking whether included gettext is requested" >&5 -+echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6; } - --# Check whether --with-included-gettext or --without-included-gettext was given. -+# Check whether --with-included-gettext was given. - if test "${with_included_gettext+set}" = set; then -- withval="$with_included_gettext" -- nls_cv_force_use_gnu_gettext=$withval -+ withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval - else - nls_cv_force_use_gnu_gettext=no --fi; -- echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5 --echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6 -+fi ++ BFD_ASSERT(sec->used_by_bfd); + -+ { echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5 -+echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6; } - - nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" - if test "$nls_cv_force_use_gnu_gettext" != "yes"; then -@@ -7449,17 +7994,17 @@ echo "${ECHO_T}$nls_cv_force_use_gnu_get - CATOBJEXT= - - if test "${ac_cv_header_libintl_h+set}" = set; then -- echo "$as_me:$LINENO: checking for libintl.h" >&5 --echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for libintl.h" >&5 -+echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6; } - if test "${ac_cv_header_libintl_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - fi --echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 --echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 -+echo "${ECHO_T}$ac_cv_header_libintl_h" >&6; } - else - # Is the header compilable? --echo "$as_me:$LINENO: checking libintl.h usability" >&5 --echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking libintl.h usability" >&5 -+echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -7470,41 +8015,37 @@ $ac_includes_default - #include - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_header_compiler=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_header_compiler=no -+ ac_header_compiler=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 --echo "${ECHO_T}$ac_header_compiler" >&6 ++ sdata = (struct avr32_section_data *)elf_section_data(sec); ++ return &sdata->relax_data; ++} + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -+echo "${ECHO_T}$ac_header_compiler" >&6; } - - # Is the header present? --echo "$as_me:$LINENO: checking libintl.h presence" >&5 --echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking libintl.h presence" >&5 -+echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -7513,24 +8054,22 @@ cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - _ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - ac_header_preproc=yes - else - echo "$as_me: failed program was:" >&5 -@@ -7538,9 +8077,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no - fi ++ /* Link-time relaxation */ + - rm -f conftest.err conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 --echo "${ECHO_T}$ac_header_preproc" >&6 -+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -+echo "${ECHO_T}$ac_header_preproc" >&6; } - - # So? What about this header? - case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in -@@ -7564,30 +8104,23 @@ echo "$as_me: WARNING: libintl.h: se - echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: libintl.h: in the future, the compiler will take precedence" >&5 - echo "$as_me: WARNING: libintl.h: in the future, the compiler will take precedence" >&2;} -- ( -- cat <<\_ASBOX --## ------------------------------------------ ## --## Report this to the AC_PACKAGE_NAME lists. ## --## ------------------------------------------ ## --_ASBOX -- ) | -- sed "s/^/$as_me: WARNING: /" >&2 ++static bfd_boolean ++avr32_elf_relax_section(bfd *abfd, asection *sec, ++ struct bfd_link_info *info, bfd_boolean *again); + - ;; - esac --echo "$as_me:$LINENO: checking for libintl.h" >&5 --echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for libintl.h" >&5 -+echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6; } - if test "${ac_cv_header_libintl_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - ac_cv_header_libintl_h=$ac_header_preproc - fi --echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 --echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 -+echo "${ECHO_T}$ac_cv_header_libintl_h" >&6; } - - fi - if test $ac_cv_header_libintl_h = yes; then -- echo "$as_me:$LINENO: checking for gettext in libc" >&5 --echo $ECHO_N "checking for gettext in libc... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for gettext in libc" >&5 -+echo $ECHO_N "checking for gettext in libc... $ECHO_C" >&6; } - if test "${gt_cv_func_gettext_libc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -7607,43 +8140,40 @@ return (int) gettext ("") - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - gt_cv_func_gettext_libc=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --gt_cv_func_gettext_libc=no -+ gt_cv_func_gettext_libc=no - fi --rm -f conftest.err conftest.$ac_objext \ ++enum relax_pass_id { ++ RELAX_PASS_SIZE_FRAGS, ++ RELAX_PASS_MOVE_DATA, ++}; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5 --echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6 -+{ echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5 -+echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6; } - - if test "$gt_cv_func_gettext_libc" != "yes"; then -- echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5 --echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5 -+echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6; } - if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -7656,59 +8186,56 @@ cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char bindtextdomain (); - int - main () - { --bindtextdomain (); -+return bindtextdomain (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - ac_cv_lib_intl_bindtextdomain=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_lib_intl_bindtextdomain=no -+ ac_cv_lib_intl_bindtextdomain=no - fi --rm -f conftest.err conftest.$ac_objext \ ++/* Stolen from the xtensa port */ ++static int ++internal_reloc_compare (const void *ap, const void *bp) ++{ ++ const Elf_Internal_Rela *a = (const Elf_Internal_Rela *) ap; ++ const Elf_Internal_Rela *b = (const Elf_Internal_Rela *) bp; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - LIBS=$ac_check_lib_save_LIBS - fi --echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5 --echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5 -+echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6; } - if test $ac_cv_lib_intl_bindtextdomain = yes; then -- echo "$as_me:$LINENO: checking for gettext in libintl" >&5 --echo $ECHO_N "checking for gettext in libintl... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for gettext in libintl" >&5 -+echo $ECHO_N "checking for gettext in libintl... $ECHO_C" >&6; } - if test "${gt_cv_func_gettext_libintl+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -7728,39 +8255,36 @@ return (int) gettext ("") - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - gt_cv_func_gettext_libintl=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --gt_cv_func_gettext_libintl=no -+ gt_cv_func_gettext_libintl=no - fi --rm -f conftest.err conftest.$ac_objext \ ++ if (a->r_offset != b->r_offset) ++ return (a->r_offset - b->r_offset); + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libintl" >&5 --echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6 -+{ echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libintl" >&5 -+echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6; } - fi - - fi -@@ -7774,8 +8298,8 @@ _ACEOF - - # Extract the first word of "msgfmt", so it can be a program name with args. - set dummy msgfmt; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_path_MSGFMT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -7801,20 +8325,20 @@ esac - fi - MSGFMT="$ac_cv_path_MSGFMT" - if test -n "$MSGFMT"; then -- echo "$as_me:$LINENO: result: $MSGFMT" >&5 --echo "${ECHO_T}$MSGFMT" >&6 -+ { echo "$as_me:$LINENO: result: $MSGFMT" >&5 -+echo "${ECHO_T}$MSGFMT" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - if test "$MSGFMT" != "no"; then - - for ac_func in dcgettext - do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_func" >&5 --echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 --if eval "test \"\${$as_ac_var+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF -@@ -7840,68 +8364,60 @@ cat >>conftest.$ac_ext <<_ACEOF - - #undef $ac_func - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" --{ - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char $ac_func (); - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ --#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -+#if defined __stub_$ac_func || defined __stub___$ac_func - choke me --#else --char (*f) () = $ac_func; --#endif --#ifdef __cplusplus --} - #endif - - int - main () - { --return f != $ac_func; -+return $ac_func (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --eval "$as_ac_var=no" -+ eval "$as_ac_var=no" - fi --rm -f conftest.err conftest.$ac_objext \ ++ /* We don't need to sort on these criteria for correctness, ++ but enforcing a more strict ordering prevents unstable qsort ++ from behaving differently with different implementations. ++ Without the code below we get correct but different results ++ on Solaris 2.7 and 2.8. We would like to always produce the ++ same results no matter the host. */ + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_var'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF - #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -@@ -7912,8 +8428,8 @@ done - - # Extract the first word of "gmsgfmt", so it can be a program name with args. - set dummy gmsgfmt; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_path_GMSGFMT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -7928,32 +8444,33 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" - ;; - esac - fi - GMSGFMT=$ac_cv_path_GMSGFMT -- - if test -n "$GMSGFMT"; then -- echo "$as_me:$LINENO: result: $GMSGFMT" >&5 --echo "${ECHO_T}$GMSGFMT" >&6 -+ { echo "$as_me:$LINENO: result: $GMSGFMT" >&5 -+echo "${ECHO_T}$GMSGFMT" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ if (a->r_info != b->r_info) ++ return (a->r_info - b->r_info); + - # Extract the first word of "xgettext", so it can be a program name with args. - set dummy xgettext; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_path_XGETTEXT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -7979,11 +8496,11 @@ esac - fi - XGETTEXT="$ac_cv_path_XGETTEXT" - if test -n "$XGETTEXT"; then -- echo "$as_me:$LINENO: result: $XGETTEXT" >&5 --echo "${ECHO_T}$XGETTEXT" >&6 -+ { echo "$as_me:$LINENO: result: $XGETTEXT" >&5 -+echo "${ECHO_T}$XGETTEXT" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - - cat >conftest.$ac_ext <<_ACEOF -@@ -8003,37 +8520,34 @@ extern int _nl_msg_cat_cntr; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - CATOBJEXT=.gmo - DATADIRNAME=share - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --CATOBJEXT=.mo -+ CATOBJEXT=.mo - DATADIRNAME=lib - fi --rm -f conftest.err conftest.$ac_objext \ ++ return (a->r_addend - b->r_addend); ++} + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - INSTOBJEXT=.mo - fi -@@ -8055,8 +8569,8 @@ fi - INTLOBJS="\$(GETTOBJS)" - # Extract the first word of "msgfmt", so it can be a program name with args. - set dummy msgfmt; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_path_MSGFMT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -8082,17 +8596,17 @@ esac - fi - MSGFMT="$ac_cv_path_MSGFMT" - if test -n "$MSGFMT"; then -- echo "$as_me:$LINENO: result: $MSGFMT" >&5 --echo "${ECHO_T}$MSGFMT" >&6 -+ { echo "$as_me:$LINENO: result: $MSGFMT" >&5 -+echo "${ECHO_T}$MSGFMT" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - - # Extract the first word of "gmsgfmt", so it can be a program name with args. - set dummy gmsgfmt; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_path_GMSGFMT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -8107,32 +8621,33 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" - ;; - esac - fi - GMSGFMT=$ac_cv_path_GMSGFMT -- - if test -n "$GMSGFMT"; then -- echo "$as_me:$LINENO: result: $GMSGFMT" >&5 --echo "${ECHO_T}$GMSGFMT" >&6 -+ { echo "$as_me:$LINENO: result: $GMSGFMT" >&5 -+echo "${ECHO_T}$GMSGFMT" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++static enum relax_state_id ++get_pcrel22_relax_state(bfd *abfd, asection *sec, struct bfd_link_info *info, ++ const Elf_Internal_Rela *rela) ++{ ++ bfd_byte *contents; ++ bfd_vma insn; ++ enum relax_state_id rs = RS_NONE; + - # Extract the first word of "xgettext", so it can be a program name with args. - set dummy xgettext; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_path_XGETTEXT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -8158,11 +8673,11 @@ esac - fi - XGETTEXT="$ac_cv_path_XGETTEXT" - if test -n "$XGETTEXT"; then -- echo "$as_me:$LINENO: result: $XGETTEXT" >&5 --echo "${ECHO_T}$XGETTEXT" >&6 -+ { echo "$as_me:$LINENO: result: $XGETTEXT" >&5 -+echo "${ECHO_T}$XGETTEXT" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - - -@@ -8181,8 +8696,8 @@ fi - if $XGETTEXT --omit-header /dev/null 2> /dev/null; then - : ; - else -- echo "$as_me:$LINENO: result: found xgettext programs is not GNU xgettext; ignore it" >&5 --echo "${ECHO_T}found xgettext programs is not GNU xgettext; ignore it" >&6 -+ { echo "$as_me:$LINENO: result: found xgettext programs is not GNU xgettext; ignore it" >&5 -+echo "${ECHO_T}found xgettext programs is not GNU xgettext; ignore it" >&6; } - XGETTEXT=":" - fi - fi -@@ -8231,8 +8746,8 @@ _ACEOF - if test "x$ALL_LINGUAS" = "x"; then - LINGUAS= - else -- echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 --echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 -+echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6; } - NEW_LINGUAS= - for lang in ${LINGUAS=$ALL_LINGUAS}; do - case "$ALL_LINGUAS" in -@@ -8240,8 +8755,8 @@ echo $ECHO_N "checking for catalogs to b - esac - done - LINGUAS=$NEW_LINGUAS -- echo "$as_me:$LINENO: result: $LINGUAS" >&5 --echo "${ECHO_T}$LINGUAS" >&6 -+ { echo "$as_me:$LINENO: result: $LINGUAS" >&5 -+echo "${ECHO_T}$LINGUAS" >&6; } - fi - - if test -n "$LINGUAS"; then -@@ -8260,17 +8775,17 @@ echo "${ECHO_T}$LINGUAS" >&6 - if test -f $srcdir/po2tbl.sed.in; then - if test "$CATOBJEXT" = ".cat"; then - if test "${ac_cv_header_linux_version_h+set}" = set; then -- echo "$as_me:$LINENO: checking for linux/version.h" >&5 --echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for linux/version.h" >&5 -+echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6; } - if test "${ac_cv_header_linux_version_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - fi --echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 --echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 -+echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6; } - else - # Is the header compilable? --echo "$as_me:$LINENO: checking linux/version.h usability" >&5 --echo $ECHO_N "checking linux/version.h usability... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking linux/version.h usability" >&5 -+echo $ECHO_N "checking linux/version.h usability... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -8281,41 +8796,37 @@ $ac_includes_default - #include - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_header_compiler=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_header_compiler=no -+ ac_header_compiler=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 --echo "${ECHO_T}$ac_header_compiler" >&6 ++ contents = retrieve_contents(abfd, sec, info->keep_memory); ++ if (!contents) ++ return RS_ERROR; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -+echo "${ECHO_T}$ac_header_compiler" >&6; } - - # Is the header present? --echo "$as_me:$LINENO: checking linux/version.h presence" >&5 --echo $ECHO_N "checking linux/version.h presence... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking linux/version.h presence" >&5 -+echo $ECHO_N "checking linux/version.h presence... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -8324,24 +8835,22 @@ cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - _ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - ac_header_preproc=yes - else - echo "$as_me: failed program was:" >&5 -@@ -8349,9 +8858,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no - fi ++ insn = bfd_get_32(abfd, contents + rela->r_offset); ++ if ((insn & RCALL2_MASK) == RCALL2_OPCODE) ++ rs = RS_RCALL2; ++ else if ((insn & BRAL_MASK) == BRAL_OPCODE) ++ /* Optimizing bral -> rjmp gets us into all kinds of ++ trouble with jump tables. Better not do it. */ ++ rs = RS_NONE; ++ else if ((insn & BRC2_MASK) == BRC2_OPCODE) ++ rs = RS_BRC2; + - rm -f conftest.err conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 --echo "${ECHO_T}$ac_header_preproc" >&6 -+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -+echo "${ECHO_T}$ac_header_preproc" >&6; } - - # So? What about this header? - case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in -@@ -8375,25 +8885,18 @@ echo "$as_me: WARNING: linux/version.h: - echo "$as_me: WARNING: linux/version.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: linux/version.h: in the future, the compiler will take precedence" >&5 - echo "$as_me: WARNING: linux/version.h: in the future, the compiler will take precedence" >&2;} -- ( -- cat <<\_ASBOX --## ------------------------------------------ ## --## Report this to the AC_PACKAGE_NAME lists. ## --## ------------------------------------------ ## --_ASBOX -- ) | -- sed "s/^/$as_me: WARNING: /" >&2 ++ release_contents(sec, contents); + - ;; - esac --echo "$as_me:$LINENO: checking for linux/version.h" >&5 --echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for linux/version.h" >&5 -+echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6; } - if test "${ac_cv_header_linux_version_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - ac_cv_header_linux_version_h=$ac_header_preproc - fi --echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 --echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 -+echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6; } - - fi - if test $ac_cv_header_linux_version_h = yes; then -@@ -8443,17 +8946,17 @@ fi - fi - - --echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 --echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 -- # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. -+{ echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 -+echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; } -+ # Check whether --enable-maintainer-mode was given. - if test "${enable_maintainer_mode+set}" = set; then -- enableval="$enable_maintainer_mode" -- USE_MAINTAINER_MODE=$enableval -+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval - else - USE_MAINTAINER_MODE=no --fi; -- echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 --echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 -+fi ++ return rs; ++} + -+ { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 -+echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; } - - - if test $USE_MAINTAINER_MODE = yes; then -@@ -8493,8 +8996,8 @@ AR=${AR-ar} - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. - set dummy ${ac_tool_prefix}ranlib; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -8507,32 +9010,34 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - RANLIB=$ac_cv_prog_RANLIB - if test -n "$RANLIB"; then -- echo "$as_me:$LINENO: result: $RANLIB" >&5 --echo "${ECHO_T}$RANLIB" >&6 -+ { echo "$as_me:$LINENO: result: $RANLIB" >&5 -+echo "${ECHO_T}$RANLIB" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++static enum relax_state_id ++get_initial_relax_state(bfd *abfd, asection *sec, struct bfd_link_info *info, ++ const Elf_Internal_Rela *rela) ++{ ++ switch (ELF_R_TYPE(rela->r_info)) ++ { ++ case R_AVR32_GOTCALL: ++ return RS_PIC_CALL; ++ case R_AVR32_GOT18SW: ++ return RS_PIC_MCALL; ++ case R_AVR32_LDA_GOT: ++ return RS_PIC_LDA; ++ case R_AVR32_GOT16S: ++ return RS_PIC_LDW4; ++ case R_AVR32_CPCALL: ++ return RS_NOPIC_MCALL; ++ case R_AVR32_16_CP: ++ return RS_NOPIC_LDW4; ++ case R_AVR32_9W_CP: ++ return RS_NOPIC_LDDPC; ++ case R_AVR32_ALIGN: ++ return RS_ALIGN; ++ case R_AVR32_32_CPENT: ++ return RS_CPENT; ++ case R_AVR32_22H_PCREL: ++ return get_pcrel22_relax_state(abfd, sec, info, rela); ++ case R_AVR32_9H_PCREL: ++ return RS_BRC1; ++ default: ++ return RS_NONE; ++ } ++} + - fi - if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. - set dummy ranlib; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -8545,27 +9050,41 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - -- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" - fi - fi - ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB - if test -n "$ac_ct_RANLIB"; then -- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 --echo "${ECHO_T}$ac_ct_RANLIB" >&6 -+ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -+echo "${ECHO_T}$ac_ct_RANLIB" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - -- RANLIB=$ac_ct_RANLIB -+ if test "x$ac_ct_RANLIB" = x; then -+ RANLIB=":" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&5 -+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&2;} -+ac_tool_warned=yes ;; -+esac -+ RANLIB=$ac_ct_RANLIB -+ fi - else - RANLIB="$ac_cv_prog_RANLIB" - fi -@@ -8583,8 +9102,8 @@ fi - # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" - # OS/2's system install, which has a completely different semantic - # ./install, which can be erroneously created by make from ./install.sh. --echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 --echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } - if test -z "$INSTALL"; then - if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -@@ -8606,7 +9125,7 @@ case $as_dir/ in - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. -@@ -8625,21 +9144,22 @@ case $as_dir/ in - ;; - esac - done -+IFS=$as_save_IFS - - - fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else -- # As a last resort, use the slow shell script. We don't cache a -- # path for INSTALL within a source directory, because that will -+ # As a last resort, use the slow shell script. Don't cache a -+ # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is -- # removed, or if the path is relative. -+ # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi - fi --echo "$as_me:$LINENO: result: $INSTALL" >&5 --echo "${ECHO_T}$INSTALL" >&6 -+{ echo "$as_me:$LINENO: result: $INSTALL" >&5 -+echo "${ECHO_T}$INSTALL" >&6; } - - # Use test -z because SunOS4 sh mishandles braces in ${var-val}. - # It thinks the first close brace ends the variable substitution. -@@ -8663,8 +9183,8 @@ fi - if test "x$cross_compiling" = "xno"; then - EXEEXT_FOR_BUILD='$(EXEEXT)' - else -- echo "$as_me:$LINENO: checking for build system executable suffix" >&5 --echo $ECHO_N "checking for build system executable suffix... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for build system executable suffix" >&5 -+echo $ECHO_N "checking for build system executable suffix... $ECHO_C" >&6; } - if test "${bfd_cv_build_exeext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -8681,8 +9201,8 @@ else - rm -f conftest* - test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no - fi --echo "$as_me:$LINENO: result: $bfd_cv_build_exeext" >&5 --echo "${ECHO_T}$bfd_cv_build_exeext" >&6 -+{ echo "$as_me:$LINENO: result: $bfd_cv_build_exeext" >&5 -+echo "${ECHO_T}$bfd_cv_build_exeext" >&6; } - EXEEXT_FOR_BUILD="" - test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext} - fi -@@ -8704,18 +9224,19 @@ esac - for ac_header in string.h strings.h stdlib.h unistd.h fcntl.h sys/file.h - do - as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` --if eval "test \"\${$as_ac_Header+set}\" = set"; then -- echo "$as_me:$LINENO: checking for $ac_header" >&5 --echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 --if eval "test \"\${$as_ac_Header+set}\" = set"; then -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then -+ { echo "$as_me:$LINENO: checking for $ac_header" >&5 -+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_Header'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - else - # Is the header compilable? --echo "$as_me:$LINENO: checking $ac_header usability" >&5 --echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -8726,41 +9247,37 @@ $ac_includes_default - #include <$ac_header> - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_header_compiler=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_header_compiler=no -+ ac_header_compiler=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 --echo "${ECHO_T}$ac_header_compiler" >&6 ++static bfd_boolean ++reloc_is_cpool_ref(const Elf_Internal_Rela *rela) ++{ ++ switch (ELF_R_TYPE(rela->r_info)) ++ { ++ case R_AVR32_CPCALL: ++ case R_AVR32_16_CP: ++ case R_AVR32_9W_CP: ++ return TRUE; ++ default: ++ return FALSE; ++ } ++} + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -+echo "${ECHO_T}$ac_header_compiler" >&6; } - - # Is the header present? --echo "$as_me:$LINENO: checking $ac_header presence" >&5 --echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -8769,24 +9286,22 @@ cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include <$ac_header> - _ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - ac_header_preproc=yes - else - echo "$as_me: failed program was:" >&5 -@@ -8794,9 +9309,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no - fi ++static struct fragment * ++new_frag(bfd *abfd ATTRIBUTE_UNUSED, asection *sec, ++ struct avr32_relax_data *rd, enum relax_state_id state, ++ Elf_Internal_Rela *rela) ++{ ++ struct fragment *frag; ++ bfd_size_type r_size; ++ bfd_vma r_offset; ++ unsigned int i = rd->frag_count; + - rm -f conftest.err conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 --echo "${ECHO_T}$ac_header_preproc" >&6 -+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -+echo "${ECHO_T}$ac_header_preproc" >&6; } - - # So? What about this header? - case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in -@@ -8820,25 +9336,19 @@ echo "$as_me: WARNING: $ac_header: s - echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 - echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} -- ( -- cat <<\_ASBOX --## ------------------------------------------ ## --## Report this to the AC_PACKAGE_NAME lists. ## --## ------------------------------------------ ## --_ASBOX -- ) | -- sed "s/^/$as_me: WARNING: /" >&2 ++ BFD_ASSERT(state >= RS_NONE && state < RS_MAX); + - ;; - esac --echo "$as_me:$LINENO: checking for $ac_header" >&5 --echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 --if eval "test \"\${$as_ac_Header+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - eval "$as_ac_Header=\$ac_header_preproc" - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_Header'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - - fi - if test `eval echo '${'$as_ac_Header'}'` = yes; then -@@ -8850,8 +9360,8 @@ fi - - done - --echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5 --echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5 -+echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6; } - if test "${ac_cv_header_sys_wait_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -8864,7 +9374,7 @@ cat >>conftest.$ac_ext <<_ACEOF - #include - #include - #ifndef WEXITSTATUS --# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) -+# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) - #endif - #ifndef WIFEXITED - # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) -@@ -8881,38 +9391,34 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_header_sys_wait_h=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_header_sys_wait_h=no -+ ac_cv_header_sys_wait_h=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ rd->frag_count++; ++ frag = bfd_realloc(rd->frag, sizeof(struct fragment) * rd->frag_count); ++ if (!frag) ++ return NULL; ++ rd->frag = frag; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 --echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 -+echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6; } - if test $ac_cv_header_sys_wait_h = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -8923,8 +9429,8 @@ fi - - # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works - # for constant arguments. Useless! --echo "$as_me:$LINENO: checking for working alloca.h" >&5 --echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for working alloca.h" >&5 -+echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } - if test "${ac_cv_working_alloca_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -8939,44 +9445,42 @@ int - main () - { - char *p = (char *) alloca (2 * sizeof (int)); -+ if (p) return 0; - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - ac_cv_working_alloca_h=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_working_alloca_h=no -+ ac_cv_working_alloca_h=no - fi --rm -f conftest.err conftest.$ac_objext \ ++ frag += i; ++ memset(frag, 0, sizeof(struct fragment)); + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 --echo "${ECHO_T}$ac_cv_working_alloca_h" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 -+echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } - if test $ac_cv_working_alloca_h = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -8985,8 +9489,8 @@ _ACEOF - - fi - --echo "$as_me:$LINENO: checking for alloca" >&5 --echo $ECHO_N "checking for alloca... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for alloca" >&5 -+echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } - if test "${ac_cv_func_alloca_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -9003,7 +9507,7 @@ cat >>conftest.$ac_ext <<_ACEOF - # include - # define alloca _alloca - # else --# if HAVE_ALLOCA_H -+# ifdef HAVE_ALLOCA_H - # include - # else - # ifdef _AIX -@@ -9021,44 +9525,42 @@ int - main () - { - char *p = (char *) alloca (1); -+ if (p) return 0; - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - ac_cv_func_alloca_works=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_func_alloca_works=no -+ ac_cv_func_alloca_works=no - fi --rm -f conftest.err conftest.$ac_objext \ ++ if (state == RS_ALIGN) ++ r_size = (((rela->r_offset + (1 << rela->r_addend) - 1) ++ & ~((1 << rela->r_addend) - 1)) - rela->r_offset); ++ else ++ r_size = relax_state[state].size; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 --echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 -+echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } - - if test $ac_cv_func_alloca_works = yes; then - -@@ -9072,15 +9574,15 @@ else - # contain a buggy version. If you still want to use their alloca, - # use ar to extract alloca.o from them instead of compiling alloca.c. - --ALLOCA=alloca.$ac_objext -+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext - - cat >>confdefs.h <<\_ACEOF - #define C_ALLOCA 1 - _ACEOF - - --echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 --echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 -+echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } - if test "${ac_cv_os_cray+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -9090,7 +9592,7 @@ _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#if defined(CRAY) && ! defined(CRAY2) -+#if defined CRAY && ! defined CRAY2 - webecray - #else - wenotbecray -@@ -9106,14 +9608,14 @@ fi - rm -f conftest* - - fi --echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 --echo "${ECHO_T}$ac_cv_os_cray" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 -+echo "${ECHO_T}$ac_cv_os_cray" >&6; } - if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_func" >&5 --echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 --if eval "test \"\${$as_ac_var+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF -@@ -9139,68 +9641,60 @@ cat >>conftest.$ac_ext <<_ACEOF - - #undef $ac_func - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" --{ - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char $ac_func (); - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ --#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -+#if defined __stub_$ac_func || defined __stub___$ac_func - choke me --#else --char (*f) () = $ac_func; --#endif --#ifdef __cplusplus --} - #endif - - int - main () - { --return f != $ac_func; -+return $ac_func (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --eval "$as_ac_var=no" -+ eval "$as_ac_var=no" - fi --rm -f conftest.err conftest.$ac_objext \ ++ if (rela) ++ r_offset = rela->r_offset; ++ else ++ r_offset = sec->size; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_var'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_var'}'` = yes; then - - cat >>confdefs.h <<_ACEOF -@@ -9213,8 +9707,8 @@ fi - done - fi - --echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 --echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 -+echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } - if test "${ac_cv_c_stack_direction+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -9227,6 +9721,7 @@ _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ -+$ac_includes_default - int - find_stack_direction () - { -@@ -9244,17 +9739,26 @@ find_stack_direction () - int - main () - { -- exit (find_stack_direction () < 0); -+ return find_stack_direction () < 0; - } - _ACEOF - rm -f conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&5 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then -@@ -9267,11 +9771,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 - ( exit $ac_status ) - ac_cv_c_stack_direction=-1 - fi --rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext - fi ++ if (i == 0) ++ { ++ frag->offset = 0; ++ frag->size = r_offset + r_size; ++ } ++ else ++ { ++ frag->offset = rd->frag[i - 1].offset + rd->frag[i - 1].size; ++ frag->size = r_offset + r_size - frag->offset; ++ } + ++ if (state != RS_CPENT) ++ /* Make sure we don't discard this frag */ ++ frag->refcount = 1; + - fi --echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 --echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 -+echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } - - cat >>confdefs.h <<_ACEOF - #define STACK_DIRECTION $ac_cv_c_stack_direction -@@ -9288,9 +9794,9 @@ fi - for ac_func in sbrk utimes setmode getc_unlocked strcoll - do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_func" >&5 --echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 --if eval "test \"\${$as_ac_var+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF -@@ -9316,68 +9822,60 @@ cat >>conftest.$ac_ext <<_ACEOF - - #undef $ac_func - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" --{ - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char $ac_func (); - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ --#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -+#if defined __stub_$ac_func || defined __stub___$ac_func - choke me --#else --char (*f) () = $ac_func; --#endif --#ifdef __cplusplus --} - #endif - - int - main () - { --return f != $ac_func; -+return $ac_func (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --eval "$as_ac_var=no" -+ eval "$as_ac_var=no" - fi --rm -f conftest.err conftest.$ac_objext \ ++ frag->initial_state = frag->state = state; ++ frag->rela = rela; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_var'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF - #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -@@ -9389,8 +9887,8 @@ done - - # Check whether fopen64 is available and whether _LARGEFILE64_SOURCE - # needs to be defined for it --echo "$as_me:$LINENO: checking for fopen64" >&5 --echo $ECHO_N "checking for fopen64... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for fopen64" >&5 -+echo $ECHO_N "checking for fopen64... $ECHO_C" >&6; } - if test "${bu_cv_have_fopen64+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -9410,33 +9908,29 @@ FILE *f = fopen64 ("/tmp/foo","r"); - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - bu_cv_have_fopen64=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --saved_CPPFLAGS=$CPPFLAGS -+ saved_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ -@@ -9454,44 +9948,42 @@ FILE *f = fopen64 ("/tmp/foo","r"); - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - bu_cv_have_fopen64="need -D_LARGEFILE64_SOURCE" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --bu_cv_have_fopen64=no -+ bu_cv_have_fopen64=no - fi --rm -f conftest.err conftest.$ac_objext \ ++ return frag; ++} + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - CPPFLAGS=$saved_CPPFLAGS - fi --rm -f conftest.err conftest.$ac_objext \ ++static struct fragment * ++find_frag(asection *sec, bfd_vma offset) ++{ ++ struct fragment *first, *last; ++ struct avr32_relax_data *rd = avr32_relax_data(sec); + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi - --echo "$as_me:$LINENO: result: $bu_cv_have_fopen64" >&5 --echo "${ECHO_T}$bu_cv_have_fopen64" >&6 -+{ echo "$as_me:$LINENO: result: $bu_cv_have_fopen64" >&5 -+echo "${ECHO_T}$bu_cv_have_fopen64" >&6; } - if test "$bu_cv_have_fopen64" != no; then - - cat >>confdefs.h <<\_ACEOF -@@ -9499,8 +9991,8 @@ cat >>confdefs.h <<\_ACEOF - _ACEOF - - fi --echo "$as_me:$LINENO: checking for stat64" >&5 --echo $ECHO_N "checking for stat64... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for stat64" >&5 -+echo $ECHO_N "checking for stat64... $ECHO_C" >&6; } - if test "${bu_cv_have_stat64+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -9520,33 +10012,29 @@ struct stat64 st; stat64 ("/tmp/foo", &s - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - bu_cv_have_stat64=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --saved_CPPFLAGS=$CPPFLAGS -+ saved_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ -@@ -9564,191 +10052,146 @@ struct stat64 st; stat64 ("/tmp/foo", &s - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - bu_cv_have_stat64="need -D_LARGEFILE64_SOURCE" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --bu_cv_have_stat64=no -+ bu_cv_have_stat64=no - fi --rm -f conftest.err conftest.$ac_objext \ ++ if (rd->frag_count == 0) ++ return NULL; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - CPPFLAGS=$saved_CPPFLAGS - fi --rm -f conftest.err conftest.$ac_objext \ ++ first = &rd->frag[0]; ++ last = &rd->frag[rd->frag_count - 1]; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi - --echo "$as_me:$LINENO: result: $bu_cv_have_stat64" >&5 --echo "${ECHO_T}$bu_cv_have_stat64" >&6 -+{ echo "$as_me:$LINENO: result: $bu_cv_have_stat64" >&5 -+echo "${ECHO_T}$bu_cv_have_stat64" >&6; } - if test "$bu_cv_have_stat64" != no; then - - cat >>confdefs.h <<\_ACEOF - #define HAVE_STAT64 1 - _ACEOF - --fi --if test "$bu_cv_have_fopen64" = "need -D_LARGEFILE64_SOURCE" \ -- || test "$bu_cv_have_stat64" = "need -D_LARGEFILE64_SOURCE"; then -- --cat >>confdefs.h <<\_ACEOF --#define _LARGEFILE64_SOURCE 1 --_ACEOF -- -- CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" --fi -- --# Some systems have frexp only in -lm, not in -lc. --echo "$as_me:$LINENO: checking for library containing frexp" >&5 --echo $ECHO_N "checking for library containing frexp... $ECHO_C" >&6 --if test "${ac_cv_search_frexp+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- ac_func_search_save_LIBS=$LIBS --ac_cv_search_frexp=no --cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --/* Override any gcc2 internal prototype to avoid an error. */ --#ifdef __cplusplus --extern "C" --#endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ --char frexp (); --int --main () --{ --frexp (); -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_search_frexp="none required" --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -+fi -+if test "$bu_cv_have_fopen64" = "need -D_LARGEFILE64_SOURCE" \ -+ || test "$bu_cv_have_stat64" = "need -D_LARGEFILE64_SOURCE"; then ++ /* This may be a reloc referencing the end of a section. The last ++ frag will never have a reloc associated with it, so its size will ++ never change, thus the offset adjustment of the last frag will ++ always be the same as the offset adjustment of the end of the ++ section. */ ++ if (offset == sec->size) ++ { ++ BFD_ASSERT(last->offset + last->size == sec->size); ++ BFD_ASSERT(!last->rela); ++ return last; ++ } + -+cat >>confdefs.h <<\_ACEOF -+#define _LARGEFILE64_SOURCE 1 -+_ACEOF - -+ CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" - fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --if test "$ac_cv_search_frexp" = no; then -- for ac_lib in m; do -- LIBS="-l$ac_lib $ac_func_search_save_LIBS" -- cat >conftest.$ac_ext <<_ACEOF ++ while (first <= last) ++ { ++ struct fragment *mid; + -+# Some systems have frexp only in -lm, not in -lc. -+{ echo "$as_me:$LINENO: checking for library containing frexp" >&5 -+echo $ECHO_N "checking for library containing frexp... $ECHO_C" >&6; } -+if test "${ac_cv_search_frexp+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ ac_func_search_save_LIBS=$LIBS -+cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char frexp (); - int - main () - { --frexp (); -+return frexp (); - ; - return 0; - } - _ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+for ac_lib in '' m; do -+ if test -z "$ac_lib"; then -+ ac_res="none required" -+ else -+ ac_res=-l$ac_lib -+ LIBS="-l$ac_lib $ac_func_search_save_LIBS" -+ fi -+ rm -f conftest.$ac_objext conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_search_frexp="-l$ac_lib" --break -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then -+ ac_cv_search_frexp=$ac_res - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - ++ mid = (last - first) / 2 + first; ++ if ((mid->offset + mid->size) <= offset) ++ first = mid + 1; ++ else if (mid->offset > offset) ++ last = mid - 1; ++ else ++ return mid; ++ } + - fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- done ++ return NULL; ++} + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ -+ conftest$ac_exeext -+ if test "${ac_cv_search_frexp+set}" = set; then -+ break -+fi -+done -+if test "${ac_cv_search_frexp+set}" = set; then -+ : -+else -+ ac_cv_search_frexp=no - fi -+rm conftest.$ac_ext - LIBS=$ac_func_search_save_LIBS - fi --echo "$as_me:$LINENO: result: $ac_cv_search_frexp" >&5 --echo "${ECHO_T}$ac_cv_search_frexp" >&6 --if test "$ac_cv_search_frexp" != no; then -- test "$ac_cv_search_frexp" = "none required" || LIBS="$ac_cv_search_frexp $LIBS" -+{ echo "$as_me:$LINENO: result: $ac_cv_search_frexp" >&5 -+echo "${ECHO_T}$ac_cv_search_frexp" >&6; } -+ac_res=$ac_cv_search_frexp -+if test "$ac_res" != no; then -+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - - fi - - --echo "$as_me:$LINENO: checking for time_t in time.h" >&5 --echo $ECHO_N "checking for time_t in time.h... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for time_t in time.h" >&5 -+echo $ECHO_N "checking for time_t in time.h... $ECHO_C" >&6; } - if test "${bu_cv_decl_time_t_time_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -9768,39 +10211,35 @@ time_t i; - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - bu_cv_decl_time_t_time_h=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --bu_cv_decl_time_t_time_h=no -+ bu_cv_decl_time_t_time_h=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++/* Look through all relocs in a section and determine if any relocs ++ may be affected by relaxation in other sections. If so, allocate ++ an array of additional relocation data which links the affected ++ relocations to the frag(s) where the relaxation may occur. + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - --echo "$as_me:$LINENO: result: $bu_cv_decl_time_t_time_h" >&5 --echo "${ECHO_T}$bu_cv_decl_time_t_time_h" >&6 -+{ echo "$as_me:$LINENO: result: $bu_cv_decl_time_t_time_h" >&5 -+echo "${ECHO_T}$bu_cv_decl_time_t_time_h" >&6; } - if test $bu_cv_decl_time_t_time_h = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -9809,8 +10248,8 @@ _ACEOF - - fi - --echo "$as_me:$LINENO: checking for time_t in sys/types.h" >&5 --echo $ECHO_N "checking for time_t in sys/types.h... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for time_t in sys/types.h" >&5 -+echo $ECHO_N "checking for time_t in sys/types.h... $ECHO_C" >&6; } - if test "${bu_cv_decl_time_t_types_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -9830,39 +10269,35 @@ time_t i; - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - bu_cv_decl_time_t_types_h=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --bu_cv_decl_time_t_types_h=no -+ bu_cv_decl_time_t_types_h=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ This function also links cpool references to cpool entries and ++ increments the refcount of the latter when this happens. */ + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - --echo "$as_me:$LINENO: result: $bu_cv_decl_time_t_types_h" >&5 --echo "${ECHO_T}$bu_cv_decl_time_t_types_h" >&6 -+{ echo "$as_me:$LINENO: result: $bu_cv_decl_time_t_types_h" >&5 -+echo "${ECHO_T}$bu_cv_decl_time_t_types_h" >&6; } - if test $bu_cv_decl_time_t_types_h = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -9871,8 +10306,8 @@ _ACEOF - - fi - --echo "$as_me:$LINENO: checking for a known getopt prototype in unistd.h" >&5 --echo $ECHO_N "checking for a known getopt prototype in unistd.h... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for a known getopt prototype in unistd.h" >&5 -+echo $ECHO_N "checking for a known getopt prototype in unistd.h... $ECHO_C" >&6; } - if test "${bu_cv_decl_getopt_unistd_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -9892,39 +10327,35 @@ extern int getopt (int, char *const*, co - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - bu_cv_decl_getopt_unistd_h=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --bu_cv_decl_getopt_unistd_h=no -+ bu_cv_decl_getopt_unistd_h=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++static bfd_boolean ++allocate_reloc_data(bfd *abfd, asection *sec, Elf_Internal_Rela *relocs, ++ struct bfd_link_info *info) ++{ ++ Elf_Internal_Shdr *symtab_hdr; ++ Elf_Internal_Sym *isymbuf = NULL; ++ struct avr32_relax_data *rd; ++ unsigned int i; ++ bfd_boolean ret = FALSE; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - --echo "$as_me:$LINENO: result: $bu_cv_decl_getopt_unistd_h" >&5 --echo "${ECHO_T}$bu_cv_decl_getopt_unistd_h" >&6 -+{ echo "$as_me:$LINENO: result: $bu_cv_decl_getopt_unistd_h" >&5 -+echo "${ECHO_T}$bu_cv_decl_getopt_unistd_h" >&6; } - if test $bu_cv_decl_getopt_unistd_h = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -9935,8 +10366,8 @@ fi - - # Under Next 3.2 apparently does not define struct utimbuf - # by default. --echo "$as_me:$LINENO: checking for utime.h" >&5 --echo $ECHO_N "checking for utime.h... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for utime.h" >&5 -+echo $ECHO_N "checking for utime.h... $ECHO_C" >&6; } - if test "${bu_cv_header_utime_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -9960,39 +10391,35 @@ struct utimbuf s; - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - bu_cv_header_utime_h=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --bu_cv_header_utime_h=no -+ bu_cv_header_utime_h=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -+ -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - --echo "$as_me:$LINENO: result: $bu_cv_header_utime_h" >&5 --echo "${ECHO_T}$bu_cv_header_utime_h" >&6 -+{ echo "$as_me:$LINENO: result: $bu_cv_header_utime_h" >&5 -+echo "${ECHO_T}$bu_cv_header_utime_h" >&6; } - if test $bu_cv_header_utime_h = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -10001,8 +10428,8 @@ _ACEOF - - fi - --echo "$as_me:$LINENO: checking whether fprintf is declared" >&5 --echo $ECHO_N "checking whether fprintf is declared... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether fprintf is declared" >&5 -+echo $ECHO_N "checking whether fprintf is declared... $ECHO_C" >&6; } - if test "${ac_cv_have_decl_fprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10017,7 +10444,7 @@ int - main () - { - #ifndef fprintf -- char *p = (char *) fprintf; -+ (void) fprintf; - #endif - - ; -@@ -10025,38 +10452,34 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_have_decl_fprintf=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_have_decl_fprintf=no -+ ac_cv_have_decl_fprintf=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ symtab_hdr = &elf_tdata(abfd)->symtab_hdr; ++ rd = avr32_relax_data(sec); + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_have_decl_fprintf" >&5 --echo "${ECHO_T}$ac_cv_have_decl_fprintf" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fprintf" >&5 -+echo "${ECHO_T}$ac_cv_have_decl_fprintf" >&6; } - if test $ac_cv_have_decl_fprintf = yes; then - - cat >>confdefs.h <<_ACEOF -@@ -10071,8 +10494,8 @@ _ACEOF - - - fi --echo "$as_me:$LINENO: checking whether stpcpy is declared" >&5 --echo $ECHO_N "checking whether stpcpy is declared... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether stpcpy is declared" >&5 -+echo $ECHO_N "checking whether stpcpy is declared... $ECHO_C" >&6; } - if test "${ac_cv_have_decl_stpcpy+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10087,7 +10510,7 @@ int - main () - { - #ifndef stpcpy -- char *p = (char *) stpcpy; -+ (void) stpcpy; - #endif - - ; -@@ -10095,38 +10518,34 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_have_decl_stpcpy=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_have_decl_stpcpy=no -+ ac_cv_have_decl_stpcpy=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ RDBG("%s<%s>: allocate_reloc_data\n", abfd->filename, sec->name); + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_have_decl_stpcpy" >&5 --echo "${ECHO_T}$ac_cv_have_decl_stpcpy" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_stpcpy" >&5 -+echo "${ECHO_T}$ac_cv_have_decl_stpcpy" >&6; } - if test $ac_cv_have_decl_stpcpy = yes; then - - cat >>confdefs.h <<_ACEOF -@@ -10141,8 +10560,8 @@ _ACEOF - - - fi --echo "$as_me:$LINENO: checking whether strstr is declared" >&5 --echo $ECHO_N "checking whether strstr is declared... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether strstr is declared" >&5 -+echo $ECHO_N "checking whether strstr is declared... $ECHO_C" >&6; } - if test "${ac_cv_have_decl_strstr+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10157,7 +10576,7 @@ int - main () - { - #ifndef strstr -- char *p = (char *) strstr; -+ (void) strstr; - #endif - - ; -@@ -10165,38 +10584,34 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_have_decl_strstr=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_have_decl_strstr=no -+ ac_cv_have_decl_strstr=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ for (i = 0; i < sec->reloc_count; i++) ++ { ++ Elf_Internal_Rela *rel = &relocs[i]; ++ asection *sym_sec; ++ unsigned long r_symndx; ++ bfd_vma sym_value; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_have_decl_strstr" >&5 --echo "${ECHO_T}$ac_cv_have_decl_strstr" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strstr" >&5 -+echo "${ECHO_T}$ac_cv_have_decl_strstr" >&6; } - if test $ac_cv_have_decl_strstr = yes; then - - cat >>confdefs.h <<_ACEOF -@@ -10211,8 +10626,8 @@ _ACEOF - - - fi --echo "$as_me:$LINENO: checking whether sbrk is declared" >&5 --echo $ECHO_N "checking whether sbrk is declared... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether sbrk is declared" >&5 -+echo $ECHO_N "checking whether sbrk is declared... $ECHO_C" >&6; } - if test "${ac_cv_have_decl_sbrk+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10227,7 +10642,7 @@ int - main () - { - #ifndef sbrk -- char *p = (char *) sbrk; -+ (void) sbrk; - #endif - - ; -@@ -10235,38 +10650,34 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_have_decl_sbrk=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_have_decl_sbrk=no -+ ac_cv_have_decl_sbrk=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ if (!rel->r_addend && ELF_R_TYPE(rel->r_info) != R_AVR32_DIFF32 ++ && !reloc_is_cpool_ref(rel)) ++ continue; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_have_decl_sbrk" >&5 --echo "${ECHO_T}$ac_cv_have_decl_sbrk" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_sbrk" >&5 -+echo "${ECHO_T}$ac_cv_have_decl_sbrk" >&6; } - if test $ac_cv_have_decl_sbrk = yes; then - - cat >>confdefs.h <<_ACEOF -@@ -10281,8 +10692,8 @@ _ACEOF - - - fi --echo "$as_me:$LINENO: checking whether getenv is declared" >&5 --echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether getenv is declared" >&5 -+echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6; } - if test "${ac_cv_have_decl_getenv+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10297,7 +10708,7 @@ int - main () - { - #ifndef getenv -- char *p = (char *) getenv; -+ (void) getenv; - #endif - - ; -@@ -10305,38 +10716,34 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_have_decl_getenv=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_have_decl_getenv=no -+ ac_cv_have_decl_getenv=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ r_symndx = ELF_R_SYM(rel->r_info); + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5 --echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5 -+echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6; } - if test $ac_cv_have_decl_getenv = yes; then - - cat >>confdefs.h <<_ACEOF -@@ -10351,8 +10758,8 @@ _ACEOF - - - fi --echo "$as_me:$LINENO: checking whether environ is declared" >&5 --echo $ECHO_N "checking whether environ is declared... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether environ is declared" >&5 -+echo $ECHO_N "checking whether environ is declared... $ECHO_C" >&6; } - if test "${ac_cv_have_decl_environ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10367,7 +10774,7 @@ int - main () - { - #ifndef environ -- char *p = (char *) environ; -+ (void) environ; - #endif - - ; -@@ -10375,38 +10782,34 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_have_decl_environ=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_have_decl_environ=no -+ ac_cv_have_decl_environ=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ if (r_symndx < symtab_hdr->sh_info) ++ { ++ Elf_Internal_Sym *isym; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_have_decl_environ" >&5 --echo "${ECHO_T}$ac_cv_have_decl_environ" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_environ" >&5 -+echo "${ECHO_T}$ac_cv_have_decl_environ" >&6; } - if test $ac_cv_have_decl_environ = yes; then - - cat >>confdefs.h <<_ACEOF -@@ -10421,8 +10824,8 @@ _ACEOF - - - fi --echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5 --echo $ECHO_N "checking whether getc_unlocked is declared... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5 -+echo $ECHO_N "checking whether getc_unlocked is declared... $ECHO_C" >&6; } - if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10437,7 +10840,7 @@ int - main () - { - #ifndef getc_unlocked -- char *p = (char *) getc_unlocked; -+ (void) getc_unlocked; - #endif - - ; -@@ -10445,38 +10848,34 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_have_decl_getc_unlocked=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_have_decl_getc_unlocked=no -+ ac_cv_have_decl_getc_unlocked=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ if (!isymbuf) ++ isymbuf = retrieve_local_syms(abfd, info->keep_memory); ++ if (!isymbuf) ++ return FALSE; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5 --echo "${ECHO_T}$ac_cv_have_decl_getc_unlocked" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5 -+echo "${ECHO_T}$ac_cv_have_decl_getc_unlocked" >&6; } - if test $ac_cv_have_decl_getc_unlocked = yes; then - - cat >>confdefs.h <<_ACEOF -@@ -10491,8 +10890,8 @@ _ACEOF - - - fi --echo "$as_me:$LINENO: checking whether snprintf is declared" >&5 --echo $ECHO_N "checking whether snprintf is declared... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether snprintf is declared" >&5 -+echo $ECHO_N "checking whether snprintf is declared... $ECHO_C" >&6; } - if test "${ac_cv_have_decl_snprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10507,7 +10906,7 @@ int - main () - { - #ifndef snprintf -- char *p = (char *) snprintf; -+ (void) snprintf; - #endif - - ; -@@ -10515,38 +10914,34 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_have_decl_snprintf=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_have_decl_snprintf=no -+ ac_cv_have_decl_snprintf=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ isym = &isymbuf[r_symndx]; ++ sym_sec = bfd_section_from_elf_index(abfd, isym->st_shndx); ++ sym_value = isym->st_value; ++ } ++ else ++ { ++ struct elf_link_hash_entry *h; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5 --echo "${ECHO_T}$ac_cv_have_decl_snprintf" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5 -+echo "${ECHO_T}$ac_cv_have_decl_snprintf" >&6; } - if test $ac_cv_have_decl_snprintf = yes; then - - cat >>confdefs.h <<_ACEOF -@@ -10561,8 +10956,8 @@ _ACEOF - - - fi --echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5 --echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5 -+echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6; } - if test "${ac_cv_have_decl_vsnprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10577,7 +10972,7 @@ int - main () - { - #ifndef vsnprintf -- char *p = (char *) vsnprintf; -+ (void) vsnprintf; - #endif - - ; -@@ -10585,38 +10980,34 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_have_decl_vsnprintf=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_have_decl_vsnprintf=no -+ ac_cv_have_decl_vsnprintf=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ h = elf_sym_hashes(abfd)[r_symndx - symtab_hdr->sh_info]; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5 --echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5 -+echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6; } - if test $ac_cv_have_decl_vsnprintf = yes; then - - cat >>confdefs.h <<_ACEOF -@@ -10817,8 +11208,10 @@ done - - - -- ac_config_files="$ac_config_files Makefile doc/Makefile po/Makefile.in:po/Make-in" -- ac_config_commands="$ac_config_commands default" -+ac_config_files="$ac_config_files Makefile doc/Makefile po/Makefile.in:po/Make-in" ++ while (h->root.type == bfd_link_hash_indirect ++ || h->root.type == bfd_link_hash_warning) ++ h = (struct elf_link_hash_entry *)h->root.u.i.link; + -+ac_config_commands="$ac_config_commands default" ++ if (h->root.type != bfd_link_hash_defined ++ && h->root.type != bfd_link_hash_defweak) ++ continue; + - cat >confcache <<\_ACEOF - # This file is a shell script that caches the results of configure - # tests run on this system so they can be shared between configure -@@ -10837,39 +11230,58 @@ _ACEOF - - # The following way of writing the cache mishandles newlines in values, - # but we know of no workaround that is simple, portable, and efficient. --# So, don't put newlines in cache variables' values. -+# So, we kill variables containing newlines. - # Ultrix sh set writes to stderr and can't be redirected directly, - # and sets the high bit in the cache file unless we assign to the vars. --{ -+( -+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do -+ eval ac_val=\$$ac_var -+ case $ac_val in #( -+ *${as_nl}*) -+ case $ac_var in #( -+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; -+ esac -+ case $ac_var in #( -+ _ | IFS | as_nl) ;; #( -+ *) $as_unset $ac_var ;; -+ esac ;; -+ esac -+ done ++ sym_sec = h->root.u.def.section; ++ sym_value = h->root.u.def.value; ++ } + - (set) 2>&1 | -- case `(ac_space=' '; set | grep ac_space) 2>&1` in -- *ac_space=\ *) -+ case $as_nl`(ac_space=' '; set) 2>&1` in #( -+ *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" -- ;; -+ ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. -- sed -n \ -- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" -+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; -- esac; --} | -+ esac | -+ sort -+) | - sed ' -+ /^ac_cv_env_/b end - t clear -- : clear -+ :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end -- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ -- : end' >>confcache --if diff $cache_file confcache >/dev/null 2>&1; then :; else -- if test -w $cache_file; then -- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" -+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ -+ :end' >>confcache -+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else -+ if test -w "$cache_file"; then -+ test "x$cache_file" != "x/dev/null" && -+ { echo "$as_me:$LINENO: updating cache $cache_file" >&5 -+echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else -- echo "not updating unwritable cache $cache_file" -+ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -+echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi - fi - rm -f confcache -@@ -10878,32 +11290,18 @@ test "x$prefix" = xNONE && prefix=$ac_de - # Let make expand exec_prefix. - test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - --# VPATH may cause trouble with some makes, so we remove $(srcdir), --# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and --# trailing colons and then remove the whole line if VPATH becomes empty --# (actually we leave an empty line to preserve line numbers). --if test "x$srcdir" = x.; then -- ac_vpsub='/^[ ]*VPATH[ ]*=/{ --s/:*\$(srcdir):*/:/; --s/:*\${srcdir}:*/:/; --s/:*@srcdir@:*/:/; --s/^\([^=]*=[ ]*\):*/\1/; --s/:*$//; --s/^[^=]*=[ ]*$//; --}' --fi -- - DEFS=-DHAVE_CONFIG_H - - ac_libobjs= - ac_ltlibobjs= - for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. -- ac_i=`echo "$ac_i" | -- sed 's/\$U\././;s/\.o$//;s/\.obj$//'` -- # 2. Add them. -- ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" -- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' -+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' -+ ac_i=`echo "$ac_i" | sed "$ac_script"` -+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR -+ # will be set to the directory where LIBOBJS objects are built. -+ ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" -+ ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' - done - LIBOBJS=$ac_libobjs - -@@ -10955,17 +11353,45 @@ cat >>$CONFIG_STATUS <<\_ACEOF - ## M4sh Initialization. ## - ## --------------------- ## - --# Be Bourne compatible -+# Be more Bourne compatible -+DUALCASE=1; export DUALCASE # for MKS sh - if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' --elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then -- set -o posix -+ setopt NO_GLOB_SUBST -+else -+ case `(set -o) 2>/dev/null` in -+ *posix*) set -o posix ;; -+esac ++ if (sym_sec && avr32_relax_data(sym_sec)->is_relaxable) ++ { ++ bfd_size_type size; ++ struct fragment *frag; + -+fi ++ if (!rd->reloc_data) ++ { ++ size = sizeof(struct avr32_reloc_data) * sec->reloc_count; ++ rd->reloc_data = bfd_zalloc(abfd, size); ++ if (!rd->reloc_data) ++ goto out; ++ } + ++ RDBG("[%3d] 0x%04lx: target: 0x%lx + 0x%lx", ++ i, rel->r_offset, sym_value, rel->r_addend); + ++ frag = find_frag(sym_sec, sym_value + rel->r_addend); ++ BFD_ASSERT(frag); ++ rd->reloc_data[i].add_frag = frag; + ++ RDBG(" -> %s<%s>:%04lx\n", sym_sec->owner->filename, sym_sec->name, ++ frag->rela ? frag->rela->r_offset : sym_sec->size); + -+# PATH needs CR -+# Avoid depending upon Character Ranges. -+as_cr_letters='abcdefghijklmnopqrstuvwxyz' -+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -+as_cr_Letters=$as_cr_letters$as_cr_LETTERS -+as_cr_digits='0123456789' -+as_cr_alnum=$as_cr_Letters$as_cr_digits ++ if (reloc_is_cpool_ref(rel)) ++ { ++ BFD_ASSERT(ELF_R_TYPE(frag->rela->r_info) == R_AVR32_32_CPENT); ++ frag->refcount++; ++ } + -+# The user is always right. -+if test "${PATH_SEPARATOR+set}" != set; then -+ echo "#! /bin/sh" >conf$$.sh -+ echo "exit 0" >>conf$$.sh -+ chmod +x conf$$.sh -+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then -+ PATH_SEPARATOR=';' -+ else -+ PATH_SEPARATOR=: -+ fi -+ rm -f conf$$.sh - fi --DUALCASE=1; export DUALCASE # for MKS sh - - # Support unset when possible. - if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then -@@ -10975,8 +11401,43 @@ else - fi - - -+# IFS -+# We need space, tab and new line, in precisely that order. Quoting is -+# there to prevent editors from complaining about space-tab. -+# (If _AS_PATH_WALK were called with IFS unset, it would disable word -+# splitting by setting IFS to empty value.) -+as_nl=' -+' -+IFS=" "" $as_nl" ++ if (ELF_R_TYPE(rel->r_info) == R_AVR32_DIFF32) ++ { ++ bfd_byte *contents; ++ bfd_signed_vma diff; + -+# Find who we are. Look in the path if we contain no directory separator. -+case $0 in -+ *[\\/]* ) as_myself=$0 ;; -+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -+done -+IFS=$as_save_IFS ++ contents = retrieve_contents(abfd, sec, info->keep_memory); ++ if (!contents) ++ goto out; + -+ ;; -+esac -+# We did not find ourselves, most probably we were run as `sh COMMAND' -+# in which case we are not to be found in the path. -+if test "x$as_myself" = x; then -+ as_myself=$0 -+fi -+if test ! -f "$as_myself"; then -+ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 -+ { (exit 1); exit 1; } -+fi ++ diff = bfd_get_signed_32(abfd, contents + rel->r_offset); ++ frag = find_frag(sym_sec, sym_value + rel->r_addend + diff); ++ BFD_ASSERT(frag); ++ rd->reloc_data[i].sub_frag = frag; + - # Work around bugs in pre-3.0 UWIN ksh. --$as_unset ENV MAIL MAILPATH -+for as_var in ENV MAIL MAILPATH -+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -+done - PS1='$ ' - PS2='> ' - PS4='+ ' -@@ -10990,18 +11451,19 @@ do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else -- $as_unset $as_var -+ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi - done - - # Required to use basename. --if expr a : '\(a\)' >/dev/null 2>&1; then -+if expr a : '\(a\)' >/dev/null 2>&1 && -+ test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr - else - as_expr=false - fi - --if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then -+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename - else - as_basename=false -@@ -11009,159 +11471,120 @@ fi - - - # Name of the executable. --as_me=`$as_basename "$0" || -+as_me=`$as_basename -- "$0" || - $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ -- X"$0" : 'X\(/\)$' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$0" : 'X\(/\)' \| . 2>/dev/null || - echo X/"$0" | -- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } -- /^X\/\(\/\/\)$/{ s//\1/; q; } -- /^X\/\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -+ sed '/^.*\/\([^/][^/]*\)\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\/\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\/\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` - -- --# PATH needs CR, and LINENO needs CR and PATH. --# Avoid depending upon Character Ranges. --as_cr_letters='abcdefghijklmnopqrstuvwxyz' --as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' --as_cr_Letters=$as_cr_letters$as_cr_LETTERS --as_cr_digits='0123456789' --as_cr_alnum=$as_cr_Letters$as_cr_digits -- --# The user is always right. --if test "${PATH_SEPARATOR+set}" != set; then -- echo "#! /bin/sh" >conf$$.sh -- echo "exit 0" >>conf$$.sh -- chmod +x conf$$.sh -- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then -- PATH_SEPARATOR=';' -- else -- PATH_SEPARATOR=: -- fi -- rm -f conf$$.sh --fi -+# CDPATH. -+$as_unset CDPATH - - -- as_lineno_1=$LINENO -- as_lineno_2=$LINENO -- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` -- test "x$as_lineno_1" != "x$as_lineno_2" && -- test "x$as_lineno_3" = "x$as_lineno_2" || { -- # Find who we are. Look in the path if we contain no path at all -- # relative or not. -- case $0 in -- *[\\/]* ) as_myself=$0 ;; -- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break --done - -- ;; -- esac -- # We did not find ourselves, most probably we were run as `sh COMMAND' -- # in which case we are not to be found in the path. -- if test "x$as_myself" = x; then -- as_myself=$0 -- fi -- if test ! -f "$as_myself"; then -- { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 --echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} -- { (exit 1); exit 1; }; } -- fi -- case $CONFIG_SHELL in -- '') -- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for as_base in sh bash ksh sh5; do -- case $as_dir in -- /*) -- if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO -- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && -- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then -- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } -- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } -- CONFIG_SHELL=$as_dir/$as_base -- export CONFIG_SHELL -- exec "$CONFIG_SHELL" "$0" ${1+"$@"} -- fi;; -- esac -- done --done --;; -- esac -+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a -- # line-number line before each line; the second 'sed' does the real -- # work. The second script uses 'N' to pair each line-number line -- # with the numbered line, and appends trailing '-' during -- # substitution so that $LINENO is not a special case at line end. -+ # line-number line after each line using $LINENO; the second 'sed' -+ # does the real work. The second script uses 'N' to pair each -+ # line-number line with the line containing $LINENO, and appends -+ # trailing '-' during substitution so that $LINENO is not a special -+ # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the -- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) -- sed '=' <$as_myself | -+ # scripts with optimization help from Paolo Bonzini. Blame Lee -+ # E. McMahon (1931-1989) for sed's syntax. :-) -+ sed -n ' -+ p -+ /[$]LINENO/= -+ ' <$as_myself | - sed ' -+ s/[$]LINENO.*/&-/ -+ t lineno -+ b -+ :lineno - N -- s,$,-, -- : loop -- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, -+ :loop -+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop -- s,-$,, -- s,^['$as_cr_digits']*\n,, -+ s/-\n.*// - ' >$as_me.lineno && -- chmod +x $as_me.lineno || -- { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 --echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} -+ chmod +x "$as_me.lineno" || -+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the -- # original and so on. Autoconf is especially sensible to this). -- . ./$as_me.lineno -+ # original and so on. Autoconf is especially sensitive to this). -+ . "./$as_me.lineno" - # Exit status is that of the last command. - exit - } - - --case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in -- *c*,-n*) ECHO_N= ECHO_C=' --' ECHO_T=' ' ;; -- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; -- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then -+ as_dirname=dirname -+else -+ as_dirname=false -+fi ++ release_contents(sec, contents); ++ } ++ } ++ } + -+ECHO_C= ECHO_N= ECHO_T= -+case `echo -n x` in -+-n*) -+ case `echo 'x\c'` in -+ *c*) ECHO_T=' ';; # ECHO_T is single tab character. -+ *) ECHO_C='\c';; -+ esac;; -+*) -+ ECHO_N='-n';; - esac - --if expr a : '\(a\)' >/dev/null 2>&1; then -+if expr a : '\(a\)' >/dev/null 2>&1 && -+ test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr - else - as_expr=false - fi - - rm -f conf$$ conf$$.exe conf$$.file -+if test -d conf$$.dir; then -+ rm -f conf$$.dir/conf$$.file -+else -+ rm -f conf$$.dir -+ mkdir conf$$.dir -+fi - echo >conf$$.file - if ln -s conf$$.file conf$$ 2>/dev/null; then -- # We could just check for DJGPP; but this test a) works b) is more generic -- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). -- if test -f conf$$.exe; then -- # Don't use ln at all; we don't have any links -+ as_ln_s='ln -s' -+ # ... but there are two gotchas: -+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. -+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. -+ # In both cases, we have to default to `cp -p'. -+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -- else -- as_ln_s='ln -s' -- fi - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi --rm -f conf$$ conf$$.exe conf$$.file -+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -+rmdir conf$$.dir 2>/dev/null - - if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -@@ -11170,7 +11593,28 @@ else - as_mkdir_p=false - fi - --as_executable_p="test -f" -+if test -x / >/dev/null 2>&1; then -+ as_test_x='test -x' -+else -+ if ls -dL / >/dev/null 2>&1; then -+ as_ls_L_option=L -+ else -+ as_ls_L_option= -+ fi -+ as_test_x=' -+ eval sh -c '\'' -+ if test -d "$1"; then -+ test -d "$1/."; -+ else -+ case $1 in -+ -*)set "./$1";; -+ esac; -+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in -+ ???[sx]*):;;*)false;;esac;fi -+ '\'' sh -+ ' -+fi -+as_executable_p=$as_test_x - - # Sed expression to map a string onto a valid CPP name. - as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" -@@ -11179,31 +11623,14 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P - as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - --# IFS --# We need space, tab and new line, in precisely that order. --as_nl=' --' --IFS=" $as_nl" -- --# CDPATH. --$as_unset CDPATH -- - exec 6>&1 - --# Open the log real soon, to keep \$[0] and so on meaningful, and to -+# Save the log message, to keep $[0] and so on meaningful, and to - # report actual input values of CONFIG_FILES etc. instead of their --# values after options handling. Logging --version etc. is OK. --exec 5>>config.log --{ -- echo -- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX --## Running $as_me. ## --_ASBOX --} >&5 --cat >&5 <<_CSEOF -- -+# values after options handling. -+ac_log=" - This file was extended by $as_me, which was --generated by GNU Autoconf 2.59. Invocation command line was -+generated by GNU Autoconf 2.61. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS -@@ -11211,30 +11638,20 @@ generated by GNU Autoconf 2.59. Invocat - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - --_CSEOF --echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 --echo >&5 -+on `(hostname || uname -n) 2>/dev/null | sed 1q` -+" ++ ret = TRUE; + - _ACEOF - -+cat >>$CONFIG_STATUS <<_ACEOF - # Files that config.status was made for. --if test -n "$ac_config_files"; then -- echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS --fi -- --if test -n "$ac_config_headers"; then -- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS --fi -- --if test -n "$ac_config_links"; then -- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS --fi -+config_files="$ac_config_files" -+config_headers="$ac_config_headers" -+config_commands="$ac_config_commands" - --if test -n "$ac_config_commands"; then -- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS --fi -+_ACEOF - - cat >>$CONFIG_STATUS <<\_ACEOF -- - ac_cs_usage="\ - \`$as_me' instantiates files from templates according to the - current configuration. -@@ -11242,7 +11659,7 @@ current configuration. - Usage: $0 [OPTIONS] [FILE]... - - -h, --help print this help, then exit -- -V, --version print version number, then exit -+ -V, --version print version number and configuration settings, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions -@@ -11261,19 +11678,21 @@ Configuration commands: - $config_commands - - Report bugs to ." --_ACEOF - -+_ACEOF - cat >>$CONFIG_STATUS <<_ACEOF - ac_cs_version="\\ - config.status --configured by $0, generated by GNU Autoconf 2.59, -- with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" -+configured by $0, generated by GNU Autoconf 2.61, -+ with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" - --Copyright (C) 2003 Free Software Foundation, Inc. -+Copyright (C) 2006 Free Software Foundation, Inc. - This config.status script is free software; the Free Software Foundation - gives unlimited permission to copy, distribute and modify it." --srcdir=$srcdir --INSTALL="$INSTALL" ++ out: ++ release_local_syms(abfd, isymbuf); ++ return ret; ++} + -+ac_pwd='$ac_pwd' -+srcdir='$srcdir' -+INSTALL='$INSTALL' - _ACEOF - - cat >>$CONFIG_STATUS <<\_ACEOF -@@ -11284,39 +11703,24 @@ while test $# != 0 - do - case $1 in - --*=*) -- ac_option=`expr "x$1" : 'x\([^=]*\)='` -- ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` -+ ac_option=`expr "X$1" : 'X\([^=]*\)='` -+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; -- -*) -+ *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; -- *) # This is not an option, so the user has probably given explicit -- # arguments. -- ac_option=$1 -- ac_need_defaults=false;; - esac - - case $ac_option in - # Handling of the options. --_ACEOF --cat >>$CONFIG_STATUS <<\_ACEOF - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; -- --version | --vers* | -V ) -- echo "$ac_cs_version"; exit 0 ;; -- --he | --h) -- # Conflict between --help and --header -- { { echo "$as_me:$LINENO: error: ambiguous option: $1 --Try \`$0 --help' for more information." >&5 --echo "$as_me: error: ambiguous option: $1 --Try \`$0 --help' for more information." >&2;} -- { (exit 1); exit 1; }; };; -- --help | --hel | -h ) -- echo "$ac_cs_usage"; exit 0 ;; -- --debug | --d* | -d ) -+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) -+ echo "$ac_cs_version"; exit ;; -+ --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift -@@ -11326,18 +11730,24 @@ Try \`$0 --help' for more information." - $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" - ac_need_defaults=false;; -+ --he | --h) -+ # Conflict between --help and --header -+ { echo "$as_me: error: ambiguous option: $1 -+Try \`$0 --help' for more information." >&2 -+ { (exit 1); exit 1; }; };; -+ --help | --hel | -h ) -+ echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. -- -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 --Try \`$0 --help' for more information." >&5 --echo "$as_me: error: unrecognized option: $1 --Try \`$0 --help' for more information." >&2;} -+ -*) { echo "$as_me: error: unrecognized option: $1 -+Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } ;; - -- *) ac_config_targets="$ac_config_targets $1" ;; -+ *) ac_config_targets="$ac_config_targets $1" -+ ac_need_defaults=false ;; - - esac - shift -@@ -11353,40 +11763,52 @@ fi - _ACEOF - cat >>$CONFIG_STATUS <<_ACEOF - if \$ac_cs_recheck; then -- echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 -- exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion -+ echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 -+ CONFIG_SHELL=$SHELL -+ export CONFIG_SHELL -+ exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - fi - - _ACEOF -+cat >>$CONFIG_STATUS <<\_ACEOF -+exec 5>>config.log ++static bfd_boolean ++global_sym_set_frag(struct elf_avr32_link_hash_entry *havr, ++ struct bfd_link_info *info ATTRIBUTE_UNUSED) +{ -+ echo -+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -+## Running $as_me. ## -+_ASBOX -+ echo "$ac_log" -+} >&5 - -+_ACEOF - cat >>$CONFIG_STATUS <<_ACEOF - # --# INIT-COMMANDS section. -+# INIT-COMMANDS - # -- - AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - _ACEOF - -- -- - cat >>$CONFIG_STATUS <<\_ACEOF ++ struct fragment *frag; ++ asection *sec; + -+# Handling of arguments. - for ac_config_target in $ac_config_targets - do -- case "$ac_config_target" in -- # Handling of arguments. -- "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; -- "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; -- "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;; -- "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; -- "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; -- "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; -+ case $ac_config_target in -+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; -+ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; -+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; -+ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; -+ "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;; -+ "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; ++ if (havr->root.root.type != bfd_link_hash_defined ++ && havr->root.root.type != bfd_link_hash_defweak) ++ return TRUE; + - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 - echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - esac - done - ++ sec = havr->root.root.u.def.section; ++ if (bfd_is_const_section(sec) ++ || !avr32_relax_data(sec)->is_relaxable) ++ return TRUE; + - # If the user did not use the arguments to specify the items to instantiate, - # then the envvar interface is used. Set only those that are not. - # We use the long form for the default assignment because of an extremely -@@ -11398,391 +11820,496 @@ if $ac_need_defaults; then - fi - - # Have a temporary directory for convenience. Make it in the build tree --# simply because there is no reason to put it here, and in addition, -+# simply because there is no reason against having it here, and in addition, - # creating and moving files from /tmp can sometimes cause problems. --# Create a temporary directory, and hook for its removal unless debugging. -+# Hook for its removal unless debugging. -+# Note that there is a small window in which the directory will not be cleaned: -+# after its creation but before its name has been assigned to `$tmp'. - $debug || - { -- trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 -+ tmp= -+ trap 'exit_status=$? -+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -+' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 - } -- - # Create a (secure) tmp directory for tmp files. - - { -- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && -+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" - } || - { -- tmp=./confstat$$-$RANDOM -- (umask 077 && mkdir $tmp) -+ tmp=./conf$$-$RANDOM -+ (umask 077 && mkdir "$tmp") - } || - { - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } - } - --_ACEOF -- --cat >>$CONFIG_STATUS <<_ACEOF -- - # --# CONFIG_FILES section. -+# Set up the sed scripts for CONFIG_FILES section. - # - - # No need to generate the scripts if there are no CONFIG_FILES. - # This happens for instance when ./config.status config.h --if test -n "\$CONFIG_FILES"; then -- # Protect against being on the right side of a sed subst in config.status. -- sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; -- s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF --s,@SHELL@,$SHELL,;t t --s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t --s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t --s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t --s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t --s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t --s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t --s,@exec_prefix@,$exec_prefix,;t t --s,@prefix@,$prefix,;t t --s,@program_transform_name@,$program_transform_name,;t t --s,@bindir@,$bindir,;t t --s,@sbindir@,$sbindir,;t t --s,@libexecdir@,$libexecdir,;t t --s,@datadir@,$datadir,;t t --s,@sysconfdir@,$sysconfdir,;t t --s,@sharedstatedir@,$sharedstatedir,;t t --s,@localstatedir@,$localstatedir,;t t --s,@libdir@,$libdir,;t t --s,@includedir@,$includedir,;t t --s,@oldincludedir@,$oldincludedir,;t t --s,@infodir@,$infodir,;t t --s,@mandir@,$mandir,;t t --s,@build_alias@,$build_alias,;t t --s,@host_alias@,$host_alias,;t t --s,@target_alias@,$target_alias,;t t --s,@DEFS@,$DEFS,;t t --s,@ECHO_C@,$ECHO_C,;t t --s,@ECHO_N@,$ECHO_N,;t t --s,@ECHO_T@,$ECHO_T,;t t --s,@LIBS@,$LIBS,;t t --s,@build@,$build,;t t --s,@build_cpu@,$build_cpu,;t t --s,@build_vendor@,$build_vendor,;t t --s,@build_os@,$build_os,;t t --s,@host@,$host,;t t --s,@host_cpu@,$host_cpu,;t t --s,@host_vendor@,$host_vendor,;t t --s,@host_os@,$host_os,;t t --s,@target@,$target,;t t --s,@target_cpu@,$target_cpu,;t t --s,@target_vendor@,$target_vendor,;t t --s,@target_os@,$target_os,;t t --s,@CC@,$CC,;t t --s,@CFLAGS@,$CFLAGS,;t t --s,@LDFLAGS@,$LDFLAGS,;t t --s,@CPPFLAGS@,$CPPFLAGS,;t t --s,@ac_ct_CC@,$ac_ct_CC,;t t --s,@EXEEXT@,$EXEEXT,;t t --s,@OBJEXT@,$OBJEXT,;t t --s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t --s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t --s,@INSTALL_DATA@,$INSTALL_DATA,;t t --s,@CYGPATH_W@,$CYGPATH_W,;t t --s,@PACKAGE@,$PACKAGE,;t t --s,@VERSION@,$VERSION,;t t --s,@ACLOCAL@,$ACLOCAL,;t t --s,@AUTOCONF@,$AUTOCONF,;t t --s,@AUTOMAKE@,$AUTOMAKE,;t t --s,@AUTOHEADER@,$AUTOHEADER,;t t --s,@MAKEINFO@,$MAKEINFO,;t t --s,@install_sh@,$install_sh,;t t --s,@STRIP@,$STRIP,;t t --s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t --s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t --s,@mkdir_p@,$mkdir_p,;t t --s,@AWK@,$AWK,;t t --s,@SET_MAKE@,$SET_MAKE,;t t --s,@am__leading_dot@,$am__leading_dot,;t t --s,@AMTAR@,$AMTAR,;t t --s,@am__tar@,$am__tar,;t t --s,@am__untar@,$am__untar,;t t --s,@DEPDIR@,$DEPDIR,;t t --s,@am__include@,$am__include,;t t --s,@am__quote@,$am__quote,;t t --s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t --s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t --s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t --s,@CCDEPMODE@,$CCDEPMODE,;t t --s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t --s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t --s,@LN_S@,$LN_S,;t t --s,@RANLIB@,$RANLIB,;t t --s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t --s,@LIBTOOL@,$LIBTOOL,;t t --s,@WARN_CFLAGS@,$WARN_CFLAGS,;t t --s,@NO_WERROR@,$NO_WERROR,;t t --s,@YACC@,$YACC,;t t --s,@LEX@,$LEX,;t t --s,@LEXLIB@,$LEXLIB,;t t --s,@LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t --s,@CPP@,$CPP,;t t --s,@EGREP@,$EGREP,;t t --s,@ALLOCA@,$ALLOCA,;t t --s,@USE_NLS@,$USE_NLS,;t t --s,@MSGFMT@,$MSGFMT,;t t --s,@GMSGFMT@,$GMSGFMT,;t t --s,@XGETTEXT@,$XGETTEXT,;t t --s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t --s,@CATALOGS@,$CATALOGS,;t t --s,@CATOBJEXT@,$CATOBJEXT,;t t --s,@DATADIRNAME@,$DATADIRNAME,;t t --s,@GMOFILES@,$GMOFILES,;t t --s,@INSTOBJEXT@,$INSTOBJEXT,;t t --s,@INTLDEPS@,$INTLDEPS,;t t --s,@INTLLIBS@,$INTLLIBS,;t t --s,@INTLOBJS@,$INTLOBJS,;t t --s,@POFILES@,$POFILES,;t t --s,@POSUB@,$POSUB,;t t --s,@INCLUDE_LOCALE_H@,$INCLUDE_LOCALE_H,;t t --s,@GT_NO@,$GT_NO,;t t --s,@GT_YES@,$GT_YES,;t t --s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t --s,@l@,$l,;t t --s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t --s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t --s,@MAINT@,$MAINT,;t t --s,@HDEFINES@,$HDEFINES,;t t --s,@AR@,$AR,;t t --s,@CC_FOR_BUILD@,$CC_FOR_BUILD,;t t --s,@EXEEXT_FOR_BUILD@,$EXEEXT_FOR_BUILD,;t t --s,@DEMANGLER_NAME@,$DEMANGLER_NAME,;t t --s,@NLMCONV_DEFS@,$NLMCONV_DEFS,;t t --s,@BUILD_NLMCONV@,$BUILD_NLMCONV,;t t --s,@BUILD_SRCONV@,$BUILD_SRCONV,;t t --s,@BUILD_DLLTOOL@,$BUILD_DLLTOOL,;t t --s,@DLLTOOL_DEFS@,$DLLTOOL_DEFS,;t t --s,@BUILD_WINDRES@,$BUILD_WINDRES,;t t --s,@BUILD_DLLWRAP@,$BUILD_DLLWRAP,;t t --s,@BUILD_MISC@,$BUILD_MISC,;t t --s,@OBJDUMP_DEFS@,$OBJDUMP_DEFS,;t t --s,@EMULATION@,$EMULATION,;t t --s,@EMULATION_VECTOR@,$EMULATION_VECTOR,;t t --s,@datarootdir@,$datarootdir,;t t --s,@docdir@,$docdir,;t t --s,@htmldir@,$htmldir,;t t --s,@LIBOBJS@,$LIBOBJS,;t t --s,@LTLIBOBJS@,$LTLIBOBJS,;t t --CEOF -- --_ACEOF -- -- cat >>$CONFIG_STATUS <<\_ACEOF -- # Split the substitutions into bite-sized pieces for seds with -- # small command number limits, like on Digital OSF/1 and HP-UX. -- ac_max_sed_lines=48 -- ac_sed_frag=1 # Number of current file. -- ac_beg=1 # First line for current file. -- ac_end=$ac_max_sed_lines # Line after last line for current file. -- ac_more_lines=: -- ac_sed_cmds= -- while $ac_more_lines; do -- if test $ac_beg -gt 1; then -- sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag -- else -- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag -- fi -- if test ! -s $tmp/subs.frag; then -- ac_more_lines=false -- else -- # The purpose of the label and of the branching condition is to -- # speed up the sed processing (if there are no `@' at all, there -- # is no need to browse any of the substitutions). -- # These are the two extra sed commands mentioned above. -- (echo ':t -- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed -- if test -z "$ac_sed_cmds"; then -- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" -- else -- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" -- fi -- ac_sed_frag=`expr $ac_sed_frag + 1` -- ac_beg=$ac_end -- ac_end=`expr $ac_end + $ac_max_sed_lines` -- fi -- done -- if test -z "$ac_sed_cmds"; then -- ac_sed_cmds=cat -+if test -n "$CONFIG_FILES"; then ++ frag = find_frag(sec, havr->root.root.u.def.value); ++ if (!frag) ++ { ++ unsigned int i; ++ struct avr32_relax_data *rd = avr32_relax_data(sec); + -+_ACEOF ++ RDBG("In %s: No frag for %s <%s+%lu> (limit %lu)\n", ++ sec->owner->filename, havr->root.root.root.string, ++ sec->name, havr->root.root.u.def.value, sec->size); ++ for (i = 0; i < rd->frag_count; i++) ++ RDBG(" %8lu - %8lu\n", rd->frag[i].offset, ++ rd->frag[i].offset + rd->frag[i].size); ++ } ++ BFD_ASSERT(frag); + ++ havr->sym_frag = frag; ++ return TRUE; ++} + ++static bfd_boolean ++analyze_relocations(struct bfd_link_info *info) ++{ ++ bfd *abfd; ++ asection *sec; + -+ac_delim='%!_!# ' -+for ac_last_try in false false false false false :; do -+ cat >conf$$subs.sed <<_ACEOF -+SHELL!$SHELL$ac_delim -+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim -+PACKAGE_NAME!$PACKAGE_NAME$ac_delim -+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim -+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim -+PACKAGE_STRING!$PACKAGE_STRING$ac_delim -+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim -+exec_prefix!$exec_prefix$ac_delim -+prefix!$prefix$ac_delim -+program_transform_name!$program_transform_name$ac_delim -+bindir!$bindir$ac_delim -+sbindir!$sbindir$ac_delim -+libexecdir!$libexecdir$ac_delim -+datarootdir!$datarootdir$ac_delim -+datadir!$datadir$ac_delim -+sysconfdir!$sysconfdir$ac_delim -+sharedstatedir!$sharedstatedir$ac_delim -+localstatedir!$localstatedir$ac_delim -+includedir!$includedir$ac_delim -+oldincludedir!$oldincludedir$ac_delim -+docdir!$docdir$ac_delim -+infodir!$infodir$ac_delim -+htmldir!$htmldir$ac_delim -+dvidir!$dvidir$ac_delim -+pdfdir!$pdfdir$ac_delim -+psdir!$psdir$ac_delim -+libdir!$libdir$ac_delim -+localedir!$localedir$ac_delim -+mandir!$mandir$ac_delim -+DEFS!$DEFS$ac_delim -+ECHO_C!$ECHO_C$ac_delim -+ECHO_N!$ECHO_N$ac_delim -+ECHO_T!$ECHO_T$ac_delim -+LIBS!$LIBS$ac_delim -+build_alias!$build_alias$ac_delim -+host_alias!$host_alias$ac_delim -+target_alias!$target_alias$ac_delim -+build!$build$ac_delim -+build_cpu!$build_cpu$ac_delim -+build_vendor!$build_vendor$ac_delim -+build_os!$build_os$ac_delim -+host!$host$ac_delim -+host_cpu!$host_cpu$ac_delim -+host_vendor!$host_vendor$ac_delim -+host_os!$host_os$ac_delim -+target!$target$ac_delim -+target_cpu!$target_cpu$ac_delim -+target_vendor!$target_vendor$ac_delim -+target_os!$target_os$ac_delim -+CC!$CC$ac_delim -+CFLAGS!$CFLAGS$ac_delim -+LDFLAGS!$LDFLAGS$ac_delim -+CPPFLAGS!$CPPFLAGS$ac_delim -+ac_ct_CC!$ac_ct_CC$ac_delim -+EXEEXT!$EXEEXT$ac_delim -+OBJEXT!$OBJEXT$ac_delim -+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim -+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim -+INSTALL_DATA!$INSTALL_DATA$ac_delim -+CYGPATH_W!$CYGPATH_W$ac_delim -+PACKAGE!$PACKAGE$ac_delim -+VERSION!$VERSION$ac_delim -+ACLOCAL!$ACLOCAL$ac_delim -+AUTOCONF!$AUTOCONF$ac_delim -+AUTOMAKE!$AUTOMAKE$ac_delim -+AUTOHEADER!$AUTOHEADER$ac_delim -+MAKEINFO!$MAKEINFO$ac_delim -+install_sh!$install_sh$ac_delim -+STRIP!$STRIP$ac_delim -+INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim -+mkdir_p!$mkdir_p$ac_delim -+AWK!$AWK$ac_delim -+SET_MAKE!$SET_MAKE$ac_delim -+am__leading_dot!$am__leading_dot$ac_delim -+AMTAR!$AMTAR$ac_delim -+am__tar!$am__tar$ac_delim -+am__untar!$am__untar$ac_delim -+DEPDIR!$DEPDIR$ac_delim -+am__include!$am__include$ac_delim -+am__quote!$am__quote$ac_delim -+AMDEP_TRUE!$AMDEP_TRUE$ac_delim -+AMDEP_FALSE!$AMDEP_FALSE$ac_delim -+AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim -+CCDEPMODE!$CCDEPMODE$ac_delim -+am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim -+am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim -+LN_S!$LN_S$ac_delim -+RANLIB!$RANLIB$ac_delim -+LIBTOOL!$LIBTOOL$ac_delim -+WARN_CFLAGS!$WARN_CFLAGS$ac_delim -+NO_WERROR!$NO_WERROR$ac_delim -+YACC!$YACC$ac_delim -+YFLAGS!$YFLAGS$ac_delim -+LEX!$LEX$ac_delim -+LEX_OUTPUT_ROOT!$LEX_OUTPUT_ROOT$ac_delim -+LEXLIB!$LEXLIB$ac_delim -+CPP!$CPP$ac_delim -+_ACEOF ++ /* Divide all relaxable sections into fragments */ ++ for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) ++ { ++ if (!(elf_elfheader(abfd)->e_flags & EF_AVR32_LINKRELAX)) ++ { ++ if (!(*info->callbacks->warning) ++ (info, _("input is not relaxable"), NULL, abfd, NULL, 0)) ++ return FALSE; ++ continue; ++ } + -+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then -+ break -+ elif $ac_last_try; then -+ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} -+ { (exit 1); exit 1; }; } -+ else -+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi --fi # test -n "$CONFIG_FILES" -+done ++ for (sec = abfd->sections; sec; sec = sec->next) ++ { ++ struct avr32_relax_data *rd; ++ struct fragment *frag; ++ Elf_Internal_Rela *relocs; ++ unsigned int i; ++ bfd_boolean ret = TRUE; + -+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -+if test -n "$ac_eof"; then -+ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` -+ ac_eof=`expr $ac_eof + 1` -+fi ++ if (!(sec->flags & SEC_RELOC) || sec->reloc_count == 0) ++ continue; + -+cat >>$CONFIG_STATUS <<_ACEOF -+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof -+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -+_ACEOF -+sed ' -+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -+s/^/s,@/; s/!/@,|#_!!_#|/ -+:n -+t n -+s/'"$ac_delim"'$/,g/; t -+s/$/\\/; p -+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -+' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -+CEOF$ac_eof -+_ACEOF ++ rd = avr32_relax_data(sec); + ++ relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); ++ if (!relocs) ++ return FALSE; + -+ac_delim='%!_!# ' -+for ac_last_try in false false false false false :; do -+ cat >conf$$subs.sed <<_ACEOF -+GREP!$GREP$ac_delim -+EGREP!$EGREP$ac_delim -+ALLOCA!$ALLOCA$ac_delim -+USE_NLS!$USE_NLS$ac_delim -+MSGFMT!$MSGFMT$ac_delim -+GMSGFMT!$GMSGFMT$ac_delim -+XGETTEXT!$XGETTEXT$ac_delim -+USE_INCLUDED_LIBINTL!$USE_INCLUDED_LIBINTL$ac_delim -+CATALOGS!$CATALOGS$ac_delim -+CATOBJEXT!$CATOBJEXT$ac_delim -+DATADIRNAME!$DATADIRNAME$ac_delim -+GMOFILES!$GMOFILES$ac_delim -+INSTOBJEXT!$INSTOBJEXT$ac_delim -+INTLDEPS!$INTLDEPS$ac_delim -+INTLLIBS!$INTLLIBS$ac_delim -+INTLOBJS!$INTLOBJS$ac_delim -+POFILES!$POFILES$ac_delim -+POSUB!$POSUB$ac_delim -+INCLUDE_LOCALE_H!$INCLUDE_LOCALE_H$ac_delim -+GT_NO!$GT_NO$ac_delim -+GT_YES!$GT_YES$ac_delim -+MKINSTALLDIRS!$MKINSTALLDIRS$ac_delim -+l!$l$ac_delim -+MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim -+MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim -+MAINT!$MAINT$ac_delim -+HDEFINES!$HDEFINES$ac_delim -+AR!$AR$ac_delim -+CC_FOR_BUILD!$CC_FOR_BUILD$ac_delim -+EXEEXT_FOR_BUILD!$EXEEXT_FOR_BUILD$ac_delim -+DEMANGLER_NAME!$DEMANGLER_NAME$ac_delim -+NLMCONV_DEFS!$NLMCONV_DEFS$ac_delim -+BUILD_NLMCONV!$BUILD_NLMCONV$ac_delim -+BUILD_SRCONV!$BUILD_SRCONV$ac_delim -+BUILD_DLLTOOL!$BUILD_DLLTOOL$ac_delim -+DLLTOOL_DEFS!$DLLTOOL_DEFS$ac_delim -+BUILD_WINDRES!$BUILD_WINDRES$ac_delim -+BUILD_DLLWRAP!$BUILD_DLLWRAP$ac_delim -+BUILD_MISC!$BUILD_MISC$ac_delim -+OBJDUMP_DEFS!$OBJDUMP_DEFS$ac_delim -+EMULATION!$EMULATION$ac_delim -+EMULATION_VECTOR!$EMULATION_VECTOR$ac_delim -+LIBOBJS!$LIBOBJS$ac_delim -+LTLIBOBJS!$LTLIBOBJS$ac_delim -+_ACEOF ++ qsort(relocs, sec->reloc_count, sizeof(Elf_Internal_Rela), ++ internal_reloc_compare); + -+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 44; then -+ break -+ elif $ac_last_try; then -+ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} -+ { (exit 1); exit 1; }; } -+ else -+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! " -+ fi -+done - -+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -+if test -n "$ac_eof"; then -+ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` -+ ac_eof=`expr $ac_eof + 1` -+fi ++ for (i = 0; i < sec->reloc_count; i++) ++ { ++ enum relax_state_id state; + -+cat >>$CONFIG_STATUS <<_ACEOF -+cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof -+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end -+_ACEOF -+sed ' -+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -+s/^/s,@/; s/!/@,|#_!!_#|/ -+:n -+t n -+s/'"$ac_delim"'$/,g/; t -+s/$/\\/; p -+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -+' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -+:end -+s/|#_!!_#|//g -+CEOF$ac_eof - _ACEOF ++ ret = FALSE; ++ state = get_initial_relax_state(abfd, sec, info, &relocs[i]); ++ if (state == RS_ERROR) ++ break; + ++ if (state) ++ { ++ frag = new_frag(abfd, sec, rd, state, &relocs[i]); ++ if (!frag) ++ break; + -+# VPATH may cause trouble with some makes, so we remove $(srcdir), -+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -+# trailing colons and then remove the whole line if VPATH becomes empty -+# (actually we leave an empty line to preserve line numbers). -+if test "x$srcdir" = x.; then -+ ac_vpsub='/^[ ]*VPATH[ ]*=/{ -+s/:*\$(srcdir):*/:/ -+s/:*\${srcdir}:*/:/ -+s/:*@srcdir@:*/:/ -+s/^\([^=]*=[ ]*\):*/\1/ -+s/:*$// -+s/^[^=]*=[ ]*$// -+}' -+fi ++ pin_internal_relocs(sec, relocs); ++ rd->is_relaxable = TRUE; ++ } + - cat >>$CONFIG_STATUS <<\_ACEOF --for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue -- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". -- case $ac_file in -- - | *:- | *:-:* ) # input from stdin -- cat >$tmp/stdin -- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; -- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; -- * ) ac_file_in=$ac_file.in ;; -+fi # test -n "$CONFIG_FILES" ++ ret = TRUE; ++ } + ++ release_internal_relocs(sec, relocs); ++ if (!ret) ++ return ret; + -+for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS -+do -+ case $ac_tag in -+ :[FHLC]) ac_mode=$ac_tag; continue;; -+ esac -+ case $ac_mode$ac_tag in -+ :[FHL]*:*);; -+ :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 -+echo "$as_me: error: Invalid tag $ac_tag." >&2;} -+ { (exit 1); exit 1; }; };; -+ :[FH]-) ac_tag=-:-;; -+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; -+ esac -+ ac_save_IFS=$IFS -+ IFS=: -+ set x $ac_tag -+ IFS=$ac_save_IFS -+ shift -+ ac_file=$1 -+ shift ++ if (rd->is_relaxable) ++ { ++ frag = new_frag(abfd, sec, rd, RS_NONE, NULL); ++ if (!frag) ++ return FALSE; ++ } ++ } ++ } + -+ case $ac_mode in -+ :L) ac_source=$1;; -+ :[FH]) -+ ac_file_inputs= -+ for ac_f -+ do -+ case $ac_f in -+ -) ac_f="$tmp/stdin";; -+ *) # Look for the file first in the build tree, then in the source tree -+ # (if the path is not absolute). The absolute path cannot be DOS-style, -+ # because $ac_f cannot contain `:'. -+ test -f "$ac_f" || -+ case $ac_f in -+ [\\/$]*) false;; -+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; -+ esac || -+ { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -+echo "$as_me: error: cannot find input file: $ac_f" >&2;} -+ { (exit 1); exit 1; }; };; -+ esac -+ ac_file_inputs="$ac_file_inputs $ac_f" -+ done ++ /* Link each global symbol to the fragment where it's defined. */ ++ elf_link_hash_traverse(elf_hash_table(info), global_sym_set_frag, info); + -+ # Let's still pretend it is `configure' which instantiates (i.e., don't -+ # use $as_me), people would be surprised to read: -+ # /* config.h. Generated by config.status. */ -+ configure_input="Generated from "`IFS=: -+ echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." -+ if test x"$ac_file" != x-; then -+ configure_input="$ac_file. $configure_input" -+ { echo "$as_me:$LINENO: creating $ac_file" >&5 -+echo "$as_me: creating $ac_file" >&6;} -+ fi ++ /* Do the same for local symbols. */ ++ for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) ++ { ++ Elf_Internal_Sym *isymbuf, *isym; ++ struct fragment **local_sym_frag; ++ unsigned int i, sym_count; + -+ case $ac_tag in -+ *:-:* | *:-) cat >"$tmp/stdin";; -+ esac -+ ;; - esac - -- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. -- ac_dir=`(dirname "$ac_file") 2>/dev/null || -+ ac_dir=`$as_dirname -- "$ac_file" || - $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ -- X"$ac_file" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || - echo X"$ac_file" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -- { if $as_mkdir_p; then -- mkdir -p "$ac_dir" -- else -- as_dir="$ac_dir" -+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)[^/].*/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` -+ { as_dir="$ac_dir" -+ case $as_dir in #( -+ -*) as_dir=./$as_dir;; -+ esac -+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= -- while test ! -d "$as_dir"; do -- as_dirs="$as_dir $as_dirs" -- as_dir=`(dirname "$as_dir") 2>/dev/null || -+ while :; do -+ case $as_dir in #( -+ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( -+ *) as_qdir=$as_dir;; -+ esac -+ as_dirs="'$as_qdir' $as_dirs" -+ as_dir=`$as_dirname -- "$as_dir" || - $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ -- X"$as_dir" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || - echo X"$as_dir" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)[^/].*/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` -+ test -d "$as_dir" && break - done -- test ! -n "$as_dirs" || mkdir $as_dirs -- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 --echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} -+ test -z "$as_dirs" || eval "mkdir $as_dirs" -+ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -+echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } -- - ac_builddir=. - --if test "$ac_dir" != .; then -+case "$ac_dir" in -+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -+*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` -- # A "../" for each directory in $ac_dir_suffix. -- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` --else -- ac_dir_suffix= ac_top_builddir= --fi -+ # A ".." for each directory in $ac_dir_suffix. -+ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` -+ case $ac_top_builddir_sub in -+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;; -+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; -+ esac ;; -+esac -+ac_abs_top_builddir=$ac_pwd -+ac_abs_builddir=$ac_pwd$ac_dir_suffix -+# for backward compatibility: -+ac_top_builddir=$ac_top_build_prefix - - case $srcdir in -- .) # No --srcdir option. We are building in place. -+ .) # We are building in place. - ac_srcdir=. -- if test -z "$ac_top_builddir"; then -- ac_top_srcdir=. -- else -- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` -- fi ;; -- [\\/]* | ?:[\\/]* ) # Absolute path. -+ ac_top_srcdir=$ac_top_builddir_sub -+ ac_abs_top_srcdir=$ac_pwd ;; -+ [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; -- ac_top_srcdir=$srcdir ;; -- *) # Relative path. -- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix -- ac_top_srcdir=$ac_top_builddir$srcdir ;; --esac -+ ac_top_srcdir=$srcdir -+ ac_abs_top_srcdir=$srcdir ;; -+ *) # Relative name. -+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix -+ ac_top_srcdir=$ac_top_build_prefix$srcdir -+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -+esac -+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - --# Do not use `cd foo && pwd` to compute absolute paths, because --# the directories may not exist. --case `pwd` in --.) ac_abs_builddir="$ac_dir";; --*) -- case "$ac_dir" in -- .) ac_abs_builddir=`pwd`;; -- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; -- *) ac_abs_builddir=`pwd`/"$ac_dir";; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_builddir=${ac_top_builddir}.;; --*) -- case ${ac_top_builddir}. in -- .) ac_abs_top_builddir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; -- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_srcdir=$ac_srcdir;; --*) -- case $ac_srcdir in -- .) ac_abs_srcdir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; -- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_srcdir=$ac_top_srcdir;; --*) -- case $ac_top_srcdir in -- .) ac_abs_top_srcdir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; -- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; -- esac;; --esac - -+ case $ac_mode in -+ :F) -+ # -+ # CONFIG_FILE -+ # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; -- *) ac_INSTALL=$ac_top_builddir$INSTALL ;; -+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac -+_ACEOF - -- if test x"$ac_file" != x-; then -- { echo "$as_me:$LINENO: creating $ac_file" >&5 --echo "$as_me: creating $ac_file" >&6;} -- rm -f "$ac_file" -- fi -- # Let's still pretend it is `configure' which instantiates (i.e., don't -- # use $as_me), people would be surprised to read: -- # /* config.h. Generated by config.status. */ -- if test x"$ac_file" = x-; then -- configure_input= -- else -- configure_input="$ac_file. " -- fi -- configure_input=$configure_input"Generated from `echo $ac_file_in | -- sed 's,.*/,,'` by configure." -- -- # First look for the input files in the build tree, otherwise in the -- # src tree. -- ac_file_inputs=`IFS=: -- for f in $ac_file_in; do -- case $f in -- -) echo $tmp/stdin ;; -- [\\/$]*) -- # Absolute (can't be DOS-style, as IFS=:) -- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 --echo "$as_me: error: cannot find input file: $f" >&2;} -- { (exit 1); exit 1; }; } -- echo "$f";; -- *) # Relative -- if test -f "$f"; then -- # Build tree -- echo "$f" -- elif test -f "$srcdir/$f"; then -- # Source tree -- echo "$srcdir/$f" -- else -- # /dev/null tree -- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 --echo "$as_me: error: cannot find input file: $f" >&2;} -- { (exit 1); exit 1; }; } -- fi;; -- esac -- done` || { (exit 1); exit 1; } -+cat >>$CONFIG_STATUS <<\_ACEOF -+# If the template does not know about datarootdir, expand it. -+# FIXME: This hack should be removed a few years after 2.60. -+ac_datarootdir_hack=; ac_datarootdir_seen= ++ sym_count = elf_tdata(abfd)->symtab_hdr.sh_info; ++ if (sym_count == 0) ++ continue; + -+case `sed -n '/datarootdir/ { -+ p -+ q -+} -+/@datadir@/p -+/@docdir@/p -+/@infodir@/p -+/@localedir@/p -+/@mandir@/p -+' $ac_file_inputs` in -+*datarootdir*) ac_datarootdir_seen=yes;; -+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) -+ { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -+_ACEOF -+cat >>$CONFIG_STATUS <<_ACEOF -+ ac_datarootdir_hack=' -+ s&@datadir@&$datadir&g -+ s&@docdir@&$docdir&g -+ s&@infodir@&$infodir&g -+ s&@localedir@&$localedir&g -+ s&@mandir@&$mandir&g -+ s&\\\${datarootdir}&$datarootdir&g' ;; -+esac - _ACEOF ++ local_sym_frag = bfd_zalloc(abfd, sym_count * sizeof(struct fragment *)); ++ if (!local_sym_frag) ++ return FALSE; ++ elf_tdata(abfd)->local_sym_frag = local_sym_frag; + -+# Neutralize VPATH when `$srcdir' = `.'. -+# Shell code in configure.ac might set extrasub. -+# FIXME: do we really want to maintain this feature? - cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub - $extrasub -@@ -11790,248 +12317,130 @@ _ACEOF - cat >>$CONFIG_STATUS <<\_ACEOF - :t - /@[a-zA-Z_][a-zA-Z_0-9]*@/!b --s,@configure_input@,$configure_input,;t t --s,@srcdir@,$ac_srcdir,;t t --s,@abs_srcdir@,$ac_abs_srcdir,;t t --s,@top_srcdir@,$ac_top_srcdir,;t t --s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t --s,@builddir@,$ac_builddir,;t t --s,@abs_builddir@,$ac_abs_builddir,;t t --s,@top_builddir@,$ac_top_builddir,;t t --s,@abs_top_builddir@,$ac_abs_top_builddir,;t t --s,@INSTALL@,$ac_INSTALL,;t t --" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out -- rm -f $tmp/stdin -- if test x"$ac_file" != x-; then -- mv $tmp/out $ac_file -- else -- cat $tmp/out -- rm -f $tmp/out -- fi -- --done --_ACEOF --cat >>$CONFIG_STATUS <<\_ACEOF -- --# --# CONFIG_HEADER section. --# -- --# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where --# NAME is the cpp macro being defined and VALUE is the value it is being given. --# --# ac_d sets the value in "#define NAME VALUE" lines. --ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' --ac_dB='[ ].*$,\1#\2' --ac_dC=' ' --ac_dD=',;t' --# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". --ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' --ac_uB='$,\1#\2define\3' --ac_uC=' ' --ac_uD=',;t' -+s&@configure_input@&$configure_input&;t t -+s&@top_builddir@&$ac_top_builddir_sub&;t t -+s&@srcdir@&$ac_srcdir&;t t -+s&@abs_srcdir@&$ac_abs_srcdir&;t t -+s&@top_srcdir@&$ac_top_srcdir&;t t -+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -+s&@builddir@&$ac_builddir&;t t -+s&@abs_builddir@&$ac_abs_builddir&;t t -+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -+s&@INSTALL@&$ac_INSTALL&;t t -+$ac_datarootdir_hack -+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out ++ isymbuf = retrieve_local_syms(abfd, info->keep_memory); ++ if (!isymbuf) ++ return FALSE; + -+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && -+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && -+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && -+ { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' -+which seems to be undefined. Please make sure it is defined." >&5 -+echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -+which seems to be undefined. Please make sure it is defined." >&2;} - --for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue -- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". -+ rm -f "$tmp/stdin" - case $ac_file in -- - | *:- | *:-:* ) # input from stdin -- cat >$tmp/stdin -- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; -- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; -- * ) ac_file_in=$ac_file.in ;; -+ -) cat "$tmp/out"; rm -f "$tmp/out";; -+ *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; - esac -+ ;; -+ :H) -+ # -+ # CONFIG_HEADER -+ # -+_ACEOF ++ for (i = 0; i < sym_count; i++) ++ { ++ struct avr32_relax_data *rd; ++ struct fragment *frag; ++ asection *sec; + -+# Transform confdefs.h into a sed script `conftest.defines', that -+# substitutes the proper values into config.h.in to produce config.h. -+rm -f conftest.defines conftest.tail -+# First, append a space to every undef/define line, to ease matching. -+echo 's/$/ /' >conftest.defines -+# Then, protect against being on the right side of a sed subst, or in -+# an unquoted here document, in config.status. If some macros were -+# called several times there might be several #defines for the same -+# symbol, which is useless. But do not sort them, since the last -+# AC_DEFINE must be honored. -+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -+# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where -+# NAME is the cpp macro being defined, VALUE is the value it is being given. -+# PARAMS is the parameter list in the macro definition--in most cases, it's -+# just an empty string. -+ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' -+ac_dB='\\)[ (].*,\\1define\\2' -+ac_dC=' ' -+ac_dD=' ,' - -- test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 --echo "$as_me: creating $ac_file" >&6;} -- -- # First look for the input files in the build tree, otherwise in the -- # src tree. -- ac_file_inputs=`IFS=: -- for f in $ac_file_in; do -- case $f in -- -) echo $tmp/stdin ;; -- [\\/$]*) -- # Absolute (can't be DOS-style, as IFS=:) -- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 --echo "$as_me: error: cannot find input file: $f" >&2;} -- { (exit 1); exit 1; }; } -- # Do quote $f, to prevent DOS paths from being IFS'd. -- echo "$f";; -- *) # Relative -- if test -f "$f"; then -- # Build tree -- echo "$f" -- elif test -f "$srcdir/$f"; then -- # Source tree -- echo "$srcdir/$f" -- else -- # /dev/null tree -- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 --echo "$as_me: error: cannot find input file: $f" >&2;} -- { (exit 1); exit 1; }; } -- fi;; -- esac -- done` || { (exit 1); exit 1; } -- # Remove the trailing spaces. -- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in -- --_ACEOF -- --# Transform confdefs.h into two sed scripts, `conftest.defines' and --# `conftest.undefs', that substitutes the proper values into --# config.h.in to produce config.h. The first handles `#define' --# templates, and the second `#undef' templates. --# And first: Protect against being on the right side of a sed subst in --# config.status. Protect against being in an unquoted here document --# in config.status. --rm -f conftest.defines conftest.undefs --# Using a here document instead of a string reduces the quoting nightmare. --# Putting comments in sed scripts is not portable. --# --# `end' is used to avoid that the second main sed command (meant for --# 0-ary CPP macros) applies to n-ary macro definitions. --# See the Autoconf documentation for `clear'. --cat >confdef2sed.sed <<\_ACEOF --s/[\\&,]/\\&/g --s,[\\$`],\\&,g --t clear --: clear --s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp --t end --s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp --: end --_ACEOF --# If some macros were called several times there might be several times --# the same #defines, which is useless. Nevertheless, we may not want to --# sort them, since we want the *last* AC-DEFINE to be honored. --uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines --sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs --rm -f confdef2sed.sed -+uniq confdefs.h | -+ sed -n ' -+ t rset -+ :rset -+ s/^[ ]*#[ ]*define[ ][ ]*// -+ t ok -+ d -+ :ok -+ s/[\\&,]/\\&/g -+ s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p -+ s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p -+ ' >>conftest.defines - --# This sed command replaces #undef with comments. This is necessary, for -+# Remove the space that was appended to ease matching. -+# Then replace #undef with comments. This is necessary, for - # example, in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. --cat >>conftest.undefs <<\_ACEOF --s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, -+# (The regexp can be short, since the line contains either #define or #undef.) -+echo 's/ $// -+s,^[ #]*u.*,/* & */,' >>conftest.defines ++ isym = &isymbuf[i]; + -+# Break up conftest.defines: -+ac_max_sed_lines=50 ++ sec = bfd_section_from_elf_index(abfd, isym->st_shndx); ++ if (!sec) ++ continue; + -+# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" -+# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" -+# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" -+# et cetera. -+ac_in='$ac_file_inputs' -+ac_out='"$tmp/out1"' -+ac_nxt='"$tmp/out2"' ++ rd = avr32_relax_data(sec); ++ if (!rd->is_relaxable) ++ continue; + -+while : -+do -+ # Write a here document: -+ cat >>$CONFIG_STATUS <<_ACEOF -+ # First, check the format of the line: -+ cat >"\$tmp/defines.sed" <<\\CEOF -+/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def -+/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def -+b -+:def - _ACEOF -- --# Break up conftest.defines because some shells have a limit on the size --# of here documents, and old seds have small limits too (100 cmds). --echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS --echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS --echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS --echo ' :' >>$CONFIG_STATUS --rm -f conftest.tail --while grep . conftest.defines >/dev/null --do -- # Write a limited-size here document to $tmp/defines.sed. -- echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS -- # Speed up: don't consider the non `#define' lines. -- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS -- # Work around the forget-to-reset-the-flag bug. -- echo 't clr' >>$CONFIG_STATUS -- echo ': clr' >>$CONFIG_STATUS -- sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS -+ sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF -- sed -f $tmp/defines.sed $tmp/in >$tmp/out -- rm -f $tmp/in -- mv $tmp/out $tmp/in --' >>$CONFIG_STATUS -- sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail -+ sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS -+ ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in -+ sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail -+ grep . conftest.tail >/dev/null || break - rm -f conftest.defines - mv conftest.tail conftest.defines - done --rm -f conftest.defines --echo ' fi # grep' >>$CONFIG_STATUS --echo >>$CONFIG_STATUS -- --# Break up conftest.undefs because some shells have a limit on the size --# of here documents, and old seds have small limits too (100 cmds). --echo ' # Handle all the #undef templates' >>$CONFIG_STATUS --rm -f conftest.tail --while grep . conftest.undefs >/dev/null --do -- # Write a limited-size here document to $tmp/undefs.sed. -- echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS -- # Speed up: don't consider the non `#undef' -- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS -- # Work around the forget-to-reset-the-flag bug. -- echo 't clr' >>$CONFIG_STATUS -- echo ': clr' >>$CONFIG_STATUS -- sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS -- echo 'CEOF -- sed -f $tmp/undefs.sed $tmp/in >$tmp/out -- rm -f $tmp/in -- mv $tmp/out $tmp/in --' >>$CONFIG_STATUS -- sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail -- rm -f conftest.undefs -- mv conftest.tail conftest.undefs --done --rm -f conftest.undefs -+rm -f conftest.defines conftest.tail - -+echo "ac_result=$ac_in" >>$CONFIG_STATUS - cat >>$CONFIG_STATUS <<\_ACEOF -- # Let's still pretend it is `configure' which instantiates (i.e., don't -- # use $as_me), people would be surprised to read: -- # /* config.h. Generated by config.status. */ -- if test x"$ac_file" = x-; then -- echo "/* Generated by configure. */" >$tmp/config.h -- else -- echo "/* $ac_file. Generated by configure. */" >$tmp/config.h -- fi -- cat $tmp/in >>$tmp/config.h -- rm -f $tmp/in - if test x"$ac_file" != x-; then -- if diff $ac_file $tmp/config.h >/dev/null 2>&1; then -+ echo "/* $configure_input */" >"$tmp/config.h" -+ cat "$ac_result" >>"$tmp/config.h" -+ if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 - echo "$as_me: $ac_file is unchanged" >&6;} - else -- ac_dir=`(dirname "$ac_file") 2>/dev/null || --$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$ac_file" : 'X\(//\)[^/]' \| \ -- X"$ac_file" : 'X\(//\)$' \| \ -- X"$ac_file" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || --echo X"$ac_file" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -- { if $as_mkdir_p; then -- mkdir -p "$ac_dir" -- else -- as_dir="$ac_dir" -- as_dirs= -- while test ! -d "$as_dir"; do -- as_dirs="$as_dir $as_dirs" -- as_dir=`(dirname "$as_dir") 2>/dev/null || --$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$as_dir" : 'X\(//\)[^/]' \| \ -- X"$as_dir" : 'X\(//\)$' \| \ -- X"$as_dir" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || --echo X"$as_dir" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -- done -- test ! -n "$as_dirs" || mkdir $as_dirs -- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 --echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} -- { (exit 1); exit 1; }; }; } -- - rm -f $ac_file -- mv $tmp/config.h $ac_file -+ mv "$tmp/config.h" $ac_file - fi - else -- cat $tmp/config.h -- rm -f $tmp/config.h -+ echo "/* $configure_input */" -+ cat "$ac_result" - fi -+ rm -f "$tmp/out12" - # Compute $ac_file's index in $config_headers. - _am_stamp_count=1 - for _am_header in $config_headers :; do -@@ -12042,135 +12451,39 @@ for _am_header in $config_headers :; do - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac - done --echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || -+echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || - $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X$ac_file : 'X\(//\)[^/]' \| \ - X$ac_file : 'X\(//\)$' \| \ -- X$ac_file : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X$ac_file : 'X\(/\)' \| . 2>/dev/null || - echo X$ac_file | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'`/stamp-h$_am_stamp_count --done --_ACEOF --cat >>$CONFIG_STATUS <<\_ACEOF -- --# --# CONFIG_COMMANDS section. --# --for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue -- ac_dest=`echo "$ac_file" | sed 's,:.*,,'` -- ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_dir=`(dirname "$ac_dest") 2>/dev/null || --$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$ac_dest" : 'X\(//\)[^/]' \| \ -- X"$ac_dest" : 'X\(//\)$' \| \ -- X"$ac_dest" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || --echo X"$ac_dest" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -- { if $as_mkdir_p; then -- mkdir -p "$ac_dir" -- else -- as_dir="$ac_dir" -- as_dirs= -- while test ! -d "$as_dir"; do -- as_dirs="$as_dir $as_dirs" -- as_dir=`(dirname "$as_dir") 2>/dev/null || --$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$as_dir" : 'X\(//\)[^/]' \| \ -- X"$as_dir" : 'X\(//\)$' \| \ -- X"$as_dir" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || --echo X"$as_dir" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -- done -- test ! -n "$as_dirs" || mkdir $as_dirs -- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 --echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} -- { (exit 1); exit 1; }; }; } -- -- ac_builddir=. -- --if test "$ac_dir" != .; then -- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` -- # A "../" for each directory in $ac_dir_suffix. -- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` --else -- ac_dir_suffix= ac_top_builddir= --fi -- --case $srcdir in -- .) # No --srcdir option. We are building in place. -- ac_srcdir=. -- if test -z "$ac_top_builddir"; then -- ac_top_srcdir=. -- else -- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` -- fi ;; -- [\\/]* | ?:[\\/]* ) # Absolute path. -- ac_srcdir=$srcdir$ac_dir_suffix; -- ac_top_srcdir=$srcdir ;; -- *) # Relative path. -- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix -- ac_top_srcdir=$ac_top_builddir$srcdir ;; --esac -+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)[^/].*/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'`/stamp-h$_am_stamp_count -+ ;; - --# Do not use `cd foo && pwd` to compute absolute paths, because --# the directories may not exist. --case `pwd` in --.) ac_abs_builddir="$ac_dir";; --*) -- case "$ac_dir" in -- .) ac_abs_builddir=`pwd`;; -- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; -- *) ac_abs_builddir=`pwd`/"$ac_dir";; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_builddir=${ac_top_builddir}.;; --*) -- case ${ac_top_builddir}. in -- .) ac_abs_top_builddir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; -- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_srcdir=$ac_srcdir;; --*) -- case $ac_srcdir in -- .) ac_abs_srcdir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; -- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_srcdir=$ac_top_srcdir;; --*) -- case $ac_top_srcdir in -- .) ac_abs_top_srcdir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; -- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; -- esac;; --esac -+ :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 -+echo "$as_me: executing $ac_file commands" >&6;} -+ ;; -+ esac - - -- { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 --echo "$as_me: executing $ac_dest commands" >&6;} -- case $ac_dest in -- depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do -+ case $ac_file$ac_mode in -+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. -@@ -12180,18 +12493,29 @@ echo "$as_me: executing $ac_dest command - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then -- dirpart=`(dirname "$mf") 2>/dev/null || -+ dirpart=`$as_dirname -- "$mf" || - $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ -- X"$mf" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$mf" : 'X\(/\)' \| . 2>/dev/null || - echo X"$mf" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)[^/].*/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` - else - continue - fi -@@ -12213,58 +12537,84 @@ echo X"$mf" | - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue -- fdir=`(dirname "$file") 2>/dev/null || -+ fdir=`$as_dirname -- "$file" || - $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ -- X"$file" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$file" : 'X\(/\)' \| . 2>/dev/null || - echo X"$file" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -- { if $as_mkdir_p; then -- mkdir -p $dirpart/$fdir -- else -- as_dir=$dirpart/$fdir -+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)[^/].*/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` -+ { as_dir=$dirpart/$fdir -+ case $as_dir in #( -+ -*) as_dir=./$as_dir;; -+ esac -+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= -- while test ! -d "$as_dir"; do -- as_dirs="$as_dir $as_dirs" -- as_dir=`(dirname "$as_dir") 2>/dev/null || -+ while :; do -+ case $as_dir in #( -+ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( -+ *) as_qdir=$as_dir;; -+ esac -+ as_dirs="'$as_qdir' $as_dirs" -+ as_dir=`$as_dirname -- "$as_dir" || - $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ -- X"$as_dir" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || - echo X"$as_dir" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)[^/].*/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` -+ test -d "$as_dir" && break - done -- test ! -n "$as_dirs" || mkdir $as_dirs -- fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 --echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} -+ test -z "$as_dirs" || eval "mkdir $as_dirs" -+ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -+echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } -- - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done - ;; -- default ) -+ "default":C) - case "x$CONFIG_FILES" in - *) sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;; - esac - ;; ++ frag = find_frag(sec, isym->st_value); ++ BFD_ASSERT(frag); + - esac --done --_ACEOF -+done # for ac_tag - --cat >>$CONFIG_STATUS <<\_ACEOF - - { (exit 0); exit 0; } - _ACEOF -diff -Nrup binutils-2.17/binutils/doc/Makefile.in binutils-2.17-atmel/binutils/doc/Makefile.in ---- binutils-2.17/binutils/doc/Makefile.in 2006-06-03 06:45:50.000000000 +0200 -+++ binutils-2.17-atmel/binutils/doc/Makefile.in 2007-02-20 16:07:21.000000000 +0100 -@@ -109,6 +109,7 @@ EXEEXT = @EXEEXT@ - EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ - GMOFILES = @GMOFILES@ - GMSGFMT = @GMSGFMT@ -+GREP = @GREP@ - GT_NO = @GT_NO@ - GT_YES = @GT_YES@ - HDEFINES = @HDEFINES@ -@@ -159,9 +160,8 @@ VERSION = @VERSION@ - WARN_CFLAGS = @WARN_CFLAGS@ - XGETTEXT = @XGETTEXT@ - YACC = @YACC@ -+YFLAGS = @YFLAGS@ - ac_ct_CC = @ac_ct_CC@ --ac_ct_RANLIB = @ac_ct_RANLIB@ --ac_ct_STRIP = @ac_ct_STRIP@ - am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ - am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ - am__include = @am__include@ -@@ -178,6 +178,7 @@ build_vendor = @build_vendor@ - datadir = @datadir@ - datarootdir = @datarootdir@ - docdir = @docdir@ -+dvidir = @dvidir@ - exec_prefix = @exec_prefix@ - host = @host@ - host_alias = @host_alias@ -@@ -191,12 +192,15 @@ install_sh = @install_sh@ - l = @l@ - libdir = @libdir@ - libexecdir = @libexecdir@ -+localedir = @localedir@ - localstatedir = @localstatedir@ - mandir = @mandir@ - mkdir_p = @mkdir_p@ - oldincludedir = @oldincludedir@ -+pdfdir = @pdfdir@ - prefix = @prefix@ - program_transform_name = @program_transform_name@ -+psdir = @psdir@ - sbindir = @sbindir@ - sharedstatedir = @sharedstatedir@ - sysconfdir = @sysconfdir@ -@@ -368,10 +372,13 @@ dist-info: $(INFO_DEPS) - $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ - esac; \ - if test -f $$base; then d=.; else d=$(srcdir); fi; \ -- for file in $$d/$$base*; do \ -- relfile=`expr "$$file" : "$$d/\(.*\)"`; \ -- test -f $(distdir)/$$relfile || \ -- cp -p $$file $(distdir)/$$relfile; \ -+ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ -+ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ -+ if test -f $$file; then \ -+ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ -+ test -f $(distdir)/$$relfile || \ -+ cp -p $$file $(distdir)/$$relfile; \ -+ else :; fi; \ - done; \ - done - -diff -Nrup binutils-2.17/binutils/Makefile.am binutils-2.17-atmel/binutils/Makefile.am ---- binutils-2.17/binutils/Makefile.am 2006-04-06 23:49:26.000000000 +0200 -+++ binutils-2.17-atmel/binutils/Makefile.am 2007-02-12 15:37:09.000000000 +0100 -@@ -511,7 +511,7 @@ readelf.o: readelf.c dwarf.h ../bfd/bfd. - $(INCDIR)/symcat.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/elf/common.h \ - $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/alpha.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/elf/arc.h $(INCDIR)/elf/arm.h \ -- $(INCDIR)/elf/avr.h $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h \ -+ $(INCDIR)/elf/avr.h $(INCDIR)/elf/avr32.h $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h \ - $(INCDIR)/elf/d10v.h $(INCDIR)/elf/d30v.h $(INCDIR)/elf/dlx.h \ - $(INCDIR)/elf/fr30.h $(INCDIR)/elf/frv.h $(INCDIR)/elf/h8.h \ - $(INCDIR)/elf/hppa.h $(INCDIR)/elf/i386.h $(INCDIR)/elf/i370.h \ -diff -Nrup binutils-2.17/binutils/Makefile.in binutils-2.17-atmel/binutils/Makefile.in ---- binutils-2.17/binutils/Makefile.in 2006-06-02 04:21:08.000000000 +0200 -+++ binutils-2.17-atmel/binutils/Makefile.in 2007-02-20 16:07:22.000000000 +0100 -@@ -266,6 +266,7 @@ EXEEXT = @EXEEXT@ - EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ - GMOFILES = @GMOFILES@ - GMSGFMT = @GMSGFMT@ -+GREP = @GREP@ - GT_NO = @GT_NO@ - GT_YES = @GT_YES@ - HDEFINES = @HDEFINES@ -@@ -316,9 +317,8 @@ VERSION = @VERSION@ - WARN_CFLAGS = @WARN_CFLAGS@ - XGETTEXT = @XGETTEXT@ - YACC = `if [ -f ../bison/bison ]; then echo ../bison/bison -y -L$(srcdir)/../bison/; else echo @YACC@; fi` -+YFLAGS = -d - ac_ct_CC = @ac_ct_CC@ --ac_ct_RANLIB = @ac_ct_RANLIB@ --ac_ct_STRIP = @ac_ct_STRIP@ - am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ - am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ - am__include = @am__include@ -@@ -335,6 +335,7 @@ build_vendor = @build_vendor@ - datadir = @datadir@ - datarootdir = @datarootdir@ - docdir = @docdir@ -+dvidir = @dvidir@ - exec_prefix = @exec_prefix@ - host = @host@ - host_alias = @host_alias@ -@@ -348,12 +349,15 @@ install_sh = @install_sh@ - l = @l@ - libdir = @libdir@ - libexecdir = @libexecdir@ -+localedir = @localedir@ - localstatedir = @localstatedir@ - mandir = @mandir@ - mkdir_p = @mkdir_p@ - oldincludedir = @oldincludedir@ -+pdfdir = @pdfdir@ - prefix = @prefix@ - program_transform_name = @program_transform_name@ -+psdir = @psdir@ - sbindir = @sbindir@ - sharedstatedir = @sharedstatedir@ - sysconfdir = @sysconfdir@ -@@ -365,7 +369,6 @@ target_vendor = @target_vendor@ - AUTOMAKE_OPTIONS = cygnus dejagnu - SUBDIRS = doc po - tooldir = $(exec_prefix)/$(target_alias) --YFLAGS = -d - AM_CFLAGS = $(WARN_CFLAGS) - - # these two are almost the same program -@@ -1264,7 +1267,7 @@ readelf.o: readelf.c dwarf.h ../bfd/bfd. - $(INCDIR)/symcat.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/elf/common.h \ - $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/alpha.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/elf/arc.h $(INCDIR)/elf/arm.h \ -- $(INCDIR)/elf/avr.h $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h \ -+ $(INCDIR)/elf/avr.h $(INCDIR)/elf/avr32.h $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h \ - $(INCDIR)/elf/d10v.h $(INCDIR)/elf/d30v.h $(INCDIR)/elf/dlx.h \ - $(INCDIR)/elf/fr30.h $(INCDIR)/elf/frv.h $(INCDIR)/elf/h8.h \ - $(INCDIR)/elf/hppa.h $(INCDIR)/elf/i386.h $(INCDIR)/elf/i370.h \ -diff -Nrup binutils-2.17/binutils/readelf.c binutils-2.17-atmel/binutils/readelf.c ---- binutils-2.17/binutils/readelf.c 2006-03-10 18:20:28.000000000 +0100 -+++ binutils-2.17-atmel/binutils/readelf.c 2007-02-12 15:37:09.000000000 +0100 -@@ -71,6 +71,7 @@ - #include "elf/arc.h" - #include "elf/arm.h" - #include "elf/avr.h" -+#include "elf/avr32.h" - #include "elf/bfin.h" - #include "elf/cris.h" - #include "elf/d10v.h" -@@ -590,6 +591,7 @@ guess_is_rela (unsigned long e_machine) - case EM_MCORE: - case EM_IA_64: - case EM_AVR: -+ case EM_AVR32: - case EM_AVR_OLD: - case EM_CRIS: - case EM_860: -@@ -959,6 +961,10 @@ dump_relocations (FILE *file, - rtype = elf_avr_reloc_type (type); - break; - -+ case EM_AVR32: -+ rtype = elf_avr32_reloc_type (type); ++ local_sym_frag[i] = frag; ++ } ++ ++ release_local_syms(abfd, isymbuf); ++ } ++ ++ /* And again for relocs with addends and constant pool references */ ++ for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) ++ for (sec = abfd->sections; sec; sec = sec->next) ++ { ++ Elf_Internal_Rela *relocs; ++ bfd_boolean ret; ++ ++ if (!(sec->flags & SEC_RELOC) || sec->reloc_count == 0) ++ continue; ++ ++ relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); ++ if (!relocs) ++ return FALSE; ++ ++ ret = allocate_reloc_data(abfd, sec, relocs, info); ++ ++ release_internal_relocs(sec, relocs); ++ if (ret == FALSE) ++ return ret; ++ } ++ ++ return TRUE; ++} ++ ++static bfd_boolean ++rs_is_good_enough(const struct relax_state *rs, struct fragment *frag, ++ bfd_vma symval, bfd_vma addr, struct got_entry *got, ++ struct avr32_reloc_data *ind_data, ++ bfd_signed_vma offset_adjust) ++{ ++ bfd_signed_vma target = 0; ++ ++ switch (rs->reftype) ++ { ++ case REF_ABSOLUTE: ++ target = symval; ++ break; ++ case REF_PCREL: ++ target = symval - addr; ++ break; ++ case REF_CPOOL: ++ /* cpool frags are always in the same section and always after ++ all frags referring to it. So it's always correct to add in ++ offset_adjust here. */ ++ target = (ind_data->add_frag->offset + ind_data->add_frag->offset_adjust ++ + offset_adjust - frag->offset - frag->offset_adjust); ++ break; ++ case REF_GOT: ++ target = got->offset; ++ break; ++ default: ++ abort(); ++ } ++ ++ if (target >= rs->range_min && target <= rs->range_max) ++ return TRUE; ++ else ++ return FALSE; ++} ++ ++static bfd_boolean ++avr32_size_frags(bfd *abfd, asection *sec, struct bfd_link_info *info) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ struct avr32_relax_data *rd; ++ Elf_Internal_Shdr *symtab_hdr; ++ Elf_Internal_Rela *relocs = NULL; ++ Elf_Internal_Sym *isymbuf = NULL; ++ struct got_entry **local_got_ents; ++ struct fragment **local_sym_frag; ++ bfd_boolean ret = FALSE; ++ bfd_signed_vma delta = 0; ++ unsigned int i; ++ ++ htab = avr32_elf_hash_table(info); ++ rd = avr32_relax_data(sec); ++ ++ if (sec == htab->sgot) ++ { ++ RDBG("Relaxing GOT section (vma: 0x%lx)\n", ++ sec->output_section->vma + sec->output_offset); ++ if (assign_got_offsets(htab)) ++ htab->repeat_pass = TRUE; ++ return TRUE; ++ } ++ ++ if (!rd->is_relaxable) ++ return TRUE; ++ ++ if (!sec->rawsize) ++ sec->rawsize = sec->size; ++ ++ symtab_hdr = &elf_tdata(abfd)->symtab_hdr; ++ relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); ++ if (!relocs) ++ goto out; ++ ++ isymbuf = retrieve_local_syms(abfd, info->keep_memory); ++ if (!isymbuf) ++ goto out; ++ ++ local_got_ents = elf_local_got_ents(abfd); ++ local_sym_frag = elf_tdata(abfd)->local_sym_frag; ++ ++ RDBG("size_frags: %s<%s>\n vma: 0x%08lx, size: 0x%08lx\n", ++ abfd->filename, sec->name, ++ sec->output_section->vma + sec->output_offset, sec->size); ++ ++ for (i = 0; i < rd->frag_count; i++) ++ { ++ struct fragment *frag = &rd->frag[i]; ++ struct avr32_reloc_data *r_data = NULL, *ind_data = NULL; ++ const struct relax_state *state, *next_state; ++ struct fragment *target_frag = NULL; ++ asection *sym_sec = NULL; ++ Elf_Internal_Rela *rela; ++ struct got_entry *got; ++ bfd_vma symval, r_offset, addend, addr; ++ bfd_signed_vma size_adjust = 0, distance; ++ unsigned long r_symndx; ++ bfd_boolean defined = TRUE, dynamic = FALSE; ++ unsigned char sym_type; ++ ++ frag->offset_adjust += delta; ++ state = next_state = &relax_state[frag->state]; ++ rela = frag->rela; ++ ++ BFD_ASSERT(state->id == frag->state); ++ ++ RDBG(" 0x%04lx%c%d: %s [size %ld]", rela ? rela->r_offset : sec->rawsize, ++ (frag->offset_adjust < 0)?'-':'+', ++ abs(frag->offset_adjust), state->name, state->size); ++ ++ if (!rela) ++ { ++ RDBG(": no reloc, ignoring\n"); ++ continue; ++ } ++ ++ BFD_ASSERT((unsigned int)(rela - relocs) < sec->reloc_count); ++ BFD_ASSERT(state != RS_NONE); ++ ++ r_offset = rela->r_offset + frag->offset_adjust; ++ addr = sec->output_section->vma + sec->output_offset + r_offset; ++ ++ switch (frag->state) ++ { ++ case RS_ALIGN: ++ size_adjust = ((addr + (1 << rela->r_addend) - 1) ++ & ~((1 << rela->r_addend) - 1)); ++ size_adjust -= (sec->output_section->vma + sec->output_offset ++ + frag->offset + frag->offset_adjust ++ + frag->size + frag->size_adjust); ++ ++ RDBG(": adjusting size %lu -> %lu\n", frag->size + frag->size_adjust, ++ frag->size + frag->size_adjust + size_adjust); + break; + - case EM_OLD_SPARCV9: - case EM_SPARC32PLUS: - case EM_SPARCV9: -@@ -1670,6 +1676,7 @@ get_machine_name (unsigned e_machine) - case EM_VAX: return "Digital VAX"; - case EM_AVR_OLD: - case EM_AVR: return "Atmel AVR 8-bit microcontroller"; -+ case EM_AVR32: return "Atmel AVR32"; - case EM_CRIS: return "Axis Communications 32-bit embedded processor"; - case EM_JAVELIN: return "Infineon Technologies 32-bit embedded cpu"; - case EM_FIREPATH: return "Element 14 64-bit DSP processor"; -diff -Nrup binutils-2.17/configure binutils-2.17-atmel/configure ---- binutils-2.17/configure 2006-04-06 23:49:25.000000000 +0200 -+++ binutils-2.17-atmel/configure 2007-02-20 16:06:36.000000000 +0100 -@@ -899,7 +899,7 @@ host_libs="intl mmalloc libiberty opcode - # know that we are building the simulator. - # binutils, gas and ld appear in that order because it makes sense to run - # "make check" in that particular order. --host_tools="texinfo byacc flex bison binutils gas ld fixincludes gcc sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar gnattools" -+host_tools="byacc flex bison binutils gas ld fixincludes gcc sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar gnattools" - - # libgcj represents the runtime libraries only used by gcj. - libgcj="target-libffi \ -@@ -1064,6 +1064,9 @@ unsupported_languages= - # exist yet. - - case "${host}" in -+ avr32*-*-*) -+ noconfigdirs="$noconfigdirs readline gdb" -+ ;; - hppa*64*-*-*) - noconfigdirs="$noconfigdirs byacc" - ;; -@@ -1863,7 +1866,7 @@ else - # Extract the first word of "gcc", so it can be a program name with args. - set dummy gcc; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:1867: checking for $ac_word" >&5 -+echo "configure:1870: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -1893,7 +1896,7 @@ if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. - set dummy cc; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:1897: checking for $ac_word" >&5 -+echo "configure:1900: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -1944,7 +1947,7 @@ fi - # Extract the first word of "cl", so it can be a program name with args. - set dummy cl; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:1948: checking for $ac_word" >&5 -+echo "configure:1951: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -1976,7 +1979,7 @@ fi - fi - - echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 --echo "configure:1980: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 -+echo "configure:1983: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 - - ac_ext=c - # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -@@ -1987,12 +1990,12 @@ cross_compiling=$ac_cv_prog_cc_cross - - cat > conftest.$ac_ext << EOF - --#line 1991 "configure" -+#line 1994 "configure" - #include "confdefs.h" - - main(){return(0);} - EOF --if { (eval echo configure:1996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then -+if { (eval echo configure:1999: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - ac_cv_prog_cc_works=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then -@@ -2018,12 +2021,12 @@ if test $ac_cv_prog_cc_works = no; then - { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } - fi - echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 --echo "configure:2022: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 -+echo "configure:2025: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 - echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 - cross_compiling=$ac_cv_prog_cc_cross - - echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 --echo "configure:2027: checking whether we are using GNU C" >&5 -+echo "configure:2030: checking whether we are using GNU C" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -2032,7 +2035,7 @@ else - yes; - #endif - EOF --if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2036: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then -+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2039: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gcc=yes - else - ac_cv_prog_gcc=no -@@ -2051,7 +2054,7 @@ ac_test_CFLAGS="${CFLAGS+set}" - ac_save_CFLAGS="$CFLAGS" - CFLAGS= - echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 --echo "configure:2055: checking whether ${CC-cc} accepts -g" >&5 -+echo "configure:2058: checking whether ${CC-cc} accepts -g" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -2118,7 +2121,7 @@ fi - # Extract the first word of "${ac_tool_prefix}gnatbind", so it can be a program name with args. - set dummy ${ac_tool_prefix}gnatbind; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:2122: checking for $ac_word" >&5 -+echo "configure:2125: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -2150,7 +2153,7 @@ if test -n "$ac_tool_prefix"; then - # Extract the first word of "gnatbind", so it can be a program name with args. - set dummy gnatbind; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:2154: checking for $ac_word" >&5 -+echo "configure:2157: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -2183,7 +2186,7 @@ fi - fi - - echo $ac_n "checking whether compiler driver understands Ada""... $ac_c" 1>&6 --echo "configure:2187: checking whether compiler driver understands Ada" >&5 -+echo "configure:2190: checking whether compiler driver understands Ada" >&5 - if eval "test \"`echo '$''{'acx_cv_cc_gcc_supports_ada'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -2215,7 +2218,7 @@ else - fi - - echo $ac_n "checking how to compare bootstrapped objects""... $ac_c" 1>&6 --echo "configure:2219: checking how to compare bootstrapped objects" >&5 -+echo "configure:2222: checking how to compare bootstrapped objects" >&5 - if eval "test \"`echo '$''{'gcc_cv_prog_cmp_skip'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -2313,9 +2316,9 @@ saved_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $gmpinc" - # Check GMP actually works - echo $ac_n "checking for correct version of gmp.h""... $ac_c" 1>&6 --echo "configure:2317: checking for correct version of gmp.h" >&5 -+echo "configure:2320: checking for correct version of gmp.h" >&5 - cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then -+if { (eval echo configure:2333: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - echo "$ac_t""yes" 1>&6 - else -@@ -2339,12 +2342,12 @@ rm -f conftest* - - if test x"$have_gmp" = xyes; then - echo $ac_n "checking for MPFR""... $ac_c" 1>&6 --echo "configure:2343: checking for MPFR" >&5 -+echo "configure:2346: checking for MPFR" >&5 - - saved_LIBS="$LIBS" - LIBS="$LIBS $gmplibs" - cat > conftest.$ac_ext < - #include -@@ -2352,7 +2355,7 @@ int main() { - mpfr_t n; mpfr_init(n); - ; return 0; } - EOF --if { (eval echo configure:2356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then -+if { (eval echo configure:2359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - echo "$ac_t""yes" 1>&6 - else -@@ -3403,7 +3406,7 @@ do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:3407: checking for $ac_word" >&5 -+echo "configure:3410: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -3443,7 +3446,7 @@ do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:3447: checking for $ac_word" >&5 -+echo "configure:3450: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_BISON'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -3482,7 +3485,7 @@ do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:3486: checking for $ac_word" >&5 -+echo "configure:3489: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_M4'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -3521,7 +3524,7 @@ do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:3525: checking for $ac_word" >&5 -+echo "configure:3528: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -3561,7 +3564,7 @@ do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:3565: checking for $ac_word" >&5 -+echo "configure:3568: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_FLEX'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -3600,7 +3603,7 @@ do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:3604: checking for $ac_word" >&5 -+echo "configure:3607: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -3653,7 +3656,7 @@ do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:3657: checking for $ac_word" >&5 -+echo "configure:3660: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_EXPECT'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -3694,7 +3697,7 @@ do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:3698: checking for $ac_word" >&5 -+echo "configure:3701: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_RUNTEST'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -3742,7 +3745,7 @@ test -n "$target_alias" && ncn_target_to - # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:3746: checking for $ac_word" >&5 -+echo "configure:3749: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -3773,7 +3776,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:3777: checking for $ac_word" >&5 -+echo "configure:3780: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -3817,7 +3820,7 @@ fi - # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:3821: checking for $ac_word" >&5 -+echo "configure:3824: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -3848,7 +3851,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:3852: checking for $ac_word" >&5 -+echo "configure:3855: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -3892,7 +3895,7 @@ fi - # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:3896: checking for $ac_word" >&5 -+echo "configure:3899: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -3923,7 +3926,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:3927: checking for $ac_word" >&5 -+echo "configure:3930: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -3967,7 +3970,7 @@ fi - # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:3971: checking for $ac_word" >&5 -+echo "configure:3974: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -3998,7 +4001,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4002: checking for $ac_word" >&5 -+echo "configure:4005: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4042,7 +4045,7 @@ fi - # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4046: checking for $ac_word" >&5 -+echo "configure:4049: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_LIPO'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4073,7 +4076,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4077: checking for $ac_word" >&5 -+echo "configure:4080: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_LIPO'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4117,7 +4120,7 @@ fi - # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4121: checking for $ac_word" >&5 -+echo "configure:4124: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4148,7 +4151,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4152: checking for $ac_word" >&5 -+echo "configure:4155: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4192,7 +4195,7 @@ fi - # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4196: checking for $ac_word" >&5 -+echo "configure:4199: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4223,7 +4226,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4227: checking for $ac_word" >&5 -+echo "configure:4230: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4262,7 +4265,7 @@ fi - # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4266: checking for $ac_word" >&5 -+echo "configure:4269: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4293,7 +4296,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4297: checking for $ac_word" >&5 -+echo "configure:4300: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4332,7 +4335,7 @@ fi - # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4336: checking for $ac_word" >&5 -+echo "configure:4339: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4363,7 +4366,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4367: checking for $ac_word" >&5 -+echo "configure:4370: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4407,7 +4410,7 @@ fi - # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4411: checking for $ac_word" >&5 -+echo "configure:4414: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4438,7 +4441,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4442: checking for $ac_word" >&5 -+echo "configure:4445: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4482,7 +4485,7 @@ fi - # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4486: checking for $ac_word" >&5 -+echo "configure:4489: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4513,7 +4516,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4517: checking for $ac_word" >&5 -+echo "configure:4520: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4577,7 +4580,7 @@ fi - if test -n "$with_build_time_tools"; then - for ncn_progname in cc gcc; do - echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:4581: checking for ${ncn_progname} in $with_build_time_tools" >&5 -+echo "configure:4584: checking for ${ncn_progname} in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/${ncn_progname}; then - ac_cv_prog_CC_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$ac_t""yes" 1>&6 -@@ -4594,7 +4597,7 @@ if test -z "$ac_cv_prog_CC_FOR_TARGET"; - # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4598: checking for $ac_word" >&5 -+echo "configure:4601: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_CC_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4625,7 +4628,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4629: checking for $ac_word" >&5 -+echo "configure:4632: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_CC_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4668,7 +4671,7 @@ fi - if test -n "$with_build_time_tools"; then - for ncn_progname in c++ g++ cxx gxx; do - echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:4672: checking for ${ncn_progname} in $with_build_time_tools" >&5 -+echo "configure:4675: checking for ${ncn_progname} in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/${ncn_progname}; then - ac_cv_prog_CXX_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$ac_t""yes" 1>&6 -@@ -4685,7 +4688,7 @@ if test -z "$ac_cv_prog_CXX_FOR_TARGET"; - # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4689: checking for $ac_word" >&5 -+echo "configure:4692: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_CXX_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4716,7 +4719,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4720: checking for $ac_word" >&5 -+echo "configure:4723: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_CXX_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4759,7 +4762,7 @@ fi - if test -n "$with_build_time_tools"; then - for ncn_progname in gcc; do - echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:4763: checking for ${ncn_progname} in $with_build_time_tools" >&5 -+echo "configure:4766: checking for ${ncn_progname} in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/${ncn_progname}; then - ac_cv_prog_GCC_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$ac_t""yes" 1>&6 -@@ -4776,7 +4779,7 @@ if test -z "$ac_cv_prog_GCC_FOR_TARGET"; - # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4780: checking for $ac_word" >&5 -+echo "configure:4783: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_GCC_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4807,7 +4810,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4811: checking for $ac_word" >&5 -+echo "configure:4814: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_GCC_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4845,7 +4848,7 @@ fi - if test -n "$with_build_time_tools"; then - for ncn_progname in gcj; do - echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:4849: checking for ${ncn_progname} in $with_build_time_tools" >&5 -+echo "configure:4852: checking for ${ncn_progname} in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/${ncn_progname}; then - ac_cv_prog_GCJ_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$ac_t""yes" 1>&6 -@@ -4862,7 +4865,7 @@ if test -z "$ac_cv_prog_GCJ_FOR_TARGET"; - # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4866: checking for $ac_word" >&5 -+echo "configure:4869: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_GCJ_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4893,7 +4896,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4897: checking for $ac_word" >&5 -+echo "configure:4900: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_GCJ_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4936,7 +4939,7 @@ fi - if test -n "$with_build_time_tools"; then - for ncn_progname in gfortran; do - echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:4940: checking for ${ncn_progname} in $with_build_time_tools" >&5 -+echo "configure:4943: checking for ${ncn_progname} in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/${ncn_progname}; then - ac_cv_prog_GFORTRAN_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$ac_t""yes" 1>&6 -@@ -4953,7 +4956,7 @@ if test -z "$ac_cv_prog_GFORTRAN_FOR_TAR - # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4957: checking for $ac_word" >&5 -+echo "configure:4960: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_GFORTRAN_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -4984,7 +4987,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:4988: checking for $ac_word" >&5 -+echo "configure:4991: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_GFORTRAN_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5091,7 +5094,7 @@ rm conftest.c - if test -z "$ac_cv_path_AR_FOR_TARGET" ; then - if test -n "$with_build_time_tools"; then - echo $ac_n "checking for ar in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:5095: checking for ar in $with_build_time_tools" >&5 -+echo "configure:5098: checking for ar in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/ar; then - AR_FOR_TARGET=`cd $with_build_time_tools && pwd`/ar - ac_cv_path_AR_FOR_TARGET=$AR_FOR_TARGET -@@ -5109,7 +5112,7 @@ if test -z "$ac_cv_path_AR_FOR_TARGET" ; - # Extract the first word of "ar", so it can be a program name with args. - set dummy ar; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5113: checking for $ac_word" >&5 -+echo "configure:5116: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_path_AR_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5146,7 +5149,7 @@ if test -z "$ac_cv_path_AR_FOR_TARGET" ; - if test -n "$with_build_time_tools"; then - for ncn_progname in ar; do - echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:5150: checking for ${ncn_progname} in $with_build_time_tools" >&5 -+echo "configure:5153: checking for ${ncn_progname} in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/${ncn_progname}; then - ac_cv_prog_AR_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$ac_t""yes" 1>&6 -@@ -5163,7 +5166,7 @@ if test -z "$ac_cv_prog_AR_FOR_TARGET"; - # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5167: checking for $ac_word" >&5 -+echo "configure:5170: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_AR_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5194,7 +5197,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5198: checking for $ac_word" >&5 -+echo "configure:5201: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_AR_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5244,7 +5247,7 @@ fi - if test -z "$ac_cv_path_AS_FOR_TARGET" ; then - if test -n "$with_build_time_tools"; then - echo $ac_n "checking for as in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:5248: checking for as in $with_build_time_tools" >&5 -+echo "configure:5251: checking for as in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/as; then - AS_FOR_TARGET=`cd $with_build_time_tools && pwd`/as - ac_cv_path_AS_FOR_TARGET=$AS_FOR_TARGET -@@ -5262,7 +5265,7 @@ if test -z "$ac_cv_path_AS_FOR_TARGET" ; - # Extract the first word of "as", so it can be a program name with args. - set dummy as; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5266: checking for $ac_word" >&5 -+echo "configure:5269: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_path_AS_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5299,7 +5302,7 @@ if test -z "$ac_cv_path_AS_FOR_TARGET" ; - if test -n "$with_build_time_tools"; then - for ncn_progname in as; do - echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:5303: checking for ${ncn_progname} in $with_build_time_tools" >&5 -+echo "configure:5306: checking for ${ncn_progname} in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/${ncn_progname}; then - ac_cv_prog_AS_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$ac_t""yes" 1>&6 -@@ -5316,7 +5319,7 @@ if test -z "$ac_cv_prog_AS_FOR_TARGET"; - # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5320: checking for $ac_word" >&5 -+echo "configure:5323: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_AS_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5347,7 +5350,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5351: checking for $ac_word" >&5 -+echo "configure:5354: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_AS_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5397,7 +5400,7 @@ fi - if test -z "$ac_cv_path_DLLTOOL_FOR_TARGET" ; then - if test -n "$with_build_time_tools"; then - echo $ac_n "checking for dlltool in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:5401: checking for dlltool in $with_build_time_tools" >&5 -+echo "configure:5404: checking for dlltool in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/dlltool; then - DLLTOOL_FOR_TARGET=`cd $with_build_time_tools && pwd`/dlltool - ac_cv_path_DLLTOOL_FOR_TARGET=$DLLTOOL_FOR_TARGET -@@ -5415,7 +5418,7 @@ if test -z "$ac_cv_path_DLLTOOL_FOR_TARG - # Extract the first word of "dlltool", so it can be a program name with args. - set dummy dlltool; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5419: checking for $ac_word" >&5 -+echo "configure:5422: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_path_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5452,7 +5455,7 @@ if test -z "$ac_cv_path_DLLTOOL_FOR_TARG - if test -n "$with_build_time_tools"; then - for ncn_progname in dlltool; do - echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:5456: checking for ${ncn_progname} in $with_build_time_tools" >&5 -+echo "configure:5459: checking for ${ncn_progname} in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/${ncn_progname}; then - ac_cv_prog_DLLTOOL_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$ac_t""yes" 1>&6 -@@ -5469,7 +5472,7 @@ if test -z "$ac_cv_prog_DLLTOOL_FOR_TARG - # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5473: checking for $ac_word" >&5 -+echo "configure:5476: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5500,7 +5503,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5504: checking for $ac_word" >&5 -+echo "configure:5507: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5550,7 +5553,7 @@ fi - if test -z "$ac_cv_path_LD_FOR_TARGET" ; then - if test -n "$with_build_time_tools"; then - echo $ac_n "checking for ld in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:5554: checking for ld in $with_build_time_tools" >&5 -+echo "configure:5557: checking for ld in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/ld; then - LD_FOR_TARGET=`cd $with_build_time_tools && pwd`/ld - ac_cv_path_LD_FOR_TARGET=$LD_FOR_TARGET -@@ -5568,7 +5571,7 @@ if test -z "$ac_cv_path_LD_FOR_TARGET" ; - # Extract the first word of "ld", so it can be a program name with args. - set dummy ld; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5572: checking for $ac_word" >&5 -+echo "configure:5575: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_path_LD_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5605,7 +5608,7 @@ if test -z "$ac_cv_path_LD_FOR_TARGET" ; - if test -n "$with_build_time_tools"; then - for ncn_progname in ld; do - echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:5609: checking for ${ncn_progname} in $with_build_time_tools" >&5 -+echo "configure:5612: checking for ${ncn_progname} in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/${ncn_progname}; then - ac_cv_prog_LD_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$ac_t""yes" 1>&6 -@@ -5622,7 +5625,7 @@ if test -z "$ac_cv_prog_LD_FOR_TARGET"; - # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5626: checking for $ac_word" >&5 -+echo "configure:5629: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_LD_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5653,7 +5656,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5657: checking for $ac_word" >&5 -+echo "configure:5660: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_LD_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5703,7 +5706,7 @@ fi - if test -z "$ac_cv_path_LIPO_FOR_TARGET" ; then - if test -n "$with_build_time_tools"; then - echo $ac_n "checking for lipo in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:5707: checking for lipo in $with_build_time_tools" >&5 -+echo "configure:5710: checking for lipo in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/lipo; then - LIPO_FOR_TARGET=`cd $with_build_time_tools && pwd`/lipo - ac_cv_path_LIPO_FOR_TARGET=$LIPO_FOR_TARGET -@@ -5721,7 +5724,7 @@ if test -z "$ac_cv_path_LIPO_FOR_TARGET" - # Extract the first word of "lipo", so it can be a program name with args. - set dummy lipo; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5725: checking for $ac_word" >&5 -+echo "configure:5728: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_path_LIPO_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5758,7 +5761,7 @@ if test -z "$ac_cv_path_LIPO_FOR_TARGET" - if test -n "$with_build_time_tools"; then - for ncn_progname in lipo; do - echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:5762: checking for ${ncn_progname} in $with_build_time_tools" >&5 -+echo "configure:5765: checking for ${ncn_progname} in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/${ncn_progname}; then - ac_cv_prog_LIPO_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$ac_t""yes" 1>&6 -@@ -5775,7 +5778,7 @@ if test -z "$ac_cv_prog_LIPO_FOR_TARGET" - # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5779: checking for $ac_word" >&5 -+echo "configure:5782: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_LIPO_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5806,7 +5809,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5810: checking for $ac_word" >&5 -+echo "configure:5813: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_LIPO_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5856,7 +5859,7 @@ fi - if test -z "$ac_cv_path_NM_FOR_TARGET" ; then - if test -n "$with_build_time_tools"; then - echo $ac_n "checking for nm in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:5860: checking for nm in $with_build_time_tools" >&5 -+echo "configure:5863: checking for nm in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/nm; then - NM_FOR_TARGET=`cd $with_build_time_tools && pwd`/nm - ac_cv_path_NM_FOR_TARGET=$NM_FOR_TARGET -@@ -5874,7 +5877,7 @@ if test -z "$ac_cv_path_NM_FOR_TARGET" ; - # Extract the first word of "nm", so it can be a program name with args. - set dummy nm; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5878: checking for $ac_word" >&5 -+echo "configure:5881: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_path_NM_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5911,7 +5914,7 @@ if test -z "$ac_cv_path_NM_FOR_TARGET" ; - if test -n "$with_build_time_tools"; then - for ncn_progname in nm; do - echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:5915: checking for ${ncn_progname} in $with_build_time_tools" >&5 -+echo "configure:5918: checking for ${ncn_progname} in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/${ncn_progname}; then - ac_cv_prog_NM_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$ac_t""yes" 1>&6 -@@ -5928,7 +5931,7 @@ if test -z "$ac_cv_prog_NM_FOR_TARGET"; - # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5932: checking for $ac_word" >&5 -+echo "configure:5935: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_NM_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -5959,7 +5962,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:5963: checking for $ac_word" >&5 -+echo "configure:5966: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_NM_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -6009,7 +6012,7 @@ fi - if test -z "$ac_cv_path_OBJDUMP_FOR_TARGET" ; then - if test -n "$with_build_time_tools"; then - echo $ac_n "checking for objdump in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:6013: checking for objdump in $with_build_time_tools" >&5 -+echo "configure:6016: checking for objdump in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/objdump; then - OBJDUMP_FOR_TARGET=`cd $with_build_time_tools && pwd`/objdump - ac_cv_path_OBJDUMP_FOR_TARGET=$OBJDUMP_FOR_TARGET -@@ -6027,7 +6030,7 @@ if test -z "$ac_cv_path_OBJDUMP_FOR_TARG - # Extract the first word of "objdump", so it can be a program name with args. - set dummy objdump; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:6031: checking for $ac_word" >&5 -+echo "configure:6034: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_path_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -6064,7 +6067,7 @@ if test -z "$ac_cv_path_OBJDUMP_FOR_TARG - if test -n "$with_build_time_tools"; then - for ncn_progname in objdump; do - echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:6068: checking for ${ncn_progname} in $with_build_time_tools" >&5 -+echo "configure:6071: checking for ${ncn_progname} in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/${ncn_progname}; then - ac_cv_prog_OBJDUMP_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$ac_t""yes" 1>&6 -@@ -6081,7 +6084,7 @@ if test -z "$ac_cv_prog_OBJDUMP_FOR_TARG - # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:6085: checking for $ac_word" >&5 -+echo "configure:6088: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -6112,7 +6115,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:6116: checking for $ac_word" >&5 -+echo "configure:6119: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -6162,7 +6165,7 @@ fi - if test -z "$ac_cv_path_RANLIB_FOR_TARGET" ; then - if test -n "$with_build_time_tools"; then - echo $ac_n "checking for ranlib in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:6166: checking for ranlib in $with_build_time_tools" >&5 -+echo "configure:6169: checking for ranlib in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/ranlib; then - RANLIB_FOR_TARGET=`cd $with_build_time_tools && pwd`/ranlib - ac_cv_path_RANLIB_FOR_TARGET=$RANLIB_FOR_TARGET -@@ -6180,7 +6183,7 @@ if test -z "$ac_cv_path_RANLIB_FOR_TARGE - # Extract the first word of "ranlib", so it can be a program name with args. - set dummy ranlib; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:6184: checking for $ac_word" >&5 -+echo "configure:6187: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_path_RANLIB_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -6217,7 +6220,7 @@ if test -z "$ac_cv_path_RANLIB_FOR_TARGE - if test -n "$with_build_time_tools"; then - for ncn_progname in ranlib; do - echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:6221: checking for ${ncn_progname} in $with_build_time_tools" >&5 -+echo "configure:6224: checking for ${ncn_progname} in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/${ncn_progname}; then - ac_cv_prog_RANLIB_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$ac_t""yes" 1>&6 -@@ -6234,7 +6237,7 @@ if test -z "$ac_cv_prog_RANLIB_FOR_TARGE - # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:6238: checking for $ac_word" >&5 -+echo "configure:6241: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_RANLIB_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -6265,7 +6268,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:6269: checking for $ac_word" >&5 -+echo "configure:6272: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_RANLIB_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -6315,7 +6318,7 @@ fi - if test -z "$ac_cv_path_STRIP_FOR_TARGET" ; then - if test -n "$with_build_time_tools"; then - echo $ac_n "checking for strip in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:6319: checking for strip in $with_build_time_tools" >&5 -+echo "configure:6322: checking for strip in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/strip; then - STRIP_FOR_TARGET=`cd $with_build_time_tools && pwd`/strip - ac_cv_path_STRIP_FOR_TARGET=$STRIP_FOR_TARGET -@@ -6333,7 +6336,7 @@ if test -z "$ac_cv_path_STRIP_FOR_TARGET - # Extract the first word of "strip", so it can be a program name with args. - set dummy strip; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:6337: checking for $ac_word" >&5 -+echo "configure:6340: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_path_STRIP_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -6370,7 +6373,7 @@ if test -z "$ac_cv_path_STRIP_FOR_TARGET - if test -n "$with_build_time_tools"; then - for ncn_progname in strip; do - echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:6374: checking for ${ncn_progname} in $with_build_time_tools" >&5 -+echo "configure:6377: checking for ${ncn_progname} in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/${ncn_progname}; then - ac_cv_prog_STRIP_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$ac_t""yes" 1>&6 -@@ -6387,7 +6390,7 @@ if test -z "$ac_cv_prog_STRIP_FOR_TARGET - # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:6391: checking for $ac_word" >&5 -+echo "configure:6394: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_STRIP_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -6418,7 +6421,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:6422: checking for $ac_word" >&5 -+echo "configure:6425: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_STRIP_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -6468,7 +6471,7 @@ fi - if test -z "$ac_cv_path_WINDRES_FOR_TARGET" ; then - if test -n "$with_build_time_tools"; then - echo $ac_n "checking for windres in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:6472: checking for windres in $with_build_time_tools" >&5 -+echo "configure:6475: checking for windres in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/windres; then - WINDRES_FOR_TARGET=`cd $with_build_time_tools && pwd`/windres - ac_cv_path_WINDRES_FOR_TARGET=$WINDRES_FOR_TARGET -@@ -6486,7 +6489,7 @@ if test -z "$ac_cv_path_WINDRES_FOR_TARG - # Extract the first word of "windres", so it can be a program name with args. - set dummy windres; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:6490: checking for $ac_word" >&5 -+echo "configure:6493: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_path_WINDRES_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -6523,7 +6526,7 @@ if test -z "$ac_cv_path_WINDRES_FOR_TARG - if test -n "$with_build_time_tools"; then - for ncn_progname in windres; do - echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 --echo "configure:6527: checking for ${ncn_progname} in $with_build_time_tools" >&5 -+echo "configure:6530: checking for ${ncn_progname} in $with_build_time_tools" >&5 - if test -x $with_build_time_tools/${ncn_progname}; then - ac_cv_prog_WINDRES_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$ac_t""yes" 1>&6 -@@ -6540,7 +6543,7 @@ if test -z "$ac_cv_prog_WINDRES_FOR_TARG - # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:6544: checking for $ac_word" >&5 -+echo "configure:6547: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_WINDRES_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -6571,7 +6574,7 @@ fi - # Extract the first word of "${ncn_progname}", so it can be a program name with args. - set dummy ${ncn_progname}; ac_word=$2 - echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:6575: checking for $ac_word" >&5 -+echo "configure:6578: checking for $ac_word" >&5 - if eval "test \"`echo '$''{'ac_cv_prog_WINDRES_FOR_TARGET'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -6619,7 +6622,7 @@ fi - RAW_CXX_FOR_TARGET="$CXX_FOR_TARGET" - - echo $ac_n "checking where to find the target ar""... $ac_c" 1>&6 --echo "configure:6623: checking where to find the target ar" >&5 -+echo "configure:6626: checking where to find the target ar" >&5 - if test "x${build}" != "x${host}" ; then - if expr "x$AR_FOR_TARGET" : "x/" > /dev/null; then - # We already found the complete path -@@ -6652,7 +6655,7 @@ else - fi - fi - echo $ac_n "checking where to find the target as""... $ac_c" 1>&6 --echo "configure:6656: checking where to find the target as" >&5 -+echo "configure:6659: checking where to find the target as" >&5 - if test "x${build}" != "x${host}" ; then - if expr "x$AS_FOR_TARGET" : "x/" > /dev/null; then - # We already found the complete path -@@ -6685,7 +6688,7 @@ else - fi - fi - echo $ac_n "checking where to find the target cc""... $ac_c" 1>&6 --echo "configure:6689: checking where to find the target cc" >&5 -+echo "configure:6692: checking where to find the target cc" >&5 - if test "x${build}" != "x${host}" ; then - if expr "x$CC_FOR_TARGET" : "x/" > /dev/null; then - # We already found the complete path -@@ -6718,7 +6721,7 @@ else - fi - fi - echo $ac_n "checking where to find the target c++""... $ac_c" 1>&6 --echo "configure:6722: checking where to find the target c++" >&5 -+echo "configure:6725: checking where to find the target c++" >&5 - if test "x${build}" != "x${host}" ; then - if expr "x$CXX_FOR_TARGET" : "x/" > /dev/null; then - # We already found the complete path -@@ -6754,7 +6757,7 @@ else - fi - fi - echo $ac_n "checking where to find the target c++ for libstdc++""... $ac_c" 1>&6 --echo "configure:6758: checking where to find the target c++ for libstdc++" >&5 -+echo "configure:6761: checking where to find the target c++ for libstdc++" >&5 - if test "x${build}" != "x${host}" ; then - if expr "x$RAW_CXX_FOR_TARGET" : "x/" > /dev/null; then - # We already found the complete path -@@ -6790,7 +6793,7 @@ else - fi - fi - echo $ac_n "checking where to find the target dlltool""... $ac_c" 1>&6 --echo "configure:6794: checking where to find the target dlltool" >&5 -+echo "configure:6797: checking where to find the target dlltool" >&5 - if test "x${build}" != "x${host}" ; then - if expr "x$DLLTOOL_FOR_TARGET" : "x/" > /dev/null; then - # We already found the complete path -@@ -6823,7 +6826,7 @@ else - fi - fi - echo $ac_n "checking where to find the target gcc""... $ac_c" 1>&6 --echo "configure:6827: checking where to find the target gcc" >&5 -+echo "configure:6830: checking where to find the target gcc" >&5 - if test "x${build}" != "x${host}" ; then - if expr "x$GCC_FOR_TARGET" : "x/" > /dev/null; then - # We already found the complete path -@@ -6856,7 +6859,7 @@ else - fi - fi - echo $ac_n "checking where to find the target gcj""... $ac_c" 1>&6 --echo "configure:6860: checking where to find the target gcj" >&5 -+echo "configure:6863: checking where to find the target gcj" >&5 - if test "x${build}" != "x${host}" ; then - if expr "x$GCJ_FOR_TARGET" : "x/" > /dev/null; then - # We already found the complete path -@@ -6892,7 +6895,7 @@ else - fi - fi - echo $ac_n "checking where to find the target gfortran""... $ac_c" 1>&6 --echo "configure:6896: checking where to find the target gfortran" >&5 -+echo "configure:6899: checking where to find the target gfortran" >&5 - if test "x${build}" != "x${host}" ; then - if expr "x$GFORTRAN_FOR_TARGET" : "x/" > /dev/null; then - # We already found the complete path -@@ -6928,7 +6931,7 @@ else - fi - fi - echo $ac_n "checking where to find the target ld""... $ac_c" 1>&6 --echo "configure:6932: checking where to find the target ld" >&5 -+echo "configure:6935: checking where to find the target ld" >&5 - if test "x${build}" != "x${host}" ; then - if expr "x$LD_FOR_TARGET" : "x/" > /dev/null; then - # We already found the complete path -@@ -6961,7 +6964,7 @@ else - fi - fi - echo $ac_n "checking where to find the target lipo""... $ac_c" 1>&6 --echo "configure:6965: checking where to find the target lipo" >&5 -+echo "configure:6968: checking where to find the target lipo" >&5 - if test "x${build}" != "x${host}" ; then - if expr "x$LIPO_FOR_TARGET" : "x/" > /dev/null; then - # We already found the complete path -@@ -6984,7 +6987,7 @@ else - fi - fi - echo $ac_n "checking where to find the target nm""... $ac_c" 1>&6 --echo "configure:6988: checking where to find the target nm" >&5 -+echo "configure:6991: checking where to find the target nm" >&5 - if test "x${build}" != "x${host}" ; then - if expr "x$NM_FOR_TARGET" : "x/" > /dev/null; then - # We already found the complete path -@@ -7017,7 +7020,7 @@ else - fi - fi - echo $ac_n "checking where to find the target objdump""... $ac_c" 1>&6 --echo "configure:7021: checking where to find the target objdump" >&5 -+echo "configure:7024: checking where to find the target objdump" >&5 - if test "x${build}" != "x${host}" ; then - if expr "x$OBJDUMP_FOR_TARGET" : "x/" > /dev/null; then - # We already found the complete path -@@ -7050,7 +7053,7 @@ else - fi - fi - echo $ac_n "checking where to find the target ranlib""... $ac_c" 1>&6 --echo "configure:7054: checking where to find the target ranlib" >&5 -+echo "configure:7057: checking where to find the target ranlib" >&5 - if test "x${build}" != "x${host}" ; then - if expr "x$RANLIB_FOR_TARGET" : "x/" > /dev/null; then - # We already found the complete path -@@ -7083,7 +7086,7 @@ else - fi - fi - echo $ac_n "checking where to find the target strip""... $ac_c" 1>&6 --echo "configure:7087: checking where to find the target strip" >&5 -+echo "configure:7090: checking where to find the target strip" >&5 - if test "x${build}" != "x${host}" ; then - if expr "x$STRIP_FOR_TARGET" : "x/" > /dev/null; then - # We already found the complete path -@@ -7116,7 +7119,7 @@ else - fi - fi - echo $ac_n "checking where to find the target windres""... $ac_c" 1>&6 --echo "configure:7120: checking where to find the target windres" >&5 -+echo "configure:7123: checking where to find the target windres" >&5 - if test "x${build}" != "x${host}" ; then - if expr "x$WINDRES_FOR_TARGET" : "x/" > /dev/null; then - # We already found the complete path -@@ -7177,7 +7180,7 @@ fi - - - echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 --echo "configure:7181: checking whether to enable maintainer-specific portions of Makefiles" >&5 -+echo "configure:7184: checking whether to enable maintainer-specific portions of Makefiles" >&5 - # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. - if test "${enable_maintainer_mode+set}" = set; then - enableval="$enable_maintainer_mode" -@@ -7334,34 +7337,15 @@ trap 'rm -f $CONFIG_STATUS conftest*; ex - # Transform confdefs.h into DEFS. - # Protect against shell expansion while executing Makefile rules. - # Protect against Makefile macro expansion. --# --# If the first sed substitution is executed (which looks for macros that --# take arguments), then we branch to the quote section. Otherwise, --# look for a macro that doesn't take arguments. --cat >confdef2opt.sed <<\_ACEOF --t clear --: clear --s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g --t quote --s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g --t quote --d --: quote --s,[ `~#$^&*(){}\\|;'"<>?],\\&,g --s,\[,\\&,g --s,\],\\&,g --s,\$,$$,g --p --_ACEOF --# We use echo to avoid assuming a particular line-breaking character. --# The extra dot is to prevent the shell from consuming trailing --# line-breaks from the sub-command output. A line-break within --# single-quotes doesn't work because, if this script is created in a --# platform that uses two characters for line-breaks (e.g., DOS), tr --# would break. --ac_LF_and_DOT=`echo; echo .` --DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` --rm -f confdef2opt.sed -+cat > conftest.defs <<\EOF -+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g -+s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g -+s%\[%\\&%g -+s%\]%\\&%g -+s%\$%$$%g -+EOF -+DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` -+rm -f conftest.defs - - - # Without the "./", some shells look in PATH for config.status. -diff -Nrup binutils-2.17/configure.in binutils-2.17-atmel/configure.in ---- binutils-2.17/configure.in 2006-06-23 20:19:53.000000000 +0200 -+++ binutils-2.17-atmel/configure.in 2007-02-12 15:37:09.000000000 +0100 -@@ -269,6 +269,9 @@ unsupported_languages= - # exist yet. - - case "${host}" in -+ avr32*-*-*) -+ noconfigdirs="$noconfigdirs readline gdb" -+ ;; - hppa*64*-*-*) - noconfigdirs="$noconfigdirs byacc" - ;; -diff -Nrup binutils-2.17/gas/as.c binutils-2.17-atmel/gas/as.c ---- binutils-2.17/gas/as.c 2006-02-09 01:07:41.000000000 +0100 -+++ binutils-2.17-atmel/gas/as.c 2007-02-12 15:37:09.000000000 +0100 -@@ -439,10 +439,10 @@ parse_args (int * pargc, char *** pargv) - the end of the preceeding line so that it is simpler to - selectively add and remove lines from this list. */ - {"alternate", no_argument, NULL, OPTION_ALTERNATE} -- /* The entry for "a" is here to prevent getopt_long_only() from -- considering that -a is an abbreviation for --alternate. This is -- necessary because -a= is a valid switch but getopt would -- normally reject it since --alternate does not take an argument. */ -+ /* The next two entries are here to prevent getopt_long_only() from -+ considering that -a or -al is an abbreviation for --alternate. -+ This is necessary because -a= is a valid switch but getopt -+ would normally reject it since --alternate does not take an argument. */ - ,{"a", optional_argument, NULL, 'a'} - /* Handle -al=. */ - ,{"al", optional_argument, NULL, OPTION_AL} -@@ -795,8 +795,15 @@ the GNU General Public License. This pr - case 'a': - if (optarg) - { -- if (optarg != old_argv[optind] && optarg[-1] == '=') -- --optarg; -+ /* If optarg is part of the -a switch and not a separate argument -+ in its own right, then scan backwards to the just after the -a. -+ This means skipping over both '=' and 'l' which might have been -+ taken to be part of the -a switch itself. */ -+ if (optarg != old_argv[optind]) -+ { -+ while (optarg[-1] == '=' || optarg[-1] == 'l') -+ --optarg; -+ } - - if (md_parse_option (optc, optarg) != 0) - break; -@@ -1189,7 +1196,7 @@ main (int argc, char ** argv) - keep_it = 0; - - if (!keep_it) -- unlink_if_ordinary (out_file_name); -+ unlink (out_file_name); - - input_scrub_end (); - -diff -Nrup binutils-2.17/gas/config/bfin-aux.h binutils-2.17-atmel/gas/config/bfin-aux.h ---- binutils-2.17/gas/config/bfin-aux.h 2005-09-30 17:05:06.000000000 +0200 -+++ binutils-2.17-atmel/gas/config/bfin-aux.h 2007-02-12 15:37:09.000000000 +0100 -@@ -1,151 +1,151 @@ --/* bfin-aux.h ADI Blackfin Header file for gas -- Copyright 2005 -- Free Software Foundation, Inc. -- -- This file is part of GAS, the GNU Assembler. -- -- GAS is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; either version 2, or (at your option) -- any later version. -- -- GAS is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with GAS; see the file COPYING. If not, write to the Free -- Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA -- 02110-1301, USA. */ -- --#include "bfin-defs.h" -- --#define REG_T Register * -- --INSTR_T --bfin_gen_dsp32mac (int op1, int mm, int mmod, int w1, int p, -- int h01, int h11, int h00, int h10, -- int op0, REG_T dst, REG_T src0, REG_T src1, int w0); -- --INSTR_T --bfin_gen_dsp32mult (int op1, int mm, int mmod, int w1, int p, -- int h01, int h11, int h00, int h10, -- int op0, REG_T dst, REG_T src0, REG_T src1, int w0); -- --INSTR_T --bfin_gen_dsp32alu (int HL, int aopcde, int aop, int s, int x, -- REG_T dst0, REG_T dst1, REG_T src0, REG_T src1); -- --INSTR_T --bfin_gen_dsp32shift (int sopcde, REG_T dst0, REG_T src0, REG_T src1, -- int sop, int hls); -- --INSTR_T --bfin_gen_dsp32shiftimm (int sopcde, REG_T dst0, int immag, REG_T src1, -- int sop, int hls); -- --INSTR_T --bfin_gen_ldimmhalf (REG_T reg, int h, int s, int z, Expr_Node *hword, -- int reloc); -- --INSTR_T --bfin_gen_ldstidxi (REG_T ptr, REG_T reg, int w, int sz, int z, -- Expr_Node *offset); -- --INSTR_T --bfin_gen_ldst (REG_T ptr, REG_T reg, int aop, int sz, int z, int w); -- --INSTR_T --bfin_gen_ldstii (REG_T ptr, REG_T reg, Expr_Node *offset, int w, int op); -- --INSTR_T --bfin_gen_ldstiifp (REG_T reg, Expr_Node *offset, int w); -- --INSTR_T --bfin_gen_ldstpmod (REG_T ptr, REG_T reg, int aop, int w, REG_T idx); -- --INSTR_T --bfin_gen_dspldst (REG_T i, REG_T reg, int aop, int w, int m); -- --INSTR_T --bfin_gen_alu2op (REG_T dst, REG_T src, int opc); -- --INSTR_T --bfin_gen_compi2opd (REG_T dst, int src, int op); -- --INSTR_T --bfin_gen_compi2opp (REG_T dst, int src, int op); -- --INSTR_T --bfin_gen_dagmodik (REG_T i, int op); -- --INSTR_T --bfin_gen_dagmodim (REG_T i, REG_T m, int op, int br); -- --INSTR_T --bfin_gen_ptr2op (REG_T dst, REG_T src, int opc); -- --INSTR_T --bfin_gen_logi2op (int dst, int src, int opc); -- --INSTR_T --bfin_gen_comp3op (REG_T src0, REG_T src1, REG_T dst, int opc); -- --INSTR_T --bfin_gen_ccmv (REG_T src, REG_T dst, int t); -- --INSTR_T --bfin_gen_ccflag (REG_T x, int y, int opc, int i, int g); -- --INSTR_T --bfin_gen_cc2stat (int cbit, int op, int d); -- --INSTR_T --bfin_gen_regmv (REG_T src, REG_T dst); -- --INSTR_T --bfin_gen_cc2dreg (int op, REG_T reg); -- --INSTR_T --bfin_gen_brcc (int t, int b, Expr_Node *offset); -- --INSTR_T --bfin_gen_ujump (Expr_Node *offset); -- --INSTR_T --bfin_gen_cactrl (REG_T reg, int a, int op); -- --INSTR_T --bfin_gen_progctrl (int prgfunc, int poprnd); -- --INSTR_T --bfin_gen_loopsetup (Expr_Node *soffset, REG_T c, int rop, -- Expr_Node *eoffset, REG_T reg); -- --INSTR_T --bfin_gen_loop (Expr_Node *expr, REG_T reg, int rop, REG_T preg); -- --INSTR_T --bfin_gen_pushpopmultiple (int dr, int pr, int d, int p, int w); -- --INSTR_T --bfin_gen_pushpopreg (REG_T reg, int w); -- --INSTR_T --bfin_gen_calla (Expr_Node *addr, int s); -- --INSTR_T --bfin_gen_linkage (int r, int framesize); -- --INSTR_T --bfin_gen_pseudodbg (int fn, int reg, int grp); -- --INSTR_T --bfin_gen_pseudodbg_assert (int dbgop, REG_T regtest, int expected); -- --bfd_boolean --bfin_resource_conflict (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2); -- --INSTR_T --bfin_gen_multi_instr (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2); -+/* bfin-aux.h ADI Blackfin Header file for gas -+ Copyright 2005 -+ Free Software Foundation, Inc. -+ -+ This file is part of GAS, the GNU Assembler. -+ -+ GAS is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2, or (at your option) -+ any later version. -+ -+ GAS is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with GAS; see the file COPYING. If not, write to the Free -+ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA -+ 02110-1301, USA. */ -+ -+#include "bfin-defs.h" -+ -+#define REG_T Register * -+ -+INSTR_T -+bfin_gen_dsp32mac (int op1, int mm, int mmod, int w1, int p, -+ int h01, int h11, int h00, int h10, -+ int op0, REG_T dst, REG_T src0, REG_T src1, int w0); -+ -+INSTR_T -+bfin_gen_dsp32mult (int op1, int mm, int mmod, int w1, int p, -+ int h01, int h11, int h00, int h10, -+ int op0, REG_T dst, REG_T src0, REG_T src1, int w0); -+ -+INSTR_T -+bfin_gen_dsp32alu (int HL, int aopcde, int aop, int s, int x, -+ REG_T dst0, REG_T dst1, REG_T src0, REG_T src1); -+ -+INSTR_T -+bfin_gen_dsp32shift (int sopcde, REG_T dst0, REG_T src0, REG_T src1, -+ int sop, int hls); -+ -+INSTR_T -+bfin_gen_dsp32shiftimm (int sopcde, REG_T dst0, int immag, REG_T src1, -+ int sop, int hls); -+ -+INSTR_T -+bfin_gen_ldimmhalf (REG_T reg, int h, int s, int z, Expr_Node *hword, -+ int reloc); -+ -+INSTR_T -+bfin_gen_ldstidxi (REG_T ptr, REG_T reg, int w, int sz, int z, -+ Expr_Node *offset); -+ -+INSTR_T -+bfin_gen_ldst (REG_T ptr, REG_T reg, int aop, int sz, int z, int w); -+ -+INSTR_T -+bfin_gen_ldstii (REG_T ptr, REG_T reg, Expr_Node *offset, int w, int op); -+ -+INSTR_T -+bfin_gen_ldstiifp (REG_T reg, Expr_Node *offset, int w); -+ -+INSTR_T -+bfin_gen_ldstpmod (REG_T ptr, REG_T reg, int aop, int w, REG_T idx); -+ -+INSTR_T -+bfin_gen_dspldst (REG_T i, REG_T reg, int aop, int w, int m); -+ -+INSTR_T -+bfin_gen_alu2op (REG_T dst, REG_T src, int opc); -+ -+INSTR_T -+bfin_gen_compi2opd (REG_T dst, int src, int op); -+ -+INSTR_T -+bfin_gen_compi2opp (REG_T dst, int src, int op); -+ -+INSTR_T -+bfin_gen_dagmodik (REG_T i, int op); -+ -+INSTR_T -+bfin_gen_dagmodim (REG_T i, REG_T m, int op, int br); -+ -+INSTR_T -+bfin_gen_ptr2op (REG_T dst, REG_T src, int opc); -+ -+INSTR_T -+bfin_gen_logi2op (int dst, int src, int opc); -+ -+INSTR_T -+bfin_gen_comp3op (REG_T src0, REG_T src1, REG_T dst, int opc); -+ -+INSTR_T -+bfin_gen_ccmv (REG_T src, REG_T dst, int t); -+ -+INSTR_T -+bfin_gen_ccflag (REG_T x, int y, int opc, int i, int g); -+ -+INSTR_T -+bfin_gen_cc2stat (int cbit, int op, int d); -+ -+INSTR_T -+bfin_gen_regmv (REG_T src, REG_T dst); -+ -+INSTR_T -+bfin_gen_cc2dreg (int op, REG_T reg); -+ -+INSTR_T -+bfin_gen_brcc (int t, int b, Expr_Node *offset); -+ -+INSTR_T -+bfin_gen_ujump (Expr_Node *offset); -+ -+INSTR_T -+bfin_gen_cactrl (REG_T reg, int a, int op); -+ -+INSTR_T -+bfin_gen_progctrl (int prgfunc, int poprnd); -+ -+INSTR_T -+bfin_gen_loopsetup (Expr_Node *soffset, REG_T c, int rop, -+ Expr_Node *eoffset, REG_T reg); -+ -+INSTR_T -+bfin_gen_loop (Expr_Node *expr, REG_T reg, int rop, REG_T preg); -+ -+INSTR_T -+bfin_gen_pushpopmultiple (int dr, int pr, int d, int p, int w); -+ -+INSTR_T -+bfin_gen_pushpopreg (REG_T reg, int w); -+ -+INSTR_T -+bfin_gen_calla (Expr_Node *addr, int s); -+ -+INSTR_T -+bfin_gen_linkage (int r, int framesize); -+ -+INSTR_T -+bfin_gen_pseudodbg (int fn, int reg, int grp); -+ -+INSTR_T -+bfin_gen_pseudodbg_assert (int dbgop, REG_T regtest, int expected); -+ -+bfd_boolean -+bfin_resource_conflict (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2); -+ -+INSTR_T -+bfin_gen_multi_instr (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2); -diff -Nrup binutils-2.17/gas/config/tc-avr32.c binutils-2.17-atmel/gas/config/tc-avr32.c ---- binutils-2.17/gas/config/tc-avr32.c 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/config/tc-avr32.c 2007-02-12 15:37:09.000000000 +0100 -@@ -0,0 +1,4714 @@ -+/* Assembler implementation for AVR32. -+ Copyright 2003-2006 Atmel Corporation. -+ -+ Written by Haavard Skinnemoen, Atmel Norway, -+ -+ This file is part of GAS, the GNU Assembler. -+ -+ GAS is free software; you can redistribute it and/or modify it -+ under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2, or (at your option) -+ any later version. -+ -+ GAS is distributed in the hope that it will be useful, but WITHOUT -+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public -+ License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with GAS; see the file COPYING. If not, write to the Free -+ Software Foundation, 59 Temple Place - Suite 330, Boston, MA -+ 02111-1307, USA. */ -+ -+#include -+#include "as.h" -+#include "safe-ctype.h" -+#include "subsegs.h" -+#include "symcat.h" -+#include "opcodes/avr32-opc.h" -+#include "opcodes/avr32-asm.h" -+#include "elf/avr32.h" -+#include "dwarf2dbg.h" -+ -+#define xDEBUG -+#define xOPC_CONSISTENCY_CHECK -+ -+#ifdef DEBUG -+# define pr_debug(fmt, args...) fprintf(stderr, fmt, ##args) -+#else -+# define pr_debug(fmt, args...) -+#endif -+ -+/* 3 MSB of instruction word indicate group. Group 7 -> extended */ -+#define AVR32_COMPACT_P(opcode) ((opcode[0] & 0xe0) != 0xe0) -+ -+#define streq(a, b) (strcmp(a, b) == 0) -+#define skip_whitespace(str) do { while(*(str) == ' ') ++(str); } while(0) -+ -+/* Flags given on the command line */ -+static int avr32_pic = FALSE; -+int linkrelax = FALSE; -+int avr32_iarcompat = FALSE; -+ -+/* This array holds the chars that always start a comment. */ -+const char comment_chars[] = "#"; -+ -+/* This array holds the chars that only start a comment at the -+ beginning of a line. We must include '#' here because the compiler -+ may produce #APP and #NO_APP in its output. */ -+const char line_comment_chars[] = "#"; -+ -+/* These may be used instead of newline (same as ';' in C). */ -+const char line_separator_chars[] = ";"; -+ -+/* Chars that can be used to separate mantissa from exponent in -+ floating point numbers. */ -+const char EXP_CHARS[] = "eE"; -+ -+/* Chars that mean this number is a floating point constant. */ -+const char FLT_CHARS[] = "dD"; -+ -+/* Pre-defined "_GLOBAL_OFFSET_TABLE_" */ -+symbolS *GOT_symbol; -+ -+static struct hash_control *avr32_mnemonic_htab; -+ -+struct avr32_ifield_data -+{ -+ bfd_vma value; -+ /* FIXME: Get rid of align_order and complain. complain is never -+ used, align_order is used in one place. Try to use the relax -+ table instead. */ -+ unsigned int align_order; -+}; -+ -+struct avr32_insn -+{ -+ const struct avr32_syntax *syntax; -+ expressionS immediate; -+ int pcrel; -+ int force_extended; -+ unsigned int next_slot; -+ bfd_reloc_code_real_type r_type; -+ struct avr32_ifield_data field_value[AVR32_MAX_FIELDS]; -+}; -+ -+static struct avr32_insn current_insn; -+ -+/* The target specific pseudo-ops we support. */ -+static void s_rseg (int); -+static void s_cpool(int); -+ -+const pseudo_typeS md_pseudo_table[] = -+{ -+ /* Make sure that .word is 32 bits */ -+ { "word", cons, 4 }, -+ { "file", (void (*) PARAMS ((int))) dwarf2_directive_file, 0 }, -+ { "loc", dwarf2_directive_loc, 0 }, -+ -+ /* .lcomm requires an explicit alignment parameter */ -+ { "lcomm", s_lcomm, 1 }, -+ -+ /* AVR32-specific pseudo-ops */ -+ { "cpool", s_cpool, 0}, -+ -+ /* IAR compatible pseudo-ops */ -+ { "program", s_ignore, 0 }, -+ { "public", s_globl, 0 }, -+ { "extern", s_ignore, 0 }, -+ { "module", s_ignore, 0 }, -+ { "rseg", s_rseg, 0 }, -+ { "dc8", cons, 1 }, -+ { "dc16", cons, 2 }, -+ { "dc32", cons, 4 }, -+ -+ { NULL, NULL, 0 } -+}; -+ -+/* Questionable stuff starts here */ -+ -+enum avr32_opinfo { -+ AVR32_OPINFO_NONE = BFD_RELOC_NONE, -+ AVR32_OPINFO_GOT, -+ AVR32_OPINFO_TLSGD, -+ AVR32_OPINFO_HI, -+ AVR32_OPINFO_LO, -+}; -+ -+enum avr32_arch { -+ ARCH_TYPE_AP, -+ ARCH_TYPE_UC -+}; -+ -+struct arch_type_s -+{ -+ /* Architecture name */ -+ char *name; -+ /* Instruction Set Architecture Flags */ -+ unsigned long isa_flags; -+}; -+ -+struct part_type_s -+{ -+ /* Part name */ -+ char *name; -+ /* Architecture type */ -+ unsigned int arch; -+}; -+ -+static struct arch_type_s arch_types[] = -+{ -+ {"ap", AVR32_V1 | AVR32_SIMD | AVR32_DSP | AVR32_PICO}, -+ {"uc", AVR32_V1 | AVR32_DSP | AVR32_RMW}, -+ {"all-insn", AVR32_V1 | AVR32_SIMD | AVR32_DSP | AVR32_RMW | AVR32_FP | AVR32_PICO}, -+ {NULL, 0} -+}; -+ -+static struct part_type_s part_types[] = { -+ {"ap7000", ARCH_TYPE_AP}, -+ {"ap7010", ARCH_TYPE_AP}, -+ {"ap7020", ARCH_TYPE_AP}, -+ {"uc3a0256", ARCH_TYPE_UC}, -+ {"uc3a0512", ARCH_TYPE_UC}, -+ {"uc3a1128", ARCH_TYPE_UC}, -+ {"uc3a1256", ARCH_TYPE_UC}, -+ {"uc3a1512", ARCH_TYPE_UC}, -+ {NULL, 0} -+}; -+ -+/* Current architecture type. */ -+static struct arch_type_s default_arch = {"all-insn", AVR32_V1 | AVR32_SIMD | AVR32_DSP | AVR32_RMW | AVR32_FP | AVR32_PICO }; -+static struct arch_type_s *avr32_arch = &default_arch; -+ -+/* Display nicely formatted list of known part- and architecture names. */ -+ -+static void -+show_arch_list (FILE *stream) -+{ -+ int i, x; -+ -+ fprintf (stream, _("Known architecture names:")); -+ x = 1000; -+ -+ for (i = 0; arch_types[i].name; i++) -+ { -+ int len = strlen (arch_types[i].name); -+ -+ x += len + 1; -+ -+ if (x < 75) -+ fprintf (stream, " %s", arch_types[i].name); -+ else -+ { -+ fprintf (stream, "\n %s", arch_types[i].name); -+ x = len + 2; -+ } -+ } -+ -+ fprintf (stream, "\n"); -+} -+ -+static void -+show_part_list (FILE *stream) -+{ -+ int i, x; -+ -+ fprintf (stream, _("Known part names:")); -+ x = 1000; -+ -+ for (i = 0; part_types[i].name; i++) -+ { -+ int len = strlen(part_types[i].name); -+ -+ x += len + 1; -+ -+ if (x < 75) -+ fprintf (stream, " %s", part_types[i].name); -+ else -+ { -+ fprintf(stream, "\n %s", part_types[i].name); -+ x = len + 2; -+ } -+ } -+ -+ fprintf (stream, "\n"); -+} -+ -+const char *md_shortopts = ""; -+struct option md_longopts[] = -+{ -+#define OPTION_ARCH (OPTION_MD_BASE) -+#define OPTION_PART (OPTION_ARCH + 1) -+#define OPTION_IAR (OPTION_PART + 1) -+#define OPTION_PIC (OPTION_IAR + 1) -+#define OPTION_NOPIC (OPTION_PIC + 1) -+#define OPTION_LINKRELAX (OPTION_NOPIC + 1) -+#define OPTION_NOLINKRELAX (OPTION_LINKRELAX + 1) -+ {"march", required_argument, NULL, OPTION_ARCH}, -+ {"mpart", required_argument, NULL, OPTION_PART}, -+ {"iar", no_argument, NULL, OPTION_IAR}, -+ {"pic", no_argument, NULL, OPTION_PIC}, -+ {"no-pic", no_argument, NULL, OPTION_NOPIC}, -+ {"linkrelax", no_argument, NULL, OPTION_LINKRELAX}, -+ {"no-linkrelax", no_argument, NULL, OPTION_NOLINKRELAX}, -+ /* deprecated alias for -mpart=xxx */ -+ {"mcpu", required_argument, NULL, OPTION_PART}, -+ {NULL, no_argument, NULL, 0} -+}; -+ -+size_t md_longopts_size = sizeof (md_longopts); -+ -+void -+md_show_usage (FILE *stream) -+{ -+ fprintf (stream, -+ _( -+"AVR32 options:\n" -+"-march=[arch-name] Select cpu architecture. [Default `all-insn']\n" -+"-mpart=[part-name] Select specific part. [Default `none']\n" -+"--pic Produce Position-Independent Code\n" -+"--no-pic Don't produce Position-Independent Code\n" -+"--linkrelax Produce output suitable for linker relaxing\n" -+"--no-linkrelax Don't produce output suitable for linker relaxing\n")); -+ show_arch_list(stream); -+} -+ -+int -+md_parse_option (int c, char *arg ATTRIBUTE_UNUSED) -+{ -+ switch (c) -+ { -+ case OPTION_ARCH: -+ { -+ int i; -+ char *s = alloca (strlen (arg) + 1); -+ -+ { -+ char *t = s; -+ char *arg1 = arg; -+ -+ do -+ *t = TOLOWER (*arg1++); -+ while (*t++); -+ } -+ -+ for (i = 0; arch_types[i].name; ++i) -+ if (strcmp (arch_types[i].name, s) == 0) -+ break; -+ -+ if (!arch_types[i].name) -+ { -+ show_arch_list (stderr); -+ as_fatal (_("unknown architecture: %s\n"), arg); -+ } -+ -+ avr32_arch = &arch_types[i]; -+ break; -+ } -+ case OPTION_PART: -+ { -+ int i; -+ char *s = alloca (strlen (arg) + 1); -+ char *t = s; -+ char *p = arg; -+ -+ /* If arch type has already been set, don't bother. -+ -march= always overrides -mpart= */ -+ if (avr32_arch != &default_arch) -+ break; -+ -+ do -+ *t = TOLOWER (*p++); -+ while (*t++); -+ -+ for (i = 0; part_types[i].name; ++i) -+ if (strcmp (part_types[i].name, s) == 0) -+ break; -+ -+ if (!part_types[i].name) -+ { -+ show_part_list (stderr); -+ as_fatal (_("unknown part: %s\n"), arg); -+ } -+ -+ avr32_arch = &arch_types[part_types[i].arch]; -+ break; -+ } -+ case OPTION_IAR: -+ avr32_iarcompat = 1; -+ break; -+ case OPTION_PIC: -+ avr32_pic = 1; -+ break; -+ case OPTION_NOPIC: -+ avr32_pic = 0; -+ break; -+ case OPTION_LINKRELAX: -+ linkrelax = 1; -+ break; -+ case OPTION_NOLINKRELAX: -+ linkrelax = 0; -+ break; -+ default: -+ return 0; -+ } -+ return 1; -+} -+ -+/* Can't use symbol_new here, so have to create a symbol and then at -+ a later date assign it a value. Thats what these functions do. -+ -+ Shamelessly stolen from ARM. */ -+ -+static void -+symbol_locate (symbolS * symbolP, -+ const char * name, /* It is copied, the caller can modify. */ -+ segT segment, /* Segment identifier (SEG_). */ -+ valueT valu, /* Symbol value. */ -+ fragS * frag) /* Associated fragment. */ -+{ -+ unsigned int name_length; -+ char * preserved_copy_of_name; -+ -+ name_length = strlen (name) + 1; /* +1 for \0. */ -+ obstack_grow (¬es, name, name_length); -+ preserved_copy_of_name = obstack_finish (¬es); -+#ifdef STRIP_UNDERSCORE -+ if (preserved_copy_of_name[0] == '_') -+ preserved_copy_of_name++; -+#endif -+ -+#ifdef tc_canonicalize_symbol_name -+ preserved_copy_of_name = -+ tc_canonicalize_symbol_name (preserved_copy_of_name); -+#endif -+ -+ S_SET_NAME (symbolP, preserved_copy_of_name); -+ -+ S_SET_SEGMENT (symbolP, segment); -+ S_SET_VALUE (symbolP, valu); -+ symbol_clear_list_pointers (symbolP); -+ -+ symbol_set_frag (symbolP, frag); -+ -+ /* Link to end of symbol chain. */ -+ { -+ extern int symbol_table_frozen; -+ -+ if (symbol_table_frozen) -+ abort (); -+ } -+ -+ symbol_append (symbolP, symbol_lastP, & symbol_rootP, & symbol_lastP); -+ -+ obj_symbol_new_hook (symbolP); -+ -+#ifdef tc_symbol_new_hook -+ tc_symbol_new_hook (symbolP); -+#endif -+ -+#ifdef DEBUG_SYMS -+ verify_symbol_chain (symbol_rootP, symbol_lastP); -+#endif /* DEBUG_SYMS */ -+} -+ -+struct cpool_entry -+{ -+ int refcount; -+ offsetT offset; -+ expressionS exp; -+}; -+ -+struct cpool -+{ -+ struct cpool *next; -+ int used; -+ struct cpool_entry *literals; -+ unsigned int padding; -+ unsigned int next_free_entry; -+ unsigned int id; -+ symbolS *symbol; -+ segT section; -+ subsegT sub_section; -+}; -+ -+struct cpool *cpool_list = NULL; -+ -+static struct cpool * -+find_cpool(segT section, subsegT sub_section) -+{ -+ struct cpool *pool; -+ -+ for (pool = cpool_list; pool != NULL; pool = pool->next) -+ { -+ if (!pool->used -+ && pool->section == section -+ && pool->sub_section == sub_section) -+ break; -+ } -+ -+ return pool; -+} -+ -+static struct cpool * -+find_or_make_cpool(segT section, subsegT sub_section) -+{ -+ static unsigned int next_cpool_id = 0; -+ struct cpool *pool; -+ -+ pool = find_cpool(section, sub_section); -+ -+ if (!pool) -+ { -+ pool = xmalloc(sizeof(*pool)); -+ if (!pool) -+ return NULL; -+ -+ pool->used = 0; -+ pool->literals = NULL; -+ pool->padding = 0; -+ pool->next_free_entry = 0; -+ pool->section = section; -+ pool->sub_section = sub_section; -+ pool->next = cpool_list; -+ pool->symbol = NULL; -+ -+ cpool_list = pool; -+ } -+ -+ /* NULL symbol means that the pool is new or has just been emptied. */ -+ if (!pool->symbol) -+ { -+ pool->symbol = symbol_create(FAKE_LABEL_NAME, undefined_section, -+ 0, &zero_address_frag); -+ pool->id = next_cpool_id++; -+ } -+ -+ return pool; -+} -+ -+static struct cpool * -+add_to_cpool(expressionS *exp, unsigned int *index, int ref) -+{ -+ struct cpool *pool; -+ unsigned int entry; -+ -+ pool = find_or_make_cpool(now_seg, now_subseg); -+ -+ /* Check if this constant is already in the pool. */ -+ for (entry = 0; entry < pool->next_free_entry; entry++) -+ { -+ if ((pool->literals[entry].exp.X_op == exp->X_op) -+ && (exp->X_op == O_constant) -+ && (pool->literals[entry].exp.X_add_number -+ == exp->X_add_number) -+ && (pool->literals[entry].exp.X_unsigned -+ == exp->X_unsigned)) -+ break; -+ -+ if ((pool->literals[entry].exp.X_op == exp->X_op) -+ && (exp->X_op == O_symbol) -+ && (pool->literals[entry].exp.X_add_number -+ == exp->X_add_number) -+ && (pool->literals[entry].exp.X_add_symbol -+ == exp->X_add_symbol) -+ && (pool->literals[entry].exp.X_op_symbol -+ == exp->X_op_symbol)) -+ break; -+ } -+ -+ /* Create an entry if we didn't find a match */ -+ if (entry == pool->next_free_entry) -+ { -+ pool->literals = xrealloc(pool->literals, -+ sizeof(struct cpool_entry) * (entry + 1)); -+ pool->literals[entry].exp = *exp; -+ pool->literals[entry].refcount = 0; -+ pool->next_free_entry++; -+ } -+ -+ if (index) -+ *index = entry; -+ if (ref) -+ pool->literals[entry].refcount++; -+ -+ return pool; -+} -+ -+struct avr32_operand -+{ -+ int id; -+ int is_signed; -+ int is_pcrel; -+ int align_order; -+ int (*match)(char *str); -+ void (*parse)(const struct avr32_operand *op, char *str, int opindex); -+}; -+ -+static int -+match_anything(char *str ATTRIBUTE_UNUSED) -+{ -+ return 1; -+} -+ -+static int -+match_intreg(char *str) -+{ -+ int regid, ret = 1; -+ -+ regid = avr32_parse_intreg(str); -+ if (regid < 0) -+ ret = 0; -+ -+ pr_debug("match_intreg: `%s': %d\n", str, ret); -+ -+ return ret; -+} -+ -+static int -+match_intreg_predec(char *str) -+{ -+ int regid; -+ -+ if (str[0] != '-' || str[1] != '-') -+ return 0; -+ -+ regid = avr32_parse_intreg(str + 2); -+ if (regid < 0) -+ return 0; -+ -+ return 1; -+} -+ -+static int -+match_intreg_postinc(char *str) -+{ -+ int regid, ret = 1; -+ char *p, c; -+ -+ for (p = str; *p; p++) -+ if (*p == '+') -+ break; -+ -+ if (p[0] != '+' || p[1] != '+') -+ return 0; -+ -+ c = *p, *p = 0; -+ regid = avr32_parse_intreg(str); -+ if (regid < 0) -+ ret = 0; -+ -+ *p = c; -+ return ret; -+} -+ -+static int -+match_intreg_lsl(char *str) -+{ -+ int regid, ret = 1; -+ char *p, c; -+ -+ for (p = str; *p; p++) -+ if (*p == '<') -+ break; -+ -+ if (p[0] && p[1] != '<') -+ return 0; -+ -+ c = *p, *p = 0; -+ regid = avr32_parse_intreg(str); -+ if (regid < 0) -+ ret = 0; -+ -+ *p = c; -+ return ret; -+} -+ -+static int -+match_intreg_lsr(char *str) -+{ -+ int regid, ret = 1; -+ char *p, c; -+ -+ for (p = str; *p; p++) -+ if (*p == '>') -+ break; -+ -+ if (p[0] && p[1] != '>') -+ return 0; -+ -+ c = *p, *p = 0; -+ -+ regid = avr32_parse_intreg(str); -+ if (regid < 0) -+ ret = 0; -+ -+ *p = c; -+ return ret; -+} -+ -+static int -+match_intreg_part(char *str) -+{ -+ int regid, ret = 1; -+ char *p, c; -+ -+ for (p = str; *p; p++) -+ if (*p == ':') -+ break; -+ -+ if (p[0] != ':' || !ISPRINT(p[1]) || p[2] != '\0') -+ return 0; -+ -+ c = *p, *p = 0; -+ regid = avr32_parse_intreg(str); -+ if (regid < 0) -+ ret = 0; -+ -+ *p = c; -+ -+ return ret; -+} -+ -+#define match_intreg_disp match_anything -+ -+static int -+match_intreg_index(char *str) -+{ -+ int regid, ret = 1; -+ char *p, *end, c; -+ -+ for (p = str; *p; p++) -+ if (*p == '[') -+ break; -+ -+ /* don't allow empty displacement here (it makes no sense) */ -+ if (p[0] != '[') -+ return 0; -+ -+ for (end = p + 1; *end; end++) ; -+ if (*(--end) != ']') -+ return 0; -+ -+ c = *end, *end = 0; -+ if (!match_intreg_lsl(p + 1)) -+ ret = 0; -+ *end = c; ++ case RS_CPENT: ++ if (frag->refcount == 0 && frag->size_adjust == 0) ++ { ++ RDBG(": discarding frag\n"); ++ size_adjust = -4; ++ } ++ else if (frag->refcount > 0 && frag->size_adjust < 0) ++ { ++ RDBG(": un-discarding frag\n"); ++ size_adjust = 4; ++ } ++ break; + -+ if (ret) -+ { -+ c = *p, *p = 0; -+ regid = avr32_parse_intreg(str); -+ if (regid < 0) -+ ret = 0; -+ *p = c; -+ } ++ default: ++ if (rd->reloc_data) ++ r_data = &rd->reloc_data[frag->rela - relocs]; + -+ return ret; -+} ++ /* If this is a cpool reference, we want the symbol that the ++ cpool entry refers to, not the symbol for the cpool entry ++ itself, as we already know what frag it's in. */ ++ if (relax_state[frag->initial_state].reftype == REF_CPOOL) ++ { ++ Elf_Internal_Rela *irela = r_data->add_frag->rela; + -+static int -+match_intreg_xindex(char *str) -+{ -+ int regid, ret = 1; -+ char *p, *end, c; ++ r_symndx = ELF_R_SYM(irela->r_info); ++ addend = irela->r_addend; + -+ for (p = str; *p; p++) -+ if (*p == '[') -+ break; ++ /* The constant pool must be in the same section as the ++ reloc referring to it. */ ++ BFD_ASSERT((unsigned long)(irela - relocs) < sec->reloc_count); + -+ /* empty displacement makes no sense here either */ -+ if (p[0] != '[') -+ return 0; ++ ind_data = r_data; ++ r_data = &rd->reloc_data[irela - relocs]; ++ } ++ else ++ { ++ r_symndx = ELF_R_SYM(rela->r_info); ++ addend = rela->r_addend; ++ } + -+ for (end = p + 1; *end; end++) -+ if (*end == '<') -+ break; ++ /* Get the value of the symbol referred to by the reloc. */ ++ if (r_symndx < symtab_hdr->sh_info) ++ { ++ Elf_Internal_Sym *isym; + -+ if (!streq(end, "<<2]")) -+ return 0; ++ isym = isymbuf + r_symndx; ++ symval = 0; + -+ c = *end, *end = 0; -+ if (!match_intreg_part(p + 1)) -+ ret = 0; -+ *end = c; ++ RDBG(" local sym %lu: ", r_symndx); + -+ if (ret) -+ { -+ c = *p, *p = 0; -+ regid = avr32_parse_intreg(str); -+ if (regid < 0) -+ ret = 0; -+ *p = c; -+ } ++ if (isym->st_shndx == SHN_UNDEF) ++ defined = FALSE; ++ else if (isym->st_shndx == SHN_ABS) ++ sym_sec = bfd_abs_section_ptr; ++ else if (isym->st_shndx == SHN_COMMON) ++ sym_sec = bfd_com_section_ptr; ++ else ++ sym_sec = bfd_section_from_elf_index(abfd, isym->st_shndx); + -+ return ret; -+} ++ symval = isym->st_value; ++ sym_type = ELF_ST_TYPE(isym->st_info); ++ target_frag = local_sym_frag[r_symndx]; + -+/* The PC_UDISP_W operator may show up as a label or as a pc[disp] -+ expression. So there's no point in attempting to match this... */ -+#define match_pc_disp match_anything ++ if (local_got_ents) ++ got = local_got_ents[r_symndx]; ++ else ++ got = NULL; ++ } ++ else ++ { ++ /* Global symbol */ ++ unsigned long index; ++ struct elf_link_hash_entry *h; ++ struct elf_avr32_link_hash_entry *havr; + -+static int -+match_sp(char *str) -+{ -+ /* SP in any form will do */ -+ return avr32_parse_intreg(str) == AVR32_REG_SP; -+} ++ index = r_symndx - symtab_hdr->sh_info; ++ h = elf_sym_hashes(abfd)[index]; ++ BFD_ASSERT(h != NULL); + -+static int -+match_sp_disp(char *str) -+{ -+ int regid, ret = 1; -+ char *p, c; ++ while (h->root.type == bfd_link_hash_indirect ++ || h->root.type == bfd_link_hash_warning) ++ h = (struct elf_link_hash_entry *)h->root.u.i.link; + -+ for (p = str; *p; p++) -+ if (*p == '[') -+ break; ++ havr = (struct elf_avr32_link_hash_entry *)h; ++ got = h->got.glist; + -+ /* allow empty displacement, meaning zero */ -+ if (p[0] == '[') -+ { -+ char *end; -+ for (end = p + 1; *end; end++) ; -+ if (end[-1] != ']') -+ return 0; -+ } ++ symval = 0; + -+ c = *p, *p = 0; -+ regid = avr32_parse_intreg(str); -+ if (regid != AVR32_REG_SP) -+ ret = 0; ++ RDBG(" %s: ", h->root.root.string); + -+ *p = c; -+ return ret; -+} ++ if (h->root.type != bfd_link_hash_defined ++ && h->root.type != bfd_link_hash_defweak) ++ { ++ RDBG("(undef)"); ++ defined = FALSE; ++ } ++ else if ((info->shared && !info->symbolic && h->dynindx != -1) ++ || (htab->root.dynamic_sections_created ++ && h->def_dynamic && !h->def_regular)) ++ { ++ RDBG("(dynamic)"); ++ dynamic = TRUE; ++ sym_sec = h->root.u.def.section; ++ } ++ else ++ { ++ sym_sec = h->root.u.def.section; ++ symval = h->root.u.def.value; ++ target_frag = havr->sym_frag; ++ } + -+static int -+match_cpno(char *str) -+{ -+ if (strncasecmp(str, "cp", 2) != 0) -+ return 0; -+ return 1; -+} ++ sym_type = h->type; ++ } + -+static int -+match_cpreg(char *str) -+{ -+ if (strncasecmp(str, "cr", 2) != 0) -+ return 0; -+ return 1; -+} ++ /* Thanks to elf32-ppc for this one. */ ++ if (sym_sec && sym_sec->sec_info_type == ELF_INFO_TYPE_MERGE) ++ { ++ /* At this stage in linking, no SEC_MERGE symbol has been ++ adjusted, so all references to such symbols need to be ++ passed through _bfd_merged_section_offset. (Later, in ++ relocate_section, all SEC_MERGE symbols *except* for ++ section symbols have been adjusted.) + -+/* We allow complex expressions, and register names may show up as -+ symbols. Just make sure immediate expressions are always matched -+ last. */ -+#define match_const match_anything -+#define match_jmplabel match_anything -+#define match_number match_anything ++ SEC_MERGE sections are not relaxed by us, as they ++ shouldn't contain any code. */ + -+/* Mnemonics that take reglists never accept anything else */ -+#define match_reglist8 match_anything -+#define match_reglist9 match_anything -+#define match_reglist16 match_anything -+#define match_reglist_ldm match_anything -+#define match_reglist_cp8 match_anything -+#define match_reglist_cpd8 match_anything ++ BFD_ASSERT(!target_frag && !(r_data && r_data->add_frag)); + -+/* Ditto for retval, jospinc and mcall */ -+#define match_retval match_anything -+#define match_jospinc match_anything -+#define match_mcall match_anything ++ /* gas may reduce relocations against symbols in SEC_MERGE ++ sections to a relocation against the section symbol when ++ the original addend was zero. When the reloc is against ++ a section symbol we should include the addend in the ++ offset passed to _bfd_merged_section_offset, since the ++ location of interest is the original symbol. On the ++ other hand, an access to "sym+addend" where "sym" is not ++ a section symbol should not include the addend; Such an ++ access is presumed to be an offset from "sym"; The ++ location of interest is just "sym". */ ++ RDBG("\n MERGE: %s: 0x%lx+0x%lx+0x%lx -> ", ++ (sym_type == STT_SECTION)?"section":"not section", ++ sym_sec->output_section->vma + sym_sec->output_offset, ++ symval, addend); + -+/* COH is used to select between two different syntaxes */ -+static int -+match_coh(char *str) -+{ -+ return strcasecmp(str, "coh") == 0; -+} ++ if (sym_type == STT_SECTION) ++ symval += addend; + -+static int -+match_fpreg(char *str) -+{ -+ unsigned long regid; -+ char *endptr; ++ symval = (_bfd_merged_section_offset ++ (abfd, &sym_sec, ++ elf_section_data(sym_sec)->sec_info, symval)); + -+ if ((str[0] != 'f' && str[0] != 'F') -+ || (str[1] != 'r' && str[1] != 'R')) -+ return 0; ++ if (sym_type != STT_SECTION) ++ symval += addend; ++ } ++ else ++ symval += addend; + -+ str += 2; -+ regid = strtoul(str, &endptr, 10); -+ if (!*str || *endptr) -+ return 0; ++ if (defined && !dynamic) ++ { ++ RDBG("0x%lx+0x%lx", ++ sym_sec->output_section->vma + sym_sec->output_offset, ++ symval); ++ symval += sym_sec->output_section->vma + sym_sec->output_offset; ++ } + -+ return 1; -+} ++ if (r_data && r_data->add_frag) ++ /* If the add_frag pointer is set, it means that this reloc ++ has an addend that may be affected by relaxation. */ ++ target_frag = r_data->add_frag; + -+static int -+match_picoreg(char *str) -+{ -+ int regid; ++ if (target_frag) ++ { ++ symval += target_frag->offset_adjust; + -+ regid = avr32_parse_picoreg(str); -+ if (regid < 0) -+ return 0; -+ return 1; -+} ++ /* If target_frag comes after this frag in the same ++ section, we should assume that it will be moved by ++ the same amount we are. */ ++ if ((target_frag - rd->frag) < (int)rd->frag_count ++ && target_frag > frag) ++ symval += delta; ++ } + -+#define match_pico_reglist_w match_anything -+#define match_pico_reglist_d match_anything ++ distance = symval - addr; + -+static int -+match_pico_in(char *str) -+{ -+ unsigned long regid; -+ char *end; ++ /* First, try to make a direct reference. If the symbol is ++ dynamic or undefined, we must take care not to change its ++ reference type, that is, we can't make it direct. + -+ if (strncasecmp(str, "in", 2) != 0) -+ return 0; ++ Also, it seems like some sections may actually be resized ++ after the relaxation code is done, so we can't really ++ trust that our "distance" is correct. There's really no ++ easy solution to this problem, so we'll just disallow ++ direct references to SEC_DATA sections. ++ ++ Oh, and .bss isn't actually SEC_DATA, so we disallow ++ !SEC_HAS_CONTENTS as well. */ ++ if (!dynamic && defined ++#ifndef DHRYSTONE_FIX ++ && !(sym_sec->flags & SEC_DATA) ++#endif ++ && (sym_sec->flags & SEC_HAS_CONTENTS) ++ && next_state->direct) ++ { ++ next_state = &relax_state[next_state->direct]; ++ RDBG(" D-> %s", next_state->name); ++ } + -+ str += 2; -+ regid = strtoul(str, &end, 10); -+ if (!*str || *end) -+ return 0; ++ /* Iterate backwards until we find a state that fits. */ ++ while (next_state->prev ++ && !rs_is_good_enough(next_state, frag, symval, addr, ++ got, ind_data, delta)) ++ { ++ next_state = &relax_state[next_state->prev]; ++ RDBG(" P-> %s", next_state->name); ++ } + -+ return 1; -+} ++ /* Then try to find the best possible state. */ ++ while (next_state->next) ++ { ++ const struct relax_state *candidate; + -+static int -+match_pico_out0(char *str) -+{ -+ if (strcasecmp(str, "out0") != 0) -+ return 0; -+ return 1; -+} ++ candidate = &relax_state[next_state->next]; ++ if (!rs_is_good_enough(candidate, frag, symval, addr, got, ++ ind_data, delta)) ++ break; + -+static int -+match_pico_out1(char *str) -+{ -+ if (strcasecmp(str, "out1") != 0) -+ return 0; -+ return 1; -+} ++ next_state = candidate; ++ RDBG(" N-> %s", next_state->name); ++ } + -+static int -+match_pico_out2(char *str) -+{ -+ if (strcasecmp(str, "out2") != 0) -+ return 0; -+ return 1; -+} ++ RDBG(" [size %ld]\n", next_state->size); + -+static int -+match_pico_out3(char *str) -+{ -+ if (strcasecmp(str, "out3") != 0) -+ return 0; -+ return 1; -+} ++ BFD_ASSERT(next_state->id); ++ BFD_ASSERT(!dynamic || next_state->reftype == REF_GOT); + -+static void parse_nothing(const struct avr32_operand *op ATTRIBUTE_UNUSED, -+ char *str ATTRIBUTE_UNUSED, -+ int opindex ATTRIBUTE_UNUSED) -+{ -+ /* Do nothing (this is used for "match-only" operands like COH) */ -+} ++ size_adjust = next_state->size - state->size; + -+static void -+parse_const(const struct avr32_operand *op, char *str, -+ int opindex ATTRIBUTE_UNUSED) -+{ -+ expressionS *exp = ¤t_insn.immediate; -+ expressionS *sym_exp; -+ int slot; -+ char *save; ++ /* There's a theoretical possibility that shrinking one frag ++ may cause another to grow, which may cause the first one to ++ grow as well, and we're back where we started. Avoid this ++ scenario by disallowing a frag that has grown to ever ++ shrink again. */ ++ if (state->reftype == REF_GOT && next_state->reftype != REF_GOT) ++ { ++ if (frag->has_grown) ++ next_state = state; ++ else ++ unref_got_entry(htab, got); ++ } ++ else if (state->reftype != REF_GOT && next_state->reftype == REF_GOT) ++ { ++ ref_got_entry(htab, got); ++ frag->has_grown = TRUE; ++ } ++ else if (state->reftype == REF_CPOOL ++ && next_state->reftype != REF_CPOOL) ++ { ++ if (frag->has_grown) ++ next_state = state; ++ else ++ ind_data->add_frag->refcount--; ++ } ++ else if (state->reftype != REF_CPOOL ++ && next_state->reftype == REF_CPOOL) ++ { ++ ind_data->add_frag->refcount++; ++ frag->has_grown = TRUE; ++ } ++ else ++ { ++ if (frag->has_grown && size_adjust < 0) ++ next_state = state; ++ else if (size_adjust > 0) ++ frag->has_grown = TRUE; ++ } + -+ pr_debug("parse_const: `%s' (signed: %d, pcrel: %d, align: %d)\n", -+ str, op->is_signed, op->is_pcrel, op->align_order); ++ size_adjust = next_state->size - state->size; ++ frag->state = next_state->id; + -+ save = input_line_pointer; -+ input_line_pointer = str; ++ break; ++ } + -+ expression(exp); ++ if (size_adjust) ++ htab->repeat_pass = TRUE; + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].align_order = op->align_order; -+ current_insn.pcrel = op->is_pcrel; ++ frag->size_adjust += size_adjust; ++ sec->size += size_adjust; ++ delta += size_adjust; + -+ switch (exp->X_op) -+ { -+ case O_illegal: -+ as_bad(_("illegal operand")); -+ break; -+ case O_absent: -+ as_bad(_("missing operand")); -+ break; -+ case O_constant: -+ pr_debug(" -> constant: %ld\n", (long)exp->X_add_number); -+ current_insn.field_value[slot].value = exp->X_add_number; -+ break; -+ case O_uminus: -+ pr_debug(" -> uminus\n"); -+ sym_exp = symbol_get_value_expression(exp->X_add_symbol); -+ switch (sym_exp->X_op) { -+ case O_subtract: -+ pr_debug(" -> subtract: switching operands\n"); -+ exp->X_op_symbol = sym_exp->X_add_symbol; -+ exp->X_add_symbol = sym_exp->X_op_symbol; -+ exp->X_op = O_subtract; -+ /* TODO: Remove the old X_add_symbol */ -+ break; -+ default: -+ as_bad(_("Expression too complex\n")); -+ break; -+ } -+ break; -+#if 0 -+ case O_subtract: -+ /* Any expression subtracting a symbol from the current section -+ can be made PC-relative by adding the right offset. */ -+ if (S_GET_SEGMENT(exp->X_op_symbol) == now_seg) -+ current_insn.pcrel = TRUE; -+ pr_debug(" -> subtract: pcrel? %s\n", -+ current_insn.pcrel ? "yes" : "no"); -+ /* fall through */ -+#endif -+ default: -+ pr_debug(" -> (%p <%d> %p + %d)\n", -+ exp->X_add_symbol, exp->X_op, exp->X_op_symbol, -+ exp->X_add_number); -+ current_insn.field_value[slot].value = 0; -+ break; ++ BFD_ASSERT((frag->offset + frag->offset_adjust ++ + frag->size + frag->size_adjust) ++ == (frag[1].offset + frag[1].offset_adjust + delta)); + } + -+ input_line_pointer = save; ++ ret = TRUE; ++ ++ out: ++ release_local_syms(abfd, isymbuf); ++ release_internal_relocs(sec, relocs); ++ return ret; +} + -+static void -+parse_jmplabel(const struct avr32_operand *op, char *str, -+ int opindex ATTRIBUTE_UNUSED) ++static bfd_boolean ++adjust_global_symbol(struct elf_avr32_link_hash_entry *havr, ++ struct bfd_link_info *info ATTRIBUTE_UNUSED) +{ -+ expressionS *exp = ¤t_insn.immediate; -+ int slot; -+ char *save; -+ -+ pr_debug("parse_jmplabel: `%s' (signed: %d, pcrel: %d, align: %d)\n", -+ str, op->is_signed, op->is_pcrel, op->align_order); -+ -+ save = input_line_pointer; -+ input_line_pointer = str; -+ -+ expression(exp); -+ -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].align_order = op->align_order; -+ current_insn.pcrel = TRUE; ++ struct elf_link_hash_entry *h = &havr->root; + -+ switch (exp->X_op) ++ if (havr->sym_frag && (h->root.type == bfd_link_hash_defined ++ || h->root.type == bfd_link_hash_defweak)) + { -+ case O_illegal: -+ as_bad(_("illegal operand")); -+ break; -+ case O_absent: -+ as_bad(_("missing operand")); -+ break; -+ case O_constant: -+ pr_debug(" -> constant: %ld\n", (long)exp->X_add_number); -+ current_insn.field_value[slot].value = exp->X_add_number; -+ current_insn.pcrel = 0; -+ break; -+ default: -+ pr_debug(" -> (%p <%d> %p + %d)\n", -+ exp->X_add_symbol, exp->X_op, exp->X_op_symbol, -+ exp->X_add_number); -+ current_insn.field_value[slot].value = 0; -+ break; ++ RDBG("adjust_global_symbol: %s 0x%08lx -> 0x%08lx\n", ++ h->root.root.string, h->root.u.def.value, ++ h->root.u.def.value + havr->sym_frag->offset_adjust); ++ h->root.u.def.value += havr->sym_frag->offset_adjust; + } -+ -+ input_line_pointer = save; ++ return TRUE; +} + -+static void -+parse_intreg(const struct avr32_operand *op ATTRIBUTE_UNUSED, -+ char *str, int opindex ATTRIBUTE_UNUSED) ++static bfd_boolean ++adjust_syms(struct bfd_link_info *info) +{ -+ int regid, slot; ++ struct elf_avr32_link_hash_table *htab; ++ bfd *abfd; + -+ pr_debug("parse_intreg: `%s'\n", str); ++ htab = avr32_elf_hash_table(info); ++ elf_link_hash_traverse(&htab->root, adjust_global_symbol, info); + -+ regid = avr32_parse_intreg(str); -+ assert(regid >= 0); ++ for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) ++ { ++ Elf_Internal_Sym *isymbuf; ++ struct fragment **local_sym_frag, *frag; ++ unsigned int i, sym_count; + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = regid; -+ current_insn.field_value[slot].align_order = op->align_order; -+} ++ sym_count = elf_tdata(abfd)->symtab_hdr.sh_info; ++ if (sym_count == 0) ++ continue; + -+static void -+parse_intreg_predec(const struct avr32_operand *op, char *str, int opindex) -+{ -+ parse_intreg(op, str + 2, opindex); -+} ++ isymbuf = retrieve_local_syms(abfd, info->keep_memory); ++ if (!isymbuf) ++ return FALSE; + -+static void -+parse_intreg_postinc(const struct avr32_operand *op, char *str, int opindex) -+{ -+ char *p, c; ++ local_sym_frag = elf_tdata(abfd)->local_sym_frag; + -+ pr_debug("parse_intreg_postinc: `%s'\n", str); ++ for (i = 0; i < sym_count; i++) ++ { ++ frag = local_sym_frag[i]; ++ if (frag) ++ { ++ RDBG("adjust_local_symbol: %s[%u] 0x%08lx -> 0x%08lx\n", ++ abfd->filename, i, isymbuf[i].st_value, ++ isymbuf[i].st_value + frag->offset_adjust); ++ isymbuf[i].st_value += frag->offset_adjust; ++ } ++ } + -+ for (p = str; *p != '+'; p++) ; ++ release_local_syms(abfd, isymbuf); ++ } + -+ c = *p, *p = 0; -+ parse_intreg(op, str, opindex); -+ *p = c; ++ htab->symbols_adjusted = TRUE; ++ return TRUE; +} + -+static void -+parse_intreg_shift(const struct avr32_operand *op ATTRIBUTE_UNUSED, -+ char *str, int opindex ATTRIBUTE_UNUSED) ++static bfd_boolean ++adjust_relocs(bfd *abfd, asection *sec, struct bfd_link_info *info) +{ -+ int regid, slot, shift = 0; -+ char *p, c; -+ char shiftop; ++ struct avr32_relax_data *rd; ++ Elf_Internal_Rela *relocs; ++ Elf_Internal_Shdr *symtab_hdr; ++ unsigned int i; ++ bfd_boolean ret = FALSE; + -+ pr_debug("parse Ry<reloc_data) ++ return TRUE; + -+ for (p = str; *p; p++) -+ if (*p == '<' || *p == '>') -+ break; ++ RDBG("adjust_relocs: %s<%s> (count: %u)\n", abfd->filename, sec->name, ++ sec->reloc_count); + -+ shiftop = *p; ++ relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); ++ if (!relocs) ++ return FALSE; + -+ c = *p, *p = 0; -+ regid = avr32_parse_intreg(str); -+ assert(regid >= 0); -+ *p = c; ++ symtab_hdr = &elf_tdata(abfd)->symtab_hdr; + -+ if (c) ++ for (i = 0; i < sec->reloc_count; i++) + { -+ if (p[0] != shiftop || p[1] != shiftop) -+ as_bad(_("expected shift operator in `%s'"), p); -+ else -+ { -+ expressionS exp; -+ char *saved; ++ Elf_Internal_Rela *rela = &relocs[i]; ++ struct avr32_reloc_data *r_data = &rd->reloc_data[i]; ++ struct fragment *sym_frag; ++ unsigned long r_symndx; + -+ saved = input_line_pointer; -+ input_line_pointer = p + 2; -+ expression(&exp); -+ input_line_pointer = saved; ++ if (r_data->add_frag) ++ { ++ r_symndx = ELF_R_SYM(rela->r_info); + -+ if (exp.X_op != O_constant) -+ as_bad(_("shift amount must be a numeric constant")); ++ if (r_symndx < symtab_hdr->sh_info) ++ sym_frag = elf_tdata(abfd)->local_sym_frag[r_symndx]; + else -+ shift = exp.X_add_number; -+ } -+ } ++ { ++ struct elf_link_hash_entry *h; + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = regid; -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = shift; -+} ++ h = elf_sym_hashes(abfd)[r_symndx - symtab_hdr->sh_info]; + -+/* The match() function selected the right opcode, so it doesn't -+ matter which way we shift any more. */ -+#define parse_intreg_lsl parse_intreg_shift -+#define parse_intreg_lsr parse_intreg_shift ++ while (h->root.type == bfd_link_hash_indirect ++ || h->root.type == bfd_link_hash_warning) ++ h = (struct elf_link_hash_entry *)h->root.u.i.link; + -+static void -+parse_intreg_part(const struct avr32_operand *op, char *str, -+ int opindex ATTRIBUTE_UNUSED) -+{ -+ static const char bparts[] = { 'b', 'l', 'u', 't' }; -+ static const char hparts[] = { 'b', 't' }; -+ unsigned int slot, sel; -+ int regid; -+ char *p, c; ++ BFD_ASSERT(h->root.type == bfd_link_hash_defined ++ || h->root.type == bfd_link_hash_defweak); + -+ pr_debug("parse reg:part `%s'\n", str); ++ sym_frag = ((struct elf_avr32_link_hash_entry *)h)->sym_frag; ++ } + -+ for (p = str; *p; p++) -+ if (*p == ':') -+ break; ++ RDBG(" addend: 0x%08lx -> 0x%08lx\n", ++ rela->r_addend, ++ rela->r_addend + r_data->add_frag->offset_adjust ++ - (sym_frag ? sym_frag->offset_adjust : 0)); + -+ c = *p, *p = 0; -+ regid = avr32_parse_intreg(str); -+ assert(regid >= 0); -+ *p = c; ++ /* If this is against a section symbol, we won't find any ++ sym_frag, so we'll just adjust the addend. */ ++ rela->r_addend += r_data->add_frag->offset_adjust; ++ if (sym_frag) ++ rela->r_addend -= sym_frag->offset_adjust; + -+ assert(c == ':'); ++ if (r_data->sub_frag) ++ { ++ bfd_byte *contents; ++ bfd_signed_vma diff; + -+ if (op->align_order) -+ { -+ for (sel = 0; sel < sizeof(hparts); sel++) -+ if (TOLOWER(p[1]) == hparts[sel]) -+ break; ++ contents = retrieve_contents(abfd, sec, info->keep_memory); ++ if (!contents) ++ goto out; + -+ if (sel >= sizeof(hparts)) -+ { -+ as_bad(_("invalid halfword selector `%c' (must be either b or t)"), -+ p[1]); -+ sel = 0; -+ } -+ } -+ else -+ { -+ for (sel = 0; sel < sizeof(bparts); sel++) -+ if (TOLOWER(p[1]) == bparts[sel]) -+ break; ++ /* I realize now that sub_frag is misnamed. It's ++ actually add_frag which is subtracted in this ++ case... */ ++ diff = bfd_get_signed_32(abfd, contents + rela->r_offset); ++ diff += (r_data->sub_frag->offset_adjust ++ - r_data->add_frag->offset_adjust); ++ bfd_put_32(abfd, diff, contents + rela->r_offset); + -+ if (sel >= sizeof(bparts)) -+ { -+ as_bad(_("invalid byte selector `%c' (must be one of b,l,u,t)"), -+ p[1]); -+ sel = 0; ++ RDBG(" 0x%lx: DIFF32 updated: 0x%lx\n", rela->r_offset, diff); ++ ++ release_contents(sec, contents); ++ } + } ++ else ++ BFD_ASSERT(!r_data->sub_frag); + } + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = regid; -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = sel; ++ ret = TRUE; ++ ++ out: ++ release_internal_relocs(sec, relocs); ++ return ret; +} + -+/* This is the parser for "Rp[displacement]" expressions. In addition -+ to the "official" syntax, we accept a label as a replacement for -+ the register expression. This syntax implies Rp=PC and the -+ displacement is the pc-relative distance to the label. */ -+static void -+parse_intreg_disp(const struct avr32_operand *op, char *str, int opindex) ++static bfd_boolean ++avr32_move_data(bfd *abfd, asection *sec, struct bfd_link_info *info) +{ -+ expressionS *exp = ¤t_insn.immediate; -+ int slot, regid; -+ char *save, *p, c; -+ -+ pr_debug("parse_intreg_disp: `%s' (signed: %d, pcrel: %d, align: %d)\n", -+ str, op->is_signed, op->is_pcrel, op->align_order); -+ -+ for (p = str; *p; p++) -+ if (*p == '[') -+ break; ++ struct elf_avr32_link_hash_table *htab; ++ struct avr32_relax_data *rd; ++ struct fragment *frag, *fragend; ++ Elf_Internal_Rela *relocs = NULL; ++ bfd_byte *contents = NULL; ++ unsigned int i; ++ bfd_boolean ret = FALSE; + -+ slot = current_insn.next_slot++; ++ htab = avr32_elf_hash_table(info); ++ rd = avr32_relax_data(sec); + -+ /* First, check if we have a valid register either before '[' or as -+ the sole expression. If so, we use the Rp[disp] syntax. */ -+ c = *p, *p = 0; -+ regid = avr32_parse_intreg(str); -+ *p = c; ++ if (!htab->symbols_adjusted) ++ if (!adjust_syms(info)) ++ return FALSE; + -+ if (regid >= 0) ++ if (rd->is_relaxable) + { -+ current_insn.field_value[slot].value = regid; -+ -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].align_order = op->align_order; -+ -+ if (c == '[') ++ /* Resize the section first, so that we can be sure that enough ++ memory is allocated in case the section has grown. */ ++ if (sec->size > sec->rawsize ++ && elf_section_data(sec)->this_hdr.contents) + { -+ save = input_line_pointer; -+ input_line_pointer = p + 1; ++ /* We must not use cached data if the section has grown. */ ++ free(elf_section_data(sec)->this_hdr.contents); ++ elf_section_data(sec)->this_hdr.contents = NULL; ++ } + -+ expression(exp); ++ relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); ++ if (!relocs) ++ goto out; ++ contents = retrieve_contents(abfd, sec, info->keep_memory); ++ if (!contents) ++ goto out; + -+ if (*input_line_pointer != ']') -+ as_bad(_("junk after displacement expression")); ++ fragend = rd->frag + rd->frag_count; + -+ input_line_pointer = save; ++ RDBG("move_data: %s<%s>: relocs=%p, contents=%p\n", ++ abfd->filename, sec->name, relocs, contents); + -+ switch (exp->X_op) -+ { -+ case O_illegal: -+ as_bad(_("illegal displacement expression")); -+ break; -+ case O_absent: -+ as_bad(_("missing displacement expression")); -+ break; -+ case O_constant: -+ pr_debug(" -> constant: %ld\n", exp->X_add_number); -+ current_insn.field_value[slot].value = exp->X_add_number; -+ break; -+#if 0 -+ case O_subtract: -+ if (S_GET_SEGMENT(exp->X_op_symbol) == now_seg) -+ current_insn.pcrel = TRUE; -+ pr_debug(" -> subtract: pcrel? %s\n", -+ current_insn.pcrel ? "yes" : "no"); -+ /* fall through */ -+#endif -+ default: -+ pr_debug(" -> (%p <%d> %p + %d)\n", -+ exp->X_add_symbol, exp->X_op, exp->X_op_symbol, -+ exp->X_add_number); -+ current_insn.field_value[slot].value = 0; -+ } -+ } -+ else ++ /* First, move the data into place. We must take care to move ++ frags in the right order so that we don't accidentally ++ overwrite parts of the next frag. */ ++ for (frag = rd->frag; frag < fragend; frag++) + { -+ exp->X_op = O_constant; -+ exp->X_add_number = 0; -+ current_insn.field_value[slot].value = 0; -+ } -+ } -+ else -+ { -+ /* Didn't find a valid register. Try parsing it as a label. */ -+ current_insn.field_value[slot].value = AVR32_REG_PC; -+ parse_jmplabel(op, str, opindex); -+ } -+} ++ RDBG(" 0x%08lx%c0x%x: size 0x%lx%c0x%x\n", ++ frag->offset, frag->offset_adjust >= 0 ? '+' : '-', ++ abs(frag->offset_adjust), ++ frag->size, frag->size_adjust >= 0 ? '+' : '-', ++ abs(frag->size_adjust)); ++ if (frag->offset_adjust > 0) ++ { ++ struct fragment *prev = frag - 1; ++ struct fragment *last; + -+static void -+parse_intreg_index(const struct avr32_operand *op ATTRIBUTE_UNUSED, -+ char *str, int opindex ATTRIBUTE_UNUSED) -+{ -+ int slot, regid; -+ char *p, *end, c; ++ for (last = frag; last < fragend && last->offset_adjust > 0; ++ last++) ; + -+ for (p = str; *p; p++) -+ if (*p == '[') -+ break; ++ if (last == fragend) ++ last--; + -+ assert(*p); ++ for (frag = last; frag != prev; frag--) ++ { ++ if (frag->offset_adjust ++ && frag->size + frag->size_adjust > 0) ++ { ++ RDBG("memmove 0x%lx -> 0x%lx (size %lu)\n", ++ frag->offset, frag->offset + frag->offset_adjust, ++ frag->size + frag->size_adjust); ++ memmove(contents + frag->offset + frag->offset_adjust, ++ contents + frag->offset, ++ frag->size + frag->size_adjust); ++ } ++ } ++ frag = last; ++ } ++ else if (frag->offset_adjust && frag->size + frag->size_adjust > 0) ++ { ++ RDBG("memmove 0x%lx -> 0x%lx (size %lu)\n", ++ frag->offset, frag->offset + frag->offset_adjust, ++ frag->size + frag->size_adjust); ++ memmove(contents + frag->offset + frag->offset_adjust, ++ contents + frag->offset, ++ frag->size + frag->size_adjust); ++ } ++ } + -+ c = *p, *p = 0; -+ regid = avr32_parse_intreg(str); -+ assert(regid >= 0); -+ *p = c; ++ i = 0; + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = regid; ++ for (frag = rd->frag; frag < fragend; frag++) ++ { ++ const struct relax_state *state, *istate; ++ struct avr32_reloc_data *r_data = NULL; + -+ p++; -+ for (end = p; *end; end++) -+ if (*end == ']' || *end == '<') -+ break; ++ istate = &relax_state[frag->initial_state]; ++ state = &relax_state[frag->state]; + -+ assert(*end); ++ if (rd->reloc_data) ++ r_data = &rd->reloc_data[frag->rela - relocs]; + -+ c = *end, *end = 0; -+ regid = avr32_parse_intreg(p); -+ assert(regid >= 0); -+ *end = c; ++ BFD_ASSERT((long)(frag->size + frag->size_adjust) >= 0); ++ BFD_ASSERT(state->reftype != REF_CPOOL ++ || r_data->add_frag->refcount > 0); + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = regid; ++ if (istate->reftype == REF_CPOOL && state->reftype != REF_CPOOL) ++ { ++ struct fragment *ifrag; + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = 0; ++ /* An indirect reference through the cpool has been ++ converted to a direct reference. We must update the ++ reloc to point to the symbol itself instead of the ++ constant pool entry. The reloc type will be updated ++ later. */ ++ ifrag = r_data->add_frag; ++ frag->rela->r_info = ifrag->rela->r_info; ++ frag->rela->r_addend = ifrag->rela->r_addend; + -+ if (*end == '<') -+ { -+ expressionS exp; -+ char *save; ++ /* Copy the reloc data so the addend will be adjusted ++ correctly later. */ ++ *r_data = rd->reloc_data[ifrag->rela - relocs]; ++ } + -+ p = end + 2; -+ for (end = p; *end; end++) -+ if (*end == ']') -+ break; ++ /* Move all relocs covered by this frag. */ ++ if (frag->rela) ++ BFD_ASSERT(&relocs[i] <= frag->rela); ++ else ++ BFD_ASSERT((frag + 1) == fragend && frag->state == RS_NONE); + -+ assert(*end == ']'); ++ if (frag == rd->frag) ++ BFD_ASSERT(i == 0); ++ else ++ BFD_ASSERT(&relocs[i] > frag[-1].rela); + -+ c = *end, *end = 0; -+ save = input_line_pointer; -+ input_line_pointer = p; -+ expression(&exp); ++ /* If non-null, frag->rela is the last relocation in the ++ fragment. frag->rela can only be null in the last ++ fragment, so in that case, we'll just do the rest. */ ++ for (; (i < sec->reloc_count ++ && (!frag->rela || &relocs[i] <= frag->rela)); i++) ++ { ++ RDBG("[%4u] r_offset 0x%08lx -> 0x%08lx\n", i, relocs[i].r_offset, ++ relocs[i].r_offset + frag->offset_adjust); ++ relocs[i].r_offset += frag->offset_adjust; ++ } + -+ if (*input_line_pointer) -+ as_bad(_("junk after shift expression")); ++ if (frag->refcount == 0) ++ { ++ /* If this frag is to be discarded, make sure we won't ++ relocate it later on. */ ++ BFD_ASSERT(frag->state == RS_CPENT); ++ frag->rela->r_info = ELF_R_INFO(ELF_R_SYM(frag->rela->r_info), ++ R_AVR32_NONE); ++ } ++ else if (frag->state == RS_ALIGN) ++ { ++ bfd_vma addr, addr_end; + -+ *end = c; -+ input_line_pointer = save; ++ addr = frag->rela->r_offset; ++ addr_end = (frag->offset + frag->offset_adjust ++ + frag->size + frag->size_adjust); + -+ if (exp.X_op == O_constant) -+ current_insn.field_value[slot].value = exp.X_add_number; -+ else -+ as_bad(_("shift expression too complex")); -+ } -+} ++ /* If the section is executable, insert NOPs. ++ Otherwise, insert zeroes. */ ++ if (sec->flags & SEC_CODE) ++ { ++ if (addr & 1) ++ { ++ bfd_put_8(abfd, 0, contents + addr); ++ addr++; ++ } + -+static void -+parse_intreg_xindex(const struct avr32_operand *op, char *str, int opindex) -+{ -+ int slot, regid; -+ char *p, *end, c; ++ BFD_ASSERT(!((addr_end - addr) & 1)); + -+ for (p = str; *p; p++) -+ if (*p == '[') -+ break; ++ while (addr < addr_end) ++ { ++ bfd_put_16(abfd, NOP_OPCODE, contents + addr); ++ addr += 2; ++ } ++ } ++ else ++ memset(contents + addr, 0, addr_end - addr); ++ } ++ else if (state->opcode_mask) ++ { ++ bfd_vma insn; + -+ assert(*p); ++ /* Update the opcode and the relocation type unless it's a ++ "special" relax state (i.e. RS_NONE, RS_ALIGN or ++ RS_CPENT.), in which case the opcode mask is zero. */ ++ insn = bfd_get_32(abfd, contents + frag->rela->r_offset); ++ insn &= ~state->opcode_mask; ++ insn |= state->opcode; ++ RDBG(" 0x%lx: inserting insn %08lx\n", ++ frag->rela->r_offset, insn); ++ bfd_put_32(abfd, insn, contents + frag->rela->r_offset); + -+ c = *p, *p = 0; -+ regid = avr32_parse_intreg(str); -+ assert(regid >= 0); -+ *p = c; ++ frag->rela->r_info = ELF_R_INFO(ELF_R_SYM(frag->rela->r_info), ++ state->r_type); ++ } + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = regid; ++ if ((frag + 1) == fragend) ++ BFD_ASSERT((frag->offset + frag->size + frag->offset_adjust ++ + frag->size_adjust) == sec->size); ++ else ++ BFD_ASSERT((frag->offset + frag->size + frag->offset_adjust ++ + frag->size_adjust) ++ == (frag[1].offset + frag[1].offset_adjust)); ++ } ++ } + -+ p++; -+ for (end = p; *end; end++) -+ if (*end == '<') -+ break; ++ /* Adjust reloc addends and DIFF32 differences */ ++ if (!adjust_relocs(abfd, sec, info)) ++ return FALSE; + -+ assert(*end); ++ ret = TRUE; + -+ c = *end, *end = 0; -+ parse_intreg_part(op, p, opindex); -+ *end = c; ++ out: ++ release_contents(sec, contents); ++ release_internal_relocs(sec, relocs); ++ return ret; +} + -+static void -+parse_pc_disp(const struct avr32_operand *op, char *str, int opindex) ++static bfd_boolean ++avr32_elf_relax_section(bfd *abfd, asection *sec, ++ struct bfd_link_info *info, bfd_boolean *again) +{ -+ char *p, c; -+ -+ for (p = str; *p; p++) -+ if (*p == '[') -+ break; ++ struct elf_avr32_link_hash_table *htab; ++ struct avr32_relax_data *rd; + -+ /* The lddpc instruction comes in two different syntax variants: -+ lddpc reg, expression -+ lddpc reg, pc[disp] -+ If the operand contains a '[', we use the second form. */ -+ if (*p) -+ { -+ int regid; ++ *again = FALSE; ++ if (info->relocatable) ++ return TRUE; + -+ c = *p, *p = 0; -+ regid = avr32_parse_intreg(str); -+ *p = c; -+ if (regid == AVR32_REG_PC) -+ { -+ char *end; ++ htab = avr32_elf_hash_table(info); ++ if ((!(sec->flags & SEC_RELOC) || sec->reloc_count == 0) ++ && sec != htab->sgot) ++ return TRUE; + -+ for (end = ++p; *end; end++) ; -+ if (*(--end) != ']') -+ as_bad(_("unrecognized form of instruction: `%s'"), str); -+ else -+ { -+ c = *end, *end = 0; -+ parse_const(op, p, opindex); -+ *end = c; -+ current_insn.pcrel = 0; -+ } -+ } -+ else -+ as_bad(_("unrecognized form of instruction: `%s'"), str); -+ } -+ else ++ if (!htab->relocations_analyzed) + { -+ parse_jmplabel(op, str, opindex); ++ if (!analyze_relocations(info)) ++ return FALSE; ++ htab->relocations_analyzed = TRUE; + } -+} + -+static void parse_sp(const struct avr32_operand *op ATTRIBUTE_UNUSED, -+ char *str ATTRIBUTE_UNUSED, -+ int opindex ATTRIBUTE_UNUSED) -+{ -+ int slot; ++ rd = avr32_relax_data(sec); + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = AVR32_REG_SP; -+} ++ if (rd->iteration != htab->relax_iteration) ++ { ++ if (!htab->repeat_pass) ++ htab->relax_pass++; ++ htab->relax_iteration++; ++ htab->repeat_pass = FALSE; ++ } + -+static void -+parse_sp_disp(const struct avr32_operand *op, char *str, int opindex) -+{ -+ char *p, c; ++ rd->iteration++; + -+ for (; *str; str++) -+ if (*str == '[') ++ switch (htab->relax_pass) ++ { ++ case RELAX_PASS_SIZE_FRAGS: ++ if (!avr32_size_frags(abfd, sec, info)) ++ return FALSE; ++ *again = TRUE; + break; -+ -+ assert(*str); -+ -+ for (p = ++str; *p; p++) -+ if (*p == ']') ++ case RELAX_PASS_MOVE_DATA: ++ if (!avr32_move_data(abfd, sec, info)) ++ return FALSE; + break; ++ } + -+ c = *p, *p = 0; -+ parse_const(op, str, opindex); -+ *p = c; ++ return TRUE; +} + -+static void -+parse_cpno(const struct avr32_operand *op ATTRIBUTE_UNUSED, char *str, -+ int opindex ATTRIBUTE_UNUSED) -+{ -+ int slot; ++ ++/* Relocation */ + -+ str += 2; -+ if (*str == '#') -+ str++; -+ if (*str < '0' || *str > '7' || str[1]) -+ as_bad(_("invalid coprocessor `%s'"), str); ++static bfd_reloc_status_type ++avr32_check_reloc_value(asection *sec, Elf_Internal_Rela *rela, ++ bfd_signed_vma relocation, reloc_howto_type *howto); ++static bfd_reloc_status_type ++avr32_final_link_relocate(reloc_howto_type *howto, bfd *input_bfd, ++ asection *input_section, bfd_byte *contents, ++ Elf_Internal_Rela *rel, bfd_vma value); ++static bfd_boolean ++avr32_elf_relocate_section(bfd *output_bfd, struct bfd_link_info *info, ++ bfd *input_bfd, asection *input_section, ++ bfd_byte *contents, Elf_Internal_Rela *relocs, ++ Elf_Internal_Sym *local_syms, ++ asection **local_sections); + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = *str - '0'; -+} + -+static void -+parse_cpreg(const struct avr32_operand *op, char *str, -+ int opindex ATTRIBUTE_UNUSED) -+{ -+ unsigned int crid; -+ int slot; -+ char *endptr; ++#define symbol_address(symbol) \ ++ symbol->value + symbol->section->output_section->vma \ ++ + symbol->section->output_offset + -+ str += 2; -+ crid = strtoul(str, &endptr, 10); -+ if (*endptr || crid > 15 || crid & ((1 << op->align_order) - 1)) -+ as_bad(_("invalid coprocessor register `%s'"), str); ++#define avr32_elf_insert_field(size, field, abfd, reloc_entry, data) \ ++ do \ ++ { \ ++ unsigned long x; \ ++ x = bfd_get_##size (abfd, data + reloc_entry->address); \ ++ x &= ~reloc_entry->howto->dst_mask; \ ++ x |= field & reloc_entry->howto->dst_mask; \ ++ bfd_put_##size (abfd, (bfd_vma) x, data + reloc_entry->address); \ ++ } \ ++ while(0) + -+ crid >>= op->align_order; ++static bfd_reloc_status_type ++avr32_check_reloc_value(asection *sec ATTRIBUTE_UNUSED, ++ Elf_Internal_Rela *rela ATTRIBUTE_UNUSED, ++ bfd_signed_vma relocation, ++ reloc_howto_type *howto) ++{ ++ bfd_vma reloc_u; + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = crid; -+} ++ /* We take "complain_overflow_dont" to mean "don't complain on ++ alignment either". This way, we don't have to special-case ++ R_AVR32_HI16 */ ++ if (howto->complain_on_overflow == complain_overflow_dont) ++ return bfd_reloc_ok; + -+static void -+parse_number(const struct avr32_operand *op, char *str, -+ int opindex ATTRIBUTE_UNUSED) -+{ -+ expressionS exp; -+ int slot; -+ char *save; ++ /* Check if the value is correctly aligned */ ++ if (relocation & ((1 << howto->rightshift) - 1)) ++ { ++ RDBG("misaligned: %s<%s+%lx>: %s: 0x%lx (align %u)\n", ++ sec->owner->filename, sec->name, rela->r_offset, ++ howto->name, relocation, howto->rightshift); ++ return bfd_reloc_overflow; ++ } + -+ save = input_line_pointer; -+ input_line_pointer = str; -+ expression(&exp); -+ input_line_pointer = save; ++ /* Now, get rid of the unnecessary bits */ ++ relocation >>= howto->rightshift; ++ reloc_u = (bfd_vma)relocation; + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].align_order = op->align_order; ++ switch (howto->complain_on_overflow) ++ { ++ case complain_overflow_unsigned: ++ case complain_overflow_bitfield: ++ if (reloc_u > (unsigned long)((1 << howto->bitsize) - 1)) ++ { ++ RDBG("unsigned overflow: %s<%s+%lx>: %s: 0x%lx (size %u)\n", ++ sec->owner->filename, sec->name, rela->r_offset, ++ howto->name, reloc_u, howto->bitsize); ++ RDBG("reloc vma: 0x%lx\n", ++ sec->output_section->vma + sec->output_offset + rela->r_offset); + -+ if (exp.X_op == O_constant) -+ current_insn.field_value[slot].value = exp.X_add_number; -+ else -+ as_bad(_("invalid numeric expression `%s'"), str); -+} ++ return bfd_reloc_overflow; ++ } ++ break; ++ case complain_overflow_signed: ++ if (relocation > (1 << (howto->bitsize - 1)) - 1) ++ { ++ RDBG("signed overflow: %s<%s+%lx>: %s: 0x%lx (size %u)\n", ++ sec->owner->filename, sec->name, rela->r_offset, ++ howto->name, reloc_u, howto->bitsize); ++ RDBG("reloc vma: 0x%lx\n", ++ sec->output_section->vma + sec->output_offset + rela->r_offset); + -+static void -+parse_reglist8(const struct avr32_operand *op ATTRIBUTE_UNUSED, -+ char *str, int opindex ATTRIBUTE_UNUSED) -+{ -+ unsigned long regmask; -+ unsigned long value = 0; -+ int slot; -+ char *tail; ++ return bfd_reloc_overflow; ++ } ++ if (relocation < -(1 << (howto->bitsize - 1))) ++ { ++ RDBG("signed overflow: %s<%s+%lx>: %s: -0x%lx (size %u)\n", ++ sec->owner->filename, sec->name, rela->r_offset, ++ howto->name, -relocation, howto->bitsize); ++ RDBG("reloc vma: 0x%lx\n", ++ sec->output_section->vma + sec->output_offset + rela->r_offset); + -+ regmask = avr32_parse_reglist(str, &tail); -+ if (*tail) -+ as_bad(_("invalid register list `%s'"), str); -+ else -+ { -+ if (avr32_make_regmask8(regmask, &value)) -+ as_bad(_("register list `%s' doesn't fit"), str); ++ return bfd_reloc_overflow; ++ } ++ break; ++ default: ++ abort(); + } + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = value; ++ return bfd_reloc_ok; +} + -+static int -+parse_reglist_tail(char *str, unsigned long regmask) ++ ++static bfd_reloc_status_type ++avr32_final_link_relocate(reloc_howto_type *howto, ++ bfd *input_bfd, ++ asection *input_section, ++ bfd_byte *contents, ++ Elf_Internal_Rela *rel, ++ bfd_vma value) +{ -+ expressionS exp; -+ char *save, *p, c; -+ int regid; ++ bfd_vma field; ++ bfd_vma relocation; ++ bfd_reloc_status_type status; ++ bfd_byte *p = contents + rel->r_offset; ++ unsigned long x; + -+ for (p = str + 1; *p; p++) -+ if (*p == '=') -+ break; ++ pr_debug(" (6b) final link relocate\n"); + -+ if (!*p) ++ /* Sanity check the address */ ++ if (rel->r_offset > input_section->size) + { -+ as_bad(_("invalid register list `%s'"), str); -+ return -2; ++ (*_bfd_error_handler) ++ ("%B: %A+0x%lx: offset out of range (section size: 0x%lx)", ++ input_bfd, input_section, rel->r_offset, input_section->size); ++ return bfd_reloc_outofrange; + } + -+ c = *p, *p = 0; -+ regid = avr32_parse_intreg(str); -+ *p = c; ++ relocation = value + rel->r_addend; + -+ if (regid != 12) ++ if (howto->pc_relative) + { -+ as_bad(_("invalid register list `%s'"), str); -+ return -2; -+ } ++ bfd_vma addr; + -+ /* If we have an assignment, we must pop PC and we must _not_ -+ pop LR or R12 */ -+ if (!(regmask & (1 << AVR32_REG_PC))) -+ { -+ as_bad(_("return value specified for non-return instruction")); -+ return -2; ++ addr = input_section->output_section->vma ++ + input_section->output_offset + rel->r_offset; ++ addr &= ~0UL << howto->rightshift; ++ relocation -= addr; + } -+ else if (regmask & ((1 << AVR32_REG_R12) | (1 << AVR32_REG_LR))) ++ ++ switch (ELF32_R_TYPE(rel->r_info)) + { -+ as_bad(_("can't pop LR or R12 when specifying return value")); -+ return -2; ++ case R_AVR32_16N_PCREL: ++ /* sub reg, pc, . - (sym + addend) */ ++ relocation = -relocation; ++ break; + } + -+ save = input_line_pointer; -+ input_line_pointer = p + 1; -+ expression(&exp); -+ input_line_pointer = save; ++ status = avr32_check_reloc_value(input_section, rel, relocation, howto); + -+ if (exp.X_op != O_constant -+ || exp.X_add_number < -1 -+ || exp.X_add_number > 1) ++ relocation >>= howto->rightshift; ++ if (howto->bitsize == 21) ++ field = (relocation & 0xffff) ++ | ((relocation & 0x10000) << 4) ++ | ((relocation & 0x1e0000) << 8); ++ else if (howto->bitsize == 12) ++ field = (relocation & 0xff) | ((relocation & 0xf00) << 4); ++ else if (howto->bitsize == 10) ++ field = ((relocation & 0xff) << 4) ++ | ((relocation & 0x300) >> 8); ++ else ++ field = relocation << howto->bitpos; ++ ++ switch (howto->size) + { -+ as_bad(_("invalid return value `%s'"), str); -+ return -2; ++ case 0: ++ x = bfd_get_8 (input_bfd, p); ++ x &= ~howto->dst_mask; ++ x |= field & howto->dst_mask; ++ bfd_put_8 (input_bfd, (bfd_vma) x, p); ++ break; ++ case 1: ++ x = bfd_get_16 (input_bfd, p); ++ x &= ~howto->dst_mask; ++ x |= field & howto->dst_mask; ++ bfd_put_16 (input_bfd, (bfd_vma) x, p); ++ break; ++ case 2: ++ x = bfd_get_32 (input_bfd, p); ++ x &= ~howto->dst_mask; ++ x |= field & howto->dst_mask; ++ bfd_put_32 (input_bfd, (bfd_vma) x, p); ++ break; ++ default: ++ abort(); + } + -+ return exp.X_add_number; ++ return status; +} + -+static void -+parse_reglist9(const struct avr32_operand *op ATTRIBUTE_UNUSED, -+ char *str, int opindex ATTRIBUTE_UNUSED) ++/* (6) Apply relocations to the normal (non-dynamic) sections */ ++ ++static bfd_boolean ++avr32_elf_relocate_section(bfd *output_bfd, struct bfd_link_info *info, ++ bfd *input_bfd, asection *input_section, ++ bfd_byte *contents, Elf_Internal_Rela *relocs, ++ Elf_Internal_Sym *local_syms, ++ asection **local_sections) +{ -+ unsigned long regmask; -+ unsigned long value = 0, kbit = 0; -+ int slot; -+ char *tail; ++ struct elf_avr32_link_hash_table *htab; ++ Elf_Internal_Shdr *symtab_hdr; ++ Elf_Internal_Rela *rel, *relend; ++ struct elf_link_hash_entry **sym_hashes; ++ struct got_entry **local_got_ents; ++ asection *sgot; ++ asection *srelgot; + -+ regmask = avr32_parse_reglist(str, &tail); -+ /* printf("parsed reglist16: %04lx, tail: `%s'\n", regmask, tail); */ -+ if (*tail) -+ { -+ int retval; ++ pr_debug("(6) relocate section %s:<%s> (size 0x%lx)\n", ++ input_bfd->filename, input_section->name, input_section->size); + -+ retval = parse_reglist_tail(tail, regmask); ++ /* If we're doing a partial link, we don't have to do anything since ++ we're using RELA relocations */ ++ if (info->relocatable) ++ return TRUE; + -+ switch (retval) -+ { -+ case -1: -+ regmask |= 1 << AVR32_REG_LR; -+ break; -+ case 0: -+ break; -+ case 1: -+ regmask |= 1 << AVR32_REG_R12; -+ break; -+ default: -+ break; -+ } ++ htab = avr32_elf_hash_table(info); ++ symtab_hdr = &elf_tdata(input_bfd)->symtab_hdr; ++ sym_hashes = elf_sym_hashes(input_bfd); ++ local_got_ents = elf_local_got_ents(input_bfd); ++ sgot = htab->sgot; ++ srelgot = htab->srelgot; + -+ kbit = 1; -+ } ++ relend = relocs + input_section->reloc_count; ++ for (rel = relocs; rel < relend; rel++) ++ { ++ unsigned long r_type, r_symndx; ++ reloc_howto_type *howto; ++ Elf_Internal_Sym *sym = NULL; ++ struct elf_link_hash_entry *h = NULL; ++ asection *sec = NULL; ++ bfd_vma value; ++ bfd_vma offset; ++ bfd_reloc_status_type status; + -+ if (avr32_make_regmask8(regmask, &value)) -+ as_bad(_("register list `%s' doesn't fit"), str); ++ r_type = ELF32_R_TYPE(rel->r_info); ++ r_symndx = ELF32_R_SYM(rel->r_info); + ++ if (r_type == R_AVR32_NONE ++ || r_type == R_AVR32_ALIGN ++ || r_type == R_AVR32_DIFF32 ++ || r_type == R_AVR32_DIFF16 ++ || r_type == R_AVR32_DIFF8) ++ continue; + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = (value << 1) | kbit; -+} ++ /* Sanity check */ ++ if (r_type > R_AVR32_max) ++ { ++ bfd_set_error(bfd_error_bad_value); ++ return FALSE; ++ } + -+static void -+parse_reglist16(const struct avr32_operand *op ATTRIBUTE_UNUSED, -+ char *str, int opindex ATTRIBUTE_UNUSED) -+{ -+ unsigned long regmask; -+ int slot; -+ char *tail; ++ howto = &elf_avr32_howto_table[r_type]; + -+ regmask = avr32_parse_reglist(str, &tail); -+ if (*tail) -+ as_bad(_("invalid register list `%s'"), str); ++ if (r_symndx < symtab_hdr->sh_info) ++ { ++ sym = local_syms + r_symndx; ++ sec = local_sections[r_symndx]; + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = regmask; -+} ++ pr_debug(" (6a) processing %s against local symbol %lu\n", ++ howto->name, r_symndx); + -+static void -+parse_reglist_ldm(const struct avr32_operand *op ATTRIBUTE_UNUSED, -+ char *str, int opindex ATTRIBUTE_UNUSED) -+{ -+ unsigned long regmask; -+ int slot, rp, w_bit = 0; -+ char *tail, *p, c; ++ /* The following function changes rel->r_addend behind our back. */ ++ value = _bfd_elf_rela_local_sym(output_bfd, sym, &sec, rel); ++ pr_debug(" => value: %lx, addend: %lx\n", value, rel->r_addend); ++ } ++ else ++ { ++ if (sym_hashes == NULL) ++ return FALSE; + -+ for (p = str; *p && *p != ','; p++) -+ if (*p == '+') -+ break; ++ h = sym_hashes[r_symndx - symtab_hdr->sh_info]; ++ while (h->root.type == bfd_link_hash_indirect ++ || h->root.type == bfd_link_hash_warning) ++ h = (struct elf_link_hash_entry *)h->root.u.i.link; + -+ c = *p, *p = 0; -+ rp = avr32_parse_intreg(str); -+ *p = c; -+ if (rp < 0) -+ { -+ as_bad(_("invalid destination register in `%s'"), str); -+ return; -+ } ++ pr_debug(" (6a) processing %s against symbol %s\n", ++ howto->name, h->root.root.string); + -+ if (p[0] == '+' && p[1] == '+') -+ { -+ w_bit = 1; -+ p += 2; -+ } ++ if (h->root.type == bfd_link_hash_defined ++ || h->root.type == bfd_link_hash_defweak) ++ { ++ bfd_boolean dyn; + -+ if (*p != ',') -+ { -+ as_bad(_("expected `,' after destination register in `%s'"), str); -+ return; -+ } ++ dyn = htab->root.dynamic_sections_created; ++ sec = h->root.u.def.section; + -+ str = p + 1; -+ regmask = avr32_parse_reglist(str, &tail); -+ if (*tail) -+ { -+ int retval; ++ if (sec->output_section) ++ value = (h->root.u.def.value ++ + sec->output_section->vma ++ + sec->output_offset); ++ else ++ value = h->root.u.def.value; ++ } ++ else if (h->root.type == bfd_link_hash_undefweak) ++ value = 0; ++ else if (info->unresolved_syms_in_objects == RM_IGNORE ++ && ELF_ST_VISIBILITY(h->other) == STV_DEFAULT) ++ value = 0; ++ else ++ { ++ bfd_boolean err; ++ err = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR ++ || ELF_ST_VISIBILITY(h->other) != STV_DEFAULT); ++ if (!info->callbacks->undefined_symbol ++ (info, h->root.root.string, input_bfd, ++ input_section, rel->r_offset, err)) ++ return FALSE; ++ value = 0; ++ } + -+ if (rp != AVR32_REG_SP) -+ { -+ as_bad(_("junk at end of line: `%s'"), tail); -+ return; ++ pr_debug(" => value: %lx, addend: %lx\n", value, rel->r_addend); + } + -+ rp = AVR32_REG_PC; ++ switch (r_type) ++ { ++ case R_AVR32_GOT32: ++ case R_AVR32_GOT16: ++ case R_AVR32_GOT8: ++ case R_AVR32_GOT21S: ++ case R_AVR32_GOT18SW: ++ case R_AVR32_GOT16S: ++ case R_AVR32_GOT7UW: ++ case R_AVR32_LDA_GOT: ++ case R_AVR32_GOTCALL: ++ BFD_ASSERT(sgot != NULL); + -+ retval = parse_reglist_tail(tail, regmask); ++ if (h != NULL) ++ { ++ BFD_ASSERT(h->got.glist->refcount > 0); ++ offset = h->got.glist->offset; + -+ switch (retval) -+ { -+ case -1: -+ regmask |= 1 << AVR32_REG_LR; ++ BFD_ASSERT(offset < sgot->size); ++ if (!elf_hash_table(info)->dynamic_sections_created ++ || (h->def_regular ++ && (!info->shared ++ || info->symbolic ++ || h->dynindx == -1))) ++ { ++ /* This is actually a static link, or it is a ++ -Bsymbolic link and the symbol is defined ++ locally, or the symbol was forced to be local. */ ++ bfd_put_32(output_bfd, value, sgot->contents + offset); ++ } ++ } ++ else ++ { ++ BFD_ASSERT(local_got_ents && ++ local_got_ents[r_symndx]->refcount > 0); ++ offset = local_got_ents[r_symndx]->offset; ++ ++ /* Local GOT entries don't have relocs. If this is a ++ shared library, the dynamic linker will add the load ++ address to the initial value at startup. */ ++ BFD_ASSERT(offset < sgot->size); ++ pr_debug("Initializing GOT entry at offset %lu: 0x%lx\n", ++ offset, value); ++ bfd_put_32 (output_bfd, value, sgot->contents + offset); ++ } ++ ++ value = sgot->output_offset + offset; ++ pr_debug("GOT reference: New value %lx\n", value); + break; -+ case 0: ++ ++ case R_AVR32_GOTPC: ++ /* This relocation type is for constant pool entries used in ++ the calculation "Rd = PC - (PC - GOT)", where the ++ constant pool supplies the constant (PC - GOT) ++ offset. The symbol value + addend indicates where the ++ value of PC is taken. */ ++ value -= sgot->output_section->vma; + break; -+ case 1: -+ regmask |= 1 << AVR32_REG_R12; ++ ++ case R_AVR32_32_PCREL: ++ /* We must adjust r_offset to account for discarded data in ++ the .eh_frame section. This is probably not the right ++ way to do this, since AFAICS all other architectures do ++ it some other way. I just can't figure out how... */ ++ { ++ bfd_vma r_offset; ++ ++ r_offset = _bfd_elf_section_offset(output_bfd, info, ++ input_section, ++ rel->r_offset); ++ if (r_offset == (bfd_vma)-1 ++ || r_offset == (bfd_vma)-2) ++ continue; ++ rel->r_offset = r_offset; ++ } + break; -+ default: -+ return; -+ } -+ } + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = rp; -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = w_bit; -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = regmask; -+} ++ case R_AVR32_32: ++ /* We need to emit a run-time relocation in the following cases: ++ - we're creating a shared library ++ - the symbol is not defined in any regular objects + -+static void -+parse_reglist_cp8(const struct avr32_operand *op ATTRIBUTE_UNUSED, -+ char *str, int opindex ATTRIBUTE_UNUSED) -+{ -+ unsigned long regmask; -+ int slot, h_bit = 0; -+ char *tail; ++ Of course, sections that aren't going to be part of the ++ run-time image will not get any relocs, and undefined ++ symbols won't have any either (only weak undefined ++ symbols should get this far). */ ++ if ((info->shared ++ || (elf_hash_table(info)->dynamic_sections_created ++ && h != NULL ++ && h->def_dynamic ++ && !h->def_regular)) ++ && r_symndx != 0 ++ && (input_section->flags & SEC_ALLOC)) ++ { ++ Elf_Internal_Rela outrel; ++ bfd_byte *loc; ++ bfd_boolean skip, relocate; ++ struct elf_avr32_link_hash_entry *avrh; + -+ regmask = avr32_parse_cpreglist(str, &tail); -+ if (*tail) -+ as_bad(_("junk at end of line: `%s'"), tail); -+ else if (regmask & 0xffUL) -+ { -+ if (regmask & 0xff00UL) -+ as_bad(_("register list `%s' doesn't fit"), str); -+ regmask &= 0xff; -+ } -+ else if (regmask & 0xff00UL) -+ { -+ regmask >>= 8; -+ h_bit = 1; -+ } -+ else -+ as_warn(_("register list is empty")); ++ pr_debug("Going to generate dynamic reloc...\n"); + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = regmask; -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = h_bit; -+} ++ skip = FALSE; ++ relocate = FALSE; + -+static void -+parse_reglist_cpd8(const struct avr32_operand *op ATTRIBUTE_UNUSED, -+ char *str, int opindex ATTRIBUTE_UNUSED) -+{ -+ unsigned long regmask, regmask_d = 0; -+ int slot, i; -+ char *tail; ++ outrel.r_offset = _bfd_elf_section_offset(output_bfd, info, ++ input_section, ++ rel->r_offset); ++ if (outrel.r_offset == (bfd_vma)-1) ++ skip = TRUE; ++ else if (outrel.r_offset == (bfd_vma)-2) ++ skip = TRUE, relocate = TRUE; + -+ regmask = avr32_parse_cpreglist(str, &tail); -+ if (*tail) -+ as_bad(_("junk at end of line: `%s'"), tail); ++ outrel.r_offset += (input_section->output_section->vma ++ + input_section->output_offset); + -+ for (i = 0; i < 8; i++) -+ { -+ if (regmask & 1) -+ { -+ if (!(regmask & 2)) -+ { -+ as_bad(_("register list `%s' doesn't fit"), str); -+ break; -+ } -+ regmask_d |= 1 << i; -+ } -+ else if (regmask & 2) -+ { -+ as_bad(_("register list `%s' doesn't fit"), str); -+ break; -+ } ++ pr_debug(" ... offset %lx, dynindx %ld\n", ++ outrel.r_offset, h ? h->dynindx : -1); + -+ regmask >>= 2; -+ } ++ if (skip) ++ memset(&outrel, 0, sizeof(outrel)); ++ else ++ { ++ avrh = (struct elf_avr32_link_hash_entry *)h; ++ /* h->dynindx may be -1 if this symbol was marked to ++ become local. */ ++ if (h == NULL ++ || ((info->symbolic || h->dynindx == -1) ++ && h->def_regular)) ++ { ++ relocate = TRUE; ++ outrel.r_info = ELF32_R_INFO(0, R_AVR32_RELATIVE); ++ outrel.r_addend = value + rel->r_addend; ++ pr_debug(" ... R_AVR32_RELATIVE\n"); ++ } ++ else ++ { ++ BFD_ASSERT(h->dynindx != -1); ++ relocate = TRUE; ++ outrel.r_info = ELF32_R_INFO(h->dynindx, R_AVR32_GLOB_DAT); ++ outrel.r_addend = rel->r_addend; ++ pr_debug(" ... R_AVR32_GLOB_DAT\n"); ++ } ++ } + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = regmask_d; -+} ++ pr_debug("srelgot reloc_count: %d, size %lu\n", ++ srelgot->reloc_count, srelgot->size); + -+static void -+parse_retval(const struct avr32_operand *op ATTRIBUTE_UNUSED, -+ char *str, int opindex ATTRIBUTE_UNUSED) -+{ -+ int regid, slot; ++ loc = srelgot->contents; ++ loc += srelgot->reloc_count++ * sizeof(Elf32_External_Rela); ++ bfd_elf32_swap_reloca_out(output_bfd, &outrel, loc); + -+ regid = avr32_parse_intreg(str); -+ if (regid < 0) -+ { -+ expressionS exp; -+ char *save; ++ BFD_ASSERT(srelgot->reloc_count * sizeof(Elf32_External_Rela) ++ <= srelgot->size); + -+ regid = 0; ++ if (!relocate) ++ continue; ++ } ++ break; ++ } + -+ save = input_line_pointer; -+ input_line_pointer = str; -+ expression(&exp); -+ input_line_pointer = save; ++ status = avr32_final_link_relocate(howto, input_bfd, input_section, ++ contents, rel, value); + -+ if (exp.X_op != O_constant) -+ as_bad(_("invalid return value `%s'"), str); -+ else -+ switch (exp.X_add_number) ++ switch (status) ++ { ++ case bfd_reloc_ok: ++ break; ++ ++ case bfd_reloc_overflow: + { -+ case -1: -+ regid = AVR32_REG_LR; -+ break; -+ case 0: -+ regid = AVR32_REG_SP; -+ break; -+ case 1: -+ regid = AVR32_REG_PC; -+ break; -+ default: -+ as_bad(_("invalid return value `%s'"), str); -+ break; ++ const char *name; ++ ++ if (h != NULL) ++ name = h->root.root.string; ++ else ++ { ++ name = bfd_elf_string_from_elf_section(input_bfd, ++ symtab_hdr->sh_link, ++ sym->st_name); ++ if (name == NULL) ++ return FALSE; ++ if (*name == '\0') ++ name = bfd_section_name(input_bfd, sec); ++ } ++ if (!((*info->callbacks->reloc_overflow) ++ (info, (h ? &h->root : NULL), name, howto->name, ++ rel->r_addend, input_bfd, input_section, rel->r_offset))) ++ return FALSE; + } ++ break; ++ ++ case bfd_reloc_outofrange: ++ default: ++ abort(); ++ } + } + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = regid; ++ return TRUE; +} + -+#define parse_mcall parse_intreg_disp ++ ++/* Additional processing of dynamic sections after relocation */ + -+static void -+parse_jospinc(const struct avr32_operand *op ATTRIBUTE_UNUSED, -+ char *str, int opindex ATTRIBUTE_UNUSED) -+{ -+ expressionS exp; -+ int slot; -+ char *save; ++static bfd_boolean ++avr32_elf_finish_dynamic_symbol(bfd *output_bfd, struct bfd_link_info *info, ++ struct elf_link_hash_entry *h, ++ Elf_Internal_Sym *sym); ++static bfd_boolean ++avr32_elf_finish_dynamic_sections(bfd *output_bfd, struct bfd_link_info *info); ++ ++ ++/* (7) Initialize the contents of a dynamic symbol and/or emit ++ relocations for it */ ++ ++static bfd_boolean ++avr32_elf_finish_dynamic_symbol(bfd *output_bfd, struct bfd_link_info *info, ++ struct elf_link_hash_entry *h, ++ Elf_Internal_Sym *sym) ++{ ++ struct elf_avr32_link_hash_table *htab; ++ struct got_entry *got; + -+ save = input_line_pointer; -+ input_line_pointer = str; -+ expression(&exp); -+ input_line_pointer = save; ++ pr_debug("(7) finish dynamic symbol: %s\n", h->root.root.string); + -+ slot = current_insn.next_slot++; ++ htab = avr32_elf_hash_table(info); ++ got = h->got.glist; + -+ if (exp.X_op == O_constant) ++ if (got && got->refcount > 0) + { -+ if (exp.X_add_number > 0) -+ exp.X_add_number--; -+ current_insn.field_value[slot].value = exp.X_add_number; -+ } -+ else -+ as_bad(_("invalid numeric expression `%s'"), str); -+} ++ asection *sgot; ++ asection *srelgot; ++ Elf_Internal_Rela rel; ++ bfd_byte *loc; + -+#define parse_coh parse_nothing ++ /* This symbol has an entry in the GOT. Set it up. */ ++ sgot = htab->sgot; ++ srelgot = htab->srelgot; ++ BFD_ASSERT(sgot && srelgot); + -+static void -+parse_fpreg(const struct avr32_operand *op, -+ char *str, int opindex ATTRIBUTE_UNUSED) -+{ -+ unsigned long regid; -+ int slot; ++ rel.r_offset = (sgot->output_section->vma ++ + sgot->output_offset ++ + got->offset); + -+ regid = strtoul(str + 2, NULL, 10); ++ /* If this is a static link, or it is a -Bsymbolic link and the ++ symbol is defined locally or was forced to be local because ++ of a version file, we just want to emit a RELATIVE reloc. The ++ entry in the global offset table will already have been ++ initialized in the relocate_section function. */ ++ if ((info->shared ++ && !info->symbolic ++ && h->dynindx != -1) ++ || (htab->root.dynamic_sections_created ++ && h->def_dynamic ++ && !h->def_regular)) ++ { ++ bfd_put_32(output_bfd, 0, sgot->contents + got->offset); ++ rel.r_info = ELF32_R_INFO(h->dynindx, R_AVR32_GLOB_DAT); ++ rel.r_addend = 0; + -+ if ((regid >= 16) || (regid & ((1 << op->align_order) - 1))) -+ as_bad(_("invalid floating-point register `%s'"), str); ++ pr_debug("GOT reloc R_AVR32_GLOB_DAT, dynindx: %ld\n", h->dynindx); ++ pr_debug(" srelgot reloc_count: %d, size: %lu\n", ++ srelgot->reloc_count, srelgot->size); + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = regid; -+ current_insn.field_value[slot].align_order = op->align_order; -+} ++ loc = (srelgot->contents ++ + srelgot->reloc_count++ * sizeof(Elf32_External_Rela)); ++ bfd_elf32_swap_reloca_out(output_bfd, &rel, loc); + -+static void -+parse_picoreg(const struct avr32_operand *op, -+ char *str, int opindex ATTRIBUTE_UNUSED) -+{ -+ unsigned long regid; -+ int slot; ++ BFD_ASSERT(srelgot->reloc_count * sizeof(Elf32_External_Rela) ++ <= srelgot->size); ++ } ++ } + -+ regid = avr32_parse_picoreg(str); -+ if (regid & ((1 << op->align_order) - 1)) -+ as_bad(_("invalid double-word PiCo register `%s'"), str); ++ /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute */ ++ if (strcmp(h->root.root.string, "_DYNAMIC") == 0 ++ || strcmp(h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0) ++ sym->st_shndx = SHN_ABS; + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = regid; -+ current_insn.field_value[slot].align_order = op->align_order; ++ return TRUE; +} + -+static void -+parse_pico_reglist_w(const struct avr32_operand *op ATTRIBUTE_UNUSED, -+ char *str, int opindex ATTRIBUTE_UNUSED) ++/* (8) Do any remaining initialization of the dynamic sections */ ++ ++static bfd_boolean ++avr32_elf_finish_dynamic_sections(bfd *output_bfd, struct bfd_link_info *info) +{ -+ unsigned long regmask; -+ int slot, h_bit = 0; -+ char *tail; ++ struct elf_avr32_link_hash_table *htab; ++ asection *sgot, *sdyn; + -+ regmask = avr32_parse_pico_reglist(str, &tail); -+ if (*tail) -+ as_bad(_("junk at end of line: `%s'"), tail); ++ pr_debug("(8) finish dynamic sections\n"); + -+ if (regmask & 0x00ffUL) -+ { -+ if (regmask & 0xff00UL) -+ as_bad(_("register list `%s' doesn't fit"), str); -+ regmask &= 0x00ffUL; -+ } -+ else if (regmask & 0xff00UL) ++ htab = avr32_elf_hash_table(info); ++ sgot = htab->sgot; ++ sdyn = bfd_get_section_by_name(htab->root.dynobj, ".dynamic"); ++ ++ if (htab->root.dynamic_sections_created) + { -+ regmask >>= 8; -+ h_bit = 1; -+ } -+ else -+ as_warn(_("register list is empty")); ++ Elf32_External_Dyn *dyncon, *dynconend; + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = regmask; -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = h_bit; -+} ++ BFD_ASSERT(sdyn && sgot && sgot->size >= AVR32_GOT_HEADER_SIZE); + -+static void -+parse_pico_reglist_d(const struct avr32_operand *op ATTRIBUTE_UNUSED, -+ char *str, int opindex ATTRIBUTE_UNUSED) -+{ -+ unsigned long regmask, regmask_d = 0; -+ int slot, i; -+ char *tail; ++ dyncon = (Elf32_External_Dyn *)sdyn->contents; ++ dynconend = (Elf32_External_Dyn *)(sdyn->contents + sdyn->size); ++ for (; dyncon < dynconend; dyncon++) ++ { ++ Elf_Internal_Dyn dyn; ++ asection *s; + -+ regmask = avr32_parse_pico_reglist(str, &tail); -+ if (*tail) -+ as_bad(_("junk at end of line: `%s'"), tail); ++ bfd_elf32_swap_dyn_in(htab->root.dynobj, dyncon, &dyn); + -+ for (i = 0; i < 8; i++) -+ { -+ if (regmask & 1) -+ { -+ if (!(regmask & 2)) ++ switch (dyn.d_tag) + { -+ as_bad(_("register list `%s' doesn't fit"), str); ++ default: ++ break; ++ ++ case DT_PLTGOT: ++ s = sgot->output_section; ++ BFD_ASSERT(s != NULL); ++ dyn.d_un.d_ptr = s->vma; ++ bfd_elf32_swap_dyn_out(output_bfd, &dyn, dyncon); ++ break; ++ ++ case DT_AVR32_GOTSZ: ++ s = sgot->output_section; ++ BFD_ASSERT(s != NULL); ++ dyn.d_un.d_val = s->size; ++ bfd_elf32_swap_dyn_out(output_bfd, &dyn, dyncon); + break; + } -+ regmask_d |= 1 << i; -+ } -+ else if (regmask & 2) -+ { -+ as_bad(_("register list `%s' doesn't fit"), str); -+ break; + } + -+ regmask >>= 2; ++ /* Fill in the first two entries in the global offset table */ ++ bfd_put_32(output_bfd, ++ sdyn->output_section->vma + sdyn->output_offset, ++ sgot->contents); ++ ++ /* The runtime linker will fill this one in with the address of ++ the run-time link map */ ++ bfd_put_32(output_bfd, 0, sgot->contents + 4); + } + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = regmask_d; ++ if (sgot) ++ elf_section_data(sgot->output_section)->this_hdr.sh_entsize = 4; ++ ++ return TRUE; +} + -+static void -+parse_pico_in(const struct avr32_operand *op ATTRIBUTE_UNUSED, -+ char *str, int opindex ATTRIBUTE_UNUSED) -+{ -+ unsigned long regid; -+ int slot; ++ ++/* AVR32-specific private ELF data */ + -+ regid = strtoul(str + 2, NULL, 10); ++static bfd_boolean ++avr32_elf_set_private_flags(bfd *abfd, flagword flags); ++static bfd_boolean ++avr32_elf_copy_private_bfd_data(bfd *ibfd, bfd *obfd); ++static bfd_boolean ++avr32_elf_merge_private_bfd_data(bfd *ibfd, bfd *obfd); ++static bfd_boolean ++avr32_elf_print_private_bfd_data(bfd *abfd, void *ptr); + -+ if (regid >= 12) -+ as_bad(_("invalid PiCo IN register `%s'"), str); ++static bfd_boolean ++avr32_elf_set_private_flags(bfd *abfd, flagword flags) ++{ ++ elf_elfheader(abfd)->e_flags = flags; ++ elf_flags_init(abfd) = TRUE; + -+ slot = current_insn.next_slot++; -+ current_insn.field_value[slot].value = regid; -+ current_insn.field_value[slot].align_order = 0; ++ return TRUE; +} + -+#define parse_pico_out0 parse_nothing -+#define parse_pico_out1 parse_nothing -+#define parse_pico_out2 parse_nothing -+#define parse_pico_out3 parse_nothing ++/* Copy backend specific data from one object module to another. */ + -+#define OP(name, sgn, pcrel, align, func) \ -+ { AVR32_OPERAND_##name, sgn, pcrel, align, match_##func, parse_##func } ++static bfd_boolean ++avr32_elf_copy_private_bfd_data(bfd *ibfd, bfd *obfd) ++{ ++ elf_elfheader(obfd)->e_flags = elf_elfheader(ibfd)->e_flags; ++ return TRUE; ++} + -+struct avr32_operand avr32_operand_table[] = { -+ OP(INTREG, 0, 0, 0, intreg), -+ OP(INTREG_PREDEC, 0, 0, 0, intreg_predec), -+ OP(INTREG_POSTINC, 0, 0, 0, intreg_postinc), -+ OP(INTREG_LSL, 0, 0, 0, intreg_lsl), -+ OP(INTREG_LSR, 0, 0, 0, intreg_lsr), -+ OP(INTREG_BSEL, 0, 0, 0, intreg_part), -+ OP(INTREG_HSEL, 0, 0, 1, intreg_part), -+ OP(INTREG_SDISP, 1, 0, 0, intreg_disp), -+ OP(INTREG_SDISP_H, 1, 0, 1, intreg_disp), -+ OP(INTREG_SDISP_W, 1, 0, 2, intreg_disp), -+ OP(INTREG_UDISP, 0, 0, 0, intreg_disp), -+ OP(INTREG_UDISP_H, 0, 0, 1, intreg_disp), -+ OP(INTREG_UDISP_W, 0, 0, 2, intreg_disp), -+ OP(INTREG_INDEX, 0, 0, 0, intreg_index), -+ OP(INTREG_XINDEX, 0, 0, 0, intreg_xindex), -+ OP(DWREG, 0, 0, 1, intreg), -+ OP(PC_UDISP_W, 0, 1, 2, pc_disp), -+ OP(SP, 0, 0, 0, sp), -+ OP(SP_UDISP_W, 0, 0, 2, sp_disp), -+ OP(CPNO, 0, 0, 0, cpno), -+ OP(CPREG, 0, 0, 0, cpreg), -+ OP(CPREG_D, 0, 0, 1, cpreg), -+ OP(UNSIGNED_CONST, 0, 0, 0, const), -+ OP(UNSIGNED_CONST_W, 0, 0, 2, const), -+ OP(SIGNED_CONST, 1, 0, 0, const), -+ OP(SIGNED_CONST_W, 1, 0, 2, const), -+ OP(JMPLABEL, 1, 1, 1, jmplabel), -+ OP(UNSIGNED_NUMBER, 0, 0, 0, number), -+ OP(UNSIGNED_NUMBER_W, 0, 0, 2, number), -+ OP(REGLIST8, 0, 0, 0, reglist8), -+ OP(REGLIST9, 0, 0, 0, reglist9), -+ OP(REGLIST16, 0, 0, 0, reglist16), -+ OP(REGLIST_LDM, 0, 0, 0, reglist_ldm), -+ OP(REGLIST_CP8, 0, 0, 0, reglist_cp8), -+ OP(REGLIST_CPD8, 0, 0, 0, reglist_cpd8), -+ OP(RETVAL, 0, 0, 0, retval), -+ OP(MCALL, 1, 0, 2, mcall), -+ OP(JOSPINC, 0, 0, 0, jospinc), -+ OP(COH, 0, 0, 0, coh), -+ OP(FPREG_S, 0, 0, 0, fpreg), -+ OP(FPREG_D, 0, 0, 1, fpreg), -+ OP(PICO_REG_W, 0, 0, 0, picoreg), -+ OP(PICO_REG_D, 0, 0, 1, picoreg), -+ OP(PICO_REGLIST_W, 0, 0, 0, pico_reglist_w), -+ OP(PICO_REGLIST_D, 0, 0, 0, pico_reglist_d), -+ OP(PICO_IN, 0, 0, 0, pico_in), -+ OP(PICO_OUT0, 0, 0, 0, pico_out0), -+ OP(PICO_OUT1, 0, 0, 0, pico_out1), -+ OP(PICO_OUT2, 0, 0, 0, pico_out2), -+ OP(PICO_OUT3, 0, 0, 0, pico_out3), -+}; ++/* Merge backend specific data from an object file to the output ++ object file when linking. */ + -+symbolS * -+md_undefined_symbol (char *name ATTRIBUTE_UNUSED) ++static bfd_boolean ++avr32_elf_merge_private_bfd_data(bfd *ibfd, bfd *obfd) +{ -+ pr_debug("md_undefined_symbol: %s\n", name); -+ return 0; ++ flagword out_flags, in_flags; ++ ++ pr_debug("(0) merge_private_bfd_data: %s -> %s\n", ++ ibfd->filename, obfd->filename); ++ ++ in_flags = elf_elfheader(ibfd)->e_flags; ++ out_flags = elf_elfheader(obfd)->e_flags; ++ ++ if (elf_flags_init(obfd)) ++ { ++ /* If one of the inputs are non-PIC, the output must be ++ considered non-PIC. The same applies to linkrelax. */ ++ if (!(in_flags & EF_AVR32_PIC)) ++ out_flags &= ~EF_AVR32_PIC; ++ if (!(in_flags & EF_AVR32_LINKRELAX)) ++ out_flags &= ~EF_AVR32_LINKRELAX; ++ } ++ else ++ { ++ elf_flags_init(obfd) = TRUE; ++ out_flags = in_flags; ++ } ++ ++ elf_elfheader(obfd)->e_flags = out_flags; ++ ++ return TRUE; +} + -+struct avr32_relax_type ++static bfd_boolean ++avr32_elf_print_private_bfd_data(bfd *abfd, void *ptr) +{ -+ long lower_bound; -+ long upper_bound; -+ unsigned char align; -+ unsigned char length; -+ signed short next; -+}; ++ FILE *file = (FILE *)ptr; ++ unsigned long flags; + -+#define EMPTY { 0, 0, 0, 0, -1 } -+#define C(lower, upper, align, next) \ -+ { (lower), (upper), (align), 2, AVR32_OPC_##next } -+#define E(lower, upper, align) \ -+ { (lower), (upper), (align), 4, -1 } ++ BFD_ASSERT(abfd != NULL && ptr != NULL); + -+static const struct avr32_relax_type avr32_relax_table[] = -+ { -+ /* 0 */ -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ EMPTY, EMPTY, EMPTY, -+ E(0, 65535, 0), E(0, 65535, 0), E(0, 65535, 0), E(0, 65535, 0), -+ EMPTY, -+ /* 16 */ -+ EMPTY, EMPTY, EMPTY, EMPTY, ++ _bfd_elf_print_private_bfd_data(abfd, ptr); + -+ C(-256, 254, 1, BREQ2), C(-256, 254, 1, BRNE2), -+ C(-256, 254, 1, BRCC2), C(-256, 254, 1, BRCS2), -+ C(-256, 254, 1, BRGE2), C(-256, 254, 1, BRLT2), -+ C(-256, 254, 1, BRMI2), C(-256, 254, 1, BRPL2), -+ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), -+ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), -+ /* 32 */ -+ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), -+ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), -+ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), -+ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), -+ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), -+ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), ++ flags = elf_elfheader(abfd)->e_flags; + -+ EMPTY, EMPTY, EMPTY, EMPTY, -+ /* 48 */ -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ EMPTY, EMPTY, EMPTY, ++ fprintf(file, _("private flags = %lx:"), elf_elfheader(abfd)->e_flags); + -+ C(-32, 31, 0, CP_W3), E(-1048576, 1048575, 0), ++ if (flags & EF_AVR32_PIC) ++ fprintf(file, " [PIC]"); ++ if (flags & EF_AVR32_LINKRELAX) ++ fprintf(file, " [linker relaxable]"); + -+ EMPTY, EMPTY, EMPTY, -+ /* 64: csrfcz */ -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ E(0, 65535, 0), E(0, 65535, 0), -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ E(-32768, 32767, 0), -+ /* 80: LD_SB2 */ -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ flags &= ~(EF_AVR32_PIC | EF_AVR32_LINKRELAX); + -+ C(0, 7, 0, LD_UB4), E(-32768, 32767, 0), ++ if (flags) ++ fprintf(file, _("")); + -+ EMPTY, -+ EMPTY, EMPTY, ++ fputc('\n', file); + -+ C(0, 14, 1, LD_SH4), E(-32768, 32767, 0), ++ return TRUE; ++} + -+ EMPTY, EMPTY, EMPTY, ++ ++/* Understanding core dumps */ + -+ C(0, 14, 1, LD_UH4), E(-32768, 32767, 0), ++static bfd_boolean ++avr32_elf_grok_prstatus(bfd *abfd, Elf_Internal_Note *note); ++static bfd_boolean ++avr32_elf_grok_psinfo(bfd *abfd, Elf_Internal_Note *note); + -+ EMPTY, EMPTY, EMPTY, EMPTY, ++static bfd_boolean ++avr32_elf_grok_prstatus(bfd *abfd, Elf_Internal_Note *note) ++{ ++ /* Linux/AVR32B elf_prstatus */ ++ if (note->descsz != 148) ++ return FALSE; + -+ C(0, 124, 2, LD_W4), E(-32768, 32767, 0), ++ /* pr_cursig */ ++ elf_tdata(abfd)->core_signal = bfd_get_16(abfd, note->descdata + 12); + -+ E(0, 1020, 2), /* LDC_D1 */ -+ EMPTY, EMPTY, -+ E(0, 1020, 2), /* LDC_W1 */ -+ EMPTY, EMPTY, -+ E(0, 16380, 2), /* LDC0_D */ -+ E(0, 16380, 2), /* LDC0_W */ -+ EMPTY, EMPTY, EMPTY, EMPTY, ++ /* pr_pid */ ++ elf_tdata(abfd)->core_pid = bfd_get_32(abfd, note->descdata + 24); + -+ C(0, 508, 2, LDDPC_EXT), E(-32768, 32767, 0), ++ /* Make a ".reg/999" section for pr_reg. The size is for 16 ++ general-purpose registers, SR and r12_orig (18 * 4 = 72). */ ++ return _bfd_elfcore_make_pseudosection(abfd, ".reg", 72, ++ note->descpos + 72); ++} + -+ EMPTY, -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ /* 128: MACHH_W */ -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ E(-131072, 131068, 2), /* MCALL */ -+ E(0, 1020, 2), /* MFDR */ -+ E(0, 1020, 2), /* MFSR */ -+ EMPTY, EMPTY, ++static bfd_boolean ++avr32_elf_grok_psinfo(bfd *abfd, Elf_Internal_Note *note) ++{ ++ /* Linux/AVR32B elf_prpsinfo */ ++ if (note->descsz != 128) ++ return FALSE; + -+ C(-128, 127, 0, MOV2), E(-1048576, 1048575, 0), ++ elf_tdata(abfd)->core_program ++ = _bfd_elfcore_strndup(abfd, note->descdata + 32, 16); ++ elf_tdata(abfd)->core_command ++ = _bfd_elfcore_strndup(abfd, note->descdata + 48, 80); + -+ EMPTY, EMPTY, EMPTY, -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ /* Note that for some reason, a spurious space is tacked ++ onto the end of the args in some (at least one anyway) ++ implementations, so strip it off if it exists. */ + -+ E(-128, 127, 0), /* MOVEQ2 */ -+ E(-128, 127, 0), /* MOVNE2 */ -+ E(-128, 127, 0), /* MOVCC2 */ -+ E(-128, 127, 0), /* 160: MOVCS2 */ -+ E(-128, 127, 0), /* MOVGE2 */ -+ E(-128, 127, 0), /* MOVLT2 */ -+ E(-128, 127, 0), /* MOVMI2 */ -+ E(-128, 127, 0), /* MOVPL2 */ -+ E(-128, 127, 0), /* MOVLS2 */ -+ E(-128, 127, 0), /* MOVGT2 */ -+ E(-128, 127, 0), /* MOVLE2 */ -+ E(-128, 127, 0), /* MOVHI2 */ -+ E(-128, 127, 0), /* MOVVS2 */ -+ E(-128, 127, 0), /* MOVVC2 */ -+ E(-128, 127, 0), /* MOVQS2 */ -+ E(-128, 127, 0), /* MOVAL2 */ ++ { ++ char *command = elf_tdata (abfd)->core_command; ++ int n = strlen (command); + -+ E(0, 1020, 2), /* MTDR */ -+ E(0, 1020, 2), /* MTSR */ -+ EMPTY, -+ EMPTY, -+ E(-128, 127, 0), /* MUL3 */ -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ /* 192: MVCR_W */ -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ E(0, 65535, 0), E(0, 65535, 0), -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ /* 224: PASR_H */ -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ /* 256: PUNPCKSB_H */ -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ if (0 < n && command[n - 1] == ' ') ++ command[n - 1] = '\0'; ++ } + -+ C(-1024, 1022, 1, RCALL2), E(-2097152, 2097150, 1), ++ return TRUE; ++} + -+ EMPTY, -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ EMPTY, EMPTY, EMPTY, ++ ++#define ELF_ARCH bfd_arch_avr32 ++#define ELF_MACHINE_CODE EM_AVR32 ++#define ELF_MAXPAGESIZE 0x1000 + -+ C(-1024, 1022, 1, BRAL), ++#define TARGET_BIG_SYM bfd_elf32_avr32_vec ++#define TARGET_BIG_NAME "elf32-avr32" ++ ++#define elf_backend_grok_prstatus avr32_elf_grok_prstatus ++#define elf_backend_grok_psinfo avr32_elf_grok_psinfo ++ ++/* Only RELA relocations are used */ ++#define elf_backend_may_use_rel_p 0 ++#define elf_backend_may_use_rela_p 1 ++#define elf_backend_default_use_rela_p 1 ++#define elf_backend_rela_normal 1 ++#define elf_info_to_howto_rel NULL ++#define elf_info_to_howto avr32_info_to_howto ++ ++#define bfd_elf32_bfd_copy_private_bfd_data avr32_elf_copy_private_bfd_data ++#define bfd_elf32_bfd_merge_private_bfd_data avr32_elf_merge_private_bfd_data ++#define bfd_elf32_bfd_set_private_flags avr32_elf_set_private_flags ++#define bfd_elf32_bfd_print_private_bfd_data avr32_elf_print_private_bfd_data ++#define bfd_elf32_new_section_hook avr32_elf_new_section_hook + -+ EMPTY, EMPTY, EMPTY, -+ E(-128, 127, 0), /* RSUB2 */ -+ /* 288: SATADD_H */ -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ E(0, 255, 0), /* SLEEP */ -+ EMPTY, EMPTY, -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ /* 320: ST_B2 */ -+ EMPTY, EMPTY, -+ C(0, 7, 0, ST_B4), E(-32768, 32767, 0), -+ EMPTY, EMPTY, EMPTY, EMPTY, -+ E(-32768, 32767, 0), -+ EMPTY, EMPTY, EMPTY, -+ C(0, 14, 1, ST_H4), E(-32768, 32767, 0), -+ EMPTY, EMPTY, -+ EMPTY, -+ C(0, 60, 2, ST_W4), E(-32768, 32767, 0), -+ E(0, 1020, 2), /* STC_D1 */ -+ EMPTY, EMPTY, -+ E(0, 1020, 2), /* STC_W1 */ -+ EMPTY, EMPTY, -+ E(0, 16380, 2), /* STC0_D */ -+ E(0, 16380, 2), /* STC0_W */ ++#define elf_backend_gc_mark_hook avr32_elf_gc_mark_hook ++#define elf_backend_gc_sweep_hook avr32_elf_gc_sweep_hook ++#define elf_backend_relocate_section avr32_elf_relocate_section ++#define elf_backend_copy_indirect_symbol avr32_elf_copy_indirect_symbol ++#define elf_backend_create_dynamic_sections avr32_elf_create_dynamic_sections ++#define bfd_elf32_bfd_link_hash_table_create avr32_elf_link_hash_table_create ++#define elf_backend_adjust_dynamic_symbol avr32_elf_adjust_dynamic_symbol ++#define elf_backend_size_dynamic_sections avr32_elf_size_dynamic_sections ++#define elf_backend_finish_dynamic_symbol avr32_elf_finish_dynamic_symbol ++#define elf_backend_finish_dynamic_sections avr32_elf_finish_dynamic_sections + -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ /* 352: STDSP */ -+ EMPTY, EMPTY, -+ E(0, 1020, 2), /* STHH_W1 */ -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ EMPTY, EMPTY, EMPTY, -+ E(-32768, 32767, 0), -+ C(-512, 508, 2, SUB4), -+ C(-128, 127, 0, SUB4), E(-1048576, 1048576, 0), -+ /* SUB{cond} */ -+ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), -+ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), -+ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), -+ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), -+ /* SUBF{cond} */ -+ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), -+ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), -+ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), -+ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), -+ EMPTY, ++#define bfd_elf32_bfd_relax_section avr32_elf_relax_section + -+ /* 400: SWAP_B */ -+ EMPTY, EMPTY, EMPTY, -+ E(0, 255, 0), /* SYNC */ -+ EMPTY, EMPTY, EMPTY, EMPTY, -+ /* 408: TST */ -+ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, -+ /* 416: EXTRACT_B */ -+ EMPTY, EMPTY, EMPTY, EMPTY, -+ }; ++/* Find out which symbols need an entry in .got. */ ++#define elf_backend_check_relocs avr32_check_relocs ++#define elf_backend_can_refcount 1 ++#define elf_backend_can_gc_sections 1 ++#define elf_backend_plt_readonly 1 ++#define elf_backend_plt_not_loaded 1 ++#define elf_backend_want_plt_sym 0 ++#define elf_backend_plt_alignment 2 ++#define elf_backend_want_dynbss 0 ++#define elf_backend_want_got_plt 0 ++#define elf_backend_want_got_sym 1 ++#define elf_backend_got_header_size AVR32_GOT_HEADER_SIZE + -+#undef E -+#undef C -+#undef EMPTY ++#include "elf32-target.h" +diff -Nrup binutils-2.17/bfd/elf32-avr32.h binutils-2.17.atmel.1.3.0/bfd/elf32-avr32.h +--- binutils-2.17/bfd/elf32-avr32.h 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/elf32-avr32.h 2007-09-28 10:30:44.000000000 +0200 +@@ -0,0 +1,23 @@ ++/* AVR32-specific support for 32-bit ELF. ++ Copyright 2007 Atmel Corporation. + -+#define AVR32_RS_NONE (-1) ++ Written by Haavard Skinnemoen, Atmel Norway, + -+#define avr32_rs_size(state) (avr32_relax_table[(state)].length) -+#define avr32_rs_align(state) (avr32_relax_table[(state)].align) -+#define relax_more(state) (avr32_relax_table[(state)].next) ++ This file is part of BFD, the Binary File Descriptor library. + -+#define opc_initial_substate(opc) ((opc)->id) ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. + -+static int need_relax(int subtype, offsetT distance) -+{ -+ offsetT upper_bound, lower_bound; ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. + -+ upper_bound = avr32_relax_table[subtype].upper_bound; -+ lower_bound = avr32_relax_table[subtype].lower_bound; ++ 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + -+ if (distance & ((1 << avr32_rs_align(subtype)) - 1)) -+ return 1; -+ if ((distance > upper_bound) || (distance < lower_bound)) -+ return 1; ++void bfd_elf32_avr32_set_options(struct bfd_link_info *info, ++ int direct_data_refs); +diff -Nrup binutils-2.17/bfd/elf-bfd.h binutils-2.17.atmel.1.3.0/bfd/elf-bfd.h +--- binutils-2.17/bfd/elf-bfd.h 2006-03-16 13:20:15.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/elf-bfd.h 2007-03-26 10:20:30.000000000 +0200 +@@ -1307,6 +1307,10 @@ struct elf_obj_tdata + find_nearest_line. */ + struct mips_elf_find_line *find_line_info; + ++ /* Used by AVR32 ELF relaxation code. Contains an array of pointers ++ for each local symbol to the fragment where it is defined. */ ++ struct fragment **local_sym_frag; + -+ return 0; -+} + /* A place to stash dwarf1 info for this bfd. */ + struct dwarf1_debug *dwarf1_find_line_info; + +diff -Nrup binutils-2.17/bfd/libbfd.h binutils-2.17.atmel.1.3.0/bfd/libbfd.h +--- binutils-2.17/bfd/libbfd.h 2006-03-26 01:38:42.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/libbfd.h 2007-03-26 10:33:41.000000000 +0200 +@@ -1518,6 +1518,47 @@ static const char *const bfd_reloc_code_ + "BFD_RELOC_AVR_LDI", + "BFD_RELOC_AVR_6", + "BFD_RELOC_AVR_6_ADIW", ++ "BFD_RELOC_AVR32_DIFF32", ++ "BFD_RELOC_AVR32_DIFF16", ++ "BFD_RELOC_AVR32_DIFF8", ++ "BFD_RELOC_AVR32_GOT32", ++ "BFD_RELOC_AVR32_GOT16", ++ "BFD_RELOC_AVR32_GOT8", ++ "BFD_RELOC_AVR32_21S", ++ "BFD_RELOC_AVR32_16U", ++ "BFD_RELOC_AVR32_16S", ++ "BFD_RELOC_AVR32_SUB5", ++ "BFD_RELOC_AVR32_8S_EXT", ++ "BFD_RELOC_AVR32_8S", ++ "BFD_RELOC_AVR32_22H_PCREL", ++ "BFD_RELOC_AVR32_18W_PCREL", ++ "BFD_RELOC_AVR32_16B_PCREL", ++ "BFD_RELOC_AVR32_16N_PCREL", ++ "BFD_RELOC_AVR32_14UW_PCREL", ++ "BFD_RELOC_AVR32_11H_PCREL", ++ "BFD_RELOC_AVR32_10UW_PCREL", ++ "BFD_RELOC_AVR32_9H_PCREL", ++ "BFD_RELOC_AVR32_9UW_PCREL", ++ "BFD_RELOC_AVR32_GOTPC", ++ "BFD_RELOC_AVR32_GOTCALL", ++ "BFD_RELOC_AVR32_LDA_GOT", ++ "BFD_RELOC_AVR32_GOT21S", ++ "BFD_RELOC_AVR32_GOT18SW", ++ "BFD_RELOC_AVR32_GOT16S", ++ "BFD_RELOC_AVR32_32_CPENT", ++ "BFD_RELOC_AVR32_CPCALL", ++ "BFD_RELOC_AVR32_16_CP", ++ "BFD_RELOC_AVR32_9W_CP", ++ "BFD_RELOC_AVR32_ALIGN", ++ "BFD_RELOC_AVR32_14UW", ++ "BFD_RELOC_AVR32_10UW", ++ "BFD_RELOC_AVR32_10SW", ++ "BFD_RELOC_AVR32_STHH_W", ++ "BFD_RELOC_AVR32_7UW", ++ "BFD_RELOC_AVR32_6S", ++ "BFD_RELOC_AVR32_6UW", ++ "BFD_RELOC_AVR32_4UH", ++ "BFD_RELOC_AVR32_3U", + "BFD_RELOC_390_12", + "BFD_RELOC_390_GOT12", + "BFD_RELOC_390_PLT32", +diff -Nrup binutils-2.17/bfd/Makefile.am binutils-2.17.atmel.1.3.0/bfd/Makefile.am +--- binutils-2.17/bfd/Makefile.am 2006-06-23 20:17:17.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/bfd/Makefile.am 2007-03-26 10:20:30.000000000 +0200 +@@ -3,7 +3,7 @@ + AUTOMAKE_OPTIONS = 1.9 cygnus + + # Uncomment the following line when doing a release. +-RELEASE=y ++# RELEASE=y + + INCDIR = $(srcdir)/../include + CSEARCH = -I. -I$(srcdir) -I$(INCDIR) +@@ -62,6 +62,7 @@ ALL_MACHINES = \ + cpu-arc.lo \ + cpu-arm.lo \ + cpu-avr.lo \ ++ cpu-avr32.lo \ + cpu-bfin.lo \ + cpu-cr16c.lo \ + cpu-cris.lo \ +@@ -234,6 +235,7 @@ BFD32_BACKENDS = \ + elf32-arc.lo \ + elf32-arm.lo \ + elf32-avr.lo \ ++ elf32-avr32.lo \ + elf32-bfin.lo \ + elf32-cr16c.lo \ + elf32-cris.lo \ +@@ -1265,6 +1267,10 @@ elf32-bfin.lo: elf32-bfin.c $(INCDIR)/fi + elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ + $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/bfin.h \ + $(INCDIR)/elf/reloc-macros.h elf32-target.h ++elf32-avr32.lo: elf32-avr32.c $(INCDIR)/filenames.h elf-bfd.h \ ++ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ ++ $(INCDIR)/bfdlink.h $(INCDIR)/elf/avr32.h $(INCDIR)/elf/reloc-macros.h \ ++ elf32-target.h + elf32-cr16c.lo: elf32-cr16c.c $(INCDIR)/filenames.h \ + $(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/cr16c.h \ + $(INCDIR)/elf/reloc-macros.h elf-bfd.h $(INCDIR)/elf/common.h \ +diff -Nrup binutils-2.17/bfd/Makefile.in binutils-2.17.atmel.1.3.0/bfd/Makefile.in +--- binutils-2.17/bfd/Makefile.in 2006-06-23 20:17:19.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/bfd/Makefile.in 2007-03-26 10:30:55.000000000 +0200 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.9.5 from Makefile.am. ++# Makefile.in generated by automake 1.9.6 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -15,8 +15,6 @@ + @SET_MAKE@ + + +-SOURCES = $(libbfd_a_SOURCES) $(libbfd_la_SOURCES) +- + srcdir = @srcdir@ + top_srcdir = @top_srcdir@ + VPATH = @srcdir@ +@@ -141,6 +139,7 @@ EXEEXT = @EXEEXT@ + EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ + GMOFILES = @GMOFILES@ + GMSGFMT = @GMSGFMT@ ++GREP = @GREP@ + GT_NO = @GT_NO@ + GT_YES = @GT_YES@ + HDEFINES = @HDEFINES@ +@@ -190,10 +189,7 @@ WARN_CFLAGS = @WARN_CFLAGS@ + WIN32LDFLAGS = @WIN32LDFLAGS@ + WIN32LIBADD = @WIN32LIBADD@ + XGETTEXT = @XGETTEXT@ +-ac_ct_AR = @ac_ct_AR@ + ac_ct_CC = @ac_ct_CC@ +-ac_ct_RANLIB = @ac_ct_RANLIB@ +-ac_ct_STRIP = @ac_ct_STRIP@ + all_backends = @all_backends@ + am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ + am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +@@ -219,6 +215,7 @@ build_vendor = @build_vendor@ + datadir = @datadir@ + datarootdir = @datarootdir@ + docdir = @docdir@ ++dvidir = @dvidir@ + exec_prefix = @exec_prefix@ + host = @host@ + host_alias = @host_alias@ +@@ -233,12 +230,15 @@ install_sh = @install_sh@ + l = @l@ + libdir = @libdir@ + libexecdir = @libexecdir@ ++localedir = @localedir@ + localstatedir = @localstatedir@ + mandir = @mandir@ + mkdir_p = @mkdir_p@ + oldincludedir = @oldincludedir@ ++pdfdir = @pdfdir@ + prefix = @prefix@ + program_transform_name = @program_transform_name@ ++psdir = @psdir@ + sbindir = @sbindir@ + sharedstatedir = @sharedstatedir@ + sysconfdir = @sysconfdir@ +@@ -253,7 +253,7 @@ wordsize = @wordsize@ + AUTOMAKE_OPTIONS = 1.9 cygnus + + # Uncomment the following line when doing a release. +-RELEASE=y ++# RELEASE=y + INCDIR = $(srcdir)/../include + CSEARCH = -I. -I$(srcdir) -I$(INCDIR) + MKDEP = gcc -MM +@@ -298,6 +298,7 @@ ALL_MACHINES = \ + cpu-arc.lo \ + cpu-arm.lo \ + cpu-avr.lo \ ++ cpu-avr32.lo \ + cpu-bfin.lo \ + cpu-cr16c.lo \ + cpu-cris.lo \ +@@ -471,6 +472,7 @@ BFD32_BACKENDS = \ + elf32-arc.lo \ + elf32-arm.lo \ + elf32-avr.lo \ ++ elf32-avr32.lo \ + elf32-bfin.lo \ + elf32-cr16c.lo \ + elf32-cris.lo \ +@@ -1831,6 +1833,10 @@ elf32-bfin.lo: elf32-bfin.c $(INCDIR)/fi + elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ + $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/bfin.h \ + $(INCDIR)/elf/reloc-macros.h elf32-target.h ++elf32-avr32.lo: elf32-avr32.c $(INCDIR)/filenames.h elf-bfd.h \ ++ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ ++ $(INCDIR)/bfdlink.h $(INCDIR)/elf/avr32.h $(INCDIR)/elf/reloc-macros.h \ ++ elf32-target.h + elf32-cr16c.lo: elf32-cr16c.c $(INCDIR)/filenames.h \ + $(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/cr16c.h \ + $(INCDIR)/elf/reloc-macros.h elf-bfd.h $(INCDIR)/elf/common.h \ +diff -Nrup binutils-2.17/bfd/reloc.c binutils-2.17.atmel.1.3.0/bfd/reloc.c +--- binutils-2.17/bfd/reloc.c 2006-03-26 01:38:42.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/bfd/reloc.c 2007-03-26 10:20:30.000000000 +0200 +@@ -3714,6 +3714,129 @@ ENUMDOC + instructions + + ENUM ++ BFD_RELOC_AVR32_DIFF32 ++ENUMX ++ BFD_RELOC_AVR32_DIFF16 ++ENUMX ++ BFD_RELOC_AVR32_DIFF8 ++ENUMDOC ++ Difference between two labels: L2 - L1. The value of L1 is encoded ++ as sym + addend, while the initial difference after assembly is ++ inserted into the object file by the assembler. ++ENUM ++ BFD_RELOC_AVR32_GOT32 ++ENUMX ++ BFD_RELOC_AVR32_GOT16 ++ENUMX ++ BFD_RELOC_AVR32_GOT8 ++ENUMDOC ++ Reference to a symbol through the Global Offset Table. The linker ++ will allocate an entry for symbol in the GOT and insert the offset ++ of this entry as the relocation value. ++ENUM ++ BFD_RELOC_AVR32_21S ++ENUMX ++ BFD_RELOC_AVR32_16U ++ENUMX ++ BFD_RELOC_AVR32_16S ++ENUMX ++ BFD_RELOC_AVR32_SUB5 ++ENUMX ++ BFD_RELOC_AVR32_8S_EXT ++ENUMX ++ BFD_RELOC_AVR32_8S ++ENUMDOC ++ Normal (non-pc-relative) code relocations. Alignment and signedness ++ is indicated by the suffixes. S means signed, U means unsigned. W ++ means word-aligned, H means halfword-aligned, neither means ++ byte-aligned (no alignment.) SUB5 is the same relocation as 16S. ++ENUM ++ BFD_RELOC_AVR32_22H_PCREL ++ENUMX ++ BFD_RELOC_AVR32_18W_PCREL ++ENUMX ++ BFD_RELOC_AVR32_16B_PCREL ++ENUMX ++ BFD_RELOC_AVR32_16N_PCREL ++ENUMX ++ BFD_RELOC_AVR32_14UW_PCREL ++ENUMX ++ BFD_RELOC_AVR32_11H_PCREL ++ENUMX ++ BFD_RELOC_AVR32_10UW_PCREL ++ENUMX ++ BFD_RELOC_AVR32_9H_PCREL ++ENUMX ++ BFD_RELOC_AVR32_9UW_PCREL ++ENUMDOC ++ PC-relative relocations are signed if neither 'U' nor 'S' is ++ specified. However, we explicitly tack on a 'B' to indicate no ++ alignment, to avoid confusion with data relocs. All of these resolve ++ to sym + addend - offset, except the one with 'N' (negated) suffix. ++ This particular one resolves to offset - sym - addend. ++ENUM ++ BFD_RELOC_AVR32_GOTPC ++ENUMDOC ++ Subtract the link-time address of the GOT from (symbol + addend) ++ and insert the result. ++ENUM ++ BFD_RELOC_AVR32_GOTCALL ++ENUMX ++ BFD_RELOC_AVR32_LDA_GOT ++ENUMX ++ BFD_RELOC_AVR32_GOT21S ++ENUMX ++ BFD_RELOC_AVR32_GOT18SW ++ENUMX ++ BFD_RELOC_AVR32_GOT16S ++ENUMDOC ++ Reference to a symbol through the GOT. The linker will allocate an ++ entry for symbol in the GOT and insert the offset of this entry as ++ the relocation value. addend must be zero. As usual, 'S' means ++ signed, 'W' means word-aligned, etc. ++ENUM ++ BFD_RELOC_AVR32_32_CPENT ++ENUMDOC ++ 32-bit constant pool entry. I don't think 8- and 16-bit entries make ++ a whole lot of sense. ++ENUM ++ BFD_RELOC_AVR32_CPCALL ++ENUMX ++ BFD_RELOC_AVR32_16_CP ++ENUMX ++ BFD_RELOC_AVR32_9W_CP ++ENUMDOC ++ Constant pool references. Some of these relocations are signed, ++ others are unsigned. It doesn't really matter, since the constant ++ pool always comes after the code that references it. ++ENUM ++ BFD_RELOC_AVR32_ALIGN ++ENUMDOC ++ sym must be the absolute symbol. The addend specifies the alignment ++ order, e.g. if addend is 2, the linker must add padding so that the ++ next address is aligned to a 4-byte boundary. ++ENUM ++ BFD_RELOC_AVR32_14UW ++ENUMX ++ BFD_RELOC_AVR32_10UW ++ENUMX ++ BFD_RELOC_AVR32_10SW ++ENUMX ++ BFD_RELOC_AVR32_STHH_W ++ENUMX ++ BFD_RELOC_AVR32_7UW ++ENUMX ++ BFD_RELOC_AVR32_6S ++ENUMX ++ BFD_RELOC_AVR32_6UW ++ENUMX ++ BFD_RELOC_AVR32_4UH ++ENUMX ++ BFD_RELOC_AVR32_3U ++ENUMDOC ++ Code relocations that will never make it to the output file. + -+enum { -+ LDA_SUBTYPE_MOV1, -+ LDA_SUBTYPE_MOV2, -+ LDA_SUBTYPE_SUB, -+ LDA_SUBTYPE_LDDPC, -+ LDA_SUBTYPE_LDW, -+ LDA_SUBTYPE_GOTLOAD, -+ LDA_SUBTYPE_GOTLOAD_LARGE, -+}; ++ENUM + BFD_RELOC_390_12 + ENUMDOC + Direct 12 bit. +diff -Nrup binutils-2.17/bfd/targets.c binutils-2.17.atmel.1.3.0/bfd/targets.c +--- binutils-2.17/bfd/targets.c 2006-04-05 14:41:57.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/bfd/targets.c 2007-03-26 10:20:30.000000000 +0200 +@@ -553,6 +553,7 @@ extern const bfd_target b_out_vec_little + extern const bfd_target bfd_efi_app_ia32_vec; + extern const bfd_target bfd_efi_app_ia64_vec; + extern const bfd_target bfd_elf32_avr_vec; ++extern const bfd_target bfd_elf32_avr32_vec; + extern const bfd_target bfd_elf32_bfin_vec; + extern const bfd_target bfd_elf32_bfinfdpic_vec; + extern const bfd_target bfd_elf32_big_generic_vec; +@@ -855,6 +856,7 @@ static const bfd_target * const _bfd_tar + &bfd_efi_app_ia64_vec, + #endif + &bfd_elf32_avr_vec, ++ &bfd_elf32_avr32_vec, + &bfd_elf32_bfin_vec, + &bfd_elf32_bfinfdpic_vec, + +diff -Nrup binutils-2.17/binutils/config.in binutils-2.17.atmel.1.3.0/binutils/config.in +--- binutils-2.17/binutils/config.in 2006-02-14 09:59:10.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/binutils/config.in 2007-03-26 10:32:11.000000000 +0200 +@@ -218,7 +218,7 @@ + + /* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be +- automatically deduced at run-time. ++ automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +@@ -260,8 +260,8 @@ + #undef inline + #endif + +-/* Define to `long' if does not define. */ ++/* Define to `long int' if does not define. */ + #undef off_t + +-/* Define to `unsigned' if does not define. */ ++/* Define to `unsigned int' if does not define. */ + #undef size_t +diff -Nrup binutils-2.17/binutils/configure binutils-2.17.atmel.1.3.0/binutils/configure +--- binutils-2.17/binutils/configure 2006-04-06 23:49:29.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/binutils/configure 2007-03-26 10:32:09.000000000 +0200 +@@ -1,25 +1,54 @@ + #! /bin/sh + # Guess values for system-dependent variables and create Makefiles. +-# Generated by GNU Autoconf 2.59. ++# Generated by GNU Autoconf 2.61. + # +-# Copyright (C) 2003 Free Software Foundation, Inc. ++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, ++# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + # This configure script is free software; the Free Software Foundation + # gives unlimited permission to copy, distribute and modify it. + ## --------------------- ## + ## M4sh Initialization. ## + ## --------------------- ## + +-# Be Bourne compatible ++# Be more Bourne compatible ++DUALCASE=1; export DUALCASE # for MKS sh + if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then +- set -o posix ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac + -+enum { -+ CALL_SUBTYPE_RCALL1, -+ CALL_SUBTYPE_RCALL2, -+ CALL_SUBTYPE_MCALL_CP, -+ CALL_SUBTYPE_MCALL_GOT, -+ CALL_SUBTYPE_MCALL_LARGE, -+}; ++fi + -+#define LDA_INITIAL_SIZE (avr32_pic ? 4 : 2) -+#define CALL_INITIAL_SIZE 2 + -+#define need_reloc(sym, seg, pcrel) \ -+ (!(S_IS_DEFINED(sym) \ -+ && ((pcrel && S_GET_SEGMENT(sym) == seg) \ -+ || (!pcrel && S_GET_SEGMENT(sym) == absolute_section))) \ -+ || S_FORCE_RELOC(sym, 1)) + -+/* Return an initial guess of the length by which a fragment must grow to -+ hold a branch to reach its destination. -+ Also updates fr_type/fr_subtype as necessary. + -+ Called just before doing relaxation. -+ Any symbol that is now undefined will not become defined. -+ The guess for fr_var is ACTUALLY the growth beyond fr_fix. -+ Whatever we do to grow fr_fix or fr_var contributes to our returned value. -+ Although it may not be explicit in the frag, pretend fr_var starts with a -+ 0 value. */ ++# PATH needs CR ++# Avoid depending upon Character Ranges. ++as_cr_letters='abcdefghijklmnopqrstuvwxyz' ++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' ++as_cr_Letters=$as_cr_letters$as_cr_LETTERS ++as_cr_digits='0123456789' ++as_cr_alnum=$as_cr_Letters$as_cr_digits + -+static int -+avr32_default_estimate_size_before_relax (fragS *fragP, segT segment) -+{ -+ int growth = 0; ++# The user is always right. ++if test "${PATH_SEPARATOR+set}" != set; then ++ echo "#! /bin/sh" >conf$$.sh ++ echo "exit 0" >>conf$$.sh ++ chmod +x conf$$.sh ++ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then ++ PATH_SEPARATOR=';' ++ else ++ PATH_SEPARATOR=: ++ fi ++ rm -f conf$$.sh + fi +-DUALCASE=1; export DUALCASE # for MKS sh + + # Support unset when possible. + if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then +@@ -29,8 +58,43 @@ else + fi + + ++# IFS ++# We need space, tab and new line, in precisely that order. Quoting is ++# there to prevent editors from complaining about space-tab. ++# (If _AS_PATH_WALK were called with IFS unset, it would disable word ++# splitting by setting IFS to empty value.) ++as_nl=' ++' ++IFS=" "" $as_nl" + -+ assert(fragP); -+ assert(fragP->fr_symbol); ++# Find who we are. Look in the path if we contain no directory separator. ++case $0 in ++ *[\\/]* ) as_myself=$0 ;; ++ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break ++done ++IFS=$as_save_IFS + -+ if (fragP->tc_frag_data.force_extended -+ || need_reloc(fragP->fr_symbol, segment, fragP->tc_frag_data.pcrel)) -+ { -+ int largest_state = fragP->fr_subtype; -+ while (relax_more(largest_state) != AVR32_RS_NONE) -+ largest_state = relax_more(largest_state); -+ growth = avr32_rs_size(largest_state) - fragP->fr_var; -+ } -+ else -+ { -+ growth = avr32_rs_size(fragP->fr_subtype) - fragP->fr_var; -+ } ++ ;; ++esac ++# We did not find ourselves, most probably we were run as `sh COMMAND' ++# in which case we are not to be found in the path. ++if test "x$as_myself" = x; then ++ as_myself=$0 ++fi ++if test ! -f "$as_myself"; then ++ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 ++ { (exit 1); exit 1; } ++fi + -+ pr_debug("%s:%d: md_estimate_size_before_relax: %d\n", -+ fragP->fr_file, fragP->fr_line, growth); + # Work around bugs in pre-3.0 UWIN ksh. +-$as_unset ENV MAIL MAILPATH ++for as_var in ENV MAIL MAILPATH ++do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var ++done + PS1='$ ' + PS2='> ' + PS4='+ ' +@@ -44,18 +108,19 @@ do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else +- $as_unset $as_var ++ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi + done + + # Required to use basename. +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + +-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then ++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename + else + as_basename=false +@@ -63,157 +128,388 @@ fi + + + # Name of the executable. +-as_me=`$as_basename "$0" || ++as_me=`$as_basename -- "$0" || + $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)$' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$0" : 'X\(/\)' \| . 2>/dev/null || + echo X/"$0" | +- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } +- /^X\/\(\/\/\)$/{ s//\1/; q; } +- /^X\/\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^.*\/\([^/][^/]*\)\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + ++# CDPATH. ++$as_unset CDPATH + +-# PATH needs CR, and LINENO needs CR and PATH. +-# Avoid depending upon Character Ranges. +-as_cr_letters='abcdefghijklmnopqrstuvwxyz' +-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +-as_cr_Letters=$as_cr_letters$as_cr_LETTERS +-as_cr_digits='0123456789' +-as_cr_alnum=$as_cr_Letters$as_cr_digits + +-# The user is always right. +-if test "${PATH_SEPARATOR+set}" != set; then +- echo "#! /bin/sh" >conf$$.sh +- echo "exit 0" >>conf$$.sh +- chmod +x conf$$.sh +- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then +- PATH_SEPARATOR=';' +- else +- PATH_SEPARATOR=: +- fi +- rm -f conf$$.sh ++if test "x$CONFIG_SHELL" = x; then ++ if (eval ":") 2>/dev/null; then ++ as_have_required=yes ++else ++ as_have_required=no ++fi + -+ return growth; ++ if test $as_have_required = yes && (eval ": ++(as_func_return () { ++ (exit \$1) +} -+ -+static int -+avr32_lda_estimate_size_before_relax(fragS *fragP, segT segment ATTRIBUTE_UNUSED) -+{ -+ return fragP->fr_var - LDA_INITIAL_SIZE; ++as_func_success () { ++ as_func_return 0 +} -+ -+static int -+avr32_call_estimate_size_before_relax(fragS *fragP, segT segment ATTRIBUTE_UNUSED) -+{ -+ return fragP->fr_var - CALL_INITIAL_SIZE; ++as_func_failure () { ++ as_func_return 1 +} -+ -+static int -+avr32_cpool_estimate_size_before_relax(fragS *fragP, -+ segT segment ATTRIBUTE_UNUSED) -+{ -+ return fragP->fr_var; ++as_func_ret_success () { ++ return 0 +} -+ -+/* This macro may be defined to relax a frag. GAS will call this with the -+ * segment, the frag, and the change in size of all previous frags; -+ * md_relax_frag should return the change in size of the frag. */ -+static long -+avr32_default_relax_frag (segT segment, fragS *fragP, long stretch) -+{ -+ int state, next_state; -+ symbolS *symbolP; /* The target symbol */ -+ long growth = 0; -+ -+ state = next_state = fragP->fr_subtype; -+ -+ symbolP = fragP->fr_symbol; -+ -+ if (fragP->tc_frag_data.force_extended -+ || need_reloc(symbolP, segment, fragP->tc_frag_data.pcrel)) -+ { -+ /* Symbol must be resolved by the linker. Emit the largest -+ possible opcode. */ -+ while (relax_more(next_state) != AVR32_RS_NONE) -+ next_state = relax_more(next_state); -+ } -+ else -+ { -+ addressT address; /* The address of fragP */ -+ addressT target; /* The address of the target symbol */ -+ offsetT distance; /* The distance between the insn and the symbol */ -+ fragS *sym_frag; -+ -+ address = fragP->fr_address; -+ target = fragP->fr_offset; -+ symbolP = fragP->fr_symbol; -+ sym_frag = symbol_get_frag(symbolP); -+ -+ address += fragP->fr_fix - fragP->fr_var; -+ target += S_GET_VALUE(symbolP); -+ -+ if (stretch != 0 -+ && sym_frag->relax_marker != fragP->relax_marker -+ && S_GET_SEGMENT(symbolP) == segment) -+ /* if it was correctly aligned before, make sure it stays aligned */ -+ target += stretch & (~0UL << avr32_rs_align(state)); -+ -+ if (fragP->tc_frag_data.pcrel) -+ distance = target - (address & (~0UL << avr32_rs_align(state))); -+ else -+ distance = target; -+ -+ pr_debug("%s:%d: relax more? 0x%x - 0x%x = 0x%x (%d), align %d\n", -+ fragP->fr_file, fragP->fr_line, target, address, -+ distance, distance, avr32_rs_align(state)); -+ -+ if (need_relax(state, distance)) -+ { -+ if (relax_more(state) != AVR32_RS_NONE) -+ next_state = relax_more(state); -+ pr_debug("%s:%d: relax more %d -> %d (%d - %d, align %d)\n", -+ fragP->fr_file, fragP->fr_line, state, next_state, -+ target, address, avr32_rs_align(state)); -+ } -+ } -+ -+ growth = avr32_rs_size(next_state) - avr32_rs_size(state); -+ fragP->fr_subtype = next_state; -+ -+ pr_debug("%s:%d: md_relax_frag: growth=%d, subtype=%d, opc=0x%08lx\n", -+ fragP->fr_file, fragP->fr_line, growth, fragP->fr_subtype, -+ avr32_opc_table[next_state].value); -+ -+ return growth; ++as_func_ret_failure () { ++ return 1 +} + -+static long -+avr32_lda_relax_frag(segT segment, fragS *fragP, long stretch) -+{ -+ struct cpool *pool= NULL; -+ unsigned int entry = 0; -+ addressT address, target; -+ offsetT distance; -+ symbolS *symbolP; -+ fragS *sym_frag; -+ long old_size, new_size; -+ -+ symbolP = fragP->fr_symbol; -+ old_size = fragP->fr_var; -+ if (!avr32_pic) -+ { -+ pool = fragP->tc_frag_data.pool; -+ entry = fragP->tc_frag_data.pool_entry; -+ } -+ -+ address = fragP->fr_address; -+ address += fragP->fr_fix - LDA_INITIAL_SIZE; -+ -+ if (!S_IS_DEFINED(symbolP) || S_FORCE_RELOC(symbolP, 1)) -+ goto relax_max; -+ -+ target = fragP->fr_offset; -+ sym_frag = symbol_get_frag(symbolP); -+ target += S_GET_VALUE(symbolP); -+ -+ if (sym_frag->relax_marker != fragP->relax_marker -+ && S_GET_SEGMENT(symbolP) == segment) -+ target += stretch; -+ -+ distance = target - address; ++exitcode=0 ++if as_func_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_success failed. + fi + ++if as_func_failure; then ++ exitcode=1 ++ echo as_func_failure succeeded. ++fi + +- as_lineno_1=$LINENO +- as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` +- test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" || { +- # Find who we are. Look in the path if we contain no path at all +- # relative or not. +- case $0 in +- *[\\/]* ) as_myself=$0 ;; +- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +-done ++if as_func_ret_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_ret_success failed. ++fi + +- ;; +- esac +- # We did not find ourselves, most probably we were run as `sh COMMAND' +- # in which case we are not to be found in the path. +- if test "x$as_myself" = x; then +- as_myself=$0 +- fi +- if test ! -f "$as_myself"; then +- { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 +- { (exit 1); exit 1; }; } +- fi +- case $CONFIG_SHELL in +- '') ++if as_func_ret_failure; then ++ exitcode=1 ++ echo as_func_ret_failure succeeded. ++fi + -+ pr_debug("lda_relax_frag: target: %d, address: %d, var: %d\n", -+ target, address, fragP->fr_var); ++if ( set x; as_func_ret_success y && test x = \"\$1\" ); then ++ : ++else ++ exitcode=1 ++ echo positional parameters were not saved. ++fi + -+ if (!avr32_pic && S_GET_SEGMENT(symbolP) == absolute_section -+ && target <= 127 && (offsetT)target >= -128) -+ { -+ if (fragP->fr_subtype == LDA_SUBTYPE_LDDPC -+ || fragP->fr_subtype == LDA_SUBTYPE_LDW) -+ pool->literals[entry].refcount--; -+ new_size = 2; -+ fragP->fr_subtype = LDA_SUBTYPE_MOV1; -+ } -+ else if (!avr32_pic && S_GET_SEGMENT(symbolP) == absolute_section -+ && target <= 1048575 && (offsetT)target >= -1048576) -+ { -+ if (fragP->fr_subtype == LDA_SUBTYPE_LDDPC -+ || fragP->fr_subtype == LDA_SUBTYPE_LDW) -+ pool->literals[entry].refcount--; -+ new_size = 4; -+ fragP->fr_subtype = LDA_SUBTYPE_MOV2; -+ } -+ else if (!linkrelax && S_GET_SEGMENT(symbolP) == segment -+ /* the field will be negated, so this is really -(-32768) -+ and -(32767) */ -+ && distance <= 32768 && distance >= -32767) -+ { -+ if (!avr32_pic -+ && (fragP->fr_subtype == LDA_SUBTYPE_LDDPC -+ || fragP->fr_subtype == LDA_SUBTYPE_LDW)) -+ pool->literals[entry].refcount--; -+ new_size = 4; -+ fragP->fr_subtype = LDA_SUBTYPE_SUB; -+ } -+ else -+ { -+ relax_max: -+ if (avr32_pic) -+ { -+ if (linkrelax) -+ { -+ new_size = 8; -+ fragP->fr_subtype = LDA_SUBTYPE_GOTLOAD_LARGE; -+ } -+ else -+ { -+ new_size = 4; -+ fragP->fr_subtype = LDA_SUBTYPE_GOTLOAD; -+ } -+ } -+ else -+ { -+ if (fragP->fr_subtype != LDA_SUBTYPE_LDDPC -+ && fragP->fr_subtype != LDA_SUBTYPE_LDW) -+ pool->literals[entry].refcount++; ++test \$exitcode = 0) || { (exit 1); exit 1; } + -+ sym_frag = symbol_get_frag(pool->symbol); -+ target = (sym_frag->fr_address + sym_frag->fr_fix -+ + pool->padding + pool->literals[entry].offset); ++( ++ as_lineno_1=\$LINENO ++ as_lineno_2=\$LINENO ++ test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && ++ test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ++") 2> /dev/null; then ++ : ++else ++ as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH + do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. +- for as_base in sh bash ksh sh5; do +- case $as_dir in ++ case $as_dir in + /*) +- if ("$as_dir/$as_base" -c ' ++ for as_base in sh bash ksh sh5; do ++ as_candidate_shells="$as_candidate_shells $as_dir/$as_base" ++ done;; ++ esac ++done ++IFS=$as_save_IFS + -+ pr_debug("cpool sym address: 0x%lx\n", -+ sym_frag->fr_address + sym_frag->fr_fix); + -+ know(pool->section == segment); ++ for as_shell in $as_candidate_shells $SHELL; do ++ # Try only shells that exist, to save several forks. ++ if { test -f "$as_shell" || test -f "$as_shell.exe"; } && ++ { ("$as_shell") 2> /dev/null <<\_ASEOF ++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then ++ emulate sh ++ NULLCMD=: ++ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which ++ # is contrary to our usage. Disable this feature. ++ alias -g '${1+"$@"}'='"$@"' ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac + -+ if (sym_frag->relax_marker != fragP->relax_marker) -+ target += stretch; ++fi + -+ distance = target - address; -+ if (distance <= 508 && distance >= 0) -+ { -+ new_size = 2; -+ fragP->fr_subtype = LDA_SUBTYPE_LDDPC; -+ } -+ else -+ { -+ new_size = 4; -+ fragP->fr_subtype = LDA_SUBTYPE_LDW; -+ } + -+ pr_debug("lda_relax_frag (cpool): target=0x%lx, address=0x%lx, refcount=%d\n", -+ target, address, pool->literals[entry].refcount); -+ } -+ } ++: ++_ASEOF ++}; then ++ CONFIG_SHELL=$as_shell ++ as_have_required=yes ++ if { "$as_shell" 2> /dev/null <<\_ASEOF ++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then ++ emulate sh ++ NULLCMD=: ++ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which ++ # is contrary to our usage. Disable this feature. ++ alias -g '${1+"$@"}'='"$@"' ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac + -+ fragP->fr_var = new_size; ++fi + -+ pr_debug("%s:%d: lda: relax pass done. subtype: %d, growth: %ld\n", -+ fragP->fr_file, fragP->fr_line, -+ fragP->fr_subtype, new_size - old_size); + -+ return new_size - old_size; ++: ++(as_func_return () { ++ (exit $1) ++} ++as_func_success () { ++ as_func_return 0 ++} ++as_func_failure () { ++ as_func_return 1 ++} ++as_func_ret_success () { ++ return 0 ++} ++as_func_ret_failure () { ++ return 1 +} + -+static long -+avr32_call_relax_frag(segT segment, fragS *fragP, long stretch) -+{ -+ struct cpool *pool = NULL; -+ unsigned int entry = 0; -+ addressT address, target; -+ offsetT distance; -+ symbolS *symbolP; -+ fragS *sym_frag; -+ long old_size, new_size; ++exitcode=0 ++if as_func_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_success failed. ++fi + -+ symbolP = fragP->fr_symbol; -+ old_size = fragP->fr_var; -+ if (!avr32_pic) -+ { -+ pool = fragP->tc_frag_data.pool; -+ entry = fragP->tc_frag_data.pool_entry; -+ } ++if as_func_failure; then ++ exitcode=1 ++ echo as_func_failure succeeded. ++fi + -+ address = fragP->fr_address; -+ address += fragP->fr_fix - CALL_INITIAL_SIZE; ++if as_func_ret_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_ret_success failed. ++fi + -+ if (need_reloc(symbolP, segment, 1)) -+ { -+ pr_debug("call: must emit reloc\n"); -+ goto relax_max; -+ } ++if as_func_ret_failure; then ++ exitcode=1 ++ echo as_func_ret_failure succeeded. ++fi + -+ target = fragP->fr_offset; -+ sym_frag = symbol_get_frag(symbolP); -+ target += S_GET_VALUE(symbolP); ++if ( set x; as_func_ret_success y && test x = "$1" ); then ++ : ++else ++ exitcode=1 ++ echo positional parameters were not saved. ++fi + -+ if (sym_frag->relax_marker != fragP->relax_marker -+ && S_GET_SEGMENT(symbolP) == segment) -+ target += stretch; ++test $exitcode = 0) || { (exit 1); exit 1; } + -+ distance = target - address; ++( + as_lineno_1=$LINENO + as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then +- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } +- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } +- CONFIG_SHELL=$as_dir/$as_base +- export CONFIG_SHELL +- exec "$CONFIG_SHELL" "$0" ${1+"$@"} +- fi;; +- esac +- done +-done +-;; +- esac ++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + -+ if (distance <= 1022 && distance >= -1024) -+ { -+ pr_debug("call: distance is %d, emitting short rcall\n", distance); -+ if (!avr32_pic && fragP->fr_subtype == CALL_SUBTYPE_MCALL_CP) -+ pool->literals[entry].refcount--; -+ new_size = 2; -+ fragP->fr_subtype = CALL_SUBTYPE_RCALL1; -+ } -+ else if (distance <= 2097150 && distance >= -2097152) -+ { -+ pr_debug("call: distance is %d, emitting long rcall\n", distance); -+ if (!avr32_pic && fragP->fr_subtype == CALL_SUBTYPE_MCALL_CP) -+ pool->literals[entry].refcount--; -+ new_size = 4; -+ fragP->fr_subtype = CALL_SUBTYPE_RCALL2; -+ } -+ else -+ { -+ pr_debug("call: distance %d too far, emitting something big\n", distance); ++_ASEOF ++}; then ++ break ++fi + -+ relax_max: -+ if (avr32_pic) -+ { -+ if (linkrelax) -+ { -+ new_size = 10; -+ fragP->fr_subtype = CALL_SUBTYPE_MCALL_LARGE; -+ } -+ else -+ { -+ new_size = 4; -+ fragP->fr_subtype = CALL_SUBTYPE_MCALL_GOT; -+ } -+ } -+ else -+ { -+ if (fragP->fr_subtype != CALL_SUBTYPE_MCALL_CP) -+ pool->literals[entry].refcount++; ++fi + -+ new_size = 4; -+ fragP->fr_subtype = CALL_SUBTYPE_MCALL_CP; -+ } -+ } ++ done + -+ fragP->fr_var = new_size; ++ if test "x$CONFIG_SHELL" != x; then ++ for as_var in BASH_ENV ENV ++ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var ++ done ++ export CONFIG_SHELL ++ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} ++fi + -+ pr_debug("%s:%d: call: relax pass done, growth: %d, fr_var: %d\n", -+ fragP->fr_file, fragP->fr_line, -+ new_size - old_size, fragP->fr_var); + -+ return new_size - old_size; -+} ++ if test $as_have_required = no; then ++ echo This script requires a shell more modern than all the ++ echo shells that I found on your system. Please install a ++ echo modern shell, or manually run the script under such a ++ echo shell if you do have one. ++ { (exit 1); exit 1; } ++fi + -+static long -+avr32_cpool_relax_frag(segT segment ATTRIBUTE_UNUSED, -+ fragS *fragP, -+ long stretch ATTRIBUTE_UNUSED) -+{ -+ struct cpool *pool; -+ addressT address; -+ long old_size, new_size; -+ unsigned int entry; + -+ pool = fragP->tc_frag_data.pool; -+ address = fragP->fr_address + fragP->fr_fix; -+ old_size = fragP->fr_var; -+ new_size = 0; ++fi + -+ for (entry = 0; entry < pool->next_free_entry; entry++) -+ { -+ if (pool->literals[entry].refcount > 0) -+ { -+ pool->literals[entry].offset = new_size; -+ new_size += 4; -+ } -+ } ++fi + -+ fragP->fr_var = new_size; + -+ return new_size - old_size; ++ ++(eval "as_func_return () { ++ (exit \$1) ++} ++as_func_success () { ++ as_func_return 0 ++} ++as_func_failure () { ++ as_func_return 1 ++} ++as_func_ret_success () { ++ return 0 ++} ++as_func_ret_failure () { ++ return 1 +} + -+/* *fragP has been relaxed to its final size, and now needs to have -+ the bytes inside it modified to conform to the new size. ++exitcode=0 ++if as_func_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_success failed. ++fi + -+ Called after relaxation is finished. -+ fragP->fr_type == rs_machine_dependent. -+ fragP->fr_subtype is the subtype of what the address relaxed to. */ ++if as_func_failure; then ++ exitcode=1 ++ echo as_func_failure succeeded. ++fi + -+static void -+avr32_default_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, -+ segT segment ATTRIBUTE_UNUSED, -+ fragS *fragP) -+{ -+ const struct avr32_opcode *opc; -+ const struct avr32_ifield *ifield; -+ bfd_reloc_code_real_type r_type; -+ symbolS *symbolP; -+ fixS *fixP; -+ bfd_vma value; -+ int subtype; ++if as_func_ret_success; then ++ : ++else ++ exitcode=1 ++ echo as_func_ret_success failed. ++fi + -+ opc = &avr32_opc_table[fragP->fr_subtype]; -+ ifield = opc->fields[opc->var_field]; -+ symbolP = fragP->fr_symbol; -+ subtype = fragP->fr_subtype; -+ r_type = opc->reloc_type; ++if as_func_ret_failure; then ++ exitcode=1 ++ echo as_func_ret_failure succeeded. ++fi + -+ /* Clear the opcode bits and the bits belonging to the relaxed -+ field. We assume all other fields stay the same. */ -+ value = bfd_getb32(fragP->fr_opcode); -+ value &= ~(opc->mask | ifield->mask); ++if ( set x; as_func_ret_success y && test x = \"\$1\" ); then ++ : ++else ++ exitcode=1 ++ echo positional parameters were not saved. ++fi + -+ /* Insert the new opcode */ -+ value |= opc->value; -+ bfd_putb32(value, fragP->fr_opcode); ++test \$exitcode = 0") || { ++ echo No shell found that supports shell functions. ++ echo Please tell autoconf@gnu.org about your system, ++ echo including any error possibly output before this ++ echo message ++} + -+ fragP->fr_fix += opc->size - fragP->fr_var; + -+ if (fragP->tc_frag_data.reloc_info != AVR32_OPINFO_NONE) -+ { -+ switch (fragP->tc_frag_data.reloc_info) -+ { -+ case AVR32_OPINFO_HI: -+ r_type = BFD_RELOC_HI16; -+ break; -+ case AVR32_OPINFO_LO: -+ r_type = BFD_RELOC_LO16; -+ break; -+ case AVR32_OPINFO_GOT: -+ switch (r_type) -+ { -+ case BFD_RELOC_AVR32_18W_PCREL: -+ r_type = BFD_RELOC_AVR32_GOT18SW; -+ break; -+ case BFD_RELOC_AVR32_16S: -+ r_type = BFD_RELOC_AVR32_GOT16S; -+ break; -+ default: -+ BAD_CASE(r_type); -+ break; -+ } -+ break; -+ default: -+ BAD_CASE(fragP->tc_frag_data.reloc_info); -+ break; -+ } -+ } + -+ pr_debug("%s:%d: convert_frag: new %s fixup\n", -+ fragP->fr_file, fragP->fr_line, -+ bfd_get_reloc_code_name(r_type)); ++ as_lineno_1=$LINENO ++ as_lineno_2=$LINENO ++ test "x$as_lineno_1" != "x$as_lineno_2" && ++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a +- # line-number line before each line; the second 'sed' does the real +- # work. The second script uses 'N' to pair each line-number line +- # with the numbered line, and appends trailing '-' during +- # substitution so that $LINENO is not a special case at line end. ++ # line-number line after each line using $LINENO; the second 'sed' ++ # does the real work. The second script uses 'N' to pair each ++ # line-number line with the line containing $LINENO, and appends ++ # trailing '-' during substitution so that $LINENO is not a special ++ # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the +- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) +- sed '=' <$as_myself | ++ # scripts with optimization help from Paolo Bonzini. Blame Lee ++ # E. McMahon (1931-1989) for sed's syntax. :-) ++ sed -n ' ++ p ++ /[$]LINENO/= ++ ' <$as_myself | + sed ' ++ s/[$]LINENO.*/&-/ ++ t lineno ++ b ++ :lineno + N +- s,$,-, +- : loop +- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, ++ :loop ++ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop +- s,-$,, +- s,^['$as_cr_digits']*\n,, ++ s/-\n.*// + ' >$as_me.lineno && +- chmod +x $as_me.lineno || ++ chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the +- # original and so on. Autoconf is especially sensible to this). +- . ./$as_me.lineno ++ # original and so on. Autoconf is especially sensitive to this). ++ . "./$as_me.lineno" + # Exit status is that of the last command. + exit + } + + +-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in +- *c*,-n*) ECHO_N= ECHO_C=' +-' ECHO_T=' ' ;; +- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; +- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; ++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then ++ as_dirname=dirname ++else ++ as_dirname=false ++fi + -+#if 1 -+ fixP = fix_new_exp(fragP, fragP->fr_fix - opc->size, opc->size, -+ &fragP->tc_frag_data.exp, -+ fragP->tc_frag_data.pcrel, r_type); -+#else -+ fixP = fix_new(fragP, fragP->fr_fix - opc->size, opc->size, symbolP, -+ fragP->fr_offset, fragP->tc_frag_data.pcrel, r_type); ++ECHO_C= ECHO_N= ECHO_T= ++case `echo -n x` in ++-n*) ++ case `echo 'x\c'` in ++ *c*) ECHO_T=' ';; # ECHO_T is single tab character. ++ *) ECHO_C='\c';; ++ esac;; ++*) ++ ECHO_N='-n';; + esac + +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + + rm -f conf$$ conf$$.exe conf$$.file ++if test -d conf$$.dir; then ++ rm -f conf$$.dir/conf$$.file ++else ++ rm -f conf$$.dir ++ mkdir conf$$.dir ++fi + echo >conf$$.file + if ln -s conf$$.file conf$$ 2>/dev/null; then +- # We could just check for DJGPP; but this test a) works b) is more generic +- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). +- if test -f conf$$.exe; then +- # Don't use ln at all; we don't have any links ++ as_ln_s='ln -s' ++ # ... but there are two gotchas: ++ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. ++ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. ++ # In both cases, we have to default to `cp -p'. ++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +- else +- as_ln_s='ln -s' +- fi + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +-rm -f conf$$ conf$$.exe conf$$.file ++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file ++rmdir conf$$.dir 2>/dev/null + + if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +@@ -222,7 +518,28 @@ else + as_mkdir_p=false + fi + +-as_executable_p="test -f" ++if test -x / >/dev/null 2>&1; then ++ as_test_x='test -x' ++else ++ if ls -dL / >/dev/null 2>&1; then ++ as_ls_L_option=L ++ else ++ as_ls_L_option= ++ fi ++ as_test_x=' ++ eval sh -c '\'' ++ if test -d "$1"; then ++ test -d "$1/."; ++ else ++ case $1 in ++ -*)set "./$1";; ++ esac; ++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ++ ???[sx]*):;;*)false;;esac;fi ++ '\'' sh ++ ' ++fi ++as_executable_p=$as_test_x + + # Sed expression to map a string onto a valid CPP name. + as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +@@ -231,39 +548,27 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P + as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +-# IFS +-# We need space, tab and new line, in precisely that order. +-as_nl=' +-' +-IFS=" $as_nl" +- +-# CDPATH. +-$as_unset CDPATH + ++exec 7<&0 &1 + + # Name of the host. + # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, + # so uname gets run too. + ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +-exec 6>&1 +- + # + # Initializations. + # + ac_default_prefix=/usr/local ++ac_clean_files= + ac_config_libobj_dir=. ++LIBOBJS= + cross_compiling=no + subdirs= + MFLAGS= + MAKEFLAGS= + SHELL=${CONFIG_SHELL-/bin/sh} + +-# Maximum number of lines to put in a shell here document. +-# This variable seems obsolete. It should probably be removed, and +-# only ac_max_sed_lines should be used. +-: ${ac_max_here_lines=38} +- + # Identity of this package. + PACKAGE_NAME= + PACKAGE_TARNAME= +@@ -275,42 +580,193 @@ ac_unique_file="ar.c" + # Factoring default headers for most tests. + ac_includes_default="\ + #include +-#if HAVE_SYS_TYPES_H ++#ifdef HAVE_SYS_TYPES_H + # include + #endif +-#if HAVE_SYS_STAT_H ++#ifdef HAVE_SYS_STAT_H + # include + #endif +-#if STDC_HEADERS ++#ifdef STDC_HEADERS + # include + # include + #else +-# if HAVE_STDLIB_H ++# ifdef HAVE_STDLIB_H + # include + # endif + #endif +-#if HAVE_STRING_H +-# if !STDC_HEADERS && HAVE_MEMORY_H ++#ifdef HAVE_STRING_H ++# if !defined STDC_HEADERS && defined HAVE_MEMORY_H + # include + # endif + # include + #endif +-#if HAVE_STRINGS_H ++#ifdef HAVE_STRINGS_H + # include + #endif +-#if HAVE_INTTYPES_H ++#ifdef HAVE_INTTYPES_H + # include +-#else +-# if HAVE_STDINT_H +-# include +-# endif + #endif +-#if HAVE_UNISTD_H ++#ifdef HAVE_STDINT_H ++# include +#endif ++#ifdef HAVE_UNISTD_H + # include + #endif" + +-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE LN_S RANLIB ac_ct_RANLIB LIBTOOL WARN_CFLAGS NO_WERROR YACC LEX LEXLIB LEX_OUTPUT_ROOT CPP EGREP ALLOCA USE_NLS MSGFMT GMSGFMT XGETTEXT USE_INCLUDED_LIBINTL CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLDEPS INTLLIBS INTLOBJS POFILES POSUB INCLUDE_LOCALE_H GT_NO GT_YES MKINSTALLDIRS l MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT HDEFINES AR CC_FOR_BUILD EXEEXT_FOR_BUILD DEMANGLER_NAME NLMCONV_DEFS BUILD_NLMCONV BUILD_SRCONV BUILD_DLLTOOL DLLTOOL_DEFS BUILD_WINDRES BUILD_DLLWRAP BUILD_MISC OBJDUMP_DEFS EMULATION EMULATION_VECTOR datarootdir docdir htmldir LIBOBJS LTLIBOBJS' ++ac_subst_vars='SHELL ++PATH_SEPARATOR ++PACKAGE_NAME ++PACKAGE_TARNAME ++PACKAGE_VERSION ++PACKAGE_STRING ++PACKAGE_BUGREPORT ++exec_prefix ++prefix ++program_transform_name ++bindir ++sbindir ++libexecdir ++datarootdir ++datadir ++sysconfdir ++sharedstatedir ++localstatedir ++includedir ++oldincludedir ++docdir ++infodir ++htmldir ++dvidir ++pdfdir ++psdir ++libdir ++localedir ++mandir ++DEFS ++ECHO_C ++ECHO_N ++ECHO_T ++LIBS ++build_alias ++host_alias ++target_alias ++build ++build_cpu ++build_vendor ++build_os ++host ++host_cpu ++host_vendor ++host_os ++target ++target_cpu ++target_vendor ++target_os ++CC ++CFLAGS ++LDFLAGS ++CPPFLAGS ++ac_ct_CC ++EXEEXT ++OBJEXT ++INSTALL_PROGRAM ++INSTALL_SCRIPT ++INSTALL_DATA ++CYGPATH_W ++PACKAGE ++VERSION ++ACLOCAL ++AUTOCONF ++AUTOMAKE ++AUTOHEADER ++MAKEINFO ++install_sh ++STRIP ++INSTALL_STRIP_PROGRAM ++mkdir_p ++AWK ++SET_MAKE ++am__leading_dot ++AMTAR ++am__tar ++am__untar ++DEPDIR ++am__include ++am__quote ++AMDEP_TRUE ++AMDEP_FALSE ++AMDEPBACKSLASH ++CCDEPMODE ++am__fastdepCC_TRUE ++am__fastdepCC_FALSE ++LN_S ++RANLIB ++LIBTOOL ++WARN_CFLAGS ++NO_WERROR ++YACC ++YFLAGS ++LEX ++LEX_OUTPUT_ROOT ++LEXLIB ++CPP ++GREP ++EGREP ++ALLOCA ++USE_NLS ++MSGFMT ++GMSGFMT ++XGETTEXT ++USE_INCLUDED_LIBINTL ++CATALOGS ++CATOBJEXT ++DATADIRNAME ++GMOFILES ++INSTOBJEXT ++INTLDEPS ++INTLLIBS ++INTLOBJS ++POFILES ++POSUB ++INCLUDE_LOCALE_H ++GT_NO ++GT_YES ++MKINSTALLDIRS ++l ++MAINTAINER_MODE_TRUE ++MAINTAINER_MODE_FALSE ++MAINT ++HDEFINES ++AR ++CC_FOR_BUILD ++EXEEXT_FOR_BUILD ++DEMANGLER_NAME ++NLMCONV_DEFS ++BUILD_NLMCONV ++BUILD_SRCONV ++BUILD_DLLTOOL ++DLLTOOL_DEFS ++BUILD_WINDRES ++BUILD_DLLWRAP ++BUILD_MISC ++OBJDUMP_DEFS ++EMULATION ++EMULATION_VECTOR ++LIBOBJS ++LTLIBOBJS' + ac_subst_files='' ++ ac_precious_vars='build_alias ++host_alias ++target_alias ++CC ++CFLAGS ++LDFLAGS ++LIBS ++CPPFLAGS ++YACC ++YFLAGS ++CPP' + -+ /* Revert fix_new brain damage. "dot_value" is the value of PC at -+ the point of the fixup, relative to the frag address. fix_new() -+ and friends think they are only being called during the assembly -+ pass, not during relaxation or similar, so fx_dot_value, fx_file -+ and fx_line are all initialized to the wrong value. But we don't -+ know the size of the fixup until now, so we really can't live up -+ to the assumptions these functions make about the target. What -+ do these functions think the "where" and "frag" argument mean -+ anyway? */ -+ fixP->fx_dot_value = fragP->fr_fix - opc->size; -+ fixP->fx_file = fragP->fr_file; -+ fixP->fx_line = fragP->fr_line; -+ -+ fixP->tc_fix_data.ifield = ifield; -+ fixP->tc_fix_data.align = avr32_rs_align(subtype); -+ fixP->tc_fix_data.min = avr32_relax_table[subtype].lower_bound; -+ fixP->tc_fix_data.max = avr32_relax_table[subtype].upper_bound; -+} -+ -+static void -+avr32_lda_convert_frag(bfd *abfd ATTRIBUTE_UNUSED, -+ segT segment ATTRIBUTE_UNUSED, -+ fragS *fragP) -+{ -+ const struct avr32_opcode *opc; -+ const struct avr32_ifield *ifield; -+ bfd_reloc_code_real_type r_type; -+ expressionS exp; -+ struct cpool *pool; -+ fixS *fixP; -+ bfd_vma value; -+ int regid, pcrel = 0, align = 0; -+ char *p; -+ -+ r_type = BFD_RELOC_NONE; -+ regid = fragP->tc_frag_data.reloc_info; -+ p = fragP->fr_opcode; -+ exp.X_add_symbol = fragP->fr_symbol; -+ exp.X_add_number = fragP->fr_offset; -+ exp.X_op = O_symbol; + + # Initialize some variables set by options. + ac_init_help= +@@ -337,34 +793,48 @@ x_libraries=NONE + # and all the variables that are supposed to be based on exec_prefix + # by default will actually change. + # Use braces instead of parens because sh, perl, etc. also accept them. ++# (The list follows the same order as the GNU Coding Standards.) + bindir='${exec_prefix}/bin' + sbindir='${exec_prefix}/sbin' + libexecdir='${exec_prefix}/libexec' +-datadir='${prefix}/share' ++datarootdir='${prefix}/share' ++datadir='${datarootdir}' + sysconfdir='${prefix}/etc' + sharedstatedir='${prefix}/com' + localstatedir='${prefix}/var' +-libdir='${exec_prefix}/lib' + includedir='${prefix}/include' + oldincludedir='/usr/include' +-infodir='${prefix}/info' +-mandir='${prefix}/man' ++docdir='${datarootdir}/doc/${PACKAGE}' ++infodir='${datarootdir}/info' ++htmldir='${docdir}' ++dvidir='${docdir}' ++pdfdir='${docdir}' ++psdir='${docdir}' ++libdir='${exec_prefix}/lib' ++localedir='${datarootdir}/locale' ++mandir='${datarootdir}/man' + + ac_prev= ++ac_dashdash= + for ac_option + do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then +- eval "$ac_prev=\$ac_option" ++ eval $ac_prev=\$ac_option + ac_prev= + continue + fi + +- ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` ++ case $ac_option in ++ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; ++ *) ac_optarg=yes ;; ++ esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + +- case $ac_option in ++ case $ac_dashdash$ac_option in ++ --) ++ ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; +@@ -386,33 +856,45 @@ do + --config-cache | -C) + cache_file=config.cache ;; + +- -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ++ -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; +- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ +- | --da=*) ++ -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + ++ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ ++ | --dataroo | --dataro | --datar) ++ ac_prev=datarootdir ;; ++ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ ++ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) ++ datarootdir=$ac_optarg ;; + -+ pr_debug("%s:%d: lda_convert_frag, subtype: %d, fix: %d, var: %d, regid: %d\n", -+ fragP->fr_file, fragP->fr_line, -+ fragP->fr_subtype, fragP->fr_fix, fragP->fr_var, regid); + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } +- ac_feature=`echo $ac_feature | sed 's/-/_/g'` +- eval "enable_$ac_feature=no" ;; ++ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` ++ eval enable_$ac_feature=no ;; + -+ switch (fragP->fr_subtype) -+ { -+ case LDA_SUBTYPE_MOV1: -+ opc = &avr32_opc_table[AVR32_OPC_MOV1]; -+ opc->fields[0]->insert(opc->fields[0], p, regid); -+ ifield = opc->fields[1]; -+ r_type = opc->reloc_type; -+ break; -+ case LDA_SUBTYPE_MOV2: -+ opc = &avr32_opc_table[AVR32_OPC_MOV2]; -+ opc->fields[0]->insert(opc->fields[0], p, regid); -+ ifield = opc->fields[1]; -+ r_type = opc->reloc_type; -+ break; -+ case LDA_SUBTYPE_SUB: -+ opc = &avr32_opc_table[AVR32_OPC_SUB5]; -+ opc->fields[0]->insert(opc->fields[0], p, regid); -+ opc->fields[1]->insert(opc->fields[1], p, AVR32_REG_PC); -+ ifield = opc->fields[2]; -+ r_type = BFD_RELOC_AVR32_16N_PCREL; ++ -docdir | --docdir | --docdi | --doc | --do) ++ ac_prev=docdir ;; ++ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) ++ docdir=$ac_optarg ;; + -+ /* Pretend that SUB5 isn't a "negated" pcrel expression for now. -+ We'll have to fix it up later when we know whether to -+ generate a reloc for it (in which case the linker will negate -+ it, so we shouldn't). */ -+ pcrel = 1; -+ break; -+ case LDA_SUBTYPE_LDDPC: -+ opc = &avr32_opc_table[AVR32_OPC_LDDPC]; -+ align = 2; -+ r_type = BFD_RELOC_AVR32_9W_CP; -+ goto cpool_common; -+ case LDA_SUBTYPE_LDW: -+ opc = &avr32_opc_table[AVR32_OPC_LDDPC_EXT]; -+ r_type = BFD_RELOC_AVR32_16_CP; -+ cpool_common: -+ opc->fields[0]->insert(opc->fields[0], p, regid); -+ ifield = opc->fields[1]; -+ pool = fragP->tc_frag_data.pool; -+ exp.X_add_symbol = pool->symbol; -+ exp.X_add_number = pool->literals[fragP->tc_frag_data.pool_entry].offset; -+ pcrel = 1; -+ break; -+ case LDA_SUBTYPE_GOTLOAD_LARGE: -+ /* ld.w Rd, r6[Rd << 2] (last) */ -+ opc = &avr32_opc_table[AVR32_OPC_LD_W5]; -+ bfd_putb32(opc->value, p + 4); -+ opc->fields[0]->insert(opc->fields[0], p + 4, regid); -+ opc->fields[1]->insert(opc->fields[1], p + 4, 6); -+ opc->fields[2]->insert(opc->fields[2], p + 4, regid); -+ opc->fields[3]->insert(opc->fields[3], p + 4, 2); ++ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ++ ac_prev=dvidir ;; ++ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) ++ dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } +- ac_feature=`echo $ac_feature | sed 's/-/_/g'` +- case $ac_option in +- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; +- *) ac_optarg=yes ;; +- esac +- eval "enable_$ac_feature='$ac_optarg'" ;; ++ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` ++ eval enable_$ac_feature=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ +@@ -439,6 +921,12 @@ do + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + ++ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ++ ac_prev=htmldir ;; ++ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ ++ | --ht=*) ++ htmldir=$ac_optarg ;; + -+ /* mov Rd, (got_offset / 4) */ -+ opc = &avr32_opc_table[AVR32_OPC_MOV2]; -+ opc->fields[0]->insert(opc->fields[0], p, regid); -+ ifield = opc->fields[1]; -+ r_type = BFD_RELOC_AVR32_LDA_GOT; -+ break; -+ case LDA_SUBTYPE_GOTLOAD: -+ opc = &avr32_opc_table[AVR32_OPC_LD_W4]; -+ opc->fields[0]->insert(opc->fields[0], p, regid); -+ opc->fields[1]->insert(opc->fields[1], p, 6); -+ ifield = opc->fields[2]; -+ if (r_type == BFD_RELOC_NONE) -+ r_type = BFD_RELOC_AVR32_GOT16S; -+ break; -+ default: -+ BAD_CASE(fragP->fr_subtype); -+ } + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; +@@ -463,13 +951,16 @@ do + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + ++ -localedir | --localedir | --localedi | --localed | --locale) ++ ac_prev=localedir ;; ++ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) ++ localedir=$ac_optarg ;; + -+ value = bfd_getb32(p); -+ value &= ~(opc->mask | ifield->mask); -+ value |= opc->value; -+ bfd_putb32(value, p); + -localstatedir | --localstatedir | --localstatedi | --localstated \ +- | --localstate | --localstat | --localsta | --localst \ +- | --locals | --local | --loca | --loc | --lo) ++ | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ +- | --localstate=* | --localstat=* | --localsta=* | --localst=* \ +- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) ++ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) +@@ -534,6 +1025,16 @@ do + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + ++ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ++ ac_prev=pdfdir ;; ++ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) ++ pdfdir=$ac_optarg ;; + -+ fragP->fr_fix += fragP->fr_var - LDA_INITIAL_SIZE; ++ -psdir | --psdir | --psdi | --psd | --ps) ++ ac_prev=psdir ;; ++ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) ++ psdir=$ac_optarg ;; + -+ if (fragP->fr_next -+ && ((offsetT)(fragP->fr_next->fr_address - fragP->fr_address) -+ != fragP->fr_fix)) -+ { -+ fprintf(stderr, "LDA frag: fr_fix is wrong! fragP->fr_var = %ld, r_type = %s\n", -+ fragP->fr_var, bfd_get_reloc_code_name(r_type)); -+ abort(); -+ } + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; +@@ -586,24 +1087,20 @@ do + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } +- ac_package=`echo $ac_package| sed 's/-/_/g'` +- case $ac_option in +- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; +- *) ac_optarg=yes ;; +- esac +- eval "with_$ac_package='$ac_optarg'" ;; ++ ac_package=`echo $ac_package | sed 's/[-.]/_/g'` ++ eval with_$ac_package=\$ac_optarg ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. +- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && ++ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } +- ac_package=`echo $ac_package | sed 's/-/_/g'` +- eval "with_$ac_package=no" ;; ++ ac_package=`echo $ac_package | sed 's/[-.]/_/g'` ++ eval with_$ac_package=no ;; + + --x) + # Obsolete; use --with-x. +@@ -634,8 +1131,7 @@ Try \`$0 --help' for more information." + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } +- ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` +- eval "$ac_envvar='$ac_optarg'" ++ eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) +@@ -655,27 +1151,19 @@ if test -n "$ac_prev"; then + { (exit 1); exit 1; }; } + fi + +-# Be sure to have absolute paths. +-for ac_var in exec_prefix prefix +-do +- eval ac_val=$`echo $ac_var` +- case $ac_val in +- [\\/$]* | ?:[\\/]* | NONE | '' ) ;; +- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 +- { (exit 1); exit 1; }; };; +- esac +-done +- +-# Be sure to have absolute paths. +-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ +- localstatedir libdir includedir oldincludedir infodir mandir ++# Be sure to have absolute directory names. ++for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ ++ datadir sysconfdir sharedstatedir localstatedir includedir \ ++ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ ++ libdir localedir mandir + do +- eval ac_val=$`echo $ac_var` ++ eval ac_val=\$$ac_var + case $ac_val in +- [\\/$]* | ?:[\\/]* ) ;; +- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 +- { (exit 1); exit 1; }; };; ++ [\\/$]* | ?:[\\/]* ) continue;; ++ NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac ++ { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 ++ { (exit 1); exit 1; }; } + done + + # There might be people who depend on the old broken behavior: `$host' +@@ -702,74 +1190,76 @@ test -n "$host_alias" && ac_tool_prefix= + test "$silent" = yes && exec 6>/dev/null + + ++ac_pwd=`pwd` && test -n "$ac_pwd" && ++ac_ls_di=`ls -di .` && ++ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || ++ { echo "$as_me: error: Working directory cannot be determined" >&2 ++ { (exit 1); exit 1; }; } ++test "X$ac_ls_di" = "X$ac_pwd_ls_di" || ++ { echo "$as_me: error: pwd does not report name of working directory" >&2 ++ { (exit 1); exit 1; }; } + -+ fixP = fix_new_exp(fragP, fragP->fr_fix - fragP->fr_var, fragP->fr_var, -+ &exp, pcrel, r_type); + -+ /* Revert fix_new brain damage. "dot_value" is the value of PC at -+ the point of the fixup, relative to the frag address. fix_new() -+ and friends think they are only being called during the assembly -+ pass, not during relaxation or similar, so fx_dot_value, fx_file -+ and fx_line are all initialized to the wrong value. But we don't -+ know the size of the fixup until now, so we really can't live up -+ to the assumptions these functions make about the target. What -+ do these functions think the "where" and "frag" argument mean -+ anyway? */ -+ fixP->fx_dot_value = fragP->fr_fix - opc->size; -+ fixP->fx_file = fragP->fr_file; -+ fixP->fx_line = fragP->fr_line; + # Find the source files, if location was not specified. + if test -z "$srcdir"; then + ac_srcdir_defaulted=yes +- # Try the directory containing this script, then its parent. +- ac_confdir=`(dirname "$0") 2>/dev/null || ++ # Try the directory containing this script, then the parent directory. ++ ac_confdir=`$as_dirname -- "$0" || + $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$0" : 'X\(/\)' \| . 2>/dev/null || + echo X"$0" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + srcdir=$ac_confdir +- if test ! -r $srcdir/$ac_unique_file; then ++ if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi + else + ac_srcdir_defaulted=no + fi +-if test ! -r $srcdir/$ac_unique_file; then +- if test "$ac_srcdir_defaulted" = yes; then +- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 +- { (exit 1); exit 1; }; } +- else +- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 +- { (exit 1); exit 1; }; } +- fi +-fi +-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || +- { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 +- { (exit 1); exit 1; }; } +-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +-ac_env_build_alias_set=${build_alias+set} +-ac_env_build_alias_value=$build_alias +-ac_cv_env_build_alias_set=${build_alias+set} +-ac_cv_env_build_alias_value=$build_alias +-ac_env_host_alias_set=${host_alias+set} +-ac_env_host_alias_value=$host_alias +-ac_cv_env_host_alias_set=${host_alias+set} +-ac_cv_env_host_alias_value=$host_alias +-ac_env_target_alias_set=${target_alias+set} +-ac_env_target_alias_value=$target_alias +-ac_cv_env_target_alias_set=${target_alias+set} +-ac_cv_env_target_alias_value=$target_alias +-ac_env_CC_set=${CC+set} +-ac_env_CC_value=$CC +-ac_cv_env_CC_set=${CC+set} +-ac_cv_env_CC_value=$CC +-ac_env_CFLAGS_set=${CFLAGS+set} +-ac_env_CFLAGS_value=$CFLAGS +-ac_cv_env_CFLAGS_set=${CFLAGS+set} +-ac_cv_env_CFLAGS_value=$CFLAGS +-ac_env_LDFLAGS_set=${LDFLAGS+set} +-ac_env_LDFLAGS_value=$LDFLAGS +-ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +-ac_cv_env_LDFLAGS_value=$LDFLAGS +-ac_env_CPPFLAGS_set=${CPPFLAGS+set} +-ac_env_CPPFLAGS_value=$CPPFLAGS +-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +-ac_cv_env_CPPFLAGS_value=$CPPFLAGS +-ac_env_CPP_set=${CPP+set} +-ac_env_CPP_value=$CPP +-ac_cv_env_CPP_set=${CPP+set} +-ac_cv_env_CPP_value=$CPP ++if test ! -r "$srcdir/$ac_unique_file"; then ++ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." ++ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 ++ { (exit 1); exit 1; }; } ++fi ++ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ++ac_abs_confdir=`( ++ cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 ++ { (exit 1); exit 1; }; } ++ pwd)` ++# When building in place, set srcdir=. ++if test "$ac_abs_confdir" = "$ac_pwd"; then ++ srcdir=. ++fi ++# Remove unnecessary trailing slashes from srcdir. ++# Double slashes in file names in object file debugging info ++# mess up M-x gdb in Emacs. ++case $srcdir in ++*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; ++esac ++for ac_var in $ac_precious_vars; do ++ eval ac_env_${ac_var}_set=\${${ac_var}+set} ++ eval ac_env_${ac_var}_value=\$${ac_var} ++ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} ++ eval ac_cv_env_${ac_var}_value=\$${ac_var} ++done + + # + # Report the --help message. +@@ -798,9 +1288,6 @@ Configuration: + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +-_ACEOF +- +- cat <<_ACEOF + Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] +@@ -818,15 +1305,22 @@ Fine tuning of the installation director + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] +- --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] +- --infodir=DIR info documentation [PREFIX/info] +- --mandir=DIR man documentation [PREFIX/man] ++ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] ++ --datadir=DIR read-only architecture-independent data [DATAROOTDIR] ++ --infodir=DIR info documentation [DATAROOTDIR/info] ++ --localedir=DIR locale-dependent data [DATAROOTDIR/locale] ++ --mandir=DIR man documentation [DATAROOTDIR/man] ++ --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] ++ --htmldir=DIR html documentation [DOCDIR] ++ --dvidir=DIR dvi documentation [DOCDIR] ++ --pdfdir=DIR pdf documentation [DOCDIR] ++ --psdir=DIR ps documentation [DOCDIR] + _ACEOF + + cat <<\_ACEOF +@@ -876,126 +1370,100 @@ Some influential environment variables: + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory +- CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have +- headers in a nonstandard directory ++ LIBS libraries to pass to the linker, e.g. -l ++ CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if ++ you have headers in a nonstandard directory ++ YACC The `Yet Another C Compiler' implementation to use. Defaults to ++ the first program found out of: `bison -y', `byacc', `yacc'. ++ YFLAGS The list of arguments that will be passed by default to $YACC. ++ This script will default YFLAGS to the empty string to avoid a ++ default value of `-d' given by some make applications. + CPP C preprocessor + + Use these variables to override the choices made by `configure' or to help + it to find libraries and programs with nonstandard names/locations. + + _ACEOF ++ac_status=$? + fi + + if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. +- ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue +- test -d $ac_dir || continue ++ test -d "$ac_dir" || continue + ac_builddir=. + +-if test "$ac_dir" != .; then ++case "$ac_dir" in ++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; ++*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi ++ # A ".." for each directory in $ac_dir_suffix. ++ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` ++ case $ac_top_builddir_sub in ++ "") ac_top_builddir_sub=. ac_top_build_prefix= ;; ++ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; ++ esac ;; ++esac ++ac_abs_top_builddir=$ac_pwd ++ac_abs_builddir=$ac_pwd$ac_dir_suffix ++# for backward compatibility: ++ac_top_builddir=$ac_top_build_prefix + + case $srcdir in +- .) # No --srcdir option. We are building in place. ++ .) # We are building in place. + ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. ++ ac_top_srcdir=$ac_top_builddir_sub ++ ac_abs_top_srcdir=$ac_pwd ;; ++ [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac +- +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac +- +- cd $ac_dir +- # Check for guested configure; otherwise get Cygnus style configure. +- if test -f $ac_srcdir/configure.gnu; then +- echo +- $SHELL $ac_srcdir/configure.gnu --help=recursive +- elif test -f $ac_srcdir/configure; then +- echo +- $SHELL $ac_srcdir/configure --help=recursive +- elif test -f $ac_srcdir/configure.ac || +- test -f $ac_srcdir/configure.in; then +- echo +- $ac_configure --help ++ ac_top_srcdir=$srcdir ++ ac_abs_top_srcdir=$srcdir ;; ++ *) # Relative name. ++ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ++ ac_top_srcdir=$ac_top_build_prefix$srcdir ++ ac_abs_top_srcdir=$ac_pwd/$srcdir ;; ++esac ++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + -+ fixP->tc_fix_data.ifield = ifield; -+ fixP->tc_fix_data.align = align; -+ /* these are only used if the fixup can actually be resolved */ -+ fixP->tc_fix_data.min = -32768; -+ fixP->tc_fix_data.max = 32767; -+} ++ cd "$ac_dir" || { ac_status=$?; continue; } ++ # Check for guested configure. ++ if test -f "$ac_srcdir/configure.gnu"; then ++ echo && ++ $SHELL "$ac_srcdir/configure.gnu" --help=recursive ++ elif test -f "$ac_srcdir/configure"; then ++ echo && ++ $SHELL "$ac_srcdir/configure" --help=recursive + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 +- fi +- cd $ac_popdir ++ fi || ac_status=$? ++ cd "$ac_pwd" || { ac_status=$?; break; } + done + fi + +-test -n "$ac_init_help" && exit 0 ++test -n "$ac_init_help" && exit $ac_status + if $ac_init_version; then + cat <<\_ACEOF ++configure ++generated by GNU Autoconf 2.61 + +-Copyright (C) 2003 Free Software Foundation, Inc. ++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, ++2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + This configure script is free software; the Free Software Foundation + gives unlimited permission to copy, distribute and modify it. + _ACEOF +- exit 0 ++ exit + fi +-exec 5>config.log +-cat >&5 <<_ACEOF ++cat >config.log <<_ACEOF + This file contains any messages produced by compilers while + running configure, to aid debugging if configure makes a mistake. + + It was created by $as_me, which was +-generated by GNU Autoconf 2.59. Invocation command line was ++generated by GNU Autoconf 2.61. Invocation command line was + + $ $0 $@ + + _ACEOF ++exec 5>>config.log + { + cat <<_ASUNAME + ## --------- ## +@@ -1014,7 +1482,7 @@ uname -v = `(uname -v) 2>/dev/null || ec + /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` + /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` + /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +-hostinfo = `(hostinfo) 2>/dev/null || echo unknown` ++/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` + /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` + /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` + /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` +@@ -1028,6 +1496,7 @@ do + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" + done ++IFS=$as_save_IFS + + } >&5 + +@@ -1049,7 +1518,6 @@ _ACEOF + ac_configure_args= + ac_configure_args0= + ac_configure_args1= +-ac_sep= + ac_must_keep_next=false + for ac_pass in 1 2 + do +@@ -1060,7 +1528,7 @@ do + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; +- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ++ *\'*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in +@@ -1082,9 +1550,7 @@ do + -* ) ac_must_keep_next=true ;; + esac + fi +- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" +- # Get rid of the leading space. +- ac_sep=" " ++ ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +@@ -1095,8 +1561,8 @@ $as_unset ac_configure_args1 || test "${ + # When interrupted or exit'd, cleanup temporary files, and complete + # config.log. We remove comments because anyway the quotes in there + # would cause problems or look ugly. +-# WARNING: Be sure not to use single quotes in there, as some shells, +-# such as our DU 5.0 friend, will then `close' the trap. ++# WARNING: Use '\'' to represent an apostrophe within the trap. ++# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. + trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { +@@ -1109,20 +1575,34 @@ trap 'exit_status=$? + _ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +-{ ++( ++ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do ++ eval ac_val=\$$ac_var ++ case $ac_val in #( ++ *${as_nl}*) ++ case $ac_var in #( ++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 ++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; ++ esac ++ case $ac_var in #( ++ _ | IFS | as_nl) ;; #( ++ *) $as_unset $ac_var ;; ++ esac ;; ++ esac ++ done + (set) 2>&1 | +- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in +- *ac_space=\ *) ++ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( ++ *${as_nl}ac_space=\ *) + sed -n \ +- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; +- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" +- ;; ++ "s/'\''/'\''\\\\'\'''\''/g; ++ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ++ ;; #( + *) +- sed -n \ +- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; +- esac; +-} ++ esac | ++ sort ++) + echo + + cat <<\_ASBOX +@@ -1133,22 +1613,28 @@ _ASBOX + echo + for ac_var in $ac_subst_vars + do +- eval ac_val=$`echo $ac_var` +- echo "$ac_var='"'"'$ac_val'"'"'" ++ eval ac_val=\$$ac_var ++ case $ac_val in ++ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; ++ esac ++ echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +-## ------------- ## +-## Output files. ## +-## ------------- ## ++## ------------------- ## ++## File substitutions. ## ++## ------------------- ## + _ASBOX + echo + for ac_var in $ac_subst_files + do +- eval ac_val=$`echo $ac_var` +- echo "$ac_var='"'"'$ac_val'"'"'" ++ eval ac_val=\$$ac_var ++ case $ac_val in ++ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; ++ esac ++ echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi +@@ -1160,26 +1646,24 @@ _ASBOX + ## ----------- ## + _ASBOX + echo +- sed "/^$/d" confdefs.h | sort ++ cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 +- rm -f core *.core && +- rm -rf conftest* confdefs* conf$$* $ac_clean_files && ++ rm -f core *.core core.conftest.* && ++ rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +- ' 0 ++' 0 + for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + done + ac_signal=0 + + # confdefs.h avoids OS command line length limits that DEFS can exceed. +-rm -rf conftest* confdefs.h +-# AIX cpp loses on an empty file, so make sure it contains at least a newline. +-echo >confdefs.h ++rm -f -r conftest* confdefs.h + + # Predefined preprocessor variables. + +@@ -1210,14 +1694,17 @@ _ACEOF + + # Let the site file select an alternate cache file if it wants to. + # Prefer explicitly selected file to automatically selected ones. +-if test -z "$CONFIG_SITE"; then +- if test "x$prefix" != xNONE; then +- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" +- else +- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" +- fi ++if test -n "$CONFIG_SITE"; then ++ set x "$CONFIG_SITE" ++elif test "x$prefix" != xNONE; then ++ set x "$prefix/share/config.site" "$prefix/etc/config.site" ++else ++ set x "$ac_default_prefix/share/config.site" \ ++ "$ac_default_prefix/etc/config.site" + fi +-for ac_site_file in $CONFIG_SITE; do ++shift ++for ac_site_file ++do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 + echo "$as_me: loading site script $ac_site_file" >&6;} +@@ -1233,8 +1720,8 @@ if test -r "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 + echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in +- [\\/]* | ?:[\\/]* ) . $cache_file;; +- *) . ./$cache_file;; ++ [\\/]* | ?:[\\/]* ) . "$cache_file";; ++ *) . "./$cache_file";; + esac + fi + else +@@ -1246,12 +1733,11 @@ fi + # Check that the precious variables saved in the cache have kept the same + # value. + ac_cache_corrupted=false +-for ac_var in `(set) 2>&1 | +- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do ++for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set +- eval ac_old_val="\$ac_cv_env_${ac_var}_value" +- eval ac_new_val="\$ac_env_${ac_var}_value" ++ eval ac_old_val=\$ac_cv_env_${ac_var}_value ++ eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +@@ -1276,8 +1762,7 @@ echo "$as_me: current value: $ac_new_v + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in +- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) +- ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; ++ *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in +@@ -1294,12 +1779,6 @@ echo "$as_me: error: run \`make distclea + { (exit 1); exit 1; }; } + fi + +-ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +- + + + +@@ -1316,108 +1795,163 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + ++ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + ac_aux_dir= +-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do +- if test -f $ac_dir/install-sh; then ++for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do ++ if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break +- elif test -f $ac_dir/install.sh; then ++ elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break +- elif test -f $ac_dir/shtool; then ++ elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi + done + if test -z "$ac_aux_dir"; then +- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} ++ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 ++echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} + { (exit 1); exit 1; }; } + fi +-ac_config_guess="$SHELL $ac_aux_dir/config.guess" +-ac_config_sub="$SHELL $ac_aux_dir/config.sub" +-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + -+static void -+avr32_call_convert_frag(bfd *abfd ATTRIBUTE_UNUSED, -+ segT segment ATTRIBUTE_UNUSED, -+ fragS *fragP) -+{ -+ const struct avr32_opcode *opc = NULL; -+ const struct avr32_ifield *ifield; -+ bfd_reloc_code_real_type r_type; -+ symbolS *symbol; -+ offsetT offset; -+ fixS *fixP; -+ bfd_vma value; -+ int pcrel = 0, align = 0; -+ char *p; ++# These three variables are undocumented and unsupported, ++# and are intended to be withdrawn in a future Autoconf release. ++# They can cause serious problems if a builder's source tree is in a directory ++# whose full name contains unusual characters. ++ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ++ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ++ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + -+ symbol = fragP->fr_symbol; -+ offset = fragP->fr_offset; -+ r_type = BFD_RELOC_NONE; -+ p = fragP->fr_opcode; + + # Make sure we can run config.sub. +-$ac_config_sub sun4 >/dev/null 2>&1 || +- { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +-echo "$as_me: error: cannot run $ac_config_sub" >&2;} ++$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || ++ { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 ++echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} + { (exit 1); exit 1; }; } + +-echo "$as_me:$LINENO: checking build system type" >&5 +-echo $ECHO_N "checking build system type... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking build system type" >&5 ++echo $ECHO_N "checking build system type... $ECHO_C" >&6; } + if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_build_alias=$build_alias +-test -z "$ac_cv_build_alias" && +- ac_cv_build_alias=`$ac_config_guess` +-test -z "$ac_cv_build_alias" && ++ ac_build_alias=$build_alias ++test "x$ac_build_alias" = x && ++ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` ++test "x$ac_build_alias" = x && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 + echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || +- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} ++ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || ++ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 ++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + + fi +-echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +-echo "${ECHO_T}$ac_cv_build" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 ++echo "${ECHO_T}$ac_cv_build" >&6; } ++case $ac_cv_build in ++*-*-*) ;; ++*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 ++echo "$as_me: error: invalid value of canonical build" >&2;} ++ { (exit 1); exit 1; }; };; ++esac + build=$ac_cv_build +-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++ac_save_IFS=$IFS; IFS='-' ++set x $ac_cv_build ++shift ++build_cpu=$1 ++build_vendor=$2 ++shift; shift ++# Remember, the first character of IFS is used to create $*, ++# except with old shells: ++build_os=$* ++IFS=$ac_save_IFS ++case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +-echo "$as_me:$LINENO: checking host system type" >&5 +-echo $ECHO_N "checking host system type... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking host system type" >&5 ++echo $ECHO_N "checking host system type... $ECHO_C" >&6; } + if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_host_alias=$host_alias +-test -z "$ac_cv_host_alias" && +- ac_cv_host_alias=$ac_cv_build_alias +-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || +- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} ++ if test "x$host_alias" = x; then ++ ac_cv_host=$ac_cv_build ++else ++ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || ++ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 ++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} + { (exit 1); exit 1; }; } ++fi + + fi +-echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +-echo "${ECHO_T}$ac_cv_host" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 ++echo "${ECHO_T}$ac_cv_host" >&6; } ++case $ac_cv_host in ++*-*-*) ;; ++*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 ++echo "$as_me: error: invalid value of canonical host" >&2;} ++ { (exit 1); exit 1; }; };; ++esac + host=$ac_cv_host +-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++ac_save_IFS=$IFS; IFS='-' ++set x $ac_cv_host ++shift ++host_cpu=$1 ++host_vendor=$2 ++shift; shift ++# Remember, the first character of IFS is used to create $*, ++# except with old shells: ++host_os=$* ++IFS=$ac_save_IFS ++case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +-echo "$as_me:$LINENO: checking target system type" >&5 +-echo $ECHO_N "checking target system type... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking target system type" >&5 ++echo $ECHO_N "checking target system type... $ECHO_C" >&6; } + if test "${ac_cv_target+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_target_alias=$target_alias +-test "x$ac_cv_target_alias" = "x" && +- ac_cv_target_alias=$ac_cv_host_alias +-ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || +- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5 +-echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} ++ if test "x$target_alias" = x; then ++ ac_cv_target=$ac_cv_host ++else ++ ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || ++ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 ++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} + { (exit 1); exit 1; }; } ++fi + + fi +-echo "$as_me:$LINENO: result: $ac_cv_target" >&5 +-echo "${ECHO_T}$ac_cv_target" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5 ++echo "${ECHO_T}$ac_cv_target" >&6; } ++case $ac_cv_target in ++*-*-*) ;; ++*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 ++echo "$as_me: error: invalid value of canonical target" >&2;} ++ { (exit 1); exit 1; }; };; ++esac + target=$ac_cv_target +-target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +-target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +-target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++ac_save_IFS=$IFS; IFS='-' ++set x $ac_cv_target ++shift ++target_cpu=$1 ++target_vendor=$2 ++shift; shift ++# Remember, the first character of IFS is used to create $*, ++# except with old shells: ++target_os=$* ++IFS=$ac_save_IFS ++case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + + # The aliases save the names the user supplied, while $host etc. +@@ -1434,8 +1968,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. + set dummy ${ac_tool_prefix}gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1448,32 +1982,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+ pr_debug("%s:%d: call_convert_frag, subtype: %d, fix: %d, var: %d\n", -+ fragP->fr_file, fragP->fr_line, -+ fragP->fr_subtype, fragP->fr_fix, fragP->fr_var); + fi + if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. + set dummy gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1486,36 +2022,51 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + else + CC="$ac_cv_prog_CC" + fi + + if test -z "$CC"; then +- if test -n "$ac_tool_prefix"; then +- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + set dummy ${ac_tool_prefix}cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1528,74 +2079,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-fi +-if test -z "$ac_cv_prog_CC"; then +- ac_ct_CC=$CC +- # Extract the first word of "cc", so it can be a program name with args. +-set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$ac_ct_CC"; then +- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_ac_ct_CC="cc" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-ac_ct_CC=$ac_cv_prog_ac_ct_CC +-if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC +-else +- CC="$ac_cv_prog_CC" +-fi + ++ fi + fi + if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. + set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1609,7 +2120,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue +@@ -1620,6 +2131,7 @@ do + fi + done + done ++IFS=$as_save_IFS + + if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. +@@ -1637,22 +2149,23 @@ fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+ switch (fragP->fr_subtype) -+ { -+ case CALL_SUBTYPE_RCALL1: -+ opc = &avr32_opc_table[AVR32_OPC_RCALL1]; -+ /* fall through */ -+ case CALL_SUBTYPE_RCALL2: -+ if (!opc) -+ opc = &avr32_opc_table[AVR32_OPC_RCALL2]; -+ ifield = opc->fields[0]; -+ r_type = opc->reloc_type; -+ pcrel = 1; -+ align = 1; -+ break; -+ case CALL_SUBTYPE_MCALL_CP: -+ opc = &avr32_opc_table[AVR32_OPC_MCALL]; -+ opc->fields[0]->insert(opc->fields[0], p, AVR32_REG_PC); -+ ifield = opc->fields[1]; -+ r_type = BFD_RELOC_AVR32_CPCALL; -+ symbol = fragP->tc_frag_data.pool->symbol; -+ offset = fragP->tc_frag_data.pool->literals[fragP->tc_frag_data.pool_entry].offset; -+ assert(fragP->tc_frag_data.pool->literals[fragP->tc_frag_data.pool_entry].refcount > 0); -+ pcrel = 1; -+ align = 2; -+ break; -+ case CALL_SUBTYPE_MCALL_GOT: -+ opc = &avr32_opc_table[AVR32_OPC_MCALL]; -+ opc->fields[0]->insert(opc->fields[0], p, 6); -+ ifield = opc->fields[1]; -+ r_type = BFD_RELOC_AVR32_GOT18SW; -+ break; -+ case CALL_SUBTYPE_MCALL_LARGE: -+ assert(fragP->fr_var == 10); -+ /* ld.w lr, r6[lr << 2] */ -+ opc = &avr32_opc_table[AVR32_OPC_LD_W5]; -+ bfd_putb32(opc->value, p + 4); -+ opc->fields[0]->insert(opc->fields[0], p + 4, AVR32_REG_LR); -+ opc->fields[1]->insert(opc->fields[1], p + 4, 6); -+ opc->fields[2]->insert(opc->fields[2], p + 4, AVR32_REG_LR); -+ opc->fields[3]->insert(opc->fields[3], p + 4, 2); + fi + if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. + set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1665,36 +2178,38 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+ /* icall lr */ -+ opc = &avr32_opc_table[AVR32_OPC_ICALL]; -+ bfd_putb16(opc->value >> 16, p + 8); -+ opc->fields[0]->insert(opc->fields[0], p + 8, AVR32_REG_LR); + test -n "$CC" && break + done + fi + if test -z "$CC"; then + ac_ct_CC=$CC +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1707,29 +2222,45 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+ /* mov lr, (got_offset / 4) */ -+ opc = &avr32_opc_table[AVR32_OPC_MOV2]; -+ opc->fields[0]->insert(opc->fields[0], p, AVR32_REG_LR); -+ ifield = opc->fields[1]; -+ r_type = BFD_RELOC_AVR32_GOTCALL; -+ break; -+ default: -+ BAD_CASE(fragP->fr_subtype); -+ } + test -n "$ac_ct_CC" && break + done + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + fi + + fi +@@ -1742,21 +2273,35 @@ See \`config.log' for more details." >&2 + { (exit 1); exit 1; }; } + + # Provide some information about the compiler. +-echo "$as_me:$LINENO:" \ +- "checking for C compiler version" >&5 ++echo "$as_me:$LINENO: checking for C compiler version" >&5 + ac_compiler=`set X $ac_compile; echo $2` +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 +- (eval $ac_compiler --version &5) 2>&5 ++{ (ac_try="$ac_compiler --version >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 +- (eval $ac_compiler -v &5) 2>&5 ++{ (ac_try="$ac_compiler -v >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 +- (eval $ac_compiler -V &5) 2>&5 ++{ (ac_try="$ac_compiler -V >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +@@ -1781,47 +2326,77 @@ ac_clean_files="$ac_clean_files a.out a. + # Try to create an executable without -o first, disregard a.out. + # It will help us diagnose broken compilers, and finding out an intuition + # of exeext. +-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 ++echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } + ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 +- (eval $ac_link_default) 2>&5 ++# ++# List of possible output files, starting from the most likely. ++# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) ++# only as a last resort. b.out is created by i960 compilers. ++ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' ++# ++# The IRIX 6 linker writes into existing files which may not be ++# executable, retaining their permissions. Remove them first so a ++# subsequent execution test works. ++ac_rmfiles= ++for ac_file in $ac_files ++do ++ case $ac_file in ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; ++ * ) ac_rmfiles="$ac_rmfiles $ac_file";; ++ esac ++done ++rm -f $ac_rmfiles + -+ /* Insert the opcode and clear the variable ifield */ -+ value = bfd_getb32(p); -+ value &= ~(opc->mask | ifield->mask); -+ value |= opc->value; -+ bfd_putb32(value, p); ++if { (ac_try="$ac_link_default" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link_default") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then +- # Find the output, starting from the most likely. This scheme is +-# not robust to junk in `.', hence go to wildcards (a.*) only as a last +-# resort. +- +-# Be careful to initialize this variable, since it used to be cached. +-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +-ac_cv_exeext= +-# b.out is created by i960 compilers. +-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out ++ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. ++# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' ++# in a Makefile. We should not override ac_cv_exeext if it was cached, ++# so that the user can short-circuit this test for compilers unknown to ++# Autoconf. ++for ac_file in $ac_files '' + do + test -f "$ac_file" || continue + case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) +- ;; +- conftest.$ac_ext ) +- # This is the source file. ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) +- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` +- # FIXME: I believe we export ac_cv_exeext for Libtool, +- # but it would be cool to find out if it's true. Does anybody +- # maintain Libtool? --akim. +- export ac_cv_exeext ++ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; ++ then :; else ++ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` ++ fi ++ # We set ac_cv_exeext here because the later test for it is not ++ # safe: cross compilers may not add the suffix if given an `-o' ++ # argument, so we may need to know it at that point already. ++ # Even if this section looks crufty: it has the advantage of ++ # actually working. + break;; + * ) + break;; + esac + done ++test "$ac_cv_exeext" = no && ac_cv_exeext= + -+ fragP->fr_fix += fragP->fr_var - CALL_INITIAL_SIZE; + else ++ ac_file='' ++fi + -+ if (fragP->fr_next -+ && ((offsetT)(fragP->fr_next->fr_address - fragP->fr_address) -+ != fragP->fr_fix)) -+ { -+ fprintf(stderr, "%s:%d: fr_fix %lu is wrong! fr_var=%lu, r_type=%s\n", -+ fragP->fr_file, fragP->fr_line, -+ fragP->fr_fix, fragP->fr_var, bfd_get_reloc_code_name(r_type)); -+ fprintf(stderr, "fr_fix should be %ld. next frag is %s:%d\n", -+ (offsetT)(fragP->fr_next->fr_address - fragP->fr_address), -+ fragP->fr_next->fr_file, fragP->fr_next->fr_line); -+ } ++{ echo "$as_me:$LINENO: result: $ac_file" >&5 ++echo "${ECHO_T}$ac_file" >&6; } ++if test -z "$ac_file"; then + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +@@ -1833,19 +2408,21 @@ See \`config.log' for more details." >&2 + fi + + ac_exeext=$ac_cv_exeext +-echo "$as_me:$LINENO: result: $ac_file" >&5 +-echo "${ECHO_T}$ac_file" >&6 + +-# Check the compiler produces executables we can run. If not, either ++# Check that the compiler produces executables we can run. If not, either + # the compiler is broken, or we cross compile. +-echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 ++echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } + # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 + # If not cross compiling, check that we can run a simple program. + if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -1864,22 +2441,27 @@ See \`config.log' for more details." >&2 + fi + fi + fi +-echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++{ echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + + rm -f a.out a.exe conftest$ac_cv_exeext b.out + ac_clean_files=$ac_clean_files_save +-# Check the compiler produces executables we can run. If not, either ++# Check that the compiler produces executables we can run. If not, either + # the compiler is broken, or we cross compile. +-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +-echo "$as_me:$LINENO: result: $cross_compiling" >&5 +-echo "${ECHO_T}$cross_compiling" >&6 +- +-echo "$as_me:$LINENO: checking for suffix of executables" >&5 +-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 ++echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } ++{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 ++echo "${ECHO_T}$cross_compiling" >&6; } + -+ fixP = fix_new(fragP, fragP->fr_fix - fragP->fr_var, fragP->fr_var, -+ symbol, offset, pcrel, r_type); ++{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 ++echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then +@@ -1890,9 +2472,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_l + for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` +- export ac_cv_exeext + break;; + * ) break;; + esac +@@ -1906,14 +2487,14 @@ See \`config.log' for more details." >&2 + fi + + rm -f conftest$ac_cv_exeext +-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +-echo "${ECHO_T}$ac_cv_exeext" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 ++echo "${ECHO_T}$ac_cv_exeext" >&6; } + + rm -f conftest.$ac_ext + EXEEXT=$ac_cv_exeext + ac_exeext=$EXEEXT +-echo "$as_me:$LINENO: checking for suffix of object files" >&5 +-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 ++echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } + if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1933,14 +2514,20 @@ main () + } + _ACEOF + rm -f conftest.o conftest.obj +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>&5 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then +- for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do ++ for ac_file in conftest.o conftest.obj conftest.*; do ++ test -f "$ac_file" || continue; + case $ac_file in +- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +@@ -1958,12 +2545,12 @@ fi + + rm -f conftest.$ac_cv_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +-echo "${ECHO_T}$ac_cv_objext" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 ++echo "${ECHO_T}$ac_cv_objext" >&6; } + OBJEXT=$ac_cv_objext + ac_objext=$OBJEXT +-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 ++echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } + if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -1986,50 +2573,49 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_compiler_gnu=no ++ ac_compiler_gnu=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ /* Revert fix_new brain damage. "dot_value" is the value of PC at -+ the point of the fixup, relative to the frag address. fix_new() -+ and friends think they are only being called during the assembly -+ pass, not during relaxation or similar, so fx_dot_value, fx_file -+ and fx_line are all initialized to the wrong value. But we don't -+ know the size of the fixup until now, so we really can't live up -+ to the assumptions these functions make about the target. What -+ do these functions think the "where" and "frag" argument mean -+ anyway? */ -+ fixP->fx_dot_value = fragP->fr_fix - opc->size; -+ fixP->fx_file = fragP->fr_file; -+ fixP->fx_line = fragP->fr_line; ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_c_compiler_gnu=$ac_compiler_gnu + + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 ++echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } + GCC=`test $ac_compiler_gnu = yes && echo yes` + ac_test_CFLAGS=${CFLAGS+set} + ac_save_CFLAGS=$CFLAGS +-CFLAGS="-g" +-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 ++echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } + if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- cat >conftest.$ac_ext <<_ACEOF ++ ac_save_c_werror_flag=$ac_c_werror_flag ++ ac_c_werror_flag=yes ++ ac_cv_prog_cc_g=no ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext +@@ -2045,38 +2631,118 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_g=yes ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 + -+ fixP->tc_fix_data.ifield = ifield; -+ fixP->tc_fix_data.align = align; -+ /* these are only used if the fixup can actually be resolved */ -+ fixP->tc_fix_data.min = -2097152; -+ fixP->tc_fix_data.max = 2097150; -+} ++ CFLAGS="" ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ + -+static void -+avr32_cpool_convert_frag(bfd *abfd ATTRIBUTE_UNUSED, -+ segT segment ATTRIBUTE_UNUSED, -+ fragS *fragP) ++int ++main () +{ -+ struct cpool *pool; -+ addressT address; -+ unsigned int entry; -+ char *p; -+ char sym_name[20]; -+ -+ /* Did we get rid of the frag altogether? */ -+ if (!fragP->fr_var) -+ return; -+ -+ pool = fragP->tc_frag_data.pool; -+ address = fragP->fr_address + fragP->fr_fix; -+ p = fragP->fr_literal + fragP->fr_fix; -+ -+ sprintf(sym_name, "$$cp_\002%x", pool->id); -+ symbol_locate(pool->symbol, sym_name, pool->section, fragP->fr_fix, fragP); -+ symbol_table_insert(pool->symbol); + -+ for (entry = 0; entry < pool->next_free_entry; entry++) -+ { -+ if (pool->literals[entry].refcount > 0) -+ { -+ fix_new_exp(fragP, fragP->fr_fix, 4, &pool->literals[entry].exp, -+ FALSE, BFD_RELOC_AVR32_32_CPENT); -+ fragP->fr_fix += 4; -+ } -+ } ++ ; ++ return 0; +} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ : ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 + -+static struct avr32_relaxer avr32_default_relaxer = { -+ .estimate_size = avr32_default_estimate_size_before_relax, -+ .relax_frag = avr32_default_relax_frag, -+ .convert_frag = avr32_default_convert_frag, -+}; -+static struct avr32_relaxer avr32_lda_relaxer = { -+ .estimate_size = avr32_lda_estimate_size_before_relax, -+ .relax_frag = avr32_lda_relax_frag, -+ .convert_frag = avr32_lda_convert_frag, -+}; -+static struct avr32_relaxer avr32_call_relaxer = { -+ .estimate_size = avr32_call_estimate_size_before_relax, -+ .relax_frag = avr32_call_relax_frag, -+ .convert_frag = avr32_call_convert_frag, -+}; -+static struct avr32_relaxer avr32_cpool_relaxer = { -+ .estimate_size = avr32_cpool_estimate_size_before_relax, -+ .relax_frag = avr32_cpool_relax_frag, -+ .convert_frag = avr32_cpool_convert_frag, -+}; ++ ac_c_werror_flag=$ac_save_c_werror_flag ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ + -+static void s_cpool(int arg ATTRIBUTE_UNUSED) ++int ++main () +{ -+ struct cpool *pool; -+ unsigned int max_size; -+ char *buf; -+ -+ pool = find_cpool(now_seg, now_subseg); -+ if (!pool || !pool->symbol || pool->next_free_entry == 0) -+ return; -+ -+ /* Make sure the constant pool is properly aligned */ -+ frag_align_code(2, 0); + -+ /* Assume none of the entries are discarded, and that we need the -+ maximum amount of alignment. But we're not going to allocate -+ anything up front. */ -+ max_size = pool->next_free_entry * 4 + 2; -+ frag_grow(max_size); -+ buf = frag_more(0); -+ -+ frag_now->tc_frag_data.relaxer = &avr32_cpool_relaxer; -+ frag_now->tc_frag_data.pool = pool; -+ -+ symbol_set_frag(pool->symbol, frag_now); -+ -+ /* Assume zero initial size, allowing other relaxers to be -+ optimistic about things. */ -+ frag_var(rs_machine_dependent, max_size, 0, -+ 0, pool->symbol, 0, NULL); -+ -+ /* Mark the pool as empty. */ -+ pool->used = 1; ++ ; ++ return 0; +} ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_prog_cc_g=no + -+/* The location from which a PC relative jump should be calculated, -+ given a PC relative reloc. */ -+ -+long -+md_pcrel_from_section (fixS *fixP, segT sec) -+{ -+ pr_debug("pcrel_from_section, fx_offset = %d\n", fixP->fx_offset); ++fi + -+ if (fixP->fx_addsy != NULL -+ && (! S_IS_DEFINED (fixP->fx_addsy) -+ || S_GET_SEGMENT (fixP->fx_addsy) != sec -+ || S_FORCE_RELOC(fixP->fx_addsy, 1))) -+ { -+ pr_debug("Unknown pcrel symbol: %s\n", S_GET_NAME(fixP->fx_addsy)); ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi + -+ /* The symbol is undefined (or is defined but not in this section). -+ Let the linker figure it out. */ -+ return 0; -+ } ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ pr_debug("pcrel from %x + %x, symbol: %s (%x)\n", -+ fixP->fx_frag->fr_address, fixP->fx_where, -+ fixP->fx_addsy?S_GET_NAME(fixP->fx_addsy):"(null)", -+ fixP->fx_addsy?S_GET_VALUE(fixP->fx_addsy):0); ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_c_werror_flag=$ac_save_c_werror_flag + fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } + if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS + elif test $ac_cv_prog_cc_g = yes; then +@@ -2092,12 +2758,12 @@ else + CFLAGS= + fi + fi +-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +-if test "${ac_cv_prog_cc_stdc+set}" = set; then ++{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 ++echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } ++if test "${ac_cv_prog_cc_c89+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_cv_prog_cc_stdc=no ++ ac_cv_prog_cc_c89=no + ac_save_CC=$CC + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -2131,12 +2797,17 @@ static char *f (char * (*g) (char **, in + /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated +- as 'x'. The following induces an error, until -std1 is added to get ++ as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something +- that's true only with -std1. */ ++ that's true only with -std. */ + int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + ++/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters ++ inside strings and character constants. */ ++#define FOO(x) 'x' ++int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + -+ return ((fixP->fx_frag->fr_address + fixP->fx_where) -+ & (~0UL << fixP->tc_fix_data.align)); -+} + int test (int i, double x); + struct s1 {int (*f) (int a);}; + struct s2 {int (*f) (double a);}; +@@ -2151,335 +2822,144 @@ return f (e, argv, 0) != argv[0] || f + return 0; + } + _ACEOF +-# Don't try gcc -ansi; that turns off useful extensions and +-# breaks some systems' header files. +-# AIX -qlanglvl=ansi +-# Ultrix and OSF/1 -std1 +-# HP-UX 10.20 and later -Ae +-# HP-UX older versions -Aa -D_HPUX_SOURCE +-# SVR4 -Xc -D__EXTENSIONS__ +-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" ++for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ ++ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" + do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_prog_cc_stdc=$ac_arg +-break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_c89=$ac_arg + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + + -+valueT -+md_section_align (segT segment, valueT size) -+{ -+ int align = bfd_get_section_alignment (stdoutput, segment); -+ return ((size + (1 << align) - 1) & (-1 << align)); -+} + fi +-rm -f conftest.err conftest.$ac_objext + -+static int syntax_matches(const struct avr32_syntax *syntax, -+ char *str) -+{ -+ int i; ++rm -f core conftest.err conftest.$ac_objext ++ test "x$ac_cv_prog_cc_c89" != "xno" && break + done +-rm -f conftest.$ac_ext conftest.$ac_objext ++rm -f conftest.$ac_ext + CC=$ac_save_CC + + fi +- +-case "x$ac_cv_prog_cc_stdc" in +- x|xno) +- echo "$as_me:$LINENO: result: none needed" >&5 +-echo "${ECHO_T}none needed" >&6 ;; ++# AC_CACHE_VAL ++case "x$ac_cv_prog_cc_c89" in ++ x) ++ { echo "$as_me:$LINENO: result: none needed" >&5 ++echo "${ECHO_T}none needed" >&6; } ;; ++ xno) ++ { echo "$as_me:$LINENO: result: unsupported" >&5 ++echo "${ECHO_T}unsupported" >&6; } ;; + *) +- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 +- CC="$CC $ac_cv_prog_cc_stdc" ;; ++ CC="$CC $ac_cv_prog_cc_c89" ++ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; + esac + +-# Some people use a C++ compiler to compile C. Since we use `exit', +-# in C++ we need to declare it. In case someone uses the same compiler +-# for both compiling C and C++ we need to have the C++ compiler decide +-# the declaration of exit, since it's the most demanding environment. + -+ pr_debug("syntax %d matches `%s'?\n", syntax->id, str); ++ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu + -+ if (syntax->nr_operands < 0) -+ { -+ struct avr32_operand *op; -+ int optype; + -+ for (i = 0; i < (-syntax->nr_operands - 1); i++) -+ { -+ char *p; -+ char c; ++{ echo "$as_me:$LINENO: checking for library containing strerror" >&5 ++echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6; } ++if test "${ac_cv_search_strerror+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ac_func_search_save_LIBS=$LIBS + cat >conftest.$ac_ext <<_ACEOF +-#ifndef __cplusplus +- choke me +-#endif +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- for ac_declaration in \ +- '' \ +- 'extern "C" void std::exit (int) throw (); using std::exit;' \ +- 'extern "C" void std::exit (int); using std::exit;' \ +- 'extern "C" void exit (int) throw ();' \ +- 'extern "C" void exit (int);' \ +- 'void exit (int);' +-do +- cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-$ac_declaration +-#include + -+ optype = syntax->operand[i]; -+ assert(optype < AVR32_NR_OPERANDS); -+ op = &avr32_operand_table[optype]; ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ ++#ifdef __cplusplus ++extern "C" ++#endif ++char strerror (); + int + main () + { +-exit (42); ++return strerror (); + ; + return 0; + } + _ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++for ac_lib in '' cposix; do ++ if test -z "$ac_lib"; then ++ ac_res="none required" ++ else ++ ac_res=-l$ac_lib ++ LIBS="-l$ac_lib $ac_func_search_save_LIBS" ++ fi ++ rm -f conftest.$ac_objext conftest$ac_exeext ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- : ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then ++ ac_cv_search_strerror=$ac_res + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-continue +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +-$ac_declaration +-int +-main () +-{ +-exit (42); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- break +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-done +-rm -f conftest* +-if test -n "$ac_declaration"; then +- echo '#ifdef __cplusplus' >>confdefs.h +- echo $ac_declaration >>confdefs.h +- echo '#endif' >>confdefs.h +-fi +- +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ ++ conftest$ac_exeext ++ if test "${ac_cv_search_strerror+set}" = set; then ++ break + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu +- +- +-echo "$as_me:$LINENO: checking for library containing strerror" >&5 +-echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6 ++done + if test "${ac_cv_search_strerror+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_func_search_save_LIBS=$LIBS +-ac_cv_search_strerror=no +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char strerror (); +-int +-main () +-{ +-strerror (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_strerror="none required" +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-if test "$ac_cv_search_strerror" = no; then +- for ac_lib in cposix; do +- LIBS="-l$ac_lib $ac_func_search_save_LIBS" +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char strerror (); +-int +-main () +-{ +-strerror (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_strerror="-l$ac_lib" +-break ++ : + else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +- done ++ ac_cv_search_strerror=no + fi ++rm conftest.$ac_ext + LIBS=$ac_func_search_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 +-echo "${ECHO_T}$ac_cv_search_strerror" >&6 +-if test "$ac_cv_search_strerror" != no; then +- test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS" ++{ echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 ++echo "${ECHO_T}$ac_cv_search_strerror" >&6; } ++ac_res=$ac_cv_search_strerror ++if test "$ac_res" != no; then ++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + fi + +@@ -2499,8 +2979,8 @@ am__api_version="1.9" + # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" + # OS/2's system install, which has a completely different semantic + # ./install, which can be erroneously created by make from ./install.sh. +-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 ++echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } + if test -z "$INSTALL"; then + if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +@@ -2522,7 +3002,7 @@ case $as_dir/ in + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. +@@ -2541,21 +3021,22 @@ case $as_dir/ in + ;; + esac + done ++IFS=$as_save_IFS + + + fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else +- # As a last resort, use the slow shell script. We don't cache a +- # path for INSTALL within a source directory, because that will ++ # As a last resort, use the slow shell script. Don't cache a ++ # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is +- # removed, or if the path is relative. ++ # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi + fi +-echo "$as_me:$LINENO: result: $INSTALL" >&5 +-echo "${ECHO_T}$INSTALL" >&6 ++{ echo "$as_me:$LINENO: result: $INSTALL" >&5 ++echo "${ECHO_T}$INSTALL" >&6; } + + # Use test -z because SunOS4 sh mishandles braces in ${var-val}. + # It thinks the first close brace ends the variable substitution. +@@ -2565,8 +3046,8 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCR + + test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +-echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +-echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 ++echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } + # Just in case + sleep 1 + echo timestamp > conftest.file +@@ -2608,20 +3089,20 @@ echo "$as_me: error: newly created file + Check your system clock" >&2;} + { (exit 1); exit 1; }; } + fi +-echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++{ echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + test "$program_prefix" != NONE && +- program_transform_name="s,^,$program_prefix,;$program_transform_name" ++ program_transform_name="s&^&$program_prefix&;$program_transform_name" + # Use a double $ so make ignores it. + test "$program_suffix" != NONE && +- program_transform_name="s,\$,$program_suffix,;$program_transform_name" ++ program_transform_name="s&\$&$program_suffix&;$program_transform_name" + # Double any \ or $. echo might interpret backslashes. + # By default was `s,x,x', remove it if useless. + cat <<\_ACEOF >conftest.sed + s/[\\$]/&&/g;s/;s,x,x,$// + _ACEOF + program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +-rm conftest.sed ++rm -f conftest.sed + + # expand $ac_aux_dir to an absolute path + am_aux_dir=`cd $ac_aux_dir && pwd` +@@ -2673,8 +3154,8 @@ for ac_prog in gawk mawk nawk awk + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -2687,54 +3168,57 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + AWK=$ac_cv_prog_AWK + if test -n "$AWK"; then +- echo "$as_me:$LINENO: result: $AWK" >&5 +-echo "${ECHO_T}$AWK" >&6 ++ { echo "$as_me:$LINENO: result: $AWK" >&5 ++echo "${ECHO_T}$AWK" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+ for (p = str; *p; p++) -+ if (*p == ',') -+ break; + test -n "$AWK" && break + done + +-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 ++echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } ++set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` ++if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.make <<\_ACEOF ++SHELL = /bin/sh + all: +- @echo 'ac_maketemp="$(MAKE)"' ++ @echo '@@@%%%=$(MAKE)=@@@%%%' + _ACEOF + # GNU make sometimes prints "make[1]: Entering...", which would confuse us. +-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +-if test -n "$ac_maketemp"; then +- eval ac_cv_prog_make_${ac_make}_set=yes +-else +- eval ac_cv_prog_make_${ac_make}_set=no +-fi ++case `${MAKE-make} -f conftest.make 2>/dev/null` in ++ *@@@%%%=?*=@@@%%%*) ++ eval ac_cv_prog_make_${ac_make}_set=yes;; ++ *) ++ eval ac_cv_prog_make_${ac_make}_set=no;; ++esac + rm -f conftest.make + fi +-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then +- echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then ++ { echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + SET_MAKE= + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" + fi + +@@ -2749,7 +3233,7 @@ rmdir .tst 2>/dev/null + + DEPDIR="${am__leading_dot}deps" + +- ac_config_commands="$ac_config_commands depfiles" ++ac_config_commands="$ac_config_commands depfiles" + + + am_make=${MAKE-make} +@@ -2759,8 +3243,8 @@ am__doit: + .PHONY: am__doit + END + # If we don't find an include directive, just comment out the code. +-echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +-echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 ++echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } + am__include="#" + am__quote= + _am_result=none +@@ -2787,15 +3271,15 @@ if test "$am__include" = "#"; then + fi + + +-echo "$as_me:$LINENO: result: $_am_result" >&5 +-echo "${ECHO_T}$_am_result" >&6 ++{ echo "$as_me:$LINENO: result: $_am_result" >&5 ++echo "${ECHO_T}$_am_result" >&6; } + rm -f confinc confmf + +-# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. ++# Check whether --enable-dependency-tracking was given. + if test "${enable_dependency_tracking+set}" = set; then +- enableval="$enable_dependency_tracking" ++ enableval=$enable_dependency_tracking; ++fi + +-fi; + if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +@@ -2870,8 +3354,8 @@ if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. + set dummy ${ac_tool_prefix}strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -2884,32 +3368,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + STRIP=$ac_cv_prog_STRIP + if test -n "$STRIP"; then +- echo "$as_me:$LINENO: result: $STRIP" >&5 +-echo "${ECHO_T}$STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $STRIP" >&5 ++echo "${ECHO_T}$STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+ if (p == str) -+ return 0; + fi + if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. + set dummy strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -2922,27 +3408,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" + fi + fi + ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP + if test -n "$ac_ct_STRIP"; then +- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +-echo "${ECHO_T}$ac_ct_STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 ++echo "${ECHO_T}$ac_ct_STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- STRIP=$ac_ct_STRIP ++ if test "x$ac_ct_STRIP" = x; then ++ STRIP=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ STRIP=$ac_ct_STRIP ++ fi + else + STRIP="$ac_cv_prog_STRIP" + fi +@@ -2963,8 +3463,8 @@ am__tar='${AMTAR} chof - "$$tardir"'; am + + depcc="$CC" am_compiler_list= + +-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 ++echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } + if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3053,8 +3553,8 @@ else + fi + + fi +-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 ++{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 ++echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } + CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + +@@ -3072,10 +3572,9 @@ fi + + + +-# Check whether --enable-shared or --disable-shared was given. ++# Check whether --enable-shared was given. + if test "${enable_shared+set}" = set; then +- enableval="$enable_shared" +- p=${PACKAGE-default} ++ enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; +@@ -3093,11 +3592,11 @@ no) enable_shared=no ;; + esac + else + enable_shared=yes +-fi; +-# Check whether --enable-static or --disable-static was given. ++fi + -+ c = *p; -+ *p = 0; ++# Check whether --enable-static was given. + if test "${enable_static+set}" = set; then +- enableval="$enable_static" +- p=${PACKAGE-default} ++ enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; +@@ -3115,11 +3614,11 @@ no) enable_static=no ;; + esac + else + enable_static=yes +-fi; +-# Check whether --enable-fast-install or --disable-fast-install was given. ++fi + -+ if (!op->match(str)) -+ { -+ *p = c; -+ return 0; -+ } ++# Check whether --enable-fast-install was given. + if test "${enable_fast_install+set}" = set; then +- enableval="$enable_fast_install" +- p=${PACKAGE-default} ++ enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; +@@ -3137,20 +3636,21 @@ no) enable_fast_install=no ;; + esac + else + enable_fast_install=yes +-fi; ++fi + -+ str = p; -+ *p = c; -+ if (c) -+ str++; -+ } + +-# Check whether --with-gnu-ld or --without-gnu-ld was given. ++# Check whether --with-gnu-ld was given. + if test "${with_gnu_ld+set}" = set; then +- withval="$with_gnu_ld" +- test "$withval" = no || with_gnu_ld=yes ++ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes + else + with_gnu_ld=no +-fi; ++fi + -+ optype = syntax->operand[i]; -+ assert(optype < AVR32_NR_OPERANDS); -+ op = &avr32_operand_table[optype]; + ac_prog=ld + if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. +- echo "$as_me:$LINENO: checking for ld used by GCC" >&5 +-echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for ld used by GCC" >&5 ++echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw +@@ -3179,11 +3679,11 @@ echo $ECHO_N "checking for ld used by GC + ;; + esac + elif test "$with_gnu_ld" = yes; then +- echo "$as_me:$LINENO: checking for GNU ld" >&5 +-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for GNU ld" >&5 ++echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } + else +- echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 ++echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } + fi + if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +@@ -3212,17 +3712,17 @@ fi + + LD="$lt_cv_path_LD" + if test -n "$LD"; then +- echo "$as_me:$LINENO: result: $LD" >&5 +-echo "${ECHO_T}$LD" >&6 ++ { echo "$as_me:$LINENO: result: $LD" >&5 ++echo "${ECHO_T}$LD" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 + echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +-echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 ++echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } + if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3233,25 +3733,25 @@ else + lt_cv_prog_gnu_ld=no + fi + fi +-echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 +-echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 ++echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } + with_gnu_ld=$lt_cv_prog_gnu_ld + + +-echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +-echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 ++echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } + if test "${lt_cv_ld_reload_flag+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + lt_cv_ld_reload_flag='-r' + fi +-echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +-echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 ++echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } + reload_flag=$lt_cv_ld_reload_flag + test -n "$reload_flag" && reload_flag=" $reload_flag" + +-echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 +-echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 ++echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } + if test "${lt_cv_path_NM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3286,22 +3786,22 @@ fi + fi + + NM="$lt_cv_path_NM" +-echo "$as_me:$LINENO: result: $NM" >&5 +-echo "${ECHO_T}$NM" >&6 ++{ echo "$as_me:$LINENO: result: $NM" >&5 ++echo "${ECHO_T}$NM" >&6; } + +-echo "$as_me:$LINENO: checking whether ln -s works" >&5 +-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 ++echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } + LN_S=$as_ln_s + if test "$LN_S" = "ln -s"; then +- echo "$as_me:$LINENO: result: yes" >&5 +-echo "${ECHO_T}yes" >&6 ++ { echo "$as_me:$LINENO: result: yes" >&5 ++echo "${ECHO_T}yes" >&6; } + else +- echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +-echo "${ECHO_T}no, using $LN_S" >&6 ++ { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 ++echo "${ECHO_T}no, using $LN_S" >&6; } + fi + +-echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5 +-echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5 ++echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6; } + if test "${lt_cv_deplibs_check_method+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3463,8 +3963,8 @@ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + esac + + fi +-echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +-echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 ++echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } + file_magic_cmd=$lt_cv_file_magic_cmd + deplibs_check_method=$lt_cv_deplibs_check_method + +@@ -3474,8 +3974,8 @@ deplibs_check_method=$lt_cv_deplibs_chec + # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! + + # find the maximum length of command line arguments +-echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +-echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 ++echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } + if test "${lt_cv_sys_max_cmd_len+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3526,11 +4026,11 @@ else + fi + + if test -n "$lt_cv_sys_max_cmd_len" ; then +- echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +-echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 ++ { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 ++echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } + else +- echo "$as_me:$LINENO: result: none" >&5 +-echo "${ECHO_T}none" >&6 ++ { echo "$as_me:$LINENO: result: none" >&5 ++echo "${ECHO_T}none" >&6; } + fi + + +@@ -3538,8 +4038,8 @@ fi + case $deplibs_check_method in + file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then +- echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +-echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 ++echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } + if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3593,17 +4093,17 @@ fi + + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if test -n "$MAGIC_CMD"; then +- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +-echo "${ECHO_T}$MAGIC_CMD" >&6 ++ { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 ++echo "${ECHO_T}$MAGIC_CMD" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then +- echo "$as_me:$LINENO: checking for file" >&5 +-echo $ECHO_N "checking for file... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for file" >&5 ++echo $ECHO_N "checking for file... $ECHO_C" >&6; } + if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3657,11 +4157,11 @@ fi + + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if test -n "$MAGIC_CMD"; then +- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +-echo "${ECHO_T}$MAGIC_CMD" >&6 ++ { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 ++echo "${ECHO_T}$MAGIC_CMD" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + else +@@ -3676,8 +4176,8 @@ esac + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. + set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3690,32 +4190,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + RANLIB=$ac_cv_prog_RANLIB + if test -n "$RANLIB"; then +- echo "$as_me:$LINENO: result: $RANLIB" >&5 +-echo "${ECHO_T}$RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $RANLIB" >&5 ++echo "${ECHO_T}$RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+ if (!op->match(str)) -+ return 0; -+ return 1; -+ } + fi + if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. + set dummy ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3728,27 +4230,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" + fi + fi + ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB + if test -n "$ac_ct_RANLIB"; then +- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +-echo "${ECHO_T}$ac_ct_RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 ++echo "${ECHO_T}$ac_ct_RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- RANLIB=$ac_ct_RANLIB ++ if test "x$ac_ct_RANLIB" = x; then ++ RANLIB=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ RANLIB=$ac_ct_RANLIB ++ fi + else + RANLIB="$ac_cv_prog_RANLIB" + fi +@@ -3756,8 +4272,8 @@ fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. + set dummy ${ac_tool_prefix}strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3770,32 +4286,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + STRIP=$ac_cv_prog_STRIP + if test -n "$STRIP"; then +- echo "$as_me:$LINENO: result: $STRIP" >&5 +-echo "${ECHO_T}$STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $STRIP" >&5 ++echo "${ECHO_T}$STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+ for (i = 0; i < syntax->nr_operands; i++) -+ { -+ struct avr32_operand *op; -+ int optype = syntax->operand[i]; -+ char *p; -+ char c; + fi + if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. + set dummy strip; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -3808,27 +4326,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" + fi + fi + ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP + if test -n "$ac_ct_STRIP"; then +- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +-echo "${ECHO_T}$ac_ct_STRIP" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 ++echo "${ECHO_T}$ac_ct_STRIP" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- STRIP=$ac_ct_STRIP ++ if test "x$ac_ct_STRIP" = x; then ++ STRIP=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ STRIP=$ac_ct_STRIP ++ fi + else + STRIP="$ac_cv_prog_STRIP" + fi +@@ -3843,22 +4375,22 @@ test "$GCC" = yes && libtool_flags="$lib + test "$lt_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" + + +-# Check whether --enable-libtool-lock or --disable-libtool-lock was given. ++# Check whether --enable-libtool-lock was given. + if test "${enable_libtool_lock+set}" = set; then +- enableval="$enable_libtool_lock" ++ enableval=$enable_libtool_lock; ++fi + +-fi; + test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" + test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" + + +-# Check whether --with-pic or --without-pic was given. ++# Check whether --with-pic was given. + if test "${with_pic+set}" = set; then +- withval="$with_pic" +- pic_mode="$withval" ++ withval=$with_pic; pic_mode="$withval" + else + pic_mode=default +-fi; ++fi + -+ assert(optype < AVR32_NR_OPERANDS); -+ op = &avr32_operand_table[optype]; + test x"$pic_mode" = xyes && libtool_flags="$libtool_flags --prefer-pic" + test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic" + +@@ -3867,7 +4399,7 @@ test x"$pic_mode" = xno && libtool_flags + case $host in + *-*-irix6*) + # Find out which ABI we are using. +- echo '#line 3870 "configure"' > conftest.$ac_ext ++ echo '#line 4402 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? +@@ -3972,13 +4504,12 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*li + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" +- echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +-echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 ++echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } + if test "${lt_cv_cc_needs_belf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + +- + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +@@ -4001,35 +4532,32 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + lt_cv_cc_needs_belf=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-lt_cv_cc_needs_belf=no ++ lt_cv_cc_needs_belf=no + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ for (p = str; *p; p++) -+ if (*p == ',') -+ break; ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' +@@ -4038,8 +4566,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLA + ac_compiler_gnu=$ac_cv_c_compiler_gnu + + fi +-echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +-echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 ++{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 ++echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" +@@ -4069,39 +4597,58 @@ _ACEOF + + # The following way of writing the cache mishandles newlines in values, + # but we know of no workaround that is simple, portable, and efficient. +-# So, don't put newlines in cache variables' values. ++# So, we kill variables containing newlines. + # Ultrix sh set writes to stderr and can't be redirected directly, + # and sets the high bit in the cache file unless we assign to the vars. +-{ ++( ++ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do ++ eval ac_val=\$$ac_var ++ case $ac_val in #( ++ *${as_nl}*) ++ case $ac_var in #( ++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 ++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; ++ esac ++ case $ac_var in #( ++ _ | IFS | as_nl) ;; #( ++ *) $as_unset $ac_var ;; ++ esac ;; ++ esac ++ done + -+ if (p == str) -+ return 0; + (set) 2>&1 | +- case `(ac_space=' '; set | grep ac_space) 2>&1` in +- *ac_space=\ *) ++ case $as_nl`(ac_space=' '; set) 2>&1` in #( ++ *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" +- ;; ++ ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. +- sed -n \ +- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; +- esac; +-} | ++ esac | ++ sort ++) | + sed ' ++ /^ac_cv_env_/b end + t clear +- : clear ++ :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end +- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ +- : end' >>confcache +-if diff $cache_file confcache >/dev/null 2>&1; then :; else +- if test -w $cache_file; then +- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" ++ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ ++ :end' >>confcache ++if diff "$cache_file" confcache >/dev/null 2>&1; then :; else ++ if test -w "$cache_file"; then ++ test "x$cache_file" != "x/dev/null" && ++ { echo "$as_me:$LINENO: updating cache $cache_file" >&5 ++echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else +- echo "not updating unwritable cache $cache_file" ++ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 ++echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi + fi + rm -f confcache +@@ -4127,8 +4674,8 @@ if test -r "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 + echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in +- [\\/]* | ?:[\\/]* ) . $cache_file;; +- *) . ./$cache_file;; ++ [\\/]* | ?:[\\/]* ) . "$cache_file";; ++ *) . "./$cache_file";; + esac + fi + else +@@ -4154,10 +4701,9 @@ exec 5>>./config.log + + + +-# Check whether --enable-targets or --disable-targets was given. ++# Check whether --enable-targets was given. + if test "${enable_targets+set}" = set; then +- enableval="$enable_targets" +- case "${enableval}" in ++ enableval=$enable_targets; case "${enableval}" in + yes | "") { { echo "$as_me:$LINENO: error: enable-targets option must specify target names or 'all'" >&5 + echo "$as_me: error: enable-targets option must specify target names or 'all'" >&2;} + { (exit 1); exit 1; }; } +@@ -4165,31 +4711,32 @@ echo "$as_me: error: enable-targets opti + no) enable_targets= ;; + *) enable_targets=$enableval ;; + esac +-fi; # Check whether --enable-commonbfdlib or --disable-commonbfdlib was given. ++fi ++# Check whether --enable-commonbfdlib was given. + if test "${enable_commonbfdlib+set}" = set; then +- enableval="$enable_commonbfdlib" +- case "${enableval}" in ++ enableval=$enable_commonbfdlib; case "${enableval}" in + yes) commonbfdlib=true ;; + no) commonbfdlib=false ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for BFD commonbfdlib option" >&5 + echo "$as_me: error: bad value ${enableval} for BFD commonbfdlib option" >&2;} + { (exit 1); exit 1; }; } ;; + esac +-fi; ++fi + -+ c = *p; -+ *p = 0; + + GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes" + +-# Check whether --enable-werror or --disable-werror was given. ++# Check whether --enable-werror was given. + if test "${enable_werror+set}" = set; then +- enableval="$enable_werror" +- case "${enableval}" in ++ enableval=$enable_werror; case "${enableval}" in + yes | y) ERROR_ON_WARNING="yes" ;; + no | n) ERROR_ON_WARNING="no" ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-werror" >&5 + echo "$as_me: error: bad value ${enableval} for --enable-werror" >&2;} + { (exit 1); exit 1; }; } ;; + esac +-fi; ++fi + -+ if (!op->match(str)) -+ { -+ *p = c; -+ return 0; -+ } + + # Enable -Werror by default when using gcc + if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then +@@ -4206,10 +4753,9 @@ if test "${GCC}" = yes ; then + WARN_CFLAGS="${GCC_WARN_CFLAGS}" + fi + +-# Check whether --enable-build-warnings or --disable-build-warnings was given. ++# Check whether --enable-build-warnings was given. + if test "${enable_build_warnings+set}" = set; then +- enableval="$enable_build_warnings" +- case "${enableval}" in ++ enableval=$enable_build_warnings; case "${enableval}" in + yes) WARN_CFLAGS="${GCC_WARN_CFLAGS}";; + no) if test "${GCC}" = yes ; then + WARN_CFLAGS="-w" +@@ -4220,7 +4766,8 @@ if test "${enable_build_warnings+set}" = + WARN_CFLAGS="${t} ${GCC_WARN_CFLAGS}";; + *) WARN_CFLAGS=`echo "${enableval}" | sed -e "s/,/ /g"`;; + esac +-fi; ++fi + -+ str = p; -+ *p = c; -+ if (c) -+ str++; -+ } + + if test x"$silent" != x"yes" && test x"$WARN_CFLAGS" != x""; then + echo "Setting warning flags = $WARN_CFLAGS" 6>&1 +@@ -4230,7 +4777,7 @@ fi + + + +- ac_config_headers="$ac_config_headers config.h:config.in" ++ac_config_headers="$ac_config_headers config.h:config.in" + + + if test -z "$target" ; then +@@ -4252,8 +4799,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. + set dummy ${ac_tool_prefix}gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4266,32 +4813,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+ if (*str == '\0') -+ return 1; + fi + if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. + set dummy gcc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4304,36 +4853,51 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + else + CC="$ac_cv_prog_CC" + fi + + if test -z "$CC"; then +- if test -n "$ac_tool_prefix"; then +- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + set dummy ${ac_tool_prefix}cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4346,74 +4910,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 +-else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 +-fi +- +-fi +-if test -z "$ac_cv_prog_CC"; then +- ac_ct_CC=$CC +- # Extract the first word of "cc", so it can be a program name with args. +-set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- if test -n "$ac_ct_CC"; then +- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +-else +-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +- ac_cv_prog_ac_ct_CC="cc" +- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +- break 2 +- fi +-done +-done +- +-fi +-fi +-ac_ct_CC=$ac_cv_prog_ac_ct_CC +-if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- CC=$ac_ct_CC +-else +- CC="$ac_cv_prog_CC" +-fi + ++ fi + fi + if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. + set dummy cc; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4427,7 +4951,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue +@@ -4438,6 +4962,7 @@ do + fi + done + done ++IFS=$as_save_IFS + + if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. +@@ -4455,22 +4980,23 @@ fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+ if ((*str == 'e' || *str == 'E') && !str[1]) -+ return 1; + fi + if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. + set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4483,36 +5009,38 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + CC=$ac_cv_prog_CC + if test -n "$CC"; then +- echo "$as_me:$LINENO: result: $CC" >&5 +-echo "${ECHO_T}$CC" >&6 ++ { echo "$as_me:$LINENO: result: $CC" >&5 ++echo "${ECHO_T}$CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+ return 0; -+} + test -n "$CC" && break + done + fi + if test -z "$CC"; then + ac_ct_CC=$CC +- for ac_prog in cl ++ for ac_prog in cl.exe + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4525,29 +5053,45 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + ac_ct_CC=$ac_cv_prog_ac_ct_CC + if test -n "$ac_ct_CC"; then +- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +-echo "${ECHO_T}$ac_ct_CC" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 ++echo "${ECHO_T}$ac_ct_CC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+static int parse_operands(char *str) -+{ -+ int i; + test -n "$ac_ct_CC" && break + done + +- CC=$ac_ct_CC ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi + fi + + fi +@@ -4560,27 +5104,41 @@ See \`config.log' for more details." >&2 + { (exit 1); exit 1; }; } + + # Provide some information about the compiler. +-echo "$as_me:$LINENO:" \ +- "checking for C compiler version" >&5 ++echo "$as_me:$LINENO: checking for C compiler version" >&5 + ac_compiler=`set X $ac_compile; echo $2` +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 +- (eval $ac_compiler --version &5) 2>&5 ++{ (ac_try="$ac_compiler --version >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 +- (eval $ac_compiler -v &5) 2>&5 ++{ (ac_try="$ac_compiler -v >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 +- (eval $ac_compiler -V &5) 2>&5 ++{ (ac_try="$ac_compiler -V >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 ++echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } + if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4603,50 +5161,49 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_compiler_gnu=no ++ ac_compiler_gnu=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ if (current_insn.syntax->nr_operands < 0) -+ { -+ int optype; -+ struct avr32_operand *op; ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_c_compiler_gnu=$ac_compiler_gnu + + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 ++echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } + GCC=`test $ac_compiler_gnu = yes && echo yes` + ac_test_CFLAGS=${CFLAGS+set} + ac_save_CFLAGS=$CFLAGS +-CFLAGS="-g" +-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 ++echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } + if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- cat >conftest.$ac_ext <<_ACEOF ++ ac_save_c_werror_flag=$ac_c_werror_flag ++ ac_c_werror_flag=yes ++ ac_cv_prog_cc_g=no ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext +@@ -4662,311 +5219,248 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_prog_cc_g=no +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +-if test "$ac_test_CFLAGS" = set; then +- CFLAGS=$ac_save_CFLAGS +-elif test $ac_cv_prog_cc_g = yes; then +- if test "$GCC" = yes; then +- CFLAGS="-g -O2" +- else +- CFLAGS="-g" +- fi +-else +- if test "$GCC" = yes; then +- CFLAGS="-O2" +- else +- CFLAGS= +- fi +-fi +-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +-if test "${ac_cv_prog_cc_stdc+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_cv_prog_cc_stdc=no +-ac_save_CC=$CC +-cat >conftest.$ac_ext <<_ACEOF ++ CFLAGS="" ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-#include +-#include +-#include +-#include +-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +-struct buf { int x; }; +-FILE * (*rcsopen) (struct buf *, struct stat *, int); +-static char *e (p, i) +- char **p; +- int i; +-{ +- return p[i]; +-} +-static char *f (char * (*g) (char **, int), char **p, ...) +-{ +- char *s; +- va_list v; +- va_start (v,p); +- s = g (p, va_arg (v,int)); +- va_end (v); +- return s; +-} + +-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has +- function prototypes and stuff, but not '\xHH' hex character constants. +- These don't provoke an error unfortunately, instead are silently treated +- as 'x'. The following induces an error, until -std1 is added to get +- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an +- array size at least. It's necessary to write '\x00'==0 to get something +- that's true only with -std1. */ +-int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +- +-int test (int i, double x); +-struct s1 {int (*f) (int a);}; +-struct s2 {int (*f) (double a);}; +-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +-int argc; +-char **argv; + int + main () + { +-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + -+ for (i = 0; i < (-current_insn.syntax->nr_operands - 1); i++) -+ { -+ char *p; -+ char c; + ; + return 0; + } + _ACEOF +-# Don't try gcc -ansi; that turns off useful extensions and +-# breaks some systems' header files. +-# AIX -qlanglvl=ansi +-# Ultrix and OSF/1 -std1 +-# HP-UX 10.20 and later -Ae +-# HP-UX older versions -Aa -D_HPUX_SOURCE +-# SVR4 -Xc -D__EXTENSIONS__ +-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +-do +- CC="$ac_save_CC $ac_arg" +- rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_prog_cc_stdc=$ac_arg +-break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ : + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-fi +-rm -f conftest.err conftest.$ac_objext +-done +-rm -f conftest.$ac_ext conftest.$ac_objext +-CC=$ac_save_CC +- +-fi +- +-case "x$ac_cv_prog_cc_stdc" in +- x|xno) +- echo "$as_me:$LINENO: result: none needed" >&5 +-echo "${ECHO_T}none needed" >&6 ;; +- *) +- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 +- CC="$CC $ac_cv_prog_cc_stdc" ;; +-esac +- +-# Some people use a C++ compiler to compile C. Since we use `exit', +-# in C++ we need to declare it. In case someone uses the same compiler +-# for both compiling C and C++ we need to have the C++ compiler decide +-# the declaration of exit, since it's the most demanding environment. +-cat >conftest.$ac_ext <<_ACEOF +-#ifndef __cplusplus +- choke me +-#endif +-_ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- for ac_declaration in \ +- '' \ +- 'extern "C" void std::exit (int) throw (); using std::exit;' \ +- 'extern "C" void std::exit (int); using std::exit;' \ +- 'extern "C" void exit (int) throw ();' \ +- 'extern "C" void exit (int);' \ +- 'void exit (int);' +-do +- cat >conftest.$ac_ext <<_ACEOF ++ ac_c_werror_flag=$ac_save_c_werror_flag ++ CFLAGS="-g" ++ cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-$ac_declaration +-#include + -+ optype = current_insn.syntax->operand[i]; -+ op = &avr32_operand_table[optype]; + int + main () + { +-exit (42); + -+ for (p = str; *p; p++) -+ if (*p == ',') -+ break; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- : ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_g=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-continue + -+ assert(p != str); + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +- cat >conftest.$ac_ext <<_ACEOF + -+ c = *p, *p = 0; -+ op->parse(op, str, i); -+ *p = c; ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi + -+ str = p; -+ if (c) str++; -+ } ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi + -+ /* give the rest of the line to the last operand */ -+ optype = current_insn.syntax->operand[i]; -+ op = &avr32_operand_table[optype]; -+ op->parse(op, str, i); -+ } ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_c_werror_flag=$ac_save_c_werror_flag ++fi ++{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } ++if test "$ac_test_CFLAGS" = set; then ++ CFLAGS=$ac_save_CFLAGS ++elif test $ac_cv_prog_cc_g = yes; then ++ if test "$GCC" = yes; then ++ CFLAGS="-g -O2" + else -+ { -+ for (i = 0; i < current_insn.syntax->nr_operands; i++) -+ { -+ int optype = current_insn.syntax->operand[i]; -+ struct avr32_operand *op = &avr32_operand_table[optype]; -+ char *p; -+ char c; -+ -+ skip_whitespace(str); -+ -+ for (p = str; *p; p++) -+ if (*p == ',') -+ break; -+ -+ assert(p != str); -+ -+ c = *p, *p = 0; -+ op->parse(op, str, i); -+ *p = c; -+ -+ str = p; -+ if (c) str++; -+ } -+ -+ if (*str == 'E' || *str == 'e') -+ current_insn.force_extended = 1; -+ } -+ -+ return 0; ++ CFLAGS="-g" ++ fi ++else ++ if test "$GCC" = yes; then ++ CFLAGS="-O2" ++ else ++ CFLAGS= ++ fi ++fi ++{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 ++echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } ++if test "${ac_cv_prog_cc_c89+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ac_cv_prog_cc_c89=no ++ac_save_CC=$CC ++cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-$ac_declaration ++#include ++#include ++#include ++#include ++/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ ++struct buf { int x; }; ++FILE * (*rcsopen) (struct buf *, struct stat *, int); ++static char *e (p, i) ++ char **p; ++ int i; ++{ ++ return p[i]; +} -+ -+static const char * -+finish_insn(const struct avr32_opcode *opc) ++static char *f (char * (*g) (char **, int), char **p, ...) +{ -+ expressionS *exp = ¤t_insn.immediate; -+ unsigned int i; -+ int will_relax = 0; -+ char *buf; -+ -+ assert(current_insn.next_slot == opc->nr_fields); -+ -+ pr_debug("%s:%d: finish_insn: trying opcode %d\n", -+ frag_now->fr_file, frag_now->fr_line, opc->id); -+ -+ /* Go through the relaxation stage for all instructions that can -+ possibly take a symbolic immediate. The relax code will take -+ care of range checking and alignment. */ -+ if (opc->var_field != -1) -+ { -+ int substate, largest_substate; -+ symbolS *sym; -+ offsetT off; -+ -+ will_relax = 1; -+ substate = largest_substate = opc_initial_substate(opc); -+ -+ while (relax_more(largest_substate) != AVR32_RS_NONE) -+ largest_substate = relax_more(largest_substate); -+ -+ pr_debug("will relax. initial substate: %d (size %d), largest substate: %d (size %d)\n", -+ substate, avr32_rs_size(substate), -+ largest_substate, avr32_rs_size(largest_substate)); -+ -+ /* make sure we have enough room for the largest possible opcode */ -+ frag_grow(avr32_rs_size(largest_substate)); -+ buf = frag_more(opc->size); -+ -+ dwarf2_emit_insn(opc->size); -+ -+ frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_NONE; -+ frag_now->tc_frag_data.pcrel = current_insn.pcrel; -+ frag_now->tc_frag_data.force_extended = current_insn.force_extended; -+ frag_now->tc_frag_data.relaxer = &avr32_default_relaxer; -+ -+ if (exp->X_op == O_hi) -+ { -+ frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_HI; -+ exp->X_op = exp->X_md; -+ } -+ else if (exp->X_op == O_lo) -+ { -+ frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_LO; -+ exp->X_op = exp->X_md; -+ } -+ else if (exp->X_op == O_got) -+ { -+ frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_GOT; -+ exp->X_op = O_symbol; -+ } -+ -+#if 0 -+ if ((opc->reloc_type == BFD_RELOC_AVR32_SUB5) -+ && exp->X_op == O_subtract) -+ { -+ symbolS *tmp; -+ tmp = exp->X_add_symbol; -+ exp->X_add_symbol = exp->X_op_symbol; -+ exp->X_op_symbol = tmp; -+ } -+#endif -+ -+ frag_now->tc_frag_data.exp = current_insn.immediate; -+ -+ sym = exp->X_add_symbol; -+ off = exp->X_add_number; -+ if (exp->X_op != O_symbol) -+ { -+ sym = make_expr_symbol(exp); -+ off = 0; -+ } ++ char *s; ++ va_list v; ++ va_start (v,p); ++ s = g (p, va_arg (v,int)); ++ va_end (v); ++ return s; ++} + -+ frag_var(rs_machine_dependent, -+ avr32_rs_size(largest_substate) - opc->size, -+ opc->size, -+ substate, sym, off, buf); -+ } -+ else -+ { -+ assert(avr32_rs_size(opc_initial_substate(opc)) == 0); ++/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has ++ function prototypes and stuff, but not '\xHH' hex character constants. ++ These don't provoke an error unfortunately, instead are silently treated ++ as 'x'. The following induces an error, until -std is added to get ++ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an ++ array size at least. It's necessary to write '\x00'==0 to get something ++ that's true only with -std. */ ++int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + -+ /* Make sure we always have room for another whole word, as the ifield -+ inserters can only write words. */ -+ frag_grow(4); -+ buf = frag_more(opc->size); -+ dwarf2_emit_insn(opc->size); -+ } ++/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters ++ inside strings and character constants. */ ++#define FOO(x) 'x' ++int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + -+ assert(!(opc->value & ~opc->mask)); ++int test (int i, double x); ++struct s1 {int (*f) (int a);}; ++struct s2 {int (*f) (double a);}; ++int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); ++int argc; ++char **argv; + int + main () + { +-exit (42); ++return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; + } + _ACEOF +-rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ ++ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" ++do ++ CC="$ac_save_CC $ac_arg" ++ rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_prog_cc_c89=$ac_arg + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + + -+ pr_debug("inserting opcode: 0x%lx\n", opc->value); -+ bfd_putb32(opc->value, buf); + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ for (i = 0; i < opc->nr_fields; i++) -+ { -+ const struct avr32_ifield *f = opc->fields[i]; -+ const struct avr32_ifield_data *fd = ¤t_insn.field_value[i]; ++rm -f core conftest.err conftest.$ac_objext ++ test "x$ac_cv_prog_cc_c89" != "xno" && break + done +-rm -f conftest* +-if test -n "$ac_declaration"; then +- echo '#ifdef __cplusplus' >>confdefs.h +- echo $ac_declaration >>confdefs.h +- echo '#endif' >>confdefs.h ++rm -f conftest.$ac_ext ++CC=$ac_save_CC + -+ pr_debug("inserting field: 0x%lx & 0x%lx\n", -+ fd->value >> fd->align_order, f->mask); + fi ++# AC_CACHE_VAL ++case "x$ac_cv_prog_cc_c89" in ++ x) ++ { echo "$as_me:$LINENO: result: none needed" >&5 ++echo "${ECHO_T}none needed" >&6; } ;; ++ xno) ++ { echo "$as_me:$LINENO: result: unsupported" >&5 ++echo "${ECHO_T}unsupported" >&6; } ;; ++ *) ++ CC="$CC $ac_cv_prog_cc_c89" ++ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 ++echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; ++esac + +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + +-fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +@@ -4984,8 +5478,8 @@ for ac_prog in 'bison -y' byacc + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_YACC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -4998,25 +5492,27 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_YACC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + YACC=$ac_cv_prog_YACC + if test -n "$YACC"; then +- echo "$as_me:$LINENO: result: $YACC" >&5 +-echo "${ECHO_T}$YACC" >&6 ++ { echo "$as_me:$LINENO: result: $YACC" >&5 ++echo "${ECHO_T}$YACC" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+ f->insert(f, buf, fd->value >> fd->align_order); -+ } + test -n "$YACC" && break + done + test -n "$YACC" || YACC="yacc" +@@ -5025,8 +5521,8 @@ for ac_prog in flex lex + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_LEX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5039,253 +5535,182 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LEX="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + LEX=$ac_cv_prog_LEX + if test -n "$LEX"; then +- echo "$as_me:$LINENO: result: $LEX" >&5 +-echo "${ECHO_T}$LEX" >&6 ++ { echo "$as_me:$LINENO: result: $LEX" >&5 ++echo "${ECHO_T}$LEX" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+ assert(will_relax || !current_insn.immediate.X_add_symbol); -+ return NULL; -+} + test -n "$LEX" && break + done + test -n "$LEX" || LEX=":" + +-if test -z "$LEXLIB" +-then +- echo "$as_me:$LINENO: checking for yywrap in -lfl" >&5 +-echo $ECHO_N "checking for yywrap in -lfl... $ECHO_C" >&6 +-if test "${ac_cv_lib_fl_yywrap+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_check_lib_save_LIBS=$LIBS +-LIBS="-lfl $LIBS" +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" ++if test "x$LEX" != "x:"; then ++ cat >conftest.l <<_ACEOF ++%% ++a { ECHO; } ++b { REJECT; } ++c { yymore (); } ++d { yyless (1); } ++e { yyless (input () != 0); } ++f { unput (yytext[0]); } ++. { BEGIN INITIAL; } ++%% ++#ifdef YYTEXT_POINTER ++extern char *yytext; + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char yywrap (); + int +-main () ++main (void) + { +-yywrap (); +- ; +- return 0; ++ return ! yylex () + ! yywrap (); + } + _ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++{ (ac_try="$LEX conftest.l" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$LEX conftest.l") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_lib_fl_yywrap=yes ++ (exit $ac_status); } ++{ echo "$as_me:$LINENO: checking lex output file root" >&5 ++echo $ECHO_N "checking lex output file root... $ECHO_C" >&6; } ++if test "${ac_cv_prog_lex_root+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_lib_fl_yywrap=no ++if test -f lex.yy.c; then ++ ac_cv_prog_lex_root=lex.yy ++elif test -f lexyy.c; then ++ ac_cv_prog_lex_root=lexyy ++else ++ { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5 ++echo "$as_me: error: cannot find output from $LEX; giving up" >&2;} ++ { (exit 1); exit 1; }; } + fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-LIBS=$ac_check_lib_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_lib_fl_yywrap" >&5 +-echo "${ECHO_T}$ac_cv_lib_fl_yywrap" >&6 +-if test $ac_cv_lib_fl_yywrap = yes; then +- LEXLIB="-lfl" +-else +- echo "$as_me:$LINENO: checking for yywrap in -ll" >&5 +-echo $ECHO_N "checking for yywrap in -ll... $ECHO_C" >&6 +-if test "${ac_cv_lib_l_yywrap+set}" = set; then ++{ echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5 ++echo "${ECHO_T}$ac_cv_prog_lex_root" >&6; } ++LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root + -+static const char * -+finish_alias(const struct avr32_alias *alias) -+{ -+ const struct avr32_opcode *opc; -+ struct { -+ unsigned long value; -+ unsigned long align; -+ } mapped_operand[AVR32_MAX_OPERANDS]; -+ unsigned int i; ++if test -z "${LEXLIB+set}"; then ++ { echo "$as_me:$LINENO: checking lex library" >&5 ++echo $ECHO_N "checking lex library... $ECHO_C" >&6; } ++if test "${ac_cv_lib_lex+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- ac_check_lib_save_LIBS=$LIBS +-LIBS="-ll $LIBS" +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ + +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char yywrap (); +-int +-main () +-{ +-yywrap (); +- ; +- return 0; +-} ++ ac_save_LIBS=$LIBS ++ ac_cv_lib_lex='none needed' ++ for ac_lib in '' -lfl -ll; do ++ LIBS="$ac_lib $ac_save_LIBS" ++ cat >conftest.$ac_ext <<_ACEOF ++`cat $LEX_OUTPUT_ROOT.c` + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_lib_l_yywrap=yes ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then ++ ac_cv_lib_lex=$ac_lib + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_lib_l_yywrap=no +-fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-LIBS=$ac_check_lib_save_LIBS +-fi +-echo "$as_me:$LINENO: result: $ac_cv_lib_l_yywrap" >&5 +-echo "${ECHO_T}$ac_cv_lib_l_yywrap" >&6 +-if test $ac_cv_lib_l_yywrap = yes; then +- LEXLIB="-ll" +-fi +- +-fi +- +-fi + +-if test "x$LEX" != "x:"; then +- echo "$as_me:$LINENO: checking lex output file root" >&5 +-echo $ECHO_N "checking lex output file root... $ECHO_C" >&6 +-if test "${ac_cv_prog_lex_root+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- # The minimal lex program is just a single line: %%. But some broken lexes +-# (Solaris, I think it was) want two %% lines, so accommodate them. +-cat >conftest.l <<_ACEOF +-%% +-%% +-_ACEOF +-{ (eval echo "$as_me:$LINENO: \"$LEX conftest.l\"") >&5 +- (eval $LEX conftest.l) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } +-if test -f lex.yy.c; then +- ac_cv_prog_lex_root=lex.yy +-elif test -f lexyy.c; then +- ac_cv_prog_lex_root=lexyy +-else +- { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5 +-echo "$as_me: error: cannot find output from $LEX; giving up" >&2;} +- { (exit 1); exit 1; }; } + fi + -+ opc = alias->opc; ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ ++ conftest$ac_exeext conftest.$ac_ext ++ test "$ac_cv_lib_lex" != 'none needed' && break ++ done ++ LIBS=$ac_save_LIBS + -+ /* Remap the operands from the alias to the real opcode */ -+ for (i = 0; i < opc->nr_fields; i++) -+ { -+ if (alias->operand_map[i].is_opindex) -+ { -+ struct avr32_ifield_data *fd; -+ fd = ¤t_insn.field_value[alias->operand_map[i].value]; -+ mapped_operand[i].value = fd->value; -+ mapped_operand[i].align = fd->align_order; -+ } -+ else -+ { -+ mapped_operand[i].value = alias->operand_map[i].value; -+ mapped_operand[i].align = 0; -+ } -+ } ++fi ++{ echo "$as_me:$LINENO: result: $ac_cv_lib_lex" >&5 ++echo "${ECHO_T}$ac_cv_lib_lex" >&6; } ++ test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex + fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5 +-echo "${ECHO_T}$ac_cv_prog_lex_root" >&6 +-rm -f conftest.l +-LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root + +-echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5 +-echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6 + -+ for (i = 0; i < opc->nr_fields; i++) -+ { -+ current_insn.field_value[i].value = mapped_operand[i].value; -+ if (opc->id == AVR32_OPC_COP) -+ current_insn.field_value[i].align_order = 0; -+ else -+ current_insn.field_value[i].align_order -+ = mapped_operand[i].align; -+ } ++{ echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5 ++echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6; } + if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + # POSIX says lex can declare yytext either as a pointer or an array; the +-# default is implementation-dependent. Figure out which it is, since ++# default is implementation-dependent. Figure out which it is, since + # not all implementations provide the %pointer and %array declarations. + ac_cv_prog_lex_yytext_pointer=no +-echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c + ac_save_LIBS=$LIBS +-LIBS="$LIBS $LEXLIB" ++LIBS="$LEXLIB $ac_save_LIBS" + cat >conftest.$ac_ext <<_ACEOF ++#define YYTEXT_POINTER 1 + `cat $LEX_OUTPUT_ROOT.c` + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_prog_lex_yytext_pointer=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + + -+ current_insn.next_slot = opc->nr_fields; + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ return finish_insn(opc); -+} ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LIBS=$ac_save_LIBS +-rm -f "${LEX_OUTPUT_ROOT}.c" + + fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5 +-echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5 ++echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6; } + if test $ac_cv_prog_lex_yytext_pointer = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -5293,6 +5718,7 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi ++rm -f conftest.l $LEX_OUTPUT_ROOT.c + + fi + if test "$LEX" = :; then +@@ -5303,8 +5729,8 @@ ALL_LINGUAS="fr tr ja es sv da zh_CN ru + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. + set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5317,32 +5743,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + RANLIB=$ac_cv_prog_RANLIB + if test -n "$RANLIB"; then +- echo "$as_me:$LINENO: result: $RANLIB" >&5 +-echo "${ECHO_T}$RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $RANLIB" >&5 ++echo "${ECHO_T}$RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+static const char * -+finish_lda(const struct avr32_syntax *syntax ATTRIBUTE_UNUSED) -+{ -+ expressionS *exp = ¤t_insn.immediate; -+ relax_substateT initial_subtype; -+ symbolS *sym; -+ offsetT off; -+ int initial_size, max_size; -+ char *buf; + fi + if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. + set dummy ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5355,27 +5783,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" + fi + fi + ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB + if test -n "$ac_ct_RANLIB"; then +- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +-echo "${ECHO_T}$ac_ct_RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 ++echo "${ECHO_T}$ac_ct_RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- RANLIB=$ac_ct_RANLIB ++ if test "x$ac_ct_RANLIB" = x; then ++ RANLIB=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ RANLIB=$ac_ct_RANLIB ++ fi + else + RANLIB="$ac_cv_prog_RANLIB" + fi +@@ -5385,8 +5827,8 @@ ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' + ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' + ac_compiler_gnu=$ac_cv_c_compiler_gnu +-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 ++echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } + # On Suns, sometimes $CPP names a directory. + if test -n "$CPP" && test -d "$CPP"; then + CPP= +@@ -5420,24 +5862,22 @@ cat >>conftest.$ac_ext <<_ACEOF + #endif + Syntax error + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + : + else + echo "$as_me: failed program was:" >&5 +@@ -5446,9 +5886,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + # Broken: fails on valid input. + continue + fi + -+ initial_size = LDA_INITIAL_SIZE; + rm -f conftest.err conftest.$ac_ext + +- # OK, works on sane cases. Now check whether non-existent headers ++ # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -5458,24 +5899,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + # Broken: success on invalid input. + continue + else +@@ -5486,6 +5925,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ac_preproc_ok=: + break + fi + -+ if (avr32_pic) -+ { -+ initial_subtype = LDA_SUBTYPE_SUB; -+ if (linkrelax) -+ max_size = 8; -+ else -+ max_size = 4; -+ } -+ else -+ { -+ initial_subtype = LDA_SUBTYPE_MOV1; -+ max_size = 4; -+ } + rm -f conftest.err conftest.$ac_ext + + done +@@ -5503,8 +5943,8 @@ fi + else + ac_cv_prog_CPP=$CPP + fi +-echo "$as_me:$LINENO: result: $CPP" >&5 +-echo "${ECHO_T}$CPP" >&6 ++{ echo "$as_me:$LINENO: result: $CPP" >&5 ++echo "${ECHO_T}$CPP" >&6; } + ac_preproc_ok=false + for ac_c_preproc_warn_flag in '' yes + do +@@ -5527,24 +5967,22 @@ cat >>conftest.$ac_ext <<_ACEOF + #endif + Syntax error + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + : + else + echo "$as_me: failed program was:" >&5 +@@ -5553,9 +5991,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + # Broken: fails on valid input. + continue + fi + -+ frag_grow(max_size); -+ buf = frag_more(initial_size); -+ dwarf2_emit_insn(initial_size); + rm -f conftest.err conftest.$ac_ext + +- # OK, works on sane cases. Now check whether non-existent headers ++ # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -5565,24 +6004,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + # Broken: success on invalid input. + continue + else +@@ -5593,6 +6030,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ac_preproc_ok=: + break + fi + -+ if (exp->X_op == O_symbol) -+ { -+ sym = exp->X_add_symbol; -+ off = exp->X_add_number; -+ } -+ else -+ { -+ sym = make_expr_symbol(exp); -+ off = 0; -+ } + rm -f conftest.err conftest.$ac_ext + + done +@@ -5615,23 +6053,170 @@ ac_link='$CC -o conftest$ac_exeext $CFLA + ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +-echo "$as_me:$LINENO: checking for egrep" >&5 +-echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +-if test "${ac_cv_prog_egrep+set}" = set; then ++{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 ++echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } ++if test "${ac_cv_path_GREP+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ # Extract the first word of "grep ggrep" to use in msg output ++if test -z "$GREP"; then ++set dummy grep ggrep; ac_prog_name=$2 ++if test "${ac_cv_path_GREP+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ac_path_GREP_found=false ++# Loop through the user's path and test for each of PROGNAME-LIST ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_prog in grep ggrep; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" ++ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue ++ # Check for GNU ac_path_GREP and select it if it is found. ++ # Check for GNU $ac_path_GREP ++case `"$ac_path_GREP" --version 2>&1` in ++*GNU*) ++ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; ++*) ++ ac_count=0 ++ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" ++ while : ++ do ++ cat "conftest.in" "conftest.in" >"conftest.tmp" ++ mv "conftest.tmp" "conftest.in" ++ cp "conftest.in" "conftest.nl" ++ echo 'GREP' >> "conftest.nl" ++ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break ++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ++ ac_count=`expr $ac_count + 1` ++ if test $ac_count -gt ${ac_path_GREP_max-0}; then ++ # Best one so far, save it but keep looking for a better one ++ ac_cv_path_GREP="$ac_path_GREP" ++ ac_path_GREP_max=$ac_count ++ fi ++ # 10*(2^10) chars as input seems more than enough ++ test $ac_count -gt 10 && break ++ done ++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; ++esac + -+ frag_now->tc_frag_data.reloc_info = current_insn.field_value[0].value; -+ frag_now->tc_frag_data.relaxer = &avr32_lda_relaxer; + -+ if (!avr32_pic) -+ { -+ /* The relaxer will bump the refcount if necessary */ -+ frag_now->tc_frag_data.pool -+ = add_to_cpool(exp, &frag_now->tc_frag_data.pool_entry, 0); -+ } ++ $ac_path_GREP_found && break 3 ++ done ++done + -+ frag_var(rs_machine_dependent, max_size - initial_size, -+ initial_size, initial_subtype, sym, off, buf); ++done ++IFS=$as_save_IFS + -+ return NULL; -+} + -+static const char * -+finish_call(const struct avr32_syntax *syntax ATTRIBUTE_UNUSED) -+{ -+ expressionS *exp = ¤t_insn.immediate; -+ symbolS *sym; -+ offsetT off; -+ int initial_size, max_size; -+ char *buf; ++fi + -+ initial_size = CALL_INITIAL_SIZE; ++GREP="$ac_cv_path_GREP" ++if test -z "$GREP"; then ++ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 ++echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} ++ { (exit 1); exit 1; }; } ++fi + -+ if (avr32_pic) -+ { -+ if (linkrelax) -+ max_size = 10; -+ else -+ max_size = 4; -+ } -+ else -+ max_size = 4; ++else ++ ac_cv_path_GREP=$GREP ++fi + -+ frag_grow(max_size); -+ buf = frag_more(initial_size); -+ dwarf2_emit_insn(initial_size); + -+ frag_now->tc_frag_data.relaxer = &avr32_call_relaxer; ++fi ++{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 ++echo "${ECHO_T}$ac_cv_path_GREP" >&6; } ++ GREP="$ac_cv_path_GREP" + -+ if (exp->X_op == O_symbol) -+ { -+ sym = exp->X_add_symbol; -+ off = exp->X_add_number; -+ } -+ else -+ { -+ sym = make_expr_symbol(exp); -+ off = 0; -+ } + -+ if (!avr32_pic) -+ { -+ /* The relaxer will bump the refcount if necessary */ -+ frag_now->tc_frag_data.pool -+ = add_to_cpool(exp, &frag_now->tc_frag_data.pool_entry, 0); -+ } ++{ echo "$as_me:$LINENO: checking for egrep" >&5 ++echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } ++if test "${ac_cv_path_EGREP+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 ++ then ac_cv_path_EGREP="$GREP -E" ++ else ++ # Extract the first word of "egrep" to use in msg output ++if test -z "$EGREP"; then ++set dummy egrep; ac_prog_name=$2 ++if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +- if echo a | (grep -E '(a|b)') >/dev/null 2>&1 +- then ac_cv_prog_egrep='grep -E' +- else ac_cv_prog_egrep='egrep' ++ ac_path_EGREP_found=false ++# Loop through the user's path and test for each of PROGNAME-LIST ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_prog in egrep; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" ++ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue ++ # Check for GNU ac_path_EGREP and select it if it is found. ++ # Check for GNU $ac_path_EGREP ++case `"$ac_path_EGREP" --version 2>&1` in ++*GNU*) ++ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; ++*) ++ ac_count=0 ++ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" ++ while : ++ do ++ cat "conftest.in" "conftest.in" >"conftest.tmp" ++ mv "conftest.tmp" "conftest.in" ++ cp "conftest.in" "conftest.nl" ++ echo 'EGREP' >> "conftest.nl" ++ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break ++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ++ ac_count=`expr $ac_count + 1` ++ if test $ac_count -gt ${ac_path_EGREP_max-0}; then ++ # Best one so far, save it but keep looking for a better one ++ ac_cv_path_EGREP="$ac_path_EGREP" ++ ac_path_EGREP_max=$ac_count + fi ++ # 10*(2^10) chars as input seems more than enough ++ test $ac_count -gt 10 && break ++ done ++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; ++esac + -+ frag_var(rs_machine_dependent, max_size - initial_size, -+ initial_size, CALL_SUBTYPE_RCALL1, sym, off, buf); + -+ return NULL; -+} ++ $ac_path_EGREP_found && break 3 ++ done ++done + -+void -+md_begin (void) -+{ -+ unsigned long flags = 0; -+ int i; ++done ++IFS=$as_save_IFS + -+ avr32_mnemonic_htab = hash_new(); + -+ if (!avr32_mnemonic_htab) -+ as_fatal(_("virtual memory exhausted")); ++fi + -+ for (i = 0; i < AVR32_NR_MNEMONICS; i++) -+ { -+ hash_insert(avr32_mnemonic_htab, avr32_mnemonic_table[i].name, -+ (void *)&avr32_mnemonic_table[i]); -+ } ++EGREP="$ac_cv_path_EGREP" ++if test -z "$EGREP"; then ++ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 ++echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} ++ { (exit 1); exit 1; }; } ++fi + -+ if (linkrelax) -+ flags |= EF_AVR32_LINKRELAX; -+ if (avr32_pic) -+ flags |= EF_AVR32_PIC; ++else ++ ac_cv_path_EGREP=$EGREP ++fi + -+ bfd_set_private_flags(stdoutput, flags); + -+#ifdef OPC_CONSISTENCY_CHECK -+ if (sizeof(avr32_operand_table)/sizeof(avr32_operand_table[0]) -+ < AVR32_NR_OPERANDS) -+ as_fatal(_("operand table is incomplete")); ++ fi + fi +-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +-echo "${ECHO_T}$ac_cv_prog_egrep" >&6 +- EGREP=$ac_cv_prog_egrep ++{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 ++echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } ++ EGREP="$ac_cv_path_EGREP" + + +-echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 ++echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } + if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5655,35 +6240,31 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_header_stdc=no ++ ac_cv_header_stdc=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ for (i = 0; i < AVR32_NR_OPERANDS; i++) -+ if (avr32_operand_table[i].id != i) -+ as_fatal(_("operand table inconsistency found at index %d\n"), i); -+ pr_debug("%d operands verified\n", AVR32_NR_OPERANDS); ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +@@ -5739,6 +6320,7 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include ++#include + #if ((' ' & 0x0FF) == 0x020) + # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') + # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +@@ -5758,18 +6340,27 @@ main () + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) +- exit(2); +- exit (0); ++ return 2; ++ return 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -5782,12 +6373,14 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_header_stdc=no + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi + -+ for (i = 0; i < AVR32_NR_IFIELDS; i++) -+ if (avr32_ifield_table[i].id != i) -+ as_fatal(_("ifield table inconsistency found at index %d\n"), i); -+ pr_debug("%d instruction fields verified\n", AVR32_NR_IFIELDS); + -+ for (i = 0; i < AVR32_NR_OPCODES; i++) -+ { -+ if (avr32_opc_table[i].id != i) -+ as_fatal(_("opcode table inconsistency found at index %d\n"), i); -+ if ((avr32_opc_table[i].var_field == -1 -+ && avr32_relax_table[i].length != 0) -+ || (avr32_opc_table[i].var_field != -1 -+ && avr32_relax_table[i].length == 0)) -+ as_fatal(_("relax table inconsistency found at index %d\n"), i); -+ } -+ pr_debug("%d opcodes verified\n", AVR32_NR_OPCODES); + fi + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +-echo "${ECHO_T}$ac_cv_header_stdc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 ++echo "${ECHO_T}$ac_cv_header_stdc" >&6; } + if test $ac_cv_header_stdc = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -5796,8 +6389,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +-echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 ++echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } + if test "${ac_cv_c_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5815,10 +6408,10 @@ main () + #ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; +- const charset x; ++ const charset cs; + /* SunOS 4.1.1 cc rejects this. */ +- char const *const *ccp; +- char **p; ++ char const *const *pcpcc; ++ char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; +@@ -5827,16 +6420,17 @@ main () + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; +- ccp = &g + (g ? g-g : 0); ++ pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ +- ++ccp; +- p = (char**) ccp; +- ccp = (char const *const *) p; ++ ++pcpcc; ++ ppc = (char**) pcpcc; ++ pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; ++ if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; +@@ -5855,7 +6449,9 @@ main () + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; ++ if (!foo) return 0; + } ++ return !cs[0] && !zero.x; + #endif + + ; +@@ -5863,38 +6459,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_c_const=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_c_const=no ++ ac_cv_c_const=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ for (i = 0; i < AVR32_NR_SYNTAX; i++) -+ if (avr32_syntax_table[i].id != i) -+ as_fatal(_("syntax table inconsistency found at index %d\n"), i); -+ pr_debug("%d syntax variants verified\n", AVR32_NR_SYNTAX); ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +-echo "${ECHO_T}$ac_cv_c_const" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 ++echo "${ECHO_T}$ac_cv_c_const" >&6; } + if test $ac_cv_c_const = no; then + + cat >>confdefs.h <<\_ACEOF +@@ -5903,8 +6495,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for inline" >&5 +-echo $ECHO_N "checking for inline... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for inline" >&5 ++echo $ECHO_N "checking for inline... $ECHO_C" >&6; } + if test "${ac_cv_c_inline+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -5924,39 +6516,37 @@ $ac_kw foo_t foo () {return 0; } + + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_c_inline=$ac_kw; break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_c_inline=$ac_kw + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + + -+ for (i = 0; i < AVR32_NR_ALIAS; i++) -+ if (avr32_alias_table[i].id != i) -+ as_fatal(_("alias table inconsistency found at index %d\n"), i); -+ pr_debug("%d aliases verified\n", AVR32_NR_ALIAS); + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ for (i = 0; i < AVR32_NR_MNEMONICS; i++) -+ if (avr32_mnemonic_table[i].id != i) -+ as_fatal(_("mnemonic table inconsistency found at index %d\n"), i); -+ pr_debug("%d mnemonics verified\n", AVR32_NR_MNEMONICS); -+#endif -+} ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ test "$ac_cv_c_inline" != no && break + done + + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 +-echo "${ECHO_T}$ac_cv_c_inline" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 ++echo "${ECHO_T}$ac_cv_c_inline" >&6; } + + + case $ac_cv_c_inline in +@@ -5988,9 +6578,9 @@ for ac_header in sys/types.h sys/stat.h + inttypes.h stdint.h unistd.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -6004,38 +6594,35 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_Header=no" ++ eval "$as_ac_Header=no" + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+void -+md_assemble (char *str) -+{ -+ struct avr32_mnemonic *mnemonic; -+ char *p, c; ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +@@ -6046,8 +6633,8 @@ fi + done + + +-echo "$as_me:$LINENO: checking for off_t" >&5 +-echo $ECHO_N "checking for off_t... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for off_t" >&5 ++echo $ECHO_N "checking for off_t... $ECHO_C" >&6; } + if test "${ac_cv_type_off_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6058,62 +6645,59 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++typedef off_t ac__type_new_; + int + main () + { +-if ((off_t *) 0) ++if ((ac__type_new_ *) 0) + return 0; +-if (sizeof (off_t)) ++if (sizeof (ac__type_new_)) + return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_type_off_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_type_off_t=no ++ ac_cv_type_off_t=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ memset(¤t_insn, 0, sizeof(current_insn)); -+ current_insn.immediate.X_op = O_constant; ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 +-echo "${ECHO_T}$ac_cv_type_off_t" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 ++echo "${ECHO_T}$ac_cv_type_off_t" >&6; } + if test $ac_cv_type_off_t = yes; then + : + else + + cat >>confdefs.h <<_ACEOF +-#define off_t long ++#define off_t long int + _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for size_t" >&5 +-echo $ECHO_N "checking for size_t... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for size_t" >&5 ++echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } + if test "${ac_cv_type_size_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6124,64 +6708,61 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + $ac_includes_default ++typedef size_t ac__type_new_; + int + main () + { +-if ((size_t *) 0) ++if ((ac__type_new_ *) 0) + return 0; +-if (sizeof (size_t)) ++if (sizeof (ac__type_new_)) + return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_type_size_t=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_type_size_t=no ++ ac_cv_type_size_t=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ skip_whitespace(str); -+ for (p = str; *p; p++) -+ if (*p == ' ') -+ break; -+ c = *p; -+ *p = 0; ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 +-echo "${ECHO_T}$ac_cv_type_size_t" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 ++echo "${ECHO_T}$ac_cv_type_size_t" >&6; } + if test $ac_cv_type_size_t = yes; then + : + else + + cat >>confdefs.h <<_ACEOF +-#define size_t unsigned ++#define size_t unsigned int + _ACEOF + + fi + + # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works + # for constant arguments. Useless! +-echo "$as_me:$LINENO: checking for working alloca.h" >&5 +-echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for working alloca.h" >&5 ++echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } + if test "${ac_cv_working_alloca_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6196,44 +6777,42 @@ int + main () + { + char *p = (char *) alloca (2 * sizeof (int)); ++ if (p) return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_working_alloca_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_working_alloca_h=no ++ ac_cv_working_alloca_h=no + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ mnemonic = hash_find(avr32_mnemonic_htab, str); -+ *p = c; -+ if (c) p++; ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 +-echo "${ECHO_T}$ac_cv_working_alloca_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 ++echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } + if test $ac_cv_working_alloca_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -6242,8 +6821,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for alloca" >&5 +-echo $ECHO_N "checking for alloca... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for alloca" >&5 ++echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } + if test "${ac_cv_func_alloca_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6260,7 +6839,7 @@ cat >>conftest.$ac_ext <<_ACEOF + # include + # define alloca _alloca + # else +-# if HAVE_ALLOCA_H ++# ifdef HAVE_ALLOCA_H + # include + # else + # ifdef _AIX +@@ -6278,44 +6857,42 @@ int + main () + { + char *p = (char *) alloca (1); ++ if (p) return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_func_alloca_works=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_func_alloca_works=no ++ ac_cv_func_alloca_works=no + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ if (mnemonic) -+ { -+ const struct avr32_syntax *syntax; ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 +-echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 ++echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } + + if test $ac_cv_func_alloca_works = yes; then + +@@ -6329,15 +6906,15 @@ else + # contain a buggy version. If you still want to use their alloca, + # use ar to extract alloca.o from them instead of compiling alloca.c. + +-ALLOCA=alloca.$ac_objext ++ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + + cat >>confdefs.h <<\_ACEOF + #define C_ALLOCA 1 + _ACEOF + + +-echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 +-echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 ++echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } + if test "${ac_cv_os_cray+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6347,7 +6924,7 @@ _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-#if defined(CRAY) && ! defined(CRAY2) ++#if defined CRAY && ! defined CRAY2 + webecray + #else + wenotbecray +@@ -6363,14 +6940,14 @@ fi + rm -f conftest* + + fi +-echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 +-echo "${ECHO_T}$ac_cv_os_cray" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 ++echo "${ECHO_T}$ac_cv_os_cray" >&6; } + if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -6396,68 +6973,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ for (syntax = mnemonic->syntax; syntax; syntax = syntax->next) -+ { -+ const char *errmsg = NULL; ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -6470,8 +7039,8 @@ fi + done + fi + +-echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 +-echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 ++echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } + if test "${ac_cv_c_stack_direction+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6484,6 +7053,7 @@ _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ ++$ac_includes_default + int + find_stack_direction () + { +@@ -6501,17 +7071,26 @@ find_stack_direction () + int + main () + { +- exit (find_stack_direction () < 0); ++ return find_stack_direction () < 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -6524,11 +7103,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_c_stack_direction=-1 + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi + -+ if (syntax_matches(syntax, p)) -+ { -+ if (!(syntax->isa_flags & avr32_arch->isa_flags)) -+ { -+ as_bad(_("Selected architecture `%s' does not support `%s'"), -+ avr32_arch->name, str); -+ return; -+ } + -+ current_insn.syntax = syntax; -+ parse_operands(p); + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 +-echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 ++echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } + + cat >>confdefs.h <<_ACEOF + #define STACK_DIRECTION $ac_cv_c_stack_direction +@@ -6542,18 +7123,19 @@ fi + for ac_header in stdlib.h unistd.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -6564,41 +7146,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 + -+ switch (syntax->type) -+ { -+ case AVR32_PARSER_NORMAL: -+ errmsg = finish_insn(syntax->u.opc); -+ break; -+ case AVR32_PARSER_ALIAS: -+ errmsg = finish_alias(syntax->u.alias); -+ break; -+ case AVR32_PARSER_LDA: -+ errmsg = finish_lda(syntax); -+ break; -+ case AVR32_PARSER_CALL: -+ errmsg = finish_call(syntax); -+ break; -+ default: -+ BAD_CASE(syntax->type); -+ break; -+ } ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -6607,24 +7185,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -6632,9 +7208,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi + -+ if (errmsg) -+ as_bad("%s in `%s'", errmsg, str); + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -6658,25 +7235,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 + -+ return; -+ } -+ } + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -6692,9 +7263,9 @@ done + for ac_func in getpagesize + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -6720,68 +7291,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ as_bad(_("unrecognized form of instruction: `%s'"), str); -+ } -+ else -+ as_bad(_("unrecognized instruction `%s'"), str); -+} ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -6790,8 +7353,8 @@ _ACEOF + fi + done + +-echo "$as_me:$LINENO: checking for working mmap" >&5 +-echo $ECHO_N "checking for working mmap... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for working mmap" >&5 ++echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; } + if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -6833,21 +7396,21 @@ $ac_includes_default + #include + #include + +-#if !STDC_HEADERS && !HAVE_STDLIB_H ++#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H + char *malloc (); + #endif + + /* This mess was copied from the GNU getpagesize.h. */ +-#if !HAVE_GETPAGESIZE ++#ifndef HAVE_GETPAGESIZE + /* Assume that all systems that can run configure have sys/param.h. */ +-# if !HAVE_SYS_PARAM_H ++# ifndef HAVE_SYS_PARAM_H + # define HAVE_SYS_PARAM_H 1 + # endif + + # ifdef _SC_PAGESIZE + # define getpagesize() sysconf(_SC_PAGESIZE) + # else /* no _SC_PAGESIZE */ +-# if HAVE_SYS_PARAM_H ++# ifdef HAVE_SYS_PARAM_H + # include + # ifdef EXEC_PAGESIZE + # define getpagesize() EXEC_PAGESIZE +@@ -6886,15 +7449,15 @@ main () + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) +- exit (1); ++ return 1; + if (write (fd, data, pagesize) != pagesize) +- exit (1); ++ return 1; + close (fd); + + /* Next, try to mmap the file at a fixed address which already has +@@ -6902,17 +7465,17 @@ main () + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) +- exit (1); ++ return 1; + data2 = (char *) malloc (2 * pagesize); + if (!data2) +- exit (1); +- data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1); ++ return 1; ++ data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1); + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) +- exit (1); ++ return 1; + + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on +@@ -6921,24 +7484,33 @@ main () + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) +- exit (1); ++ return 1; + if (read (fd, data3, pagesize) != pagesize) +- exit (1); ++ return 1; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) +- exit (1); ++ return 1; + close (fd); +- exit (0); ++ return 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -6951,11 +7523,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_func_mmap_fixed_mapped=no + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi + -+void avr32_cleanup(void) -+{ -+ struct cpool *pool; + -+ /* Emit any constant pools that haven't been explicitly flushed with -+ a .cpool directive. */ -+ for (pool = cpool_list; pool; pool = pool->next) -+ { -+ subseg_set(pool->section, pool->sub_section); -+ s_cpool(0); -+ } -+} + fi +-echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 +-echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 ++echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; } + if test $ac_cv_func_mmap_fixed_mapped = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -6979,18 +7553,19 @@ for ac_header in argz.h limits.h locale. + unistd.h values.h sys/param.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -7001,41 +7576,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 + -+/* Handle any PIC-related operands in data allocation pseudo-ops */ -+void -+avr32_cons_fix_new (fragS *frag, int off, int size, expressionS *exp) -+{ -+ bfd_reloc_code_real_type r_type = BFD_RELOC_UNUSED; -+ int pcrel = 0; ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -7044,24 +7615,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -7069,9 +7638,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi + -+ pr_debug("%s:%u: cons_fix_new, add_sym: %s, op_sym: %s, op: %d, add_num: %d\n", -+ frag->fr_file, frag->fr_line, -+ exp->X_add_symbol?S_GET_NAME(exp->X_add_symbol):"(none)", -+ exp->X_op_symbol?S_GET_NAME(exp->X_op_symbol):"(none)", -+ exp->X_op, exp->X_add_number); + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -7095,25 +7665,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 + -+ if (exp->X_op == O_subtract && exp->X_op_symbol) -+ { -+ if (exp->X_op_symbol == GOT_symbol) -+ { -+ if (size != 4) -+ goto bad_size; -+ r_type = BFD_RELOC_AVR32_GOTPC; -+ exp->X_op = O_symbol; -+ exp->X_op_symbol = NULL; -+ } -+ } -+ else if (exp->X_op == O_got) -+ { -+ switch (size) -+ { -+ case 1: -+ r_type = BFD_RELOC_AVR32_GOT8; -+ break; -+ case 2: -+ r_type = BFD_RELOC_AVR32_GOT16; -+ break; -+ case 4: -+ r_type = BFD_RELOC_AVR32_GOT32; -+ break; -+ default: -+ goto bad_size; -+ } + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -7139,9 +7703,9 @@ for ac_func in getcwd munmap putenv sete + __argz_count __argz_stringify __argz_next + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -7167,68 +7731,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ exp->X_op = O_symbol; -+ } ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -7243,9 +7799,9 @@ done + for ac_func in stpcpy + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -7271,68 +7827,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ if (r_type == BFD_RELOC_UNUSED) -+ switch (size) -+ { -+ case 1: -+ r_type = BFD_RELOC_8; -+ break; -+ case 2: -+ r_type = BFD_RELOC_16; -+ break; -+ case 4: -+ r_type = BFD_RELOC_32; -+ break; -+ default: -+ goto bad_size; -+ } -+ else if (size != 4) -+ { -+ bad_size: -+ as_bad(_("unsupported BFD relocation size %u"), size); -+ r_type = BFD_RELOC_UNUSED; -+ } ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -7351,8 +7899,8 @@ _ACEOF + fi + + if test $ac_cv_header_locale_h = yes; then +- echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 +-echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 ++echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6; } + if test "${am_cv_val_LC_MESSAGES+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7372,39 +7920,36 @@ return LC_MESSAGES + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + am_cv_val_LC_MESSAGES=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-am_cv_val_LC_MESSAGES=no ++ am_cv_val_LC_MESSAGES=no + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ fix_new_exp (frag, off, size, exp, pcrel, r_type); -+} ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 +-echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6 ++{ echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 ++echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6; } + if test $am_cv_val_LC_MESSAGES = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -7413,34 +7958,34 @@ _ACEOF + + fi + fi +- echo "$as_me:$LINENO: checking whether NLS is requested" >&5 +-echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 +- # Check whether --enable-nls or --disable-nls was given. ++ { echo "$as_me:$LINENO: checking whether NLS is requested" >&5 ++echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; } ++ # Check whether --enable-nls was given. + if test "${enable_nls+set}" = set; then +- enableval="$enable_nls" +- USE_NLS=$enableval ++ enableval=$enable_nls; USE_NLS=$enableval + else + USE_NLS=yes +-fi; +- echo "$as_me:$LINENO: result: $USE_NLS" >&5 +-echo "${ECHO_T}$USE_NLS" >&6 ++fi + -+static void -+avr32_frob_section(bfd *abfd ATTRIBUTE_UNUSED, segT sec, -+ void *ignore ATTRIBUTE_UNUSED) -+{ -+ segment_info_type *seginfo; -+ fixS *fix; ++ { echo "$as_me:$LINENO: result: $USE_NLS" >&5 ++echo "${ECHO_T}$USE_NLS" >&6; } + + + USE_INCLUDED_LIBINTL=no + + if test "$USE_NLS" = "yes"; then +- echo "$as_me:$LINENO: checking whether included gettext is requested" >&5 +-echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking whether included gettext is requested" >&5 ++echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6; } + +-# Check whether --with-included-gettext or --without-included-gettext was given. ++# Check whether --with-included-gettext was given. + if test "${with_included_gettext+set}" = set; then +- withval="$with_included_gettext" +- nls_cv_force_use_gnu_gettext=$withval ++ withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval + else + nls_cv_force_use_gnu_gettext=no +-fi; +- echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5 +-echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6 ++fi + -+ seginfo = seg_info(sec); -+ if (!seginfo) -+ return; ++ { echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5 ++echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6; } + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then +@@ -7449,17 +7994,17 @@ echo "${ECHO_T}$nls_cv_force_use_gnu_get + CATOBJEXT= + + if test "${ac_cv_header_libintl_h+set}" = set; then +- echo "$as_me:$LINENO: checking for libintl.h" >&5 +-echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for libintl.h" >&5 ++echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6; } + if test "${ac_cv_header_libintl_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 +-echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 ++echo "${ECHO_T}$ac_cv_header_libintl_h" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking libintl.h usability" >&5 +-echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking libintl.h usability" >&5 ++echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -7470,41 +8015,37 @@ $ac_includes_default + #include + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 + -+ for (fix = seginfo->fix_root; fix; fix = fix->fx_next) -+ { -+ if (fix->fx_done) -+ continue; ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking libintl.h presence" >&5 +-echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking libintl.h presence" >&5 ++echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -7513,24 +8054,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -7538,9 +8077,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi + -+ if (fix->fx_r_type == BFD_RELOC_AVR32_SUB5 -+ && fix->fx_addsy && fix->fx_subsy) -+ { -+ if (S_GET_SEGMENT(fix->fx_addsy) != S_GET_SEGMENT(fix->fx_subsy) -+ || linkrelax) -+ { -+ symbolS *tmp; -+#ifdef DEBUG -+ fprintf(stderr, "Swapping symbols in fixup:\n"); -+ print_fixup(fix); -+#endif -+ tmp = fix->fx_addsy; -+ fix->fx_addsy = fix->fx_subsy; -+ fix->fx_subsy = tmp; -+ fix->fx_offset = -fix->fx_offset; -+ } -+ } -+ } -+} + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -7564,30 +8104,23 @@ echo "$as_me: WARNING: libintl.h: se + echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: libintl.h: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: libintl.h: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 + -+/* We need to look for SUB5 instructions with expressions that will be -+ made PC-relative and switch fx_addsy with fx_subsy. This has to be -+ done before adjustment or the wrong symbol might be adjusted. + ;; + esac +-echo "$as_me:$LINENO: checking for libintl.h" >&5 +-echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for libintl.h" >&5 ++echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6; } + if test "${ac_cv_header_libintl_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_cv_header_libintl_h=$ac_header_preproc + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 +-echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 ++echo "${ECHO_T}$ac_cv_header_libintl_h" >&6; } + + fi + if test $ac_cv_header_libintl_h = yes; then +- echo "$as_me:$LINENO: checking for gettext in libc" >&5 +-echo $ECHO_N "checking for gettext in libc... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for gettext in libc" >&5 ++echo $ECHO_N "checking for gettext in libc... $ECHO_C" >&6; } + if test "${gt_cv_func_gettext_libc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7607,43 +8140,40 @@ return (int) gettext ("") + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + gt_cv_func_gettext_libc=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-gt_cv_func_gettext_libc=no ++ gt_cv_func_gettext_libc=no + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ This applies to fixups that are a result of expressions like -(sym -+ - .) and that will make it all the way to md_apply_fix3(). LDA -+ does the right thing in convert_frag, so we must not convert -+ those. */ -+void -+avr32_frob_file(void) -+{ -+ /* if (1 || !linkrelax) -+ return; */ ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5 +-echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6 ++{ echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5 ++echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6; } + + if test "$gt_cv_func_gettext_libc" != "yes"; then +- echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5 +-echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5 ++echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6; } + if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7656,59 +8186,56 @@ cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char bindtextdomain (); + int + main () + { +-bindtextdomain (); ++return bindtextdomain (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_lib_intl_bindtextdomain=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_lib_intl_bindtextdomain=no ++ ac_cv_lib_intl_bindtextdomain=no + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ bfd_map_over_sections(stdoutput, avr32_frob_section, NULL); -+} ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LIBS=$ac_check_lib_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5 +-echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5 ++echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6; } + if test $ac_cv_lib_intl_bindtextdomain = yes; then +- echo "$as_me:$LINENO: checking for gettext in libintl" >&5 +-echo $ECHO_N "checking for gettext in libintl... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for gettext in libintl" >&5 ++echo $ECHO_N "checking for gettext in libintl... $ECHO_C" >&6; } + if test "${gt_cv_func_gettext_libintl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7728,39 +8255,36 @@ return (int) gettext ("") + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + gt_cv_func_gettext_libintl=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-gt_cv_func_gettext_libintl=no ++ gt_cv_func_gettext_libintl=no + fi +-rm -f conftest.err conftest.$ac_objext \ + -+static bfd_boolean -+convert_to_diff_reloc(fixS *fixP) -+{ -+ switch (fixP->fx_r_type) -+ { -+ case BFD_RELOC_32: -+ fixP->fx_r_type = BFD_RELOC_AVR32_DIFF32; -+ break; -+ case BFD_RELOC_16: -+ fixP->fx_r_type = BFD_RELOC_AVR32_DIFF16; -+ break; -+ case BFD_RELOC_8: -+ fixP->fx_r_type = BFD_RELOC_AVR32_DIFF8; -+ break; -+ default: -+ return FALSE; -+ } ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libintl" >&5 +-echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6 ++{ echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libintl" >&5 ++echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6; } + fi + + fi +@@ -7774,8 +8298,8 @@ _ACEOF + + # Extract the first word of "msgfmt", so it can be a program name with args. + set dummy msgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7801,20 +8325,20 @@ esac + fi + MSGFMT="$ac_cv_path_MSGFMT" + if test -n "$MSGFMT"; then +- echo "$as_me:$LINENO: result: $MSGFMT" >&5 +-echo "${ECHO_T}$MSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $MSGFMT" >&5 ++echo "${ECHO_T}$MSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + if test "$MSGFMT" != "no"; then + + for ac_func in dcgettext + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -7840,68 +8364,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ return TRUE; -+} ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -7912,8 +8428,8 @@ done + + # Extract the first word of "gmsgfmt", so it can be a program name with args. + set dummy gmsgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7928,32 +8444,33 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; + esac + fi + GMSGFMT=$ac_cv_path_GMSGFMT +- + if test -n "$GMSGFMT"; then +- echo "$as_me:$LINENO: result: $GMSGFMT" >&5 +-echo "${ECHO_T}$GMSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $GMSGFMT" >&5 ++echo "${ECHO_T}$GMSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+/* Simplify a fixup. If possible, the fixup is reduced to a single -+ constant which is written to the output file. Otherwise, a -+ relocation is generated so that the linker can take care of the -+ rest. + # Extract the first word of "xgettext", so it can be a program name with args. + set dummy xgettext; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -7979,11 +8496,11 @@ esac + fi + XGETTEXT="$ac_cv_path_XGETTEXT" + if test -n "$XGETTEXT"; then +- echo "$as_me:$LINENO: result: $XGETTEXT" >&5 +-echo "${ECHO_T}$XGETTEXT" >&6 ++ { echo "$as_me:$LINENO: result: $XGETTEXT" >&5 ++echo "${ECHO_T}$XGETTEXT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + cat >conftest.$ac_ext <<_ACEOF +@@ -8003,37 +8520,34 @@ extern int _nl_msg_cat_cntr; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + CATOBJEXT=.gmo + DATADIRNAME=share + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-CATOBJEXT=.mo ++ CATOBJEXT=.mo + DATADIRNAME=lib + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ ELF relocations have certain constraints: They can only take a -+ single symbol and a single addend. This means that for difference -+ expressions, we _must_ get rid of the fx_subsy symbol somehow. ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + INSTOBJEXT=.mo + fi +@@ -8055,8 +8569,8 @@ fi + INTLOBJS="\$(GETTOBJS)" + # Extract the first word of "msgfmt", so it can be a program name with args. + set dummy msgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8082,17 +8596,17 @@ esac + fi + MSGFMT="$ac_cv_path_MSGFMT" + if test -n "$MSGFMT"; then +- echo "$as_me:$LINENO: result: $MSGFMT" >&5 +-echo "${ECHO_T}$MSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $MSGFMT" >&5 ++echo "${ECHO_T}$MSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. + set dummy gmsgfmt; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8107,32 +8621,33 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; + esac + fi + GMSGFMT=$ac_cv_path_GMSGFMT +- + if test -n "$GMSGFMT"; then +- echo "$as_me:$LINENO: result: $GMSGFMT" >&5 +-echo "${ECHO_T}$GMSGFMT" >&6 ++ { echo "$as_me:$LINENO: result: $GMSGFMT" >&5 ++echo "${ECHO_T}$GMSGFMT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+ The difference between two labels in the same section can be -+ calculated directly unless 'linkrelax' is set, or a relocation is -+ forced. If so, we must emit a R_AVR32_DIFFxx relocation. If there -+ are addends involved at this point, we must be especially careful -+ as the relocation must point exactly to the symbol being -+ subtracted. + # Extract the first word of "xgettext", so it can be a program name with args. + set dummy xgettext; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8158,11 +8673,11 @@ esac + fi + XGETTEXT="$ac_cv_path_XGETTEXT" + if test -n "$XGETTEXT"; then +- echo "$as_me:$LINENO: result: $XGETTEXT" >&5 +-echo "${ECHO_T}$XGETTEXT" >&6 ++ { echo "$as_me:$LINENO: result: $XGETTEXT" >&5 ++echo "${ECHO_T}$XGETTEXT" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + +@@ -8181,8 +8696,8 @@ fi + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else +- echo "$as_me:$LINENO: result: found xgettext programs is not GNU xgettext; ignore it" >&5 +-echo "${ECHO_T}found xgettext programs is not GNU xgettext; ignore it" >&6 ++ { echo "$as_me:$LINENO: result: found xgettext programs is not GNU xgettext; ignore it" >&5 ++echo "${ECHO_T}found xgettext programs is not GNU xgettext; ignore it" >&6; } + XGETTEXT=":" + fi + fi +@@ -8231,8 +8746,8 @@ _ACEOF + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else +- echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 +-echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 ++echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6; } + NEW_LINGUAS= + for lang in ${LINGUAS=$ALL_LINGUAS}; do + case "$ALL_LINGUAS" in +@@ -8240,8 +8755,8 @@ echo $ECHO_N "checking for catalogs to b + esac + done + LINGUAS=$NEW_LINGUAS +- echo "$as_me:$LINENO: result: $LINGUAS" >&5 +-echo "${ECHO_T}$LINGUAS" >&6 ++ { echo "$as_me:$LINENO: result: $LINGUAS" >&5 ++echo "${ECHO_T}$LINGUAS" >&6; } + fi + + if test -n "$LINGUAS"; then +@@ -8260,17 +8775,17 @@ echo "${ECHO_T}$LINGUAS" >&6 + if test -f $srcdir/po2tbl.sed.in; then + if test "$CATOBJEXT" = ".cat"; then + if test "${ac_cv_header_linux_version_h+set}" = set; then +- echo "$as_me:$LINENO: checking for linux/version.h" >&5 +-echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for linux/version.h" >&5 ++echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6; } + if test "${ac_cv_header_linux_version_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 +-echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 ++echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking linux/version.h usability" >&5 +-echo $ECHO_N "checking linux/version.h usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking linux/version.h usability" >&5 ++echo $ECHO_N "checking linux/version.h usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8281,41 +8796,37 @@ $ac_includes_default + #include + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 + -+ When subtracting a symbol defined in the same section as the fixup, -+ we might be able to convert it to a PC-relative expression, unless -+ linkrelax is set. If this is the case, there's no way we can make -+ sure that the difference between the fixup and fx_subsy stays -+ constant. So for now, we're just going to disallow that. -+ */ -+void -+avr32_process_fixup(fixS *fixP, segT this_segment) -+{ -+ segT add_symbol_segment = absolute_section; -+ segT sub_symbol_segment = absolute_section; -+ symbolS *fx_addsy, *fx_subsy; -+ offsetT value = 0, fx_offset; -+ bfd_boolean apply = FALSE; ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking linux/version.h presence" >&5 +-echo $ECHO_N "checking linux/version.h presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking linux/version.h presence" >&5 ++echo $ECHO_N "checking linux/version.h presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8324,24 +8835,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -8349,9 +8858,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi + -+ assert(this_segment != absolute_section); + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -8375,25 +8885,18 @@ echo "$as_me: WARNING: linux/version.h: + echo "$as_me: WARNING: linux/version.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: linux/version.h: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: linux/version.h: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 + -+ if (fixP->fx_r_type >= BFD_RELOC_UNUSED) -+ { -+ as_bad_where(fixP->fx_file, fixP->fx_line, -+ _("Bad relocation type %d\n"), fixP->fx_r_type); -+ return; -+ } + ;; + esac +-echo "$as_me:$LINENO: checking for linux/version.h" >&5 +-echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for linux/version.h" >&5 ++echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6; } + if test "${ac_cv_header_linux_version_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_cv_header_linux_version_h=$ac_header_preproc + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 +-echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 ++echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6; } + + fi + if test $ac_cv_header_linux_version_h = yes; then +@@ -8443,17 +8946,17 @@ fi + fi + + +-echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 +-echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 +- # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. ++{ echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 ++echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; } ++ # Check whether --enable-maintainer-mode was given. + if test "${enable_maintainer_mode+set}" = set; then +- enableval="$enable_maintainer_mode" +- USE_MAINTAINER_MODE=$enableval ++ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval + else + USE_MAINTAINER_MODE=no +-fi; +- echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 +-echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 ++fi + -+ /* BFD_RELOC_AVR32_SUB5 fixups have been swapped by avr32_frob_section() */ -+ fx_addsy = fixP->fx_addsy; -+ fx_subsy = fixP->fx_subsy; -+ fx_offset = fixP->fx_offset; ++ { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 ++echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; } + + + if test $USE_MAINTAINER_MODE = yes; then +@@ -8493,8 +8996,8 @@ AR=${AR-ar} + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. + set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8507,32 +9010,34 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + + fi + fi + RANLIB=$ac_cv_prog_RANLIB + if test -n "$RANLIB"; then +- echo "$as_me:$LINENO: result: $RANLIB" >&5 +-echo "${ECHO_T}$RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $RANLIB" >&5 ++echo "${ECHO_T}$RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + + -+ if (fx_addsy) -+ add_symbol_segment = S_GET_SEGMENT(fx_addsy); + fi + if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. + set dummy ranlib; ac_word=$2 +-echo "$as_me:$LINENO: checking for $ac_word" >&5 +-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for $ac_word" >&5 ++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } + if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8545,27 +9050,41 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done ++IFS=$as_save_IFS + +- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" + fi + fi + ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB + if test -n "$ac_ct_RANLIB"; then +- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +-echo "${ECHO_T}$ac_ct_RANLIB" >&6 ++ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 ++echo "${ECHO_T}$ac_ct_RANLIB" >&6; } + else +- echo "$as_me:$LINENO: result: no" >&5 +-echo "${ECHO_T}no" >&6 ++ { echo "$as_me:$LINENO: result: no" >&5 ++echo "${ECHO_T}no" >&6; } + fi + +- RANLIB=$ac_ct_RANLIB ++ if test "x$ac_ct_RANLIB" = x; then ++ RANLIB=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&5 ++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools ++whose name does not start with the host triplet. If you think this ++configuration is useful to you, please write to autoconf@gnu.org." >&2;} ++ac_tool_warned=yes ;; ++esac ++ RANLIB=$ac_ct_RANLIB ++ fi + else + RANLIB="$ac_cv_prog_RANLIB" + fi +@@ -8583,8 +9102,8 @@ fi + # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" + # OS/2's system install, which has a completely different semantic + # ./install, which can be erroneously created by make from ./install.sh. +-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 ++echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } + if test -z "$INSTALL"; then + if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +@@ -8606,7 +9125,7 @@ case $as_dir/ in + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do +- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then ++ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. +@@ -8625,21 +9144,22 @@ case $as_dir/ in + ;; + esac + done ++IFS=$as_save_IFS + + + fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else +- # As a last resort, use the slow shell script. We don't cache a +- # path for INSTALL within a source directory, because that will ++ # As a last resort, use the slow shell script. Don't cache a ++ # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is +- # removed, or if the path is relative. ++ # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi + fi +-echo "$as_me:$LINENO: result: $INSTALL" >&5 +-echo "${ECHO_T}$INSTALL" >&6 ++{ echo "$as_me:$LINENO: result: $INSTALL" >&5 ++echo "${ECHO_T}$INSTALL" >&6; } + + # Use test -z because SunOS4 sh mishandles braces in ${var-val}. + # It thinks the first close brace ends the variable substitution. +@@ -8663,8 +9183,8 @@ fi + if test "x$cross_compiling" = "xno"; then + EXEEXT_FOR_BUILD='$(EXEEXT)' + else +- echo "$as_me:$LINENO: checking for build system executable suffix" >&5 +-echo $ECHO_N "checking for build system executable suffix... $ECHO_C" >&6 ++ { echo "$as_me:$LINENO: checking for build system executable suffix" >&5 ++echo $ECHO_N "checking for build system executable suffix... $ECHO_C" >&6; } + if test "${bfd_cv_build_exeext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8681,8 +9201,8 @@ else + rm -f conftest* + test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no + fi +-echo "$as_me:$LINENO: result: $bfd_cv_build_exeext" >&5 +-echo "${ECHO_T}$bfd_cv_build_exeext" >&6 ++{ echo "$as_me:$LINENO: result: $bfd_cv_build_exeext" >&5 ++echo "${ECHO_T}$bfd_cv_build_exeext" >&6; } + EXEEXT_FOR_BUILD="" + test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext} + fi +@@ -8704,18 +9224,19 @@ esac + for ac_header in string.h strings.h stdlib.h unistd.h fcntl.h sys/file.h + do + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +-if eval "test \"\${$as_ac_Header+set}\" = set"; then +- echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then ++ { echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + else + # Is the header compilable? +-echo "$as_me:$LINENO: checking $ac_header usability" >&5 +-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8726,41 +9247,37 @@ $ac_includes_default + #include <$ac_header> + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_header_compiler=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_header_compiler=no ++ ac_header_compiler=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +-echo "${ECHO_T}$ac_header_compiler" >&6 + -+ if (fx_subsy) -+ { -+ resolve_symbol_value(fx_subsy); -+ sub_symbol_segment = S_GET_SEGMENT(fx_subsy); ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6; } + + # Is the header present? +-echo "$as_me:$LINENO: checking $ac_header presence" >&5 +-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -8769,24 +9286,22 @@ cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + #include <$ac_header> + _ACEOF +-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 +- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } >/dev/null; then +- if test -s conftest.err; then +- ac_cpp_err=$ac_c_preproc_warn_flag +- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag +- else +- ac_cpp_err= +- fi +-else +- ac_cpp_err=yes +-fi +-if test -z "$ac_cpp_err"; then ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then + ac_header_preproc=yes + else + echo "$as_me: failed program was:" >&5 +@@ -8794,9 +9309,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no + fi + -+ if (sub_symbol_segment == this_segment -+ && (!linkrelax -+ || S_GET_VALUE(fx_subsy) == (fixP->fx_frag->fr_address -+ + fixP->fx_where))) -+ { -+ fixP->fx_pcrel = TRUE; -+ fx_offset += (fixP->fx_frag->fr_address + fixP->fx_where -+ - S_GET_VALUE(fx_subsy)); -+ fx_subsy = NULL; -+ } -+ else if (sub_symbol_segment == absolute_section) -+ { -+ /* The symbol is really a constant. */ -+ fx_offset -= S_GET_VALUE(fx_subsy); -+ fx_subsy = NULL; -+ } -+ else if (SEG_NORMAL(add_symbol_segment) -+ && sub_symbol_segment == add_symbol_segment -+ && (!linkrelax || convert_to_diff_reloc(fixP))) -+ { -+ /* Difference between two labels in the same section. */ -+ if (linkrelax) -+ { -+ /* convert_to_diff() has ensured that the reloc type is -+ either DIFF32, DIFF16 or DIFF8. */ -+ value = (S_GET_VALUE(fx_addsy) + fixP->fx_offset -+ - S_GET_VALUE(fx_subsy)); + rm -f conftest.err conftest.$ac_ext +-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +-echo "${ECHO_T}$ac_header_preproc" >&6 ++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6; } + + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +@@ -8820,25 +9336,19 @@ echo "$as_me: WARNING: $ac_header: s + echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 + echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +- ( +- cat <<\_ASBOX +-## ------------------------------------------ ## +-## Report this to the AC_PACKAGE_NAME lists. ## +-## ------------------------------------------ ## +-_ASBOX +- ) | +- sed "s/^/$as_me: WARNING: /" >&2 + -+ /* Try to convert it to a section symbol if possible */ -+ if (!S_FORCE_RELOC(fx_addsy, 1) -+ && !(sub_symbol_segment->flags & SEC_THREAD_LOCAL)) -+ { -+ fx_offset = S_GET_VALUE(fx_subsy); -+ fx_addsy = section_symbol(sub_symbol_segment); -+ } -+ else -+ { -+ fx_addsy = fx_subsy; -+ fx_offset = 0; -+ } + ;; + esac +-echo "$as_me:$LINENO: checking for $ac_header" >&5 +-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_Header+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } ++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + eval "$as_ac_Header=\$ac_header_preproc" + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_Header'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + + fi + if test `eval echo '${'$as_ac_Header'}'` = yes; then +@@ -8850,8 +9360,8 @@ fi + + done + +-echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5 +-echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5 ++echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6; } + if test "${ac_cv_header_sys_wait_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8864,7 +9374,7 @@ cat >>conftest.$ac_ext <<_ACEOF + #include + #include + #ifndef WEXITSTATUS +-# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) ++# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) + #endif + #ifndef WIFEXITED + # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +@@ -8881,38 +9391,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_header_sys_wait_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_header_sys_wait_h=no ++ ac_cv_header_sys_wait_h=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ fx_subsy = NULL; -+ apply = TRUE; -+ } -+ else -+ { -+ fx_offset += S_GET_VALUE(fx_addsy); -+ fx_offset -= S_GET_VALUE(fx_subsy); -+ fx_addsy = NULL; -+ fx_subsy = NULL; -+ } -+ } -+ else -+ { -+ as_bad_where(fixP->fx_file, fixP->fx_line, -+ _("can't resolve `%s' {%s section} - `%s' {%s section}"), -+ fx_addsy ? S_GET_NAME (fx_addsy) : "0", -+ segment_name (add_symbol_segment), -+ S_GET_NAME (fx_subsy), -+ segment_name (sub_symbol_segment)); -+ return; -+ } -+ } ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 +-echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 ++echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6; } + if test $ac_cv_header_sys_wait_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -8923,8 +9429,8 @@ fi + + # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works + # for constant arguments. Useless! +-echo "$as_me:$LINENO: checking for working alloca.h" >&5 +-echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for working alloca.h" >&5 ++echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } + if test "${ac_cv_working_alloca_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -8939,44 +9445,42 @@ int + main () + { + char *p = (char *) alloca (2 * sizeof (int)); ++ if (p) return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_working_alloca_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_working_alloca_h=no ++ ac_cv_working_alloca_h=no + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ if (fx_addsy && !TC_FORCE_RELOCATION(fixP)) -+ { -+ if (add_symbol_segment == this_segment -+ && fixP->fx_pcrel) -+ { -+ value += S_GET_VALUE(fx_addsy); -+ value -= md_pcrel_from_section(fixP, this_segment); -+ fx_addsy = NULL; -+ fixP->fx_pcrel = FALSE; -+ } -+ else if (add_symbol_segment == absolute_section) -+ { -+ fx_offset += S_GET_VALUE(fixP->fx_addsy); -+ fx_addsy = NULL; -+ } -+ } ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 +-echo "${ECHO_T}$ac_cv_working_alloca_h" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 ++echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } + if test $ac_cv_working_alloca_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -8985,8 +9489,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for alloca" >&5 +-echo $ECHO_N "checking for alloca... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for alloca" >&5 ++echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } + if test "${ac_cv_func_alloca_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9003,7 +9507,7 @@ cat >>conftest.$ac_ext <<_ACEOF + # include + # define alloca _alloca + # else +-# if HAVE_ALLOCA_H ++# ifdef HAVE_ALLOCA_H + # include + # else + # ifdef _AIX +@@ -9021,44 +9525,42 @@ int + main () + { + char *p = (char *) alloca (1); ++ if (p) return 0; + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + ac_cv_func_alloca_works=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_func_alloca_works=no ++ ac_cv_func_alloca_works=no + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ if (!fx_addsy) -+ fixP->fx_done = TRUE; ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 +-echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 ++echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } + + if test $ac_cv_func_alloca_works = yes; then + +@@ -9072,15 +9574,15 @@ else + # contain a buggy version. If you still want to use their alloca, + # use ar to extract alloca.o from them instead of compiling alloca.c. + +-ALLOCA=alloca.$ac_objext ++ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + + cat >>confdefs.h <<\_ACEOF + #define C_ALLOCA 1 + _ACEOF + + +-echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 +-echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 ++echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } + if test "${ac_cv_os_cray+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9090,7 +9592,7 @@ _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ +-#if defined(CRAY) && ! defined(CRAY2) ++#if defined CRAY && ! defined CRAY2 + webecray + #else + wenotbecray +@@ -9106,14 +9608,14 @@ fi + rm -f conftest* + + fi +-echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 +-echo "${ECHO_T}$ac_cv_os_cray" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 ++echo "${ECHO_T}$ac_cv_os_cray" >&6; } + if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -9139,68 +9641,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ if (fixP->fx_pcrel) -+ { -+ if (fx_addsy != NULL -+ && S_IS_DEFINED(fx_addsy) -+ && S_GET_SEGMENT(fx_addsy) != this_segment) -+ value += md_pcrel_from_section(fixP, this_segment); ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -9213,8 +9707,8 @@ fi + done + fi + +-echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 +-echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 ++echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } + if test "${ac_cv_c_stack_direction+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9227,6 +9721,7 @@ _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ ++$ac_includes_default + int + find_stack_direction () + { +@@ -9244,17 +9739,26 @@ find_stack_direction () + int + main () + { +- exit (find_stack_direction () < 0); ++ return find_stack_direction () < 0; + } + _ACEOF + rm -f conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>&5 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +@@ -9267,11 +9771,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 + ( exit $ac_status ) + ac_cv_c_stack_direction=-1 + fi +-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi + -+ switch (fixP->fx_r_type) -+ { -+ case BFD_RELOC_32: -+ fixP->fx_r_type = BFD_RELOC_32_PCREL; -+ break; -+ case BFD_RELOC_16: -+ fixP->fx_r_type = BFD_RELOC_16_PCREL; -+ break; -+ case BFD_RELOC_8: -+ fixP->fx_r_type = BFD_RELOC_8_PCREL; -+ break; -+ case BFD_RELOC_AVR32_SUB5: -+ fixP->fx_r_type = BFD_RELOC_AVR32_16N_PCREL; -+ break; -+ case BFD_RELOC_AVR32_16S: -+ fixP->fx_r_type = BFD_RELOC_AVR32_16B_PCREL; -+ break; -+ case BFD_RELOC_AVR32_14UW: -+ fixP->fx_r_type = BFD_RELOC_AVR32_14UW_PCREL; -+ break; -+ case BFD_RELOC_AVR32_10UW: -+ fixP->fx_r_type = BFD_RELOC_AVR32_10UW_PCREL; -+ break; -+ default: -+ /* Should have been taken care of already */ -+ break; -+ } -+ } + -+ if (fixP->fx_done || apply) -+ { -+ const struct avr32_ifield *ifield; -+ char *buf = fixP->fx_where + fixP->fx_frag->fr_literal; + fi +-echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 +-echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 ++echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } + + cat >>confdefs.h <<_ACEOF + #define STACK_DIRECTION $ac_cv_c_stack_direction +@@ -9288,9 +9794,9 @@ fi + for ac_func in sbrk utimes setmode getc_unlocked strcoll + do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +-echo "$as_me:$LINENO: checking for $ac_func" >&5 +-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +-if eval "test \"\${$as_ac_var+set}\" = set"; then ++{ echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + cat >conftest.$ac_ext <<_ACEOF +@@ -9316,68 +9822,60 @@ cat >>conftest.$ac_ext <<_ACEOF + + #undef $ac_func + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" +-{ + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char $ac_func (); + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +-#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++#if defined __stub_$ac_func || defined __stub___$ac_func + choke me +-#else +-char (*f) () = $ac_func; +-#endif +-#ifdef __cplusplus +-} + #endif + + int + main () + { +-return f != $ac_func; ++return $ac_func (); + ; + return 0; + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-eval "$as_ac_var=no" ++ eval "$as_ac_var=no" + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ if (fixP->fx_done) -+ value += fx_offset; ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++ac_res=`eval echo '${'$as_ac_var'}'` ++ { echo "$as_me:$LINENO: result: $ac_res" >&5 ++echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +@@ -9389,8 +9887,8 @@ done + + # Check whether fopen64 is available and whether _LARGEFILE64_SOURCE + # needs to be defined for it +-echo "$as_me:$LINENO: checking for fopen64" >&5 +-echo $ECHO_N "checking for fopen64... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for fopen64" >&5 ++echo $ECHO_N "checking for fopen64... $ECHO_C" >&6; } + if test "${bu_cv_have_fopen64+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9410,33 +9908,29 @@ FILE *f = fopen64 ("/tmp/foo","r"); + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + bu_cv_have_fopen64=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-saved_CPPFLAGS=$CPPFLAGS ++ saved_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -9454,44 +9948,42 @@ FILE *f = fopen64 ("/tmp/foo","r"); + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + bu_cv_have_fopen64="need -D_LARGEFILE64_SOURCE" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bu_cv_have_fopen64=no ++ bu_cv_have_fopen64=no + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ switch (fixP->fx_r_type) -+ { -+ case BFD_RELOC_32: -+ case BFD_RELOC_16: -+ case BFD_RELOC_8: -+ case BFD_RELOC_AVR32_DIFF32: -+ case BFD_RELOC_AVR32_DIFF16: -+ case BFD_RELOC_AVR32_DIFF8: -+ md_number_to_chars(buf, value, fixP->fx_size); -+ break; -+ case BFD_RELOC_HI16: -+ value >>= 16; -+ case BFD_RELOC_LO16: -+ value &= 0xffff; -+ md_number_to_chars(buf + 2, value, 2); -+ break; -+ case BFD_RELOC_AVR32_16N_PCREL: -+ value = -value; -+ /* fall through */ -+ case BFD_RELOC_AVR32_22H_PCREL: -+ case BFD_RELOC_AVR32_18W_PCREL: -+ case BFD_RELOC_AVR32_16B_PCREL: -+ case BFD_RELOC_AVR32_11H_PCREL: -+ case BFD_RELOC_AVR32_9H_PCREL: -+ case BFD_RELOC_AVR32_9UW_PCREL: -+ case BFD_RELOC_AVR32_3U: -+ case BFD_RELOC_AVR32_4UH: -+ case BFD_RELOC_AVR32_6UW: -+ case BFD_RELOC_AVR32_6S: -+ case BFD_RELOC_AVR32_7UW: -+ case BFD_RELOC_AVR32_8S_EXT: -+ case BFD_RELOC_AVR32_8S: -+ case BFD_RELOC_AVR32_10UW: -+ case BFD_RELOC_AVR32_10SW: -+ case BFD_RELOC_AVR32_STHH_W: -+ case BFD_RELOC_AVR32_14UW: -+ case BFD_RELOC_AVR32_16S: -+ case BFD_RELOC_AVR32_16U: -+ case BFD_RELOC_AVR32_21S: -+ case BFD_RELOC_AVR32_SUB5: -+ case BFD_RELOC_AVR32_CPCALL: -+ case BFD_RELOC_AVR32_16_CP: -+ case BFD_RELOC_AVR32_9W_CP: -+ ifield = fixP->tc_fix_data.ifield; -+ pr_debug("insert field: %ld <= %ld <= %ld (align %u)\n", -+ fixP->tc_fix_data.min, value, fixP->tc_fix_data.max, -+ fixP->tc_fix_data.align); -+ if (value < fixP->tc_fix_data.min || value > fixP->tc_fix_data.max) -+ as_bad_where(fixP->fx_file, fixP->fx_line, -+ _("operand out of range (%ld not between %ld and %ld)"), -+ value, fixP->tc_fix_data.min, fixP->tc_fix_data.max); -+ if (value & ((1 << fixP->tc_fix_data.align) - 1)) -+ as_bad_where(fixP->fx_file, fixP->fx_line, -+ _("misaligned operand (required alignment: %d)"), -+ 1 << fixP->tc_fix_data.align); -+ ifield->insert(ifield, buf, value >> fixP->tc_fix_data.align); -+ break; -+ case BFD_RELOC_AVR32_ALIGN: -+ /* Nothing to do */ -+ fixP->fx_done = FALSE; -+ break; -+ default: -+ as_fatal("reloc type %s not handled\n", -+ bfd_get_reloc_code_name(fixP->fx_r_type)); -+ } -+ } ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CPPFLAGS=$saved_CPPFLAGS + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ fixP->fx_addsy = fx_addsy; -+ fixP->fx_subsy = fx_subsy; -+ fixP->fx_offset = fx_offset; ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi + +-echo "$as_me:$LINENO: result: $bu_cv_have_fopen64" >&5 +-echo "${ECHO_T}$bu_cv_have_fopen64" >&6 ++{ echo "$as_me:$LINENO: result: $bu_cv_have_fopen64" >&5 ++echo "${ECHO_T}$bu_cv_have_fopen64" >&6; } + if test "$bu_cv_have_fopen64" != no; then + + cat >>confdefs.h <<\_ACEOF +@@ -9499,8 +9991,8 @@ cat >>confdefs.h <<\_ACEOF + _ACEOF + + fi +-echo "$as_me:$LINENO: checking for stat64" >&5 +-echo $ECHO_N "checking for stat64... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for stat64" >&5 ++echo $ECHO_N "checking for stat64... $ECHO_C" >&6; } + if test "${bu_cv_have_stat64+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9520,33 +10012,29 @@ struct stat64 st; stat64 ("/tmp/foo", &s + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + bu_cv_have_stat64=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-saved_CPPFLAGS=$CPPFLAGS ++ saved_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ +@@ -9564,191 +10052,146 @@ struct stat64 st; stat64 ("/tmp/foo", &s + } + _ACEOF + rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then + bu_cv_have_stat64="need -D_LARGEFILE64_SOURCE" + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bu_cv_have_stat64=no ++ bu_cv_have_stat64=no + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ if (!fixP->fx_done) -+ { -+ if (!fixP->fx_addsy) -+ fixP->fx_addsy = abs_section_sym; ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CPPFLAGS=$saved_CPPFLAGS + fi +-rm -f conftest.err conftest.$ac_objext \ + -+ symbol_mark_used_in_reloc(fixP->fx_addsy); -+ if (fixP->fx_subsy) -+ abort(); -+ } -+} ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + fi + +-echo "$as_me:$LINENO: result: $bu_cv_have_stat64" >&5 +-echo "${ECHO_T}$bu_cv_have_stat64" >&6 ++{ echo "$as_me:$LINENO: result: $bu_cv_have_stat64" >&5 ++echo "${ECHO_T}$bu_cv_have_stat64" >&6; } + if test "$bu_cv_have_stat64" != no; then + + cat >>confdefs.h <<\_ACEOF + #define HAVE_STAT64 1 + _ACEOF + +-fi +-if test "$bu_cv_have_fopen64" = "need -D_LARGEFILE64_SOURCE" \ +- || test "$bu_cv_have_stat64" = "need -D_LARGEFILE64_SOURCE"; then +- +-cat >>confdefs.h <<\_ACEOF +-#define _LARGEFILE64_SOURCE 1 +-_ACEOF +- +- CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" +-fi +- +-# Some systems have frexp only in -lm, not in -lc. +-echo "$as_me:$LINENO: checking for library containing frexp" >&5 +-echo $ECHO_N "checking for library containing frexp... $ECHO_C" >&6 +-if test "${ac_cv_search_frexp+set}" = set; then +- echo $ECHO_N "(cached) $ECHO_C" >&6 +-else +- ac_func_search_save_LIBS=$LIBS +-ac_cv_search_frexp=no +-cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-/* Override any gcc2 internal prototype to avoid an error. */ +-#ifdef __cplusplus +-extern "C" +-#endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ +-char frexp (); +-int +-main () +-{ +-frexp (); +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_frexp="none required" +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 ++fi ++if test "$bu_cv_have_fopen64" = "need -D_LARGEFILE64_SOURCE" \ ++ || test "$bu_cv_have_stat64" = "need -D_LARGEFILE64_SOURCE"; then + -+#if 0 -+void -+md_apply_fix3 (fixS *fixP, valueT *valP, segT seg) -+{ -+ const struct avr32_ifield *ifield; -+ offsetT value = *valP; -+ char *buf = fixP->fx_where + fixP->fx_frag->fr_literal; -+ bfd_boolean apply; ++cat >>confdefs.h <<\_ACEOF ++#define _LARGEFILE64_SOURCE 1 ++_ACEOF + ++ CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" + fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-if test "$ac_cv_search_frexp" = no; then +- for ac_lib in m; do +- LIBS="-l$ac_lib $ac_func_search_save_LIBS" +- cat >conftest.$ac_ext <<_ACEOF + -+ pr_debug("%s:%u: apply_fix3: r_type=%d value=%lx offset=%lx\n", -+ fixP->fx_file, fixP->fx_line, fixP->fx_r_type, *valP, -+ fixP->fx_offset); ++# Some systems have frexp only in -lm, not in -lc. ++{ echo "$as_me:$LINENO: checking for library containing frexp" >&5 ++echo $ECHO_N "checking for library containing frexp... $ECHO_C" >&6; } ++if test "${ac_cv_search_frexp+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ac_func_search_save_LIBS=$LIBS ++cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF + cat confdefs.h >>conftest.$ac_ext + cat >>conftest.$ac_ext <<_ACEOF + /* end confdefs.h. */ + +-/* Override any gcc2 internal prototype to avoid an error. */ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ + #ifdef __cplusplus + extern "C" + #endif +-/* We use char because int might match the return type of a gcc2 +- builtin and then its argument prototype would still apply. */ + char frexp (); + int + main () + { +-frexp (); ++return frexp (); + ; + return 0; + } + _ACEOF +-rm -f conftest.$ac_objext conftest$ac_exeext +-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 +- (eval $ac_link) 2>conftest.er1 ++for ac_lib in '' m; do ++ if test -z "$ac_lib"; then ++ ac_res="none required" ++ else ++ ac_res=-l$ac_lib ++ LIBS="-l$ac_lib $ac_func_search_save_LIBS" ++ fi ++ rm -f conftest.$ac_objext conftest$ac_exeext ++if { (ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest$ac_exeext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- ac_cv_search_frexp="-l$ac_lib" +-break ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && ++ $as_test_x conftest$ac_exeext; then ++ ac_cv_search_frexp=$ac_res + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + + -+ if (fixP->fx_r_type >= BFD_RELOC_UNUSED) -+ { -+ as_bad_where(fixP->fx_file, fixP->fx_line, -+ _("Bad relocation type %d\n"), fixP->fx_r_type); -+ return; -+ } + fi +-rm -f conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +- done + -+ if (!fixP->fx_addsy && !fixP->fx_subsy) -+ fixP->fx_done = 1; ++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ ++ conftest$ac_exeext ++ if test "${ac_cv_search_frexp+set}" = set; then ++ break ++fi ++done ++if test "${ac_cv_search_frexp+set}" = set; then ++ : ++else ++ ac_cv_search_frexp=no + fi ++rm conftest.$ac_ext + LIBS=$ac_func_search_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_search_frexp" >&5 +-echo "${ECHO_T}$ac_cv_search_frexp" >&6 +-if test "$ac_cv_search_frexp" != no; then +- test "$ac_cv_search_frexp" = "none required" || LIBS="$ac_cv_search_frexp $LIBS" ++{ echo "$as_me:$LINENO: result: $ac_cv_search_frexp" >&5 ++echo "${ECHO_T}$ac_cv_search_frexp" >&6; } ++ac_res=$ac_cv_search_frexp ++if test "$ac_res" != no; then ++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + fi + + +-echo "$as_me:$LINENO: checking for time_t in time.h" >&5 +-echo $ECHO_N "checking for time_t in time.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for time_t in time.h" >&5 ++echo $ECHO_N "checking for time_t in time.h... $ECHO_C" >&6; } + if test "${bu_cv_decl_time_t_time_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9768,39 +10211,35 @@ time_t i; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bu_cv_decl_time_t_time_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bu_cv_decl_time_t_time_h=no ++ bu_cv_decl_time_t_time_h=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ if (fixP->fx_pcrel) -+ { -+ if (fixP->fx_addsy != NULL -+ && S_IS_DEFINED(fixP->fx_addsy) -+ && S_GET_SEGMENT(fixP->fx_addsy) != seg) -+ value += md_pcrel_from_section(fixP, seg); ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + +-echo "$as_me:$LINENO: result: $bu_cv_decl_time_t_time_h" >&5 +-echo "${ECHO_T}$bu_cv_decl_time_t_time_h" >&6 ++{ echo "$as_me:$LINENO: result: $bu_cv_decl_time_t_time_h" >&5 ++echo "${ECHO_T}$bu_cv_decl_time_t_time_h" >&6; } + if test $bu_cv_decl_time_t_time_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -9809,8 +10248,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for time_t in sys/types.h" >&5 +-echo $ECHO_N "checking for time_t in sys/types.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for time_t in sys/types.h" >&5 ++echo $ECHO_N "checking for time_t in sys/types.h... $ECHO_C" >&6; } + if test "${bu_cv_decl_time_t_types_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9830,39 +10269,35 @@ time_t i; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bu_cv_decl_time_t_types_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bu_cv_decl_time_t_types_h=no ++ bu_cv_decl_time_t_types_h=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ switch (fixP->fx_r_type) -+ { -+ case BFD_RELOC_32: -+ fixP->fx_r_type = BFD_RELOC_32_PCREL; -+ break; -+ case BFD_RELOC_16: -+ case BFD_RELOC_8: -+ as_bad_where (fixP->fx_file, fixP->fx_line, -+ _("8- and 16-bit PC-relative relocations not supported")); -+ break; -+ case BFD_RELOC_AVR32_SUB5: -+ fixP->fx_r_type = BFD_RELOC_AVR32_PCREL_SUB5; -+ break; -+ case BFD_RELOC_AVR32_16S: -+ fixP->fx_r_type = BFD_RELOC_AVR32_16_PCREL; -+ break; -+ default: -+ /* Should have been taken care of already */ -+ break; -+ } -+ } ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + +-echo "$as_me:$LINENO: result: $bu_cv_decl_time_t_types_h" >&5 +-echo "${ECHO_T}$bu_cv_decl_time_t_types_h" >&6 ++{ echo "$as_me:$LINENO: result: $bu_cv_decl_time_t_types_h" >&5 ++echo "${ECHO_T}$bu_cv_decl_time_t_types_h" >&6; } + if test $bu_cv_decl_time_t_types_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -9871,8 +10306,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking for a known getopt prototype in unistd.h" >&5 +-echo $ECHO_N "checking for a known getopt prototype in unistd.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for a known getopt prototype in unistd.h" >&5 ++echo $ECHO_N "checking for a known getopt prototype in unistd.h... $ECHO_C" >&6; } + if test "${bu_cv_decl_getopt_unistd_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9892,39 +10327,35 @@ extern int getopt (int, char *const*, co + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bu_cv_decl_getopt_unistd_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bu_cv_decl_getopt_unistd_h=no ++ bu_cv_decl_getopt_unistd_h=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ if (fixP->fx_r_type == BFD_RELOC_32 -+ && fixP->fx_subsy) -+ { -+ fixP->fx_r_type = BFD_RELOC_AVR32_DIFF32; ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + +-echo "$as_me:$LINENO: result: $bu_cv_decl_getopt_unistd_h" >&5 +-echo "${ECHO_T}$bu_cv_decl_getopt_unistd_h" >&6 ++{ echo "$as_me:$LINENO: result: $bu_cv_decl_getopt_unistd_h" >&5 ++echo "${ECHO_T}$bu_cv_decl_getopt_unistd_h" >&6; } + if test $bu_cv_decl_getopt_unistd_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -9935,8 +10366,8 @@ fi + + # Under Next 3.2 apparently does not define struct utimbuf + # by default. +-echo "$as_me:$LINENO: checking for utime.h" >&5 +-echo $ECHO_N "checking for utime.h... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking for utime.h" >&5 ++echo $ECHO_N "checking for utime.h... $ECHO_C" >&6; } + if test "${bu_cv_header_utime_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -9960,39 +10391,35 @@ struct utimbuf s; + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + bu_cv_header_utime_h=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-bu_cv_header_utime_h=no ++ bu_cv_header_utime_h=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ /* Offsets are only allowed if it's a result of adjusting a -+ local symbol into a section-relative offset. -+ tc_fix_adjustable() should prevent any adjustment if there -+ was an offset involved before. */ -+ if (fixP->fx_offset && !symbol_section_p(fixP->fx_addsy)) -+ as_bad_where(fixP->fx_file, fixP->fx_line, -+ _("cannot represent symbol difference with an offset")); ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + +-echo "$as_me:$LINENO: result: $bu_cv_header_utime_h" >&5 +-echo "${ECHO_T}$bu_cv_header_utime_h" >&6 ++{ echo "$as_me:$LINENO: result: $bu_cv_header_utime_h" >&5 ++echo "${ECHO_T}$bu_cv_header_utime_h" >&6; } + if test $bu_cv_header_utime_h = yes; then + + cat >>confdefs.h <<\_ACEOF +@@ -10001,8 +10428,8 @@ _ACEOF + + fi + +-echo "$as_me:$LINENO: checking whether fprintf is declared" >&5 +-echo $ECHO_N "checking whether fprintf is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether fprintf is declared" >&5 ++echo $ECHO_N "checking whether fprintf is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_fprintf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10017,7 +10444,7 @@ int + main () + { + #ifndef fprintf +- char *p = (char *) fprintf; ++ (void) fprintf; + #endif + + ; +@@ -10025,38 +10452,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_fprintf=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_fprintf=no ++ ac_cv_have_decl_fprintf=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ value = (S_GET_VALUE(fixP->fx_addsy) + fixP->fx_offset -+ - S_GET_VALUE(fixP->fx_subsy)); ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_fprintf" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_fprintf" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fprintf" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_fprintf" >&6; } + if test $ac_cv_have_decl_fprintf = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10071,8 +10494,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether stpcpy is declared" >&5 +-echo $ECHO_N "checking whether stpcpy is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether stpcpy is declared" >&5 ++echo $ECHO_N "checking whether stpcpy is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_stpcpy+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10087,7 +10510,7 @@ int + main () + { + #ifndef stpcpy +- char *p = (char *) stpcpy; ++ (void) stpcpy; + #endif + + ; +@@ -10095,38 +10518,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_stpcpy=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_stpcpy=no ++ ac_cv_have_decl_stpcpy=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ /* The difference before any relaxing takes place is written -+ out, and the DIFF32 reloc identifies the address of the first -+ symbol (i.e. the on that's subtracted.) */ -+ *valP = value; -+ fixP->fx_offset -= value; -+ fixP->fx_subsy = NULL; ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_stpcpy" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_stpcpy" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_stpcpy" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_stpcpy" >&6; } + if test $ac_cv_have_decl_stpcpy = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10141,8 +10560,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether strstr is declared" >&5 +-echo $ECHO_N "checking whether strstr is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether strstr is declared" >&5 ++echo $ECHO_N "checking whether strstr is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_strstr+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10157,7 +10576,7 @@ int + main () + { + #ifndef strstr +- char *p = (char *) strstr; ++ (void) strstr; + #endif + + ; +@@ -10165,38 +10584,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_strstr=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_strstr=no ++ ac_cv_have_decl_strstr=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ md_number_to_chars(buf, value, fixP->fx_size); -+ } ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_strstr" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_strstr" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strstr" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_strstr" >&6; } + if test $ac_cv_have_decl_strstr = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10211,8 +10626,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether sbrk is declared" >&5 +-echo $ECHO_N "checking whether sbrk is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether sbrk is declared" >&5 ++echo $ECHO_N "checking whether sbrk is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_sbrk+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10227,7 +10642,7 @@ int + main () + { + #ifndef sbrk +- char *p = (char *) sbrk; ++ (void) sbrk; + #endif + + ; +@@ -10235,38 +10650,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_sbrk=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_sbrk=no ++ ac_cv_have_decl_sbrk=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ if (fixP->fx_done) -+ { -+ switch (fixP->fx_r_type) -+ { -+ case BFD_RELOC_8: -+ case BFD_RELOC_16: -+ case BFD_RELOC_32: -+ md_number_to_chars(buf, value, fixP->fx_size); -+ break; -+ case BFD_RELOC_HI16: -+ value >>= 16; -+ case BFD_RELOC_LO16: -+ value &= 0xffff; -+ *valP = value; -+ md_number_to_chars(buf + 2, value, 2); -+ break; -+ case BFD_RELOC_AVR32_PCREL_SUB5: -+ value = -value; -+ /* fall through */ -+ case BFD_RELOC_AVR32_9_PCREL: -+ case BFD_RELOC_AVR32_11_PCREL: -+ case BFD_RELOC_AVR32_16_PCREL: -+ case BFD_RELOC_AVR32_18_PCREL: -+ case BFD_RELOC_AVR32_22_PCREL: -+ case BFD_RELOC_AVR32_3U: -+ case BFD_RELOC_AVR32_4UH: -+ case BFD_RELOC_AVR32_6UW: -+ case BFD_RELOC_AVR32_6S: -+ case BFD_RELOC_AVR32_7UW: -+ case BFD_RELOC_AVR32_8S: -+ case BFD_RELOC_AVR32_10UW: -+ case BFD_RELOC_AVR32_10SW: -+ case BFD_RELOC_AVR32_14UW: -+ case BFD_RELOC_AVR32_16S: -+ case BFD_RELOC_AVR32_16U: -+ case BFD_RELOC_AVR32_21S: -+ case BFD_RELOC_AVR32_BRC1: -+ case BFD_RELOC_AVR32_SUB5: -+ case BFD_RELOC_AVR32_CPCALL: -+ case BFD_RELOC_AVR32_16_CP: -+ case BFD_RELOC_AVR32_9_CP: -+ ifield = fixP->tc_fix_data.ifield; -+ pr_debug("insert field: %ld <= %ld <= %ld (align %u)\n", -+ fixP->tc_fix_data.min, value, fixP->tc_fix_data.max, -+ fixP->tc_fix_data.align); -+ if (value < fixP->tc_fix_data.min || value > fixP->tc_fix_data.max) -+ as_bad_where(fixP->fx_file, fixP->fx_line, -+ _("operand out of range (%ld not between %ld and %ld)"), -+ value, fixP->tc_fix_data.min, fixP->tc_fix_data.max); -+ if (value & ((1 << fixP->tc_fix_data.align) - 1)) -+ as_bad_where(fixP->fx_file, fixP->fx_line, -+ _("misaligned operand (required alignment: %d)"), -+ 1 << fixP->tc_fix_data.align); -+ ifield->insert(ifield, buf, value >> fixP->tc_fix_data.align); -+ break; -+ case BFD_RELOC_AVR32_ALIGN: -+ /* Nothing to do */ -+ fixP->fx_done = FALSE; -+ break; -+ default: -+ as_fatal("reloc type %s not handled\n", -+ bfd_get_reloc_code_name(fixP->fx_r_type)); -+ } -+ } -+} -+#endif ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_sbrk" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_sbrk" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_sbrk" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_sbrk" >&6; } + if test $ac_cv_have_decl_sbrk = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10281,8 +10692,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether getenv is declared" >&5 +-echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether getenv is declared" >&5 ++echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_getenv+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10297,7 +10708,7 @@ int + main () + { + #ifndef getenv +- char *p = (char *) getenv; ++ (void) getenv; + #endif + + ; +@@ -10305,38 +10716,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_getenv=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_getenv=no ++ ac_cv_have_decl_getenv=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+arelent * -+tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, -+ fixS *fixp) -+{ -+ arelent *reloc; -+ bfd_reloc_code_real_type code; ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6; } + if test $ac_cv_have_decl_getenv = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10351,8 +10758,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether environ is declared" >&5 +-echo $ECHO_N "checking whether environ is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether environ is declared" >&5 ++echo $ECHO_N "checking whether environ is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_environ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10367,7 +10774,7 @@ int + main () + { + #ifndef environ +- char *p = (char *) environ; ++ (void) environ; + #endif + + ; +@@ -10375,38 +10782,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_environ=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_environ=no ++ ac_cv_have_decl_environ=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ reloc = xmalloc (sizeof (arelent)); ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_environ" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_environ" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_environ" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_environ" >&6; } + if test $ac_cv_have_decl_environ = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10421,8 +10824,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5 +-echo $ECHO_N "checking whether getc_unlocked is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5 ++echo $ECHO_N "checking whether getc_unlocked is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10437,7 +10840,7 @@ int + main () + { + #ifndef getc_unlocked +- char *p = (char *) getc_unlocked; ++ (void) getc_unlocked; + #endif + + ; +@@ -10445,38 +10848,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_getc_unlocked=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_getc_unlocked=no ++ ac_cv_have_decl_getc_unlocked=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); -+ *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); -+ reloc->address = fixp->fx_frag->fr_address + fixp->fx_where; -+ reloc->addend = fixp->fx_offset; -+ code = fixp->fx_r_type; ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_getc_unlocked" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_getc_unlocked" >&6; } + if test $ac_cv_have_decl_getc_unlocked = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10491,8 +10890,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether snprintf is declared" >&5 +-echo $ECHO_N "checking whether snprintf is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether snprintf is declared" >&5 ++echo $ECHO_N "checking whether snprintf is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_snprintf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10507,7 +10906,7 @@ int + main () + { + #ifndef snprintf +- char *p = (char *) snprintf; ++ (void) snprintf; + #endif + + ; +@@ -10515,38 +10914,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_snprintf=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_snprintf=no ++ ac_cv_have_decl_snprintf=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ reloc->howto = bfd_reloc_type_lookup (stdoutput, code); ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_snprintf" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_snprintf" >&6; } + if test $ac_cv_have_decl_snprintf = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10561,8 +10956,8 @@ _ACEOF + + + fi +-echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5 +-echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6 ++{ echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5 ++echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6; } + if test "${ac_cv_have_decl_vsnprintf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else +@@ -10577,7 +10972,7 @@ int + main () + { + #ifndef vsnprintf +- char *p = (char *) vsnprintf; ++ (void) vsnprintf; + #endif + + ; +@@ -10585,38 +10980,34 @@ main () + } + _ACEOF + rm -f conftest.$ac_objext +-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 +- (eval $ac_compile) 2>conftest.er1 ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ++ (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" +- || test ! -s conftest.err' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 +- (eval $ac_try) 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then + ac_cv_have_decl_vsnprintf=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_have_decl_vsnprintf=no ++ ac_cv_have_decl_vsnprintf=no + fi +-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + -+ if (reloc->howto == NULL) -+ { -+ as_bad_where (fixp->fx_file, fixp->fx_line, -+ _("cannot represent relocation %s in this object file format"), -+ bfd_get_reloc_code_name (code)); -+ return NULL; -+ } ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +-echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5 +-echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6 ++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5 ++echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6; } + if test $ac_cv_have_decl_vsnprintf = yes; then + + cat >>confdefs.h <<_ACEOF +@@ -10817,8 +11208,10 @@ done + + + +- ac_config_files="$ac_config_files Makefile doc/Makefile po/Makefile.in:po/Make-in" +- ac_config_commands="$ac_config_commands default" ++ac_config_files="$ac_config_files Makefile doc/Makefile po/Makefile.in:po/Make-in" + -+ return reloc; -+} ++ac_config_commands="$ac_config_commands default" + -+bfd_boolean -+avr32_force_reloc(fixS *fixP) -+{ -+ if (linkrelax && fixP->fx_addsy -+ && !(S_GET_SEGMENT(fixP->fx_addsy)->flags & SEC_DEBUGGING) -+ && S_GET_SEGMENT(fixP->fx_addsy) != absolute_section) -+ { -+ pr_debug(stderr, "force reloc: addsy=%p, r_type=%d, sec=%s\n", -+ fixP->fx_addsy, fixP->fx_r_type, S_GET_SEGMENT(fixP->fx_addsy)->name); -+ return 1; -+ } + cat >confcache <<\_ACEOF + # This file is a shell script that caches the results of configure + # tests run on this system so they can be shared between configure +@@ -10837,39 +11230,58 @@ _ACEOF + + # The following way of writing the cache mishandles newlines in values, + # but we know of no workaround that is simple, portable, and efficient. +-# So, don't put newlines in cache variables' values. ++# So, we kill variables containing newlines. + # Ultrix sh set writes to stderr and can't be redirected directly, + # and sets the high bit in the cache file unless we assign to the vars. +-{ ++( ++ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do ++ eval ac_val=\$$ac_var ++ case $ac_val in #( ++ *${as_nl}*) ++ case $ac_var in #( ++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 ++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; ++ esac ++ case $ac_var in #( ++ _ | IFS | as_nl) ;; #( ++ *) $as_unset $ac_var ;; ++ esac ;; ++ esac ++ done + -+ return generic_force_reloc(fixP); -+} + (set) 2>&1 | +- case `(ac_space=' '; set | grep ac_space) 2>&1` in +- *ac_space=\ *) ++ case $as_nl`(ac_space=' '; set) 2>&1` in #( ++ *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" +- ;; ++ ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. +- sed -n \ +- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; +- esac; +-} | ++ esac | ++ sort ++) | + sed ' ++ /^ac_cv_env_/b end + t clear +- : clear ++ :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end +- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ +- : end' >>confcache +-if diff $cache_file confcache >/dev/null 2>&1; then :; else +- if test -w $cache_file; then +- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" ++ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ ++ :end' >>confcache ++if diff "$cache_file" confcache >/dev/null 2>&1; then :; else ++ if test -w "$cache_file"; then ++ test "x$cache_file" != "x/dev/null" && ++ { echo "$as_me:$LINENO: updating cache $cache_file" >&5 ++echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else +- echo "not updating unwritable cache $cache_file" ++ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 ++echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi + fi + rm -f confcache +@@ -10878,32 +11290,18 @@ test "x$prefix" = xNONE && prefix=$ac_de + # Let make expand exec_prefix. + test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +-# VPATH may cause trouble with some makes, so we remove $(srcdir), +-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +-# trailing colons and then remove the whole line if VPATH becomes empty +-# (actually we leave an empty line to preserve line numbers). +-if test "x$srcdir" = x.; then +- ac_vpsub='/^[ ]*VPATH[ ]*=/{ +-s/:*\$(srcdir):*/:/; +-s/:*\${srcdir}:*/:/; +-s/:*@srcdir@:*/:/; +-s/^\([^=]*=[ ]*\):*/\1/; +-s/:*$//; +-s/^[^=]*=[ ]*$//; +-}' +-fi +- + DEFS=-DHAVE_CONFIG_H + + ac_libobjs= + ac_ltlibobjs= + for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. +- ac_i=`echo "$ac_i" | +- sed 's/\$U\././;s/\.o$//;s/\.obj$//'` +- # 2. Add them. +- ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" +- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' ++ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ++ ac_i=`echo "$ac_i" | sed "$ac_script"` ++ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR ++ # will be set to the directory where LIBOBJS objects are built. ++ ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ++ ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' + done + LIBOBJS=$ac_libobjs + +@@ -10955,17 +11353,45 @@ cat >>$CONFIG_STATUS <<\_ACEOF + ## M4sh Initialization. ## + ## --------------------- ## + +-# Be Bourne compatible ++# Be more Bourne compatible ++DUALCASE=1; export DUALCASE # for MKS sh + if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then +- set -o posix ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in ++ *posix*) set -o posix ;; ++esac + -+bfd_boolean -+avr32_fix_adjustable(fixS *fixP) -+{ -+ switch (fixP->fx_r_type) -+ { -+ /* GOT relocations can't have addends since BFD treats all -+ references to a given symbol the same. This means that we -+ must avoid section-relative references to local symbols when -+ dealing with these kinds of relocs */ -+ case BFD_RELOC_AVR32_GOT32: -+ case BFD_RELOC_AVR32_GOT16: -+ case BFD_RELOC_AVR32_GOT8: -+ case BFD_RELOC_AVR32_GOT21S: -+ case BFD_RELOC_AVR32_GOT18SW: -+ case BFD_RELOC_AVR32_GOT16S: -+ case BFD_RELOC_AVR32_LDA_GOT: -+ case BFD_RELOC_AVR32_GOTCALL: -+ pr_debug("fix not adjustable\n"); -+ return 0; ++fi + -+ default: -+ break; -+ } + -+ return 1; -+} + -+/* When we want the linker to be able to relax the code, we need to -+ output a reloc for every .align directive requesting an alignment -+ to a four byte boundary or larger. If we don't do this, the linker -+ can't guarantee that the alignment is actually maintained in the -+ linker output. + -+ TODO: Might as well insert proper NOPs while we're at it... */ -+void -+avr32_handle_align(fragS *frag) -+{ -+ if (linkrelax -+ && frag->fr_type == rs_align_code -+ && frag->fr_address + frag->fr_fix > 0 -+ && frag->fr_offset > 0) -+ { -+ /* The alignment order (fr_offset) is stored in the addend. */ -+ fix_new(frag, frag->fr_fix, 2, &abs_symbol, frag->fr_offset, -+ FALSE, BFD_RELOC_AVR32_ALIGN); -+ } -+} ++# PATH needs CR ++# Avoid depending upon Character Ranges. ++as_cr_letters='abcdefghijklmnopqrstuvwxyz' ++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' ++as_cr_Letters=$as_cr_letters$as_cr_LETTERS ++as_cr_digits='0123456789' ++as_cr_alnum=$as_cr_Letters$as_cr_digits + -+/* Relax_align. Advance location counter to next address that has 'alignment' -+ lowest order bits all 0s, return size of adjustment made. */ -+relax_addressT -+avr32_relax_align(segT segment ATTRIBUTE_UNUSED, -+ fragS *fragP, -+ relax_addressT address) -+{ -+ relax_addressT mask; -+ relax_addressT new_address; -+ int alignment; ++# The user is always right. ++if test "${PATH_SEPARATOR+set}" != set; then ++ echo "#! /bin/sh" >conf$$.sh ++ echo "exit 0" >>conf$$.sh ++ chmod +x conf$$.sh ++ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then ++ PATH_SEPARATOR=';' ++ else ++ PATH_SEPARATOR=: ++ fi ++ rm -f conf$$.sh + fi +-DUALCASE=1; export DUALCASE # for MKS sh + + # Support unset when possible. + if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then +@@ -10975,8 +11401,43 @@ else + fi + + ++# IFS ++# We need space, tab and new line, in precisely that order. Quoting is ++# there to prevent editors from complaining about space-tab. ++# (If _AS_PATH_WALK were called with IFS unset, it would disable word ++# splitting by setting IFS to empty value.) ++as_nl=' ++' ++IFS=" "" $as_nl" + -+ alignment = fragP->fr_offset; -+ mask = ~((~0) << alignment); -+ new_address = (address + mask) & (~mask); ++# Find who we are. Look in the path if we contain no directory separator. ++case $0 in ++ *[\\/]* ) as_myself=$0 ;; ++ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break ++done ++IFS=$as_save_IFS + -+ return new_address - address; -+} ++ ;; ++esac ++# We did not find ourselves, most probably we were run as `sh COMMAND' ++# in which case we are not to be found in the path. ++if test "x$as_myself" = x; then ++ as_myself=$0 ++fi ++if test ! -f "$as_myself"; then ++ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 ++ { (exit 1); exit 1; } ++fi + -+/* Turn a string in input_line_pointer into a floating point constant -+ of type type, and store the appropriate bytes in *litP. The number -+ of LITTLENUMS emitted is stored in *sizeP . An error message is -+ returned, or NULL on OK. */ + # Work around bugs in pre-3.0 UWIN ksh. +-$as_unset ENV MAIL MAILPATH ++for as_var in ENV MAIL MAILPATH ++do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var ++done + PS1='$ ' + PS2='> ' + PS4='+ ' +@@ -10990,18 +11451,19 @@ do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else +- $as_unset $as_var ++ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi + done + + # Required to use basename. +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + +-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then ++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename + else + as_basename=false +@@ -11009,159 +11471,120 @@ fi + + + # Name of the executable. +-as_me=`$as_basename "$0" || ++as_me=`$as_basename -- "$0" || + $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ +- X"$0" : 'X\(/\)$' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$0" : 'X\(/\)' \| . 2>/dev/null || + echo X/"$0" | +- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } +- /^X\/\(\/\/\)$/{ s//\1/; q; } +- /^X\/\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^.*\/\([^/][^/]*\)\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + +- +-# PATH needs CR, and LINENO needs CR and PATH. +-# Avoid depending upon Character Ranges. +-as_cr_letters='abcdefghijklmnopqrstuvwxyz' +-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +-as_cr_Letters=$as_cr_letters$as_cr_LETTERS +-as_cr_digits='0123456789' +-as_cr_alnum=$as_cr_Letters$as_cr_digits +- +-# The user is always right. +-if test "${PATH_SEPARATOR+set}" != set; then +- echo "#! /bin/sh" >conf$$.sh +- echo "exit 0" >>conf$$.sh +- chmod +x conf$$.sh +- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then +- PATH_SEPARATOR=';' +- else +- PATH_SEPARATOR=: +- fi +- rm -f conf$$.sh +-fi ++# CDPATH. ++$as_unset CDPATH + + +- as_lineno_1=$LINENO +- as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` +- test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" || { +- # Find who we are. Look in the path if we contain no path at all +- # relative or not. +- case $0 in +- *[\\/]* ) as_myself=$0 ;; +- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in $PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +-done + +- ;; +- esac +- # We did not find ourselves, most probably we were run as `sh COMMAND' +- # in which case we are not to be found in the path. +- if test "x$as_myself" = x; then +- as_myself=$0 +- fi +- if test ! -f "$as_myself"; then +- { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} +- { (exit 1); exit 1; }; } +- fi +- case $CONFIG_SHELL in +- '') +- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +-do +- IFS=$as_save_IFS +- test -z "$as_dir" && as_dir=. +- for as_base in sh bash ksh sh5; do +- case $as_dir in +- /*) +- if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO +- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && +- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then +- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } +- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } +- CONFIG_SHELL=$as_dir/$as_base +- export CONFIG_SHELL +- exec "$CONFIG_SHELL" "$0" ${1+"$@"} +- fi;; +- esac +- done +-done +-;; +- esac ++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a +- # line-number line before each line; the second 'sed' does the real +- # work. The second script uses 'N' to pair each line-number line +- # with the numbered line, and appends trailing '-' during +- # substitution so that $LINENO is not a special case at line end. ++ # line-number line after each line using $LINENO; the second 'sed' ++ # does the real work. The second script uses 'N' to pair each ++ # line-number line with the line containing $LINENO, and appends ++ # trailing '-' during substitution so that $LINENO is not a special ++ # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the +- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) +- sed '=' <$as_myself | ++ # scripts with optimization help from Paolo Bonzini. Blame Lee ++ # E. McMahon (1931-1989) for sed's syntax. :-) ++ sed -n ' ++ p ++ /[$]LINENO/= ++ ' <$as_myself | + sed ' ++ s/[$]LINENO.*/&-/ ++ t lineno ++ b ++ :lineno + N +- s,$,-, +- : loop +- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, ++ :loop ++ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop +- s,-$,, +- s,^['$as_cr_digits']*\n,, ++ s/-\n.*// + ' >$as_me.lineno && +- chmod +x $as_me.lineno || +- { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} ++ chmod +x "$as_me.lineno" || ++ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the +- # original and so on. Autoconf is especially sensible to this). +- . ./$as_me.lineno ++ # original and so on. Autoconf is especially sensitive to this). ++ . "./$as_me.lineno" + # Exit status is that of the last command. + exit + } + + +-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in +- *c*,-n*) ECHO_N= ECHO_C=' +-' ECHO_T=' ' ;; +- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; +- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; ++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then ++ as_dirname=dirname ++else ++ as_dirname=false ++fi ++ ++ECHO_C= ECHO_N= ECHO_T= ++case `echo -n x` in ++-n*) ++ case `echo 'x\c'` in ++ *c*) ECHO_T=' ';; # ECHO_T is single tab character. ++ *) ECHO_C='\c';; ++ esac;; ++*) ++ ECHO_N='-n';; + esac + +-if expr a : '\(a\)' >/dev/null 2>&1; then ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr + else + as_expr=false + fi + + rm -f conf$$ conf$$.exe conf$$.file ++if test -d conf$$.dir; then ++ rm -f conf$$.dir/conf$$.file ++else ++ rm -f conf$$.dir ++ mkdir conf$$.dir ++fi + echo >conf$$.file + if ln -s conf$$.file conf$$ 2>/dev/null; then +- # We could just check for DJGPP; but this test a) works b) is more generic +- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). +- if test -f conf$$.exe; then +- # Don't use ln at all; we don't have any links ++ as_ln_s='ln -s' ++ # ... but there are two gotchas: ++ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. ++ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. ++ # In both cases, we have to default to `cp -p'. ++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +- else +- as_ln_s='ln -s' +- fi + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +-rm -f conf$$ conf$$.exe conf$$.file ++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file ++rmdir conf$$.dir 2>/dev/null + + if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +@@ -11170,7 +11593,28 @@ else + as_mkdir_p=false + fi + +-as_executable_p="test -f" ++if test -x / >/dev/null 2>&1; then ++ as_test_x='test -x' ++else ++ if ls -dL / >/dev/null 2>&1; then ++ as_ls_L_option=L ++ else ++ as_ls_L_option= ++ fi ++ as_test_x=' ++ eval sh -c '\'' ++ if test -d "$1"; then ++ test -d "$1/."; ++ else ++ case $1 in ++ -*)set "./$1";; ++ esac; ++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ++ ???[sx]*):;;*)false;;esac;fi ++ '\'' sh ++ ' ++fi ++as_executable_p=$as_test_x + + # Sed expression to map a string onto a valid CPP name. + as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +@@ -11179,31 +11623,14 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P + as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +-# IFS +-# We need space, tab and new line, in precisely that order. +-as_nl=' +-' +-IFS=" $as_nl" +- +-# CDPATH. +-$as_unset CDPATH +- + exec 6>&1 + +-# Open the log real soon, to keep \$[0] and so on meaningful, and to ++# Save the log message, to keep $[0] and so on meaningful, and to + # report actual input values of CONFIG_FILES etc. instead of their +-# values after options handling. Logging --version etc. is OK. +-exec 5>>config.log +-{ +- echo +- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +-## Running $as_me. ## +-_ASBOX +-} >&5 +-cat >&5 <<_CSEOF +- ++# values after options handling. ++ac_log=" + This file was extended by $as_me, which was +-generated by GNU Autoconf 2.59. Invocation command line was ++generated by GNU Autoconf 2.61. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS +@@ -11211,30 +11638,20 @@ generated by GNU Autoconf 2.59. Invocat + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +-_CSEOF +-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +-echo >&5 ++on `(hostname || uname -n) 2>/dev/null | sed 1q` ++" + -+/* Equal to MAX_PRECISION in atof-ieee.c */ -+#define MAX_LITTLENUMS 6 + _ACEOF + ++cat >>$CONFIG_STATUS <<_ACEOF + # Files that config.status was made for. +-if test -n "$ac_config_files"; then +- echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +-fi +- +-if test -n "$ac_config_headers"; then +- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +-fi +- +-if test -n "$ac_config_links"; then +- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +-fi ++config_files="$ac_config_files" ++config_headers="$ac_config_headers" ++config_commands="$ac_config_commands" + +-if test -n "$ac_config_commands"; then +- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +-fi ++_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF +- + ac_cs_usage="\ + \`$as_me' instantiates files from templates according to the + current configuration. +@@ -11242,7 +11659,7 @@ current configuration. + Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit +- -V, --version print version number, then exit ++ -V, --version print version number and configuration settings, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions +@@ -11261,19 +11678,21 @@ Configuration commands: + $config_commands + + Report bugs to ." +-_ACEOF + ++_ACEOF + cat >>$CONFIG_STATUS <<_ACEOF + ac_cs_version="\\ + config.status +-configured by $0, generated by GNU Autoconf 2.59, +- with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" ++configured by $0, generated by GNU Autoconf 2.61, ++ with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +-Copyright (C) 2003 Free Software Foundation, Inc. ++Copyright (C) 2006 Free Software Foundation, Inc. + This config.status script is free software; the Free Software Foundation + gives unlimited permission to copy, distribute and modify it." +-srcdir=$srcdir +-INSTALL="$INSTALL" + -+char * -+md_atof (type, litP, sizeP) -+char type; -+char * litP; -+int * sizeP; ++ac_pwd='$ac_pwd' ++srcdir='$srcdir' ++INSTALL='$INSTALL' + _ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF +@@ -11284,39 +11703,24 @@ while test $# != 0 + do + case $1 in + --*=*) +- ac_option=`expr "x$1" : 'x\([^=]*\)='` +- ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ++ ac_option=`expr "X$1" : 'X\([^=]*\)='` ++ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; +- -*) ++ *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; +- *) # This is not an option, so the user has probably given explicit +- # arguments. +- ac_option=$1 +- ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; +- --version | --vers* | -V ) +- echo "$ac_cs_version"; exit 0 ;; +- --he | --h) +- # Conflict between --help and --header +- { { echo "$as_me:$LINENO: error: ambiguous option: $1 +-Try \`$0 --help' for more information." >&5 +-echo "$as_me: error: ambiguous option: $1 +-Try \`$0 --help' for more information." >&2;} +- { (exit 1); exit 1; }; };; +- --help | --hel | -h ) +- echo "$ac_cs_usage"; exit 0 ;; +- --debug | --d* | -d ) ++ --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) ++ echo "$ac_cs_version"; exit ;; ++ --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift +@@ -11326,18 +11730,24 @@ Try \`$0 --help' for more information." + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; ++ --he | --h) ++ # Conflict between --help and --header ++ { echo "$as_me: error: ambiguous option: $1 ++Try \`$0 --help' for more information." >&2 ++ { (exit 1); exit 1; }; };; ++ --help | --hel | -h ) ++ echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. +- -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +-Try \`$0 --help' for more information." >&5 +-echo "$as_me: error: unrecognized option: $1 +-Try \`$0 --help' for more information." >&2;} ++ -*) { echo "$as_me: error: unrecognized option: $1 ++Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + +- *) ac_config_targets="$ac_config_targets $1" ;; ++ *) ac_config_targets="$ac_config_targets $1" ++ ac_need_defaults=false ;; + + esac + shift +@@ -11353,40 +11763,52 @@ fi + _ACEOF + cat >>$CONFIG_STATUS <<_ACEOF + if \$ac_cs_recheck; then +- echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 +- exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion ++ echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 ++ CONFIG_SHELL=$SHELL ++ export CONFIG_SHELL ++ exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + fi + + _ACEOF ++cat >>$CONFIG_STATUS <<\_ACEOF ++exec 5>>config.log +{ -+ int i; -+ int prec; -+ LITTLENUM_TYPE words [MAX_LITTLENUMS]; -+ char * t; -+ -+ switch (type) -+ { -+ case 'f': -+ case 'F': -+ case 's': -+ case 'S': -+ prec = 2; -+ break; ++ echo ++ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ++## Running $as_me. ## ++_ASBOX ++ echo "$ac_log" ++} >&5 + ++_ACEOF + cat >>$CONFIG_STATUS <<_ACEOF + # +-# INIT-COMMANDS section. ++# INIT-COMMANDS + # +- + AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + _ACEOF + +- +- + cat >>$CONFIG_STATUS <<\_ACEOF + -+ case 'd': -+ case 'D': -+ case 'r': -+ case 'R': -+ prec = 4; -+ break; ++# Handling of arguments. + for ac_config_target in $ac_config_targets + do +- case "$ac_config_target" in +- # Handling of arguments. +- "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; +- "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; +- "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;; +- "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; +- "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; +- "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; ++ case $ac_config_target in ++ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; ++ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; ++ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; ++ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; ++ "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;; ++ "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; + -+ /* FIXME: Some targets allow other format chars for bigger sizes here. */ + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 + echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac + done + + -+ default: -+ * sizeP = 0; -+ return _("Bad call to md_atof()"); -+ } + # If the user did not use the arguments to specify the items to instantiate, + # then the envvar interface is used. Set only those that are not. + # We use the long form for the default assignment because of an extremely +@@ -11398,391 +11820,496 @@ if $ac_need_defaults; then + fi + + # Have a temporary directory for convenience. Make it in the build tree +-# simply because there is no reason to put it here, and in addition, ++# simply because there is no reason against having it here, and in addition, + # creating and moving files from /tmp can sometimes cause problems. +-# Create a temporary directory, and hook for its removal unless debugging. ++# Hook for its removal unless debugging. ++# Note that there is a small window in which the directory will not be cleaned: ++# after its creation but before its name has been assigned to `$tmp'. + $debug || + { +- trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 ++ tmp= ++ trap 'exit_status=$? ++ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ++' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 + } +- + # Create a (secure) tmp directory for tmp files. + + { +- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && ++ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" + } || + { +- tmp=./confstat$$-$RANDOM +- (umask 077 && mkdir $tmp) ++ tmp=./conf$$-$RANDOM ++ (umask 077 && mkdir "$tmp") + } || + { + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } + } + +-_ACEOF +- +-cat >>$CONFIG_STATUS <<_ACEOF +- + # +-# CONFIG_FILES section. ++# Set up the sed scripts for CONFIG_FILES section. + # + + # No need to generate the scripts if there are no CONFIG_FILES. + # This happens for instance when ./config.status config.h +-if test -n "\$CONFIG_FILES"; then +- # Protect against being on the right side of a sed subst in config.status. +- sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; +- s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +-s,@SHELL@,$SHELL,;t t +-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +-s,@exec_prefix@,$exec_prefix,;t t +-s,@prefix@,$prefix,;t t +-s,@program_transform_name@,$program_transform_name,;t t +-s,@bindir@,$bindir,;t t +-s,@sbindir@,$sbindir,;t t +-s,@libexecdir@,$libexecdir,;t t +-s,@datadir@,$datadir,;t t +-s,@sysconfdir@,$sysconfdir,;t t +-s,@sharedstatedir@,$sharedstatedir,;t t +-s,@localstatedir@,$localstatedir,;t t +-s,@libdir@,$libdir,;t t +-s,@includedir@,$includedir,;t t +-s,@oldincludedir@,$oldincludedir,;t t +-s,@infodir@,$infodir,;t t +-s,@mandir@,$mandir,;t t +-s,@build_alias@,$build_alias,;t t +-s,@host_alias@,$host_alias,;t t +-s,@target_alias@,$target_alias,;t t +-s,@DEFS@,$DEFS,;t t +-s,@ECHO_C@,$ECHO_C,;t t +-s,@ECHO_N@,$ECHO_N,;t t +-s,@ECHO_T@,$ECHO_T,;t t +-s,@LIBS@,$LIBS,;t t +-s,@build@,$build,;t t +-s,@build_cpu@,$build_cpu,;t t +-s,@build_vendor@,$build_vendor,;t t +-s,@build_os@,$build_os,;t t +-s,@host@,$host,;t t +-s,@host_cpu@,$host_cpu,;t t +-s,@host_vendor@,$host_vendor,;t t +-s,@host_os@,$host_os,;t t +-s,@target@,$target,;t t +-s,@target_cpu@,$target_cpu,;t t +-s,@target_vendor@,$target_vendor,;t t +-s,@target_os@,$target_os,;t t +-s,@CC@,$CC,;t t +-s,@CFLAGS@,$CFLAGS,;t t +-s,@LDFLAGS@,$LDFLAGS,;t t +-s,@CPPFLAGS@,$CPPFLAGS,;t t +-s,@ac_ct_CC@,$ac_ct_CC,;t t +-s,@EXEEXT@,$EXEEXT,;t t +-s,@OBJEXT@,$OBJEXT,;t t +-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +-s,@INSTALL_DATA@,$INSTALL_DATA,;t t +-s,@CYGPATH_W@,$CYGPATH_W,;t t +-s,@PACKAGE@,$PACKAGE,;t t +-s,@VERSION@,$VERSION,;t t +-s,@ACLOCAL@,$ACLOCAL,;t t +-s,@AUTOCONF@,$AUTOCONF,;t t +-s,@AUTOMAKE@,$AUTOMAKE,;t t +-s,@AUTOHEADER@,$AUTOHEADER,;t t +-s,@MAKEINFO@,$MAKEINFO,;t t +-s,@install_sh@,$install_sh,;t t +-s,@STRIP@,$STRIP,;t t +-s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t +-s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t +-s,@mkdir_p@,$mkdir_p,;t t +-s,@AWK@,$AWK,;t t +-s,@SET_MAKE@,$SET_MAKE,;t t +-s,@am__leading_dot@,$am__leading_dot,;t t +-s,@AMTAR@,$AMTAR,;t t +-s,@am__tar@,$am__tar,;t t +-s,@am__untar@,$am__untar,;t t +-s,@DEPDIR@,$DEPDIR,;t t +-s,@am__include@,$am__include,;t t +-s,@am__quote@,$am__quote,;t t +-s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t +-s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t +-s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t +-s,@CCDEPMODE@,$CCDEPMODE,;t t +-s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t +-s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +-s,@LN_S@,$LN_S,;t t +-s,@RANLIB@,$RANLIB,;t t +-s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +-s,@LIBTOOL@,$LIBTOOL,;t t +-s,@WARN_CFLAGS@,$WARN_CFLAGS,;t t +-s,@NO_WERROR@,$NO_WERROR,;t t +-s,@YACC@,$YACC,;t t +-s,@LEX@,$LEX,;t t +-s,@LEXLIB@,$LEXLIB,;t t +-s,@LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t +-s,@CPP@,$CPP,;t t +-s,@EGREP@,$EGREP,;t t +-s,@ALLOCA@,$ALLOCA,;t t +-s,@USE_NLS@,$USE_NLS,;t t +-s,@MSGFMT@,$MSGFMT,;t t +-s,@GMSGFMT@,$GMSGFMT,;t t +-s,@XGETTEXT@,$XGETTEXT,;t t +-s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t +-s,@CATALOGS@,$CATALOGS,;t t +-s,@CATOBJEXT@,$CATOBJEXT,;t t +-s,@DATADIRNAME@,$DATADIRNAME,;t t +-s,@GMOFILES@,$GMOFILES,;t t +-s,@INSTOBJEXT@,$INSTOBJEXT,;t t +-s,@INTLDEPS@,$INTLDEPS,;t t +-s,@INTLLIBS@,$INTLLIBS,;t t +-s,@INTLOBJS@,$INTLOBJS,;t t +-s,@POFILES@,$POFILES,;t t +-s,@POSUB@,$POSUB,;t t +-s,@INCLUDE_LOCALE_H@,$INCLUDE_LOCALE_H,;t t +-s,@GT_NO@,$GT_NO,;t t +-s,@GT_YES@,$GT_YES,;t t +-s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t +-s,@l@,$l,;t t +-s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t +-s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t +-s,@MAINT@,$MAINT,;t t +-s,@HDEFINES@,$HDEFINES,;t t +-s,@AR@,$AR,;t t +-s,@CC_FOR_BUILD@,$CC_FOR_BUILD,;t t +-s,@EXEEXT_FOR_BUILD@,$EXEEXT_FOR_BUILD,;t t +-s,@DEMANGLER_NAME@,$DEMANGLER_NAME,;t t +-s,@NLMCONV_DEFS@,$NLMCONV_DEFS,;t t +-s,@BUILD_NLMCONV@,$BUILD_NLMCONV,;t t +-s,@BUILD_SRCONV@,$BUILD_SRCONV,;t t +-s,@BUILD_DLLTOOL@,$BUILD_DLLTOOL,;t t +-s,@DLLTOOL_DEFS@,$DLLTOOL_DEFS,;t t +-s,@BUILD_WINDRES@,$BUILD_WINDRES,;t t +-s,@BUILD_DLLWRAP@,$BUILD_DLLWRAP,;t t +-s,@BUILD_MISC@,$BUILD_MISC,;t t +-s,@OBJDUMP_DEFS@,$OBJDUMP_DEFS,;t t +-s,@EMULATION@,$EMULATION,;t t +-s,@EMULATION_VECTOR@,$EMULATION_VECTOR,;t t +-s,@datarootdir@,$datarootdir,;t t +-s,@docdir@,$docdir,;t t +-s,@htmldir@,$htmldir,;t t +-s,@LIBOBJS@,$LIBOBJS,;t t +-s,@LTLIBOBJS@,$LTLIBOBJS,;t t +-CEOF +- +-_ACEOF +- +- cat >>$CONFIG_STATUS <<\_ACEOF +- # Split the substitutions into bite-sized pieces for seds with +- # small command number limits, like on Digital OSF/1 and HP-UX. +- ac_max_sed_lines=48 +- ac_sed_frag=1 # Number of current file. +- ac_beg=1 # First line for current file. +- ac_end=$ac_max_sed_lines # Line after last line for current file. +- ac_more_lines=: +- ac_sed_cmds= +- while $ac_more_lines; do +- if test $ac_beg -gt 1; then +- sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag +- else +- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag +- fi +- if test ! -s $tmp/subs.frag; then +- ac_more_lines=false +- else +- # The purpose of the label and of the branching condition is to +- # speed up the sed processing (if there are no `@' at all, there +- # is no need to browse any of the substitutions). +- # These are the two extra sed commands mentioned above. +- (echo ':t +- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed +- if test -z "$ac_sed_cmds"; then +- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" +- else +- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" +- fi +- ac_sed_frag=`expr $ac_sed_frag + 1` +- ac_beg=$ac_end +- ac_end=`expr $ac_end + $ac_max_sed_lines` +- fi +- done +- if test -z "$ac_sed_cmds"; then +- ac_sed_cmds=cat ++if test -n "$CONFIG_FILES"; then + -+ t = atof_ieee (input_line_pointer, type, words); -+ if (t) -+ input_line_pointer = t; -+ * sizeP = prec * sizeof (LITTLENUM_TYPE); ++_ACEOF + -+ for (i = 0; i < prec; i++) -+ { -+ md_number_to_chars (litP, (valueT) words[i], -+ sizeof (LITTLENUM_TYPE)); -+ litP += sizeof (LITTLENUM_TYPE); -+ } + -+ return 0; -+} + -+static char *avr32_end_of_match(char *cont, char *what) -+{ -+ int len = strlen (what); ++ac_delim='%!_!# ' ++for ac_last_try in false false false false false :; do ++ cat >conf$$subs.sed <<_ACEOF ++SHELL!$SHELL$ac_delim ++PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim ++PACKAGE_NAME!$PACKAGE_NAME$ac_delim ++PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim ++PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim ++PACKAGE_STRING!$PACKAGE_STRING$ac_delim ++PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim ++exec_prefix!$exec_prefix$ac_delim ++prefix!$prefix$ac_delim ++program_transform_name!$program_transform_name$ac_delim ++bindir!$bindir$ac_delim ++sbindir!$sbindir$ac_delim ++libexecdir!$libexecdir$ac_delim ++datarootdir!$datarootdir$ac_delim ++datadir!$datadir$ac_delim ++sysconfdir!$sysconfdir$ac_delim ++sharedstatedir!$sharedstatedir$ac_delim ++localstatedir!$localstatedir$ac_delim ++includedir!$includedir$ac_delim ++oldincludedir!$oldincludedir$ac_delim ++docdir!$docdir$ac_delim ++infodir!$infodir$ac_delim ++htmldir!$htmldir$ac_delim ++dvidir!$dvidir$ac_delim ++pdfdir!$pdfdir$ac_delim ++psdir!$psdir$ac_delim ++libdir!$libdir$ac_delim ++localedir!$localedir$ac_delim ++mandir!$mandir$ac_delim ++DEFS!$DEFS$ac_delim ++ECHO_C!$ECHO_C$ac_delim ++ECHO_N!$ECHO_N$ac_delim ++ECHO_T!$ECHO_T$ac_delim ++LIBS!$LIBS$ac_delim ++build_alias!$build_alias$ac_delim ++host_alias!$host_alias$ac_delim ++target_alias!$target_alias$ac_delim ++build!$build$ac_delim ++build_cpu!$build_cpu$ac_delim ++build_vendor!$build_vendor$ac_delim ++build_os!$build_os$ac_delim ++host!$host$ac_delim ++host_cpu!$host_cpu$ac_delim ++host_vendor!$host_vendor$ac_delim ++host_os!$host_os$ac_delim ++target!$target$ac_delim ++target_cpu!$target_cpu$ac_delim ++target_vendor!$target_vendor$ac_delim ++target_os!$target_os$ac_delim ++CC!$CC$ac_delim ++CFLAGS!$CFLAGS$ac_delim ++LDFLAGS!$LDFLAGS$ac_delim ++CPPFLAGS!$CPPFLAGS$ac_delim ++ac_ct_CC!$ac_ct_CC$ac_delim ++EXEEXT!$EXEEXT$ac_delim ++OBJEXT!$OBJEXT$ac_delim ++INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim ++INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim ++INSTALL_DATA!$INSTALL_DATA$ac_delim ++CYGPATH_W!$CYGPATH_W$ac_delim ++PACKAGE!$PACKAGE$ac_delim ++VERSION!$VERSION$ac_delim ++ACLOCAL!$ACLOCAL$ac_delim ++AUTOCONF!$AUTOCONF$ac_delim ++AUTOMAKE!$AUTOMAKE$ac_delim ++AUTOHEADER!$AUTOHEADER$ac_delim ++MAKEINFO!$MAKEINFO$ac_delim ++install_sh!$install_sh$ac_delim ++STRIP!$STRIP$ac_delim ++INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim ++mkdir_p!$mkdir_p$ac_delim ++AWK!$AWK$ac_delim ++SET_MAKE!$SET_MAKE$ac_delim ++am__leading_dot!$am__leading_dot$ac_delim ++AMTAR!$AMTAR$ac_delim ++am__tar!$am__tar$ac_delim ++am__untar!$am__untar$ac_delim ++DEPDIR!$DEPDIR$ac_delim ++am__include!$am__include$ac_delim ++am__quote!$am__quote$ac_delim ++AMDEP_TRUE!$AMDEP_TRUE$ac_delim ++AMDEP_FALSE!$AMDEP_FALSE$ac_delim ++AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim ++CCDEPMODE!$CCDEPMODE$ac_delim ++am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim ++am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim ++LN_S!$LN_S$ac_delim ++RANLIB!$RANLIB$ac_delim ++LIBTOOL!$LIBTOOL$ac_delim ++WARN_CFLAGS!$WARN_CFLAGS$ac_delim ++NO_WERROR!$NO_WERROR$ac_delim ++YACC!$YACC$ac_delim ++YFLAGS!$YFLAGS$ac_delim ++LEX!$LEX$ac_delim ++LEX_OUTPUT_ROOT!$LEX_OUTPUT_ROOT$ac_delim ++LEXLIB!$LEXLIB$ac_delim ++CPP!$CPP$ac_delim ++_ACEOF + -+ if (! is_part_of_name (cont[len]) -+ && strncasecmp (cont, what, len) == 0) -+ return cont + len; ++ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then ++ break ++ elif $ac_last_try; then ++ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 ++echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} ++ { (exit 1); exit 1; }; } ++ else ++ ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +-fi # test -n "$CONFIG_FILES" ++done + -+ return NULL; -+} ++ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` ++if test -n "$ac_eof"; then ++ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ++ ac_eof=`expr $ac_eof + 1` ++fi + -+int -+avr32_parse_name (char const *name, expressionS *exp, char *nextchar) -+{ -+ char *next = input_line_pointer; -+ char *next_end; ++cat >>$CONFIG_STATUS <<_ACEOF ++cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof ++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b ++_ACEOF ++sed ' ++s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g ++s/^/s,@/; s/!/@,|#_!!_#|/ ++:n ++t n ++s/'"$ac_delim"'$/,g/; t ++s/$/\\/; p ++N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ++' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF ++CEOF$ac_eof ++_ACEOF + -+ pr_debug("parse_name: %s, nextchar=%c (%02x)\n", name, *nextchar, *nextchar); + -+ if (*nextchar == '(') -+ { -+ if (strcasecmp(name, "hi") == 0) -+ { -+ *next = *nextchar; ++ac_delim='%!_!# ' ++for ac_last_try in false false false false false :; do ++ cat >conf$$subs.sed <<_ACEOF ++GREP!$GREP$ac_delim ++EGREP!$EGREP$ac_delim ++ALLOCA!$ALLOCA$ac_delim ++USE_NLS!$USE_NLS$ac_delim ++MSGFMT!$MSGFMT$ac_delim ++GMSGFMT!$GMSGFMT$ac_delim ++XGETTEXT!$XGETTEXT$ac_delim ++USE_INCLUDED_LIBINTL!$USE_INCLUDED_LIBINTL$ac_delim ++CATALOGS!$CATALOGS$ac_delim ++CATOBJEXT!$CATOBJEXT$ac_delim ++DATADIRNAME!$DATADIRNAME$ac_delim ++GMOFILES!$GMOFILES$ac_delim ++INSTOBJEXT!$INSTOBJEXT$ac_delim ++INTLDEPS!$INTLDEPS$ac_delim ++INTLLIBS!$INTLLIBS$ac_delim ++INTLOBJS!$INTLOBJS$ac_delim ++POFILES!$POFILES$ac_delim ++POSUB!$POSUB$ac_delim ++INCLUDE_LOCALE_H!$INCLUDE_LOCALE_H$ac_delim ++GT_NO!$GT_NO$ac_delim ++GT_YES!$GT_YES$ac_delim ++MKINSTALLDIRS!$MKINSTALLDIRS$ac_delim ++l!$l$ac_delim ++MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim ++MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim ++MAINT!$MAINT$ac_delim ++HDEFINES!$HDEFINES$ac_delim ++AR!$AR$ac_delim ++CC_FOR_BUILD!$CC_FOR_BUILD$ac_delim ++EXEEXT_FOR_BUILD!$EXEEXT_FOR_BUILD$ac_delim ++DEMANGLER_NAME!$DEMANGLER_NAME$ac_delim ++NLMCONV_DEFS!$NLMCONV_DEFS$ac_delim ++BUILD_NLMCONV!$BUILD_NLMCONV$ac_delim ++BUILD_SRCONV!$BUILD_SRCONV$ac_delim ++BUILD_DLLTOOL!$BUILD_DLLTOOL$ac_delim ++DLLTOOL_DEFS!$DLLTOOL_DEFS$ac_delim ++BUILD_WINDRES!$BUILD_WINDRES$ac_delim ++BUILD_DLLWRAP!$BUILD_DLLWRAP$ac_delim ++BUILD_MISC!$BUILD_MISC$ac_delim ++OBJDUMP_DEFS!$OBJDUMP_DEFS$ac_delim ++EMULATION!$EMULATION$ac_delim ++EMULATION_VECTOR!$EMULATION_VECTOR$ac_delim ++LIBOBJS!$LIBOBJS$ac_delim ++LTLIBOBJS!$LTLIBOBJS$ac_delim ++_ACEOF + -+ expression(exp); ++ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 44; then ++ break ++ elif $ac_last_try; then ++ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 ++echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} ++ { (exit 1); exit 1; }; } ++ else ++ ac_delim="$ac_delim!$ac_delim _$ac_delim!! " ++ fi ++done + ++ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` ++if test -n "$ac_eof"; then ++ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ++ ac_eof=`expr $ac_eof + 1` ++fi + -+ if (exp->X_op == O_constant) -+ { -+ pr_debug(" -> constant hi(0x%08lx) -> 0x%04lx\n", -+ exp->X_add_number, exp->X_add_number >> 16); -+ exp->X_add_number = (exp->X_add_number >> 16) & 0xffff; -+ } -+ else -+ { -+ exp->X_md = exp->X_op; -+ exp->X_op = O_hi; -+ } ++cat >>$CONFIG_STATUS <<_ACEOF ++cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof ++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end ++_ACEOF ++sed ' ++s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g ++s/^/s,@/; s/!/@,|#_!!_#|/ ++:n ++t n ++s/'"$ac_delim"'$/,g/; t ++s/$/\\/; p ++N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ++' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF ++:end ++s/|#_!!_#|//g ++CEOF$ac_eof + _ACEOF + -+ return 1; -+ } -+ else if (strcasecmp(name, "lo") == 0) -+ { -+ *next = *nextchar; + -+ expression(exp); ++# VPATH may cause trouble with some makes, so we remove $(srcdir), ++# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and ++# trailing colons and then remove the whole line if VPATH becomes empty ++# (actually we leave an empty line to preserve line numbers). ++if test "x$srcdir" = x.; then ++ ac_vpsub='/^[ ]*VPATH[ ]*=/{ ++s/:*\$(srcdir):*/:/ ++s/:*\${srcdir}:*/:/ ++s/:*@srcdir@:*/:/ ++s/^\([^=]*=[ ]*\):*/\1/ ++s/:*$// ++s/^[^=]*=[ ]*$// ++}' ++fi + -+ if (exp->X_op == O_constant) -+ exp->X_add_number &= 0xffff; -+ else -+ { -+ exp->X_md = exp->X_op; -+ exp->X_op = O_lo; -+ } + cat >>$CONFIG_STATUS <<\_ACEOF +-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue +- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". +- case $ac_file in +- - | *:- | *:-:* ) # input from stdin +- cat >$tmp/stdin +- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- * ) ac_file_in=$ac_file.in ;; ++fi # test -n "$CONFIG_FILES" + -+ return 1; -+ } -+ } -+ else if (*nextchar == '@') -+ { -+ exp->X_md = exp->X_op; + -+ if ((next_end = avr32_end_of_match (next + 1, "got"))) -+ exp->X_op = O_got; -+ else if ((next_end = avr32_end_of_match (next + 1, "tlsgd"))) -+ exp->X_op = O_tlsgd; -+ /* Add more as needed */ -+ else -+ { -+ char c; -+ input_line_pointer++; -+ c = get_symbol_end(); -+ as_bad (_("unknown relocation override `%s'"), next + 1); -+ *input_line_pointer = c; -+ input_line_pointer = next; -+ return 0; -+ } ++for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS ++do ++ case $ac_tag in ++ :[FHLC]) ac_mode=$ac_tag; continue;; ++ esac ++ case $ac_mode$ac_tag in ++ :[FHL]*:*);; ++ :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 ++echo "$as_me: error: Invalid tag $ac_tag." >&2;} ++ { (exit 1); exit 1; }; };; ++ :[FH]-) ac_tag=-:-;; ++ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; ++ esac ++ ac_save_IFS=$IFS ++ IFS=: ++ set x $ac_tag ++ IFS=$ac_save_IFS ++ shift ++ ac_file=$1 ++ shift + -+ exp->X_op_symbol = NULL; -+ exp->X_add_symbol = symbol_find_or_make (name); -+ exp->X_add_number = 0; ++ case $ac_mode in ++ :L) ac_source=$1;; ++ :[FH]) ++ ac_file_inputs= ++ for ac_f ++ do ++ case $ac_f in ++ -) ac_f="$tmp/stdin";; ++ *) # Look for the file first in the build tree, then in the source tree ++ # (if the path is not absolute). The absolute path cannot be DOS-style, ++ # because $ac_f cannot contain `:'. ++ test -f "$ac_f" || ++ case $ac_f in ++ [\\/$]*) false;; ++ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; ++ esac || ++ { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 ++echo "$as_me: error: cannot find input file: $ac_f" >&2;} ++ { (exit 1); exit 1; }; };; ++ esac ++ ac_file_inputs="$ac_file_inputs $ac_f" ++ done + -+ *input_line_pointer = *nextchar; -+ input_line_pointer = next_end; -+ *nextchar = *input_line_pointer; -+ *input_line_pointer = '\0'; -+ return 1; -+ } -+ else if (strcmp (name, "_GLOBAL_OFFSET_TABLE_") == 0) -+ { -+ if (!GOT_symbol) -+ GOT_symbol = symbol_find_or_make(name); ++ # Let's still pretend it is `configure' which instantiates (i.e., don't ++ # use $as_me), people would be surprised to read: ++ # /* config.h. Generated by config.status. */ ++ configure_input="Generated from "`IFS=: ++ echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." ++ if test x"$ac_file" != x-; then ++ configure_input="$ac_file. $configure_input" ++ { echo "$as_me:$LINENO: creating $ac_file" >&5 ++echo "$as_me: creating $ac_file" >&6;} ++ fi + -+ exp->X_add_symbol = GOT_symbol; -+ exp->X_op = O_symbol; -+ exp->X_add_number = 0; -+ return 1; -+ } ++ case $ac_tag in ++ *:-:* | *:-) cat >"$tmp/stdin";; ++ esac ++ ;; + esac + +- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. +- ac_dir=`(dirname "$ac_file") 2>/dev/null || ++ ac_dir=`$as_dirname -- "$ac_file" || + $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ +- X"$ac_file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || + echo X"$ac_file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ { as_dir="$ac_dir" ++ case $as_dir in #( ++ -*) as_dir=./$as_dir;; ++ esac ++ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || ++ while :; do ++ case $as_dir in #( ++ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( ++ *) as_qdir=$as_dir;; ++ esac ++ as_dirs="'$as_qdir' $as_dirs" ++ as_dir=`$as_dirname -- "$as_dir" || + $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || + echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ test -d "$as_dir" && break + done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} ++ test -z "$as_dirs" || eval "mkdir $as_dirs" ++ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 ++echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } +- + ac_builddir=. + +-if test "$ac_dir" != .; then ++case "$ac_dir" in ++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; ++*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi ++ # A ".." for each directory in $ac_dir_suffix. ++ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` ++ case $ac_top_builddir_sub in ++ "") ac_top_builddir_sub=. ac_top_build_prefix= ;; ++ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; ++ esac ;; ++esac ++ac_abs_top_builddir=$ac_pwd ++ac_abs_builddir=$ac_pwd$ac_dir_suffix ++# for backward compatibility: ++ac_top_builddir=$ac_top_build_prefix + + case $srcdir in +- .) # No --srcdir option. We are building in place. ++ .) # We are building in place. + ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. ++ ac_top_srcdir=$ac_top_builddir_sub ++ ac_abs_top_srcdir=$ac_pwd ;; ++ [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac ++ ac_top_srcdir=$srcdir ++ ac_abs_top_srcdir=$srcdir ;; ++ *) # Relative name. ++ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ++ ac_top_srcdir=$ac_top_build_prefix$srcdir ++ ac_abs_top_srcdir=$ac_pwd/$srcdir ;; ++esac ++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac + ++ case $ac_mode in ++ :F) ++ # ++ # CONFIG_FILE ++ # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; +- *) ac_INSTALL=$ac_top_builddir$INSTALL ;; ++ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac ++_ACEOF + +- if test x"$ac_file" != x-; then +- { echo "$as_me:$LINENO: creating $ac_file" >&5 +-echo "$as_me: creating $ac_file" >&6;} +- rm -f "$ac_file" +- fi +- # Let's still pretend it is `configure' which instantiates (i.e., don't +- # use $as_me), people would be surprised to read: +- # /* config.h. Generated by config.status. */ +- if test x"$ac_file" = x-; then +- configure_input= +- else +- configure_input="$ac_file. " +- fi +- configure_input=$configure_input"Generated from `echo $ac_file_in | +- sed 's,.*/,,'` by configure." +- +- # First look for the input files in the build tree, otherwise in the +- # src tree. +- ac_file_inputs=`IFS=: +- for f in $ac_file_in; do +- case $f in +- -) echo $tmp/stdin ;; +- [\\/$]*) +- # Absolute (can't be DOS-style, as IFS=:) +- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- echo "$f";; +- *) # Relative +- if test -f "$f"; then +- # Build tree +- echo "$f" +- elif test -f "$srcdir/$f"; then +- # Source tree +- echo "$srcdir/$f" +- else +- # /dev/null tree +- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- fi;; +- esac +- done` || { (exit 1); exit 1; } ++cat >>$CONFIG_STATUS <<\_ACEOF ++# If the template does not know about datarootdir, expand it. ++# FIXME: This hack should be removed a few years after 2.60. ++ac_datarootdir_hack=; ac_datarootdir_seen= + -+ return 0; ++case `sed -n '/datarootdir/ { ++ p ++ q +} ++/@datadir@/p ++/@docdir@/p ++/@infodir@/p ++/@localedir@/p ++/@mandir@/p ++' $ac_file_inputs` in ++*datarootdir*) ac_datarootdir_seen=yes;; ++*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) ++ { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 ++echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} ++_ACEOF ++cat >>$CONFIG_STATUS <<_ACEOF ++ ac_datarootdir_hack=' ++ s&@datadir@&$datadir&g ++ s&@docdir@&$docdir&g ++ s&@infodir@&$infodir&g ++ s&@localedir@&$localedir&g ++ s&@mandir@&$mandir&g ++ s&\\\${datarootdir}&$datarootdir&g' ;; ++esac + _ACEOF + -+static void -+s_rseg (int value ATTRIBUTE_UNUSED) -+{ -+ /* Syntax: RSEG segment_name [:type] [NOROOT|ROOT] [(align)] -+ * Defaults: -+ * - type: undocumented ("typically CODE or DATA") -+ * - ROOT -+ * - align: 1 for code, 0 for others -+ * -+ * TODO: NOROOT is ignored. If gas supports discardable segments, it should -+ * be implemented. -+ */ -+ char *name, *end; -+ int length, type, attr; -+ int align = 0; -+ -+ SKIP_WHITESPACE(); -+ -+ end = input_line_pointer; -+ while (0 == strchr ("\n\t;:( ", *end)) -+ end++; -+ if (end == input_line_pointer) -+ { -+ as_warn (_("missing name")); -+ ignore_rest_of_line(); -+ return; -+ } -+ -+ name = xmalloc (end - input_line_pointer + 1); -+ memcpy (name, input_line_pointer, end - input_line_pointer); -+ name[end - input_line_pointer] = '\0'; -+ input_line_pointer = end; -+ -+ SKIP_WHITESPACE(); -+ -+ type = SHT_NULL; -+ attr = 0; -+ -+ if (*input_line_pointer == ':') -+ { -+ /* Skip the colon */ -+ ++input_line_pointer; -+ SKIP_WHITESPACE(); -+ -+ /* Possible options at this point: -+ * - flag (ROOT or NOROOT) -+ * - a segment type -+ */ -+ end = input_line_pointer; -+ while (0 == strchr ("\n\t;:( ", *end)) -+ end++; -+ length = end - input_line_pointer; -+ if (((length == 4) && (0 == strncasecmp( input_line_pointer, "ROOT", 4))) || -+ ((length == 6) && (0 == strncasecmp( input_line_pointer, "NOROOT", 6)))) -+ { -+ /* Ignore ROOT/NOROOT */ -+ input_line_pointer = end; -+ } -+ else -+ { -+ /* Must be a segment type */ -+ switch (*input_line_pointer) -+ { -+ case 'C': -+ case 'c': -+ if ((length == 4) && -+ (0 == strncasecmp (input_line_pointer, "CODE", 4))) -+ { -+ attr |= SHF_ALLOC | SHF_EXECINSTR; -+ type = SHT_PROGBITS; -+ align = 1; -+ break; -+ } -+ if ((length == 5) && -+ (0 == strncasecmp (input_line_pointer, "CONST", 5))) -+ { -+ attr |= SHF_ALLOC; -+ type = SHT_PROGBITS; -+ break; -+ } -+ goto de_fault; -+ -+ case 'D': -+ case 'd': -+ if ((length == 4) && -+ (0 == strncasecmp (input_line_pointer, "DATA", 4))) -+ { -+ attr |= SHF_ALLOC | SHF_WRITE; -+ type = SHT_PROGBITS; -+ break; -+ } -+ goto de_fault; ++# Neutralize VPATH when `$srcdir' = `.'. ++# Shell code in configure.ac might set extrasub. ++# FIXME: do we really want to maintain this feature? + cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub + $extrasub +@@ -11790,248 +12317,130 @@ _ACEOF + cat >>$CONFIG_STATUS <<\_ACEOF + :t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b +-s,@configure_input@,$configure_input,;t t +-s,@srcdir@,$ac_srcdir,;t t +-s,@abs_srcdir@,$ac_abs_srcdir,;t t +-s,@top_srcdir@,$ac_top_srcdir,;t t +-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +-s,@builddir@,$ac_builddir,;t t +-s,@abs_builddir@,$ac_abs_builddir,;t t +-s,@top_builddir@,$ac_top_builddir,;t t +-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +-s,@INSTALL@,$ac_INSTALL,;t t +-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out +- rm -f $tmp/stdin +- if test x"$ac_file" != x-; then +- mv $tmp/out $ac_file +- else +- cat $tmp/out +- rm -f $tmp/out +- fi +- +-done +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF +- +-# +-# CONFIG_HEADER section. +-# +- +-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +-# NAME is the cpp macro being defined and VALUE is the value it is being given. +-# +-# ac_d sets the value in "#define NAME VALUE" lines. +-ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +-ac_dB='[ ].*$,\1#\2' +-ac_dC=' ' +-ac_dD=',;t' +-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +-ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +-ac_uB='$,\1#\2define\3' +-ac_uC=' ' +-ac_uD=',;t' ++s&@configure_input@&$configure_input&;t t ++s&@top_builddir@&$ac_top_builddir_sub&;t t ++s&@srcdir@&$ac_srcdir&;t t ++s&@abs_srcdir@&$ac_abs_srcdir&;t t ++s&@top_srcdir@&$ac_top_srcdir&;t t ++s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t ++s&@builddir@&$ac_builddir&;t t ++s&@abs_builddir@&$ac_abs_builddir&;t t ++s&@abs_top_builddir@&$ac_abs_top_builddir&;t t ++s&@INSTALL@&$ac_INSTALL&;t t ++$ac_datarootdir_hack ++" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out + -+ /* TODO: Add FAR*, HUGE*, IDATA and NEAR* if necessary */ ++test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && ++ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && ++ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && ++ { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' ++which seems to be undefined. Please make sure it is defined." >&5 ++echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' ++which seems to be undefined. Please make sure it is defined." >&2;} + +-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue +- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". ++ rm -f "$tmp/stdin" + case $ac_file in +- - | *:- | *:-:* ) # input from stdin +- cat >$tmp/stdin +- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; +- * ) ac_file_in=$ac_file.in ;; ++ -) cat "$tmp/out"; rm -f "$tmp/out";; ++ *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; + esac ++ ;; ++ :H) ++ # ++ # CONFIG_HEADER ++ # ++_ACEOF + -+ case 'U': -+ case 'u': -+ if ((length == 7) && -+ (0 == strncasecmp (input_line_pointer, "UNTYPED", 7))) -+ break; -+ goto de_fault; ++# Transform confdefs.h into a sed script `conftest.defines', that ++# substitutes the proper values into config.h.in to produce config.h. ++rm -f conftest.defines conftest.tail ++# First, append a space to every undef/define line, to ease matching. ++echo 's/$/ /' >conftest.defines ++# Then, protect against being on the right side of a sed subst, or in ++# an unquoted here document, in config.status. If some macros were ++# called several times there might be several #defines for the same ++# symbol, which is useless. But do not sort them, since the last ++# AC_DEFINE must be honored. ++ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* ++# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where ++# NAME is the cpp macro being defined, VALUE is the value it is being given. ++# PARAMS is the parameter list in the macro definition--in most cases, it's ++# just an empty string. ++ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' ++ac_dB='\\)[ (].*,\\1define\\2' ++ac_dC=' ' ++ac_dD=' ,' + +- test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +-echo "$as_me: creating $ac_file" >&6;} +- +- # First look for the input files in the build tree, otherwise in the +- # src tree. +- ac_file_inputs=`IFS=: +- for f in $ac_file_in; do +- case $f in +- -) echo $tmp/stdin ;; +- [\\/$]*) +- # Absolute (can't be DOS-style, as IFS=:) +- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- # Do quote $f, to prevent DOS paths from being IFS'd. +- echo "$f";; +- *) # Relative +- if test -f "$f"; then +- # Build tree +- echo "$f" +- elif test -f "$srcdir/$f"; then +- # Source tree +- echo "$srcdir/$f" +- else +- # /dev/null tree +- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +-echo "$as_me: error: cannot find input file: $f" >&2;} +- { (exit 1); exit 1; }; } +- fi;; +- esac +- done` || { (exit 1); exit 1; } +- # Remove the trailing spaces. +- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in +- +-_ACEOF +- +-# Transform confdefs.h into two sed scripts, `conftest.defines' and +-# `conftest.undefs', that substitutes the proper values into +-# config.h.in to produce config.h. The first handles `#define' +-# templates, and the second `#undef' templates. +-# And first: Protect against being on the right side of a sed subst in +-# config.status. Protect against being in an unquoted here document +-# in config.status. +-rm -f conftest.defines conftest.undefs +-# Using a here document instead of a string reduces the quoting nightmare. +-# Putting comments in sed scripts is not portable. +-# +-# `end' is used to avoid that the second main sed command (meant for +-# 0-ary CPP macros) applies to n-ary macro definitions. +-# See the Autoconf documentation for `clear'. +-cat >confdef2sed.sed <<\_ACEOF +-s/[\\&,]/\\&/g +-s,[\\$`],\\&,g +-t clear +-: clear +-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +-t end +-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +-: end +-_ACEOF +-# If some macros were called several times there might be several times +-# the same #defines, which is useless. Nevertheless, we may not want to +-# sort them, since we want the *last* AC-DEFINE to be honored. +-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +-rm -f confdef2sed.sed ++uniq confdefs.h | ++ sed -n ' ++ t rset ++ :rset ++ s/^[ ]*#[ ]*define[ ][ ]*// ++ t ok ++ d ++ :ok ++ s/[\\&,]/\\&/g ++ s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p ++ s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p ++ ' >>conftest.defines + +-# This sed command replaces #undef with comments. This is necessary, for ++# Remove the space that was appended to ease matching. ++# Then replace #undef with comments. This is necessary, for + # example, in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. +-cat >>conftest.undefs <<\_ACEOF +-s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, ++# (The regexp can be short, since the line contains either #define or #undef.) ++echo 's/ $// ++s,^[ #]*u.*,/* & */,' >>conftest.defines + -+ /* TODO: Add XDATA and ZPAGE if necessary */ ++# Break up conftest.defines: ++ac_max_sed_lines=50 + -+ de_fault: -+ default: -+ as_warn (_("unrecognized segment type")); -+ } ++# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" ++# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" ++# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" ++# et cetera. ++ac_in='$ac_file_inputs' ++ac_out='"$tmp/out1"' ++ac_nxt='"$tmp/out2"' + -+ input_line_pointer = end; -+ SKIP_WHITESPACE(); ++while : ++do ++ # Write a here document: ++ cat >>$CONFIG_STATUS <<_ACEOF ++ # First, check the format of the line: ++ cat >"\$tmp/defines.sed" <<\\CEOF ++/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def ++/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def ++b ++:def + _ACEOF +- +-# Break up conftest.defines because some shells have a limit on the size +-# of here documents, and old seds have small limits too (100 cmds). +-echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +-echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +-echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +-echo ' :' >>$CONFIG_STATUS +-rm -f conftest.tail +-while grep . conftest.defines >/dev/null +-do +- # Write a limited-size here document to $tmp/defines.sed. +- echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS +- # Speed up: don't consider the non `#define' lines. +- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS +- # Work around the forget-to-reset-the-flag bug. +- echo 't clr' >>$CONFIG_STATUS +- echo ': clr' >>$CONFIG_STATUS +- sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS ++ sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF +- sed -f $tmp/defines.sed $tmp/in >$tmp/out +- rm -f $tmp/in +- mv $tmp/out $tmp/in +-' >>$CONFIG_STATUS +- sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail ++ sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS ++ ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in ++ sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail ++ grep . conftest.tail >/dev/null || break + rm -f conftest.defines + mv conftest.tail conftest.defines + done +-rm -f conftest.defines +-echo ' fi # grep' >>$CONFIG_STATUS +-echo >>$CONFIG_STATUS +- +-# Break up conftest.undefs because some shells have a limit on the size +-# of here documents, and old seds have small limits too (100 cmds). +-echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +-rm -f conftest.tail +-while grep . conftest.undefs >/dev/null +-do +- # Write a limited-size here document to $tmp/undefs.sed. +- echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS +- # Speed up: don't consider the non `#undef' +- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS +- # Work around the forget-to-reset-the-flag bug. +- echo 't clr' >>$CONFIG_STATUS +- echo ': clr' >>$CONFIG_STATUS +- sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS +- echo 'CEOF +- sed -f $tmp/undefs.sed $tmp/in >$tmp/out +- rm -f $tmp/in +- mv $tmp/out $tmp/in +-' >>$CONFIG_STATUS +- sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail +- rm -f conftest.undefs +- mv conftest.tail conftest.undefs +-done +-rm -f conftest.undefs ++rm -f conftest.defines conftest.tail + ++echo "ac_result=$ac_in" >>$CONFIG_STATUS + cat >>$CONFIG_STATUS <<\_ACEOF +- # Let's still pretend it is `configure' which instantiates (i.e., don't +- # use $as_me), people would be surprised to read: +- # /* config.h. Generated by config.status. */ +- if test x"$ac_file" = x-; then +- echo "/* Generated by configure. */" >$tmp/config.h +- else +- echo "/* $ac_file. Generated by configure. */" >$tmp/config.h +- fi +- cat $tmp/in >>$tmp/config.h +- rm -f $tmp/in + if test x"$ac_file" != x-; then +- if diff $ac_file $tmp/config.h >/dev/null 2>&1; then ++ echo "/* $configure_input */" >"$tmp/config.h" ++ cat "$ac_result" >>"$tmp/config.h" ++ if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 + echo "$as_me: $ac_file is unchanged" >&6;} + else +- ac_dir=`(dirname "$ac_file") 2>/dev/null || +-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$ac_file" : 'X\(//\)[^/]' \| \ +- X"$ac_file" : 'X\(//\)$' \| \ +- X"$ac_file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$ac_file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" +- as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || +-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$as_dir" : 'X\(//\)[^/]' \| \ +- X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} +- { (exit 1); exit 1; }; }; } +- + rm -f $ac_file +- mv $tmp/config.h $ac_file ++ mv "$tmp/config.h" $ac_file + fi + else +- cat $tmp/config.h +- rm -f $tmp/config.h ++ echo "/* $configure_input */" ++ cat "$ac_result" + fi ++ rm -f "$tmp/out12" + # Compute $ac_file's index in $config_headers. + _am_stamp_count=1 + for _am_header in $config_headers :; do +@@ -12042,135 +12451,39 @@ for _am_header in $config_headers :; do + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac + done +-echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || ++echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || + $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$ac_file : 'X\(//\)[^/]' \| \ + X$ac_file : 'X\(//\)$' \| \ +- X$ac_file : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X$ac_file : 'X\(/\)' \| . 2>/dev/null || + echo X$ac_file | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'`/stamp-h$_am_stamp_count +-done +-_ACEOF +-cat >>$CONFIG_STATUS <<\_ACEOF +- +-# +-# CONFIG_COMMANDS section. +-# +-for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue +- ac_dest=`echo "$ac_file" | sed 's,:.*,,'` +- ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` +- ac_dir=`(dirname "$ac_dest") 2>/dev/null || +-$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$ac_dest" : 'X\(//\)[^/]' \| \ +- X"$ac_dest" : 'X\(//\)$' \| \ +- X"$ac_dest" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$ac_dest" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p "$ac_dir" +- else +- as_dir="$ac_dir" +- as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || +-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ +- X"$as_dir" : 'X\(//\)[^/]' \| \ +- X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || +-echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} +- { (exit 1); exit 1; }; }; } +- +- ac_builddir=. +- +-if test "$ac_dir" != .; then +- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` +- # A "../" for each directory in $ac_dir_suffix. +- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +-else +- ac_dir_suffix= ac_top_builddir= +-fi +- +-case $srcdir in +- .) # No --srcdir option. We are building in place. +- ac_srcdir=. +- if test -z "$ac_top_builddir"; then +- ac_top_srcdir=. +- else +- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` +- fi ;; +- [\\/]* | ?:[\\/]* ) # Absolute path. +- ac_srcdir=$srcdir$ac_dir_suffix; +- ac_top_srcdir=$srcdir ;; +- *) # Relative path. +- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix +- ac_top_srcdir=$ac_top_builddir$srcdir ;; +-esac ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'`/stamp-h$_am_stamp_count ++ ;; + +-# Do not use `cd foo && pwd` to compute absolute paths, because +-# the directories may not exist. +-case `pwd` in +-.) ac_abs_builddir="$ac_dir";; +-*) +- case "$ac_dir" in +- .) ac_abs_builddir=`pwd`;; +- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; +- *) ac_abs_builddir=`pwd`/"$ac_dir";; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_builddir=${ac_top_builddir}.;; +-*) +- case ${ac_top_builddir}. in +- .) ac_abs_top_builddir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; +- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_srcdir=$ac_srcdir;; +-*) +- case $ac_srcdir in +- .) ac_abs_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; +- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; +- esac;; +-esac +-case $ac_abs_builddir in +-.) ac_abs_top_srcdir=$ac_top_srcdir;; +-*) +- case $ac_top_srcdir in +- .) ac_abs_top_srcdir=$ac_abs_builddir;; +- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; +- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; +- esac;; +-esac ++ :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 ++echo "$as_me: executing $ac_file commands" >&6;} ++ ;; ++ esac + + +- { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 +-echo "$as_me: executing $ac_dest commands" >&6;} +- case $ac_dest in +- depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do ++ case $ac_file$ac_mode in ++ "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. +@@ -12180,18 +12493,29 @@ echo "$as_me: executing $ac_dest command + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then +- dirpart=`(dirname "$mf") 2>/dev/null || ++ dirpart=`$as_dirname -- "$mf" || + $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ +- X"$mf" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$mf" : 'X\(/\)' \| . 2>/dev/null || + echo X"$mf" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` + else + continue + fi +@@ -12213,58 +12537,84 @@ echo X"$mf" | + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue +- fdir=`(dirname "$file") 2>/dev/null || ++ fdir=`$as_dirname -- "$file" || + $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ +- X"$file" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$file" : 'X\(/\)' \| . 2>/dev/null || + echo X"$file" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` +- { if $as_mkdir_p; then +- mkdir -p $dirpart/$fdir +- else +- as_dir=$dirpart/$fdir ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ { as_dir=$dirpart/$fdir ++ case $as_dir in #( ++ -*) as_dir=./$as_dir;; ++ esac ++ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= +- while test ! -d "$as_dir"; do +- as_dirs="$as_dir $as_dirs" +- as_dir=`(dirname "$as_dir") 2>/dev/null || ++ while :; do ++ case $as_dir in #( ++ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( ++ *) as_qdir=$as_dir;; ++ esac ++ as_dirs="'$as_qdir' $as_dirs" ++ as_dir=`$as_dirname -- "$as_dir" || + $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ +- X"$as_dir" : 'X\(/\)' \| \ +- . : '\(.\)' 2>/dev/null || ++ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || + echo X"$as_dir" | +- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } +- /^X\(\/\/\)[^/].*/{ s//\1/; q; } +- /^X\(\/\/\)$/{ s//\1/; q; } +- /^X\(\/\).*/{ s//\1/; q; } +- s/.*/./; q'` ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ test -d "$as_dir" && break + done +- test ! -n "$as_dirs" || mkdir $as_dirs +- fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 +-echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} ++ test -z "$as_dirs" || eval "mkdir $as_dirs" ++ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 ++echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } +- + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done + ;; +- default ) ++ "default":C) + case "x$CONFIG_FILES" in + *) sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;; + esac + ;; + -+ if (*input_line_pointer == ':') -+ { -+ /* ROOT/NOROOT */ -+ ++input_line_pointer; -+ SKIP_WHITESPACE(); + esac +-done +-_ACEOF ++done # for ac_tag + +-cat >>$CONFIG_STATUS <<\_ACEOF + + { (exit 0); exit 0; } + _ACEOF +diff -Nrup binutils-2.17/binutils/doc/binutils.info binutils-2.17.atmel.1.3.0/binutils/doc/binutils.info +--- binutils-2.17/binutils/doc/binutils.info 2006-06-23 20:19:48.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/binutils/doc/binutils.info 2007-03-26 10:34:44.000000000 +0200 +@@ -1,5 +1,7 @@ +-This is ../.././binutils/doc/binutils.info, produced by makeinfo +-version 4.8 from ../.././binutils/doc/binutils.texi. ++This is ++/home/hcegtvedt/svnwork/tools/T0243-GNU_Toolchain/50-Source/binutils/trunk/binutils/doc/binutils.info, ++produced by makeinfo version 4.8 from ++/home/hcegtvedt/svnwork/tools/T0243-GNU_Toolchain/50-Source/binutils/trunk/binutils/doc/binutils.texi. + + START-INFO-DIR-ENTRY + * Binutils: (binutils). The GNU binary utilities. +@@ -3803,33 +3805,33 @@ Index + +  + Tag Table: +-Node: Top1751 +-Node: ar3304 +-Node: ar cmdline5482 +-Node: ar scripts13625 +-Node: nm19313 +-Node: objcopy27509 +-Node: objdump50561 +-Node: ranlib65474 +-Node: size66229 +-Node: strings69076 +-Node: strip71426 +-Node: c++filt76905 +-Ref: c++filt-Footnote-181833 +-Node: addr2line81939 +-Node: nlmconv85210 +-Node: windres87816 +-Node: dlltool93549 +-Node: def file format104387 +-Node: readelf106125 +-Node: Common Options110833 +-Node: Selecting The Target System111873 +-Node: Target Selection112805 +-Node: Architecture Selection114787 +-Node: Reporting Bugs115615 +-Node: Bug Criteria116394 +-Node: Bug Reporting116947 +-Node: GNU Free Documentation License124041 +-Node: Index143773 ++Node: Top1885 ++Node: ar3438 ++Node: ar cmdline5616 ++Node: ar scripts13759 ++Node: nm19447 ++Node: objcopy27643 ++Node: objdump50695 ++Node: ranlib65608 ++Node: size66363 ++Node: strings69210 ++Node: strip71560 ++Node: c++filt77039 ++Ref: c++filt-Footnote-181967 ++Node: addr2line82073 ++Node: nlmconv85344 ++Node: windres87950 ++Node: dlltool93683 ++Node: def file format104521 ++Node: readelf106259 ++Node: Common Options110967 ++Node: Selecting The Target System112007 ++Node: Target Selection112939 ++Node: Architecture Selection114921 ++Node: Reporting Bugs115749 ++Node: Bug Criteria116528 ++Node: Bug Reporting117081 ++Node: GNU Free Documentation License124175 ++Node: Index143907 +  + End Tag Table +diff -Nrup binutils-2.17/binutils/doc/Makefile.in binutils-2.17.atmel.1.3.0/binutils/doc/Makefile.in +--- binutils-2.17/binutils/doc/Makefile.in 2006-06-03 06:45:50.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/binutils/doc/Makefile.in 2007-03-26 10:32:10.000000000 +0200 +@@ -109,6 +109,7 @@ EXEEXT = @EXEEXT@ + EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ + GMOFILES = @GMOFILES@ + GMSGFMT = @GMSGFMT@ ++GREP = @GREP@ + GT_NO = @GT_NO@ + GT_YES = @GT_YES@ + HDEFINES = @HDEFINES@ +@@ -159,9 +160,8 @@ VERSION = @VERSION@ + WARN_CFLAGS = @WARN_CFLAGS@ + XGETTEXT = @XGETTEXT@ + YACC = @YACC@ ++YFLAGS = @YFLAGS@ + ac_ct_CC = @ac_ct_CC@ +-ac_ct_RANLIB = @ac_ct_RANLIB@ +-ac_ct_STRIP = @ac_ct_STRIP@ + am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ + am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ + am__include = @am__include@ +@@ -178,6 +178,7 @@ build_vendor = @build_vendor@ + datadir = @datadir@ + datarootdir = @datarootdir@ + docdir = @docdir@ ++dvidir = @dvidir@ + exec_prefix = @exec_prefix@ + host = @host@ + host_alias = @host_alias@ +@@ -191,12 +192,15 @@ install_sh = @install_sh@ + l = @l@ + libdir = @libdir@ + libexecdir = @libexecdir@ ++localedir = @localedir@ + localstatedir = @localstatedir@ + mandir = @mandir@ + mkdir_p = @mkdir_p@ + oldincludedir = @oldincludedir@ ++pdfdir = @pdfdir@ + prefix = @prefix@ + program_transform_name = @program_transform_name@ ++psdir = @psdir@ + sbindir = @sbindir@ + sharedstatedir = @sharedstatedir@ + sysconfdir = @sysconfdir@ +@@ -368,10 +372,13 @@ dist-info: $(INFO_DEPS) + $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$base; then d=.; else d=$(srcdir); fi; \ +- for file in $$d/$$base*; do \ +- relfile=`expr "$$file" : "$$d/\(.*\)"`; \ +- test -f $(distdir)/$$relfile || \ +- cp -p $$file $(distdir)/$$relfile; \ ++ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ ++ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ ++ if test -f $$file; then \ ++ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ ++ test -f $(distdir)/$$relfile || \ ++ cp -p $$file $(distdir)/$$relfile; \ ++ else :; fi; \ + done; \ + done + +diff -Nrup binutils-2.17/binutils/Makefile.am binutils-2.17.atmel.1.3.0/binutils/Makefile.am +--- binutils-2.17/binutils/Makefile.am 2006-04-06 23:49:26.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/binutils/Makefile.am 2007-03-26 10:20:22.000000000 +0200 +@@ -511,7 +511,7 @@ readelf.o: readelf.c dwarf.h ../bfd/bfd. + $(INCDIR)/symcat.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/elf/common.h \ + $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/alpha.h \ + $(INCDIR)/elf/reloc-macros.h $(INCDIR)/elf/arc.h $(INCDIR)/elf/arm.h \ +- $(INCDIR)/elf/avr.h $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h \ ++ $(INCDIR)/elf/avr.h $(INCDIR)/elf/avr32.h $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h \ + $(INCDIR)/elf/d10v.h $(INCDIR)/elf/d30v.h $(INCDIR)/elf/dlx.h \ + $(INCDIR)/elf/fr30.h $(INCDIR)/elf/frv.h $(INCDIR)/elf/h8.h \ + $(INCDIR)/elf/hppa.h $(INCDIR)/elf/i386.h $(INCDIR)/elf/i370.h \ +diff -Nrup binutils-2.17/binutils/Makefile.in binutils-2.17.atmel.1.3.0/binutils/Makefile.in +--- binutils-2.17/binutils/Makefile.in 2006-06-02 04:21:08.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/binutils/Makefile.in 2007-03-26 10:32:10.000000000 +0200 +@@ -266,6 +266,7 @@ EXEEXT = @EXEEXT@ + EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ + GMOFILES = @GMOFILES@ + GMSGFMT = @GMSGFMT@ ++GREP = @GREP@ + GT_NO = @GT_NO@ + GT_YES = @GT_YES@ + HDEFINES = @HDEFINES@ +@@ -316,9 +317,8 @@ VERSION = @VERSION@ + WARN_CFLAGS = @WARN_CFLAGS@ + XGETTEXT = @XGETTEXT@ + YACC = `if [ -f ../bison/bison ]; then echo ../bison/bison -y -L$(srcdir)/../bison/; else echo @YACC@; fi` ++YFLAGS = -d + ac_ct_CC = @ac_ct_CC@ +-ac_ct_RANLIB = @ac_ct_RANLIB@ +-ac_ct_STRIP = @ac_ct_STRIP@ + am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ + am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ + am__include = @am__include@ +@@ -335,6 +335,7 @@ build_vendor = @build_vendor@ + datadir = @datadir@ + datarootdir = @datarootdir@ + docdir = @docdir@ ++dvidir = @dvidir@ + exec_prefix = @exec_prefix@ + host = @host@ + host_alias = @host_alias@ +@@ -348,12 +349,15 @@ install_sh = @install_sh@ + l = @l@ + libdir = @libdir@ + libexecdir = @libexecdir@ ++localedir = @localedir@ + localstatedir = @localstatedir@ + mandir = @mandir@ + mkdir_p = @mkdir_p@ + oldincludedir = @oldincludedir@ ++pdfdir = @pdfdir@ + prefix = @prefix@ + program_transform_name = @program_transform_name@ ++psdir = @psdir@ + sbindir = @sbindir@ + sharedstatedir = @sharedstatedir@ + sysconfdir = @sysconfdir@ +@@ -365,7 +369,6 @@ target_vendor = @target_vendor@ + AUTOMAKE_OPTIONS = cygnus dejagnu + SUBDIRS = doc po + tooldir = $(exec_prefix)/$(target_alias) +-YFLAGS = -d + AM_CFLAGS = $(WARN_CFLAGS) + + # these two are almost the same program +@@ -1264,7 +1267,7 @@ readelf.o: readelf.c dwarf.h ../bfd/bfd. + $(INCDIR)/symcat.h $(INCDIR)/elf/dwarf2.h $(INCDIR)/elf/common.h \ + $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/alpha.h \ + $(INCDIR)/elf/reloc-macros.h $(INCDIR)/elf/arc.h $(INCDIR)/elf/arm.h \ +- $(INCDIR)/elf/avr.h $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h \ ++ $(INCDIR)/elf/avr.h $(INCDIR)/elf/avr32.h $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h \ + $(INCDIR)/elf/d10v.h $(INCDIR)/elf/d30v.h $(INCDIR)/elf/dlx.h \ + $(INCDIR)/elf/fr30.h $(INCDIR)/elf/frv.h $(INCDIR)/elf/h8.h \ + $(INCDIR)/elf/hppa.h $(INCDIR)/elf/i386.h $(INCDIR)/elf/i370.h \ +diff -Nrup binutils-2.17/binutils/readelf.c binutils-2.17.atmel.1.3.0/binutils/readelf.c +--- binutils-2.17/binutils/readelf.c 2006-03-10 18:20:28.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/binutils/readelf.c 2007-03-26 10:20:22.000000000 +0200 +@@ -71,6 +71,7 @@ + #include "elf/arc.h" + #include "elf/arm.h" + #include "elf/avr.h" ++#include "elf/avr32.h" + #include "elf/bfin.h" + #include "elf/cris.h" + #include "elf/d10v.h" +@@ -590,6 +591,7 @@ guess_is_rela (unsigned long e_machine) + case EM_MCORE: + case EM_IA_64: + case EM_AVR: ++ case EM_AVR32: + case EM_AVR_OLD: + case EM_CRIS: + case EM_860: +@@ -959,6 +961,10 @@ dump_relocations (FILE *file, + rtype = elf_avr_reloc_type (type); + break; + ++ case EM_AVR32: ++ rtype = elf_avr32_reloc_type (type); ++ break; + -+ end = input_line_pointer; -+ while (0 == strchr ("\n\t;:( ", *end)) -+ end++; -+ length = end - input_line_pointer; -+ if (! ((length == 4) && -+ (0 == strncasecmp( input_line_pointer, "ROOT", 4))) && -+ ! ((length == 6) && -+ (0 == strncasecmp( input_line_pointer, "NOROOT", 6)))) + case EM_OLD_SPARCV9: + case EM_SPARC32PLUS: + case EM_SPARCV9: +@@ -1670,6 +1676,7 @@ get_machine_name (unsigned e_machine) + case EM_VAX: return "Digital VAX"; + case EM_AVR_OLD: + case EM_AVR: return "Atmel AVR 8-bit microcontroller"; ++ case EM_AVR32: return "Atmel AVR32"; + case EM_CRIS: return "Axis Communications 32-bit embedded processor"; + case EM_JAVELIN: return "Infineon Technologies 32-bit embedded cpu"; + case EM_FIREPATH: return "Element 14 64-bit DSP processor"; +diff -Nrup binutils-2.17/configure binutils-2.17.atmel.1.3.0/configure +--- binutils-2.17/configure 2006-04-06 23:49:25.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/configure 2007-03-26 10:30:30.000000000 +0200 +@@ -899,7 +899,7 @@ host_libs="intl mmalloc libiberty opcode + # know that we are building the simulator. + # binutils, gas and ld appear in that order because it makes sense to run + # "make check" in that particular order. +-host_tools="texinfo byacc flex bison binutils gas ld fixincludes gcc sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar gnattools" ++host_tools="byacc flex bison binutils gas ld fixincludes gcc sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar gnattools" + + # libgcj represents the runtime libraries only used by gcj. + libgcj="target-libffi \ +@@ -1064,6 +1064,9 @@ unsupported_languages= + # exist yet. + + case "${host}" in ++ avr32*-*-*) ++ noconfigdirs="$noconfigdirs readline gdb" ++ ;; + hppa*64*-*-*) + noconfigdirs="$noconfigdirs byacc" + ;; +@@ -1863,7 +1866,7 @@ else + # Extract the first word of "gcc", so it can be a program name with args. + set dummy gcc; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:1867: checking for $ac_word" >&5 ++echo "configure:1870: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -1893,7 +1896,7 @@ if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. + set dummy cc; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:1897: checking for $ac_word" >&5 ++echo "configure:1900: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -1944,7 +1947,7 @@ fi + # Extract the first word of "cl", so it can be a program name with args. + set dummy cl; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:1948: checking for $ac_word" >&5 ++echo "configure:1951: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -1976,7 +1979,7 @@ fi + fi + + echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +-echo "configure:1980: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ++echo "configure:1983: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + + ac_ext=c + # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +@@ -1987,12 +1990,12 @@ cross_compiling=$ac_cv_prog_cc_cross + + cat > conftest.$ac_ext << EOF + +-#line 1991 "configure" ++#line 1994 "configure" + #include "confdefs.h" + + main(){return(0);} + EOF +-if { (eval echo configure:1996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++if { (eval echo configure:1999: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then +@@ -2018,12 +2021,12 @@ if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } + fi + echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +-echo "configure:2022: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 ++echo "configure:2025: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 + echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 + cross_compiling=$ac_cv_prog_cc_cross + + echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +-echo "configure:2027: checking whether we are using GNU C" >&5 ++echo "configure:2030: checking whether we are using GNU C" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -2032,7 +2035,7 @@ else + yes; + #endif + EOF +-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2036: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ++if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2039: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes + else + ac_cv_prog_gcc=no +@@ -2051,7 +2054,7 @@ ac_test_CFLAGS="${CFLAGS+set}" + ac_save_CFLAGS="$CFLAGS" + CFLAGS= + echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +-echo "configure:2055: checking whether ${CC-cc} accepts -g" >&5 ++echo "configure:2058: checking whether ${CC-cc} accepts -g" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -2118,7 +2121,7 @@ fi + # Extract the first word of "${ac_tool_prefix}gnatbind", so it can be a program name with args. + set dummy ${ac_tool_prefix}gnatbind; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:2122: checking for $ac_word" >&5 ++echo "configure:2125: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -2150,7 +2153,7 @@ if test -n "$ac_tool_prefix"; then + # Extract the first word of "gnatbind", so it can be a program name with args. + set dummy gnatbind; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:2154: checking for $ac_word" >&5 ++echo "configure:2157: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -2183,7 +2186,7 @@ fi + fi + + echo $ac_n "checking whether compiler driver understands Ada""... $ac_c" 1>&6 +-echo "configure:2187: checking whether compiler driver understands Ada" >&5 ++echo "configure:2190: checking whether compiler driver understands Ada" >&5 + if eval "test \"`echo '$''{'acx_cv_cc_gcc_supports_ada'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -2215,7 +2218,7 @@ else + fi + + echo $ac_n "checking how to compare bootstrapped objects""... $ac_c" 1>&6 +-echo "configure:2219: checking how to compare bootstrapped objects" >&5 ++echo "configure:2222: checking how to compare bootstrapped objects" >&5 + if eval "test \"`echo '$''{'gcc_cv_prog_cmp_skip'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -2313,9 +2316,9 @@ saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $gmpinc" + # Check GMP actually works + echo $ac_n "checking for correct version of gmp.h""... $ac_c" 1>&6 +-echo "configure:2317: checking for correct version of gmp.h" >&5 ++echo "configure:2320: checking for correct version of gmp.h" >&5 + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:2333: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6 + else +@@ -2339,12 +2342,12 @@ rm -f conftest* + + if test x"$have_gmp" = xyes; then + echo $ac_n "checking for MPFR""... $ac_c" 1>&6 +-echo "configure:2343: checking for MPFR" >&5 ++echo "configure:2346: checking for MPFR" >&5 + + saved_LIBS="$LIBS" + LIBS="$LIBS $gmplibs" + cat > conftest.$ac_ext < + #include +@@ -2352,7 +2355,7 @@ int main() { + mpfr_t n; mpfr_init(n); + ; return 0; } + EOF +-if { (eval echo configure:2356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++if { (eval echo configure:2359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6 + else +@@ -3403,7 +3406,7 @@ do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3407: checking for $ac_word" >&5 ++echo "configure:3410: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3443,7 +3446,7 @@ do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3447: checking for $ac_word" >&5 ++echo "configure:3450: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_BISON'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3482,7 +3485,7 @@ do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3486: checking for $ac_word" >&5 ++echo "configure:3489: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_M4'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3521,7 +3524,7 @@ do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3525: checking for $ac_word" >&5 ++echo "configure:3528: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3561,7 +3564,7 @@ do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3565: checking for $ac_word" >&5 ++echo "configure:3568: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_FLEX'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3600,7 +3603,7 @@ do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3604: checking for $ac_word" >&5 ++echo "configure:3607: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3653,7 +3656,7 @@ do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3657: checking for $ac_word" >&5 ++echo "configure:3660: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_EXPECT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3694,7 +3697,7 @@ do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3698: checking for $ac_word" >&5 ++echo "configure:3701: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_RUNTEST'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3742,7 +3745,7 @@ test -n "$target_alias" && ncn_target_to + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3746: checking for $ac_word" >&5 ++echo "configure:3749: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3773,7 +3776,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3777: checking for $ac_word" >&5 ++echo "configure:3780: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3817,7 +3820,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3821: checking for $ac_word" >&5 ++echo "configure:3824: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3848,7 +3851,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3852: checking for $ac_word" >&5 ++echo "configure:3855: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3892,7 +3895,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3896: checking for $ac_word" >&5 ++echo "configure:3899: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3923,7 +3926,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3927: checking for $ac_word" >&5 ++echo "configure:3930: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3967,7 +3970,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:3971: checking for $ac_word" >&5 ++echo "configure:3974: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -3998,7 +4001,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4002: checking for $ac_word" >&5 ++echo "configure:4005: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4042,7 +4045,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4046: checking for $ac_word" >&5 ++echo "configure:4049: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LIPO'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4073,7 +4076,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4077: checking for $ac_word" >&5 ++echo "configure:4080: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LIPO'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4117,7 +4120,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4121: checking for $ac_word" >&5 ++echo "configure:4124: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4148,7 +4151,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4152: checking for $ac_word" >&5 ++echo "configure:4155: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4192,7 +4195,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4196: checking for $ac_word" >&5 ++echo "configure:4199: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4223,7 +4226,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4227: checking for $ac_word" >&5 ++echo "configure:4230: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4262,7 +4265,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4266: checking for $ac_word" >&5 ++echo "configure:4269: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4293,7 +4296,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4297: checking for $ac_word" >&5 ++echo "configure:4300: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4332,7 +4335,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4336: checking for $ac_word" >&5 ++echo "configure:4339: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4363,7 +4366,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4367: checking for $ac_word" >&5 ++echo "configure:4370: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4407,7 +4410,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4411: checking for $ac_word" >&5 ++echo "configure:4414: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4438,7 +4441,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4442: checking for $ac_word" >&5 ++echo "configure:4445: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4482,7 +4485,7 @@ fi + # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4486: checking for $ac_word" >&5 ++echo "configure:4489: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4513,7 +4516,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4517: checking for $ac_word" >&5 ++echo "configure:4520: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4577,7 +4580,7 @@ fi + if test -n "$with_build_time_tools"; then + for ncn_progname in cc gcc; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:4581: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:4584: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_CC_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -4594,7 +4597,7 @@ if test -z "$ac_cv_prog_CC_FOR_TARGET"; + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4598: checking for $ac_word" >&5 ++echo "configure:4601: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CC_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4625,7 +4628,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4629: checking for $ac_word" >&5 ++echo "configure:4632: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CC_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4668,7 +4671,7 @@ fi + if test -n "$with_build_time_tools"; then + for ncn_progname in c++ g++ cxx gxx; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:4672: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:4675: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_CXX_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -4685,7 +4688,7 @@ if test -z "$ac_cv_prog_CXX_FOR_TARGET"; + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4689: checking for $ac_word" >&5 ++echo "configure:4692: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CXX_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4716,7 +4719,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4720: checking for $ac_word" >&5 ++echo "configure:4723: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CXX_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4759,7 +4762,7 @@ fi + if test -n "$with_build_time_tools"; then + for ncn_progname in gcc; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:4763: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:4766: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_GCC_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -4776,7 +4779,7 @@ if test -z "$ac_cv_prog_GCC_FOR_TARGET"; + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4780: checking for $ac_word" >&5 ++echo "configure:4783: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_GCC_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4807,7 +4810,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4811: checking for $ac_word" >&5 ++echo "configure:4814: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_GCC_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4845,7 +4848,7 @@ fi + if test -n "$with_build_time_tools"; then + for ncn_progname in gcj; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:4849: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:4852: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_GCJ_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -4862,7 +4865,7 @@ if test -z "$ac_cv_prog_GCJ_FOR_TARGET"; + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4866: checking for $ac_word" >&5 ++echo "configure:4869: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_GCJ_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4893,7 +4896,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4897: checking for $ac_word" >&5 ++echo "configure:4900: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_GCJ_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4936,7 +4939,7 @@ fi + if test -n "$with_build_time_tools"; then + for ncn_progname in gfortran; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:4940: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:4943: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_GFORTRAN_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -4953,7 +4956,7 @@ if test -z "$ac_cv_prog_GFORTRAN_FOR_TAR + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4957: checking for $ac_word" >&5 ++echo "configure:4960: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_GFORTRAN_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -4984,7 +4987,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:4988: checking for $ac_word" >&5 ++echo "configure:4991: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_GFORTRAN_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5091,7 +5094,7 @@ rm conftest.c + if test -z "$ac_cv_path_AR_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for ar in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5095: checking for ar in $with_build_time_tools" >&5 ++echo "configure:5098: checking for ar in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/ar; then + AR_FOR_TARGET=`cd $with_build_time_tools && pwd`/ar + ac_cv_path_AR_FOR_TARGET=$AR_FOR_TARGET +@@ -5109,7 +5112,7 @@ if test -z "$ac_cv_path_AR_FOR_TARGET" ; + # Extract the first word of "ar", so it can be a program name with args. + set dummy ar; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5113: checking for $ac_word" >&5 ++echo "configure:5116: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_AR_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5146,7 +5149,7 @@ if test -z "$ac_cv_path_AR_FOR_TARGET" ; + if test -n "$with_build_time_tools"; then + for ncn_progname in ar; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5150: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:5153: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_AR_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -5163,7 +5166,7 @@ if test -z "$ac_cv_prog_AR_FOR_TARGET"; + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5167: checking for $ac_word" >&5 ++echo "configure:5170: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_AR_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5194,7 +5197,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5198: checking for $ac_word" >&5 ++echo "configure:5201: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_AR_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5244,7 +5247,7 @@ fi + if test -z "$ac_cv_path_AS_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for as in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5248: checking for as in $with_build_time_tools" >&5 ++echo "configure:5251: checking for as in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/as; then + AS_FOR_TARGET=`cd $with_build_time_tools && pwd`/as + ac_cv_path_AS_FOR_TARGET=$AS_FOR_TARGET +@@ -5262,7 +5265,7 @@ if test -z "$ac_cv_path_AS_FOR_TARGET" ; + # Extract the first word of "as", so it can be a program name with args. + set dummy as; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5266: checking for $ac_word" >&5 ++echo "configure:5269: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_AS_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5299,7 +5302,7 @@ if test -z "$ac_cv_path_AS_FOR_TARGET" ; + if test -n "$with_build_time_tools"; then + for ncn_progname in as; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5303: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:5306: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_AS_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -5316,7 +5319,7 @@ if test -z "$ac_cv_prog_AS_FOR_TARGET"; + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5320: checking for $ac_word" >&5 ++echo "configure:5323: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_AS_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5347,7 +5350,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5351: checking for $ac_word" >&5 ++echo "configure:5354: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_AS_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5397,7 +5400,7 @@ fi + if test -z "$ac_cv_path_DLLTOOL_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for dlltool in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5401: checking for dlltool in $with_build_time_tools" >&5 ++echo "configure:5404: checking for dlltool in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/dlltool; then + DLLTOOL_FOR_TARGET=`cd $with_build_time_tools && pwd`/dlltool + ac_cv_path_DLLTOOL_FOR_TARGET=$DLLTOOL_FOR_TARGET +@@ -5415,7 +5418,7 @@ if test -z "$ac_cv_path_DLLTOOL_FOR_TARG + # Extract the first word of "dlltool", so it can be a program name with args. + set dummy dlltool; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5419: checking for $ac_word" >&5 ++echo "configure:5422: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5452,7 +5455,7 @@ if test -z "$ac_cv_path_DLLTOOL_FOR_TARG + if test -n "$with_build_time_tools"; then + for ncn_progname in dlltool; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5456: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:5459: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_DLLTOOL_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -5469,7 +5472,7 @@ if test -z "$ac_cv_prog_DLLTOOL_FOR_TARG + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5473: checking for $ac_word" >&5 ++echo "configure:5476: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5500,7 +5503,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5504: checking for $ac_word" >&5 ++echo "configure:5507: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5550,7 +5553,7 @@ fi + if test -z "$ac_cv_path_LD_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for ld in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5554: checking for ld in $with_build_time_tools" >&5 ++echo "configure:5557: checking for ld in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/ld; then + LD_FOR_TARGET=`cd $with_build_time_tools && pwd`/ld + ac_cv_path_LD_FOR_TARGET=$LD_FOR_TARGET +@@ -5568,7 +5571,7 @@ if test -z "$ac_cv_path_LD_FOR_TARGET" ; + # Extract the first word of "ld", so it can be a program name with args. + set dummy ld; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5572: checking for $ac_word" >&5 ++echo "configure:5575: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_LD_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5605,7 +5608,7 @@ if test -z "$ac_cv_path_LD_FOR_TARGET" ; + if test -n "$with_build_time_tools"; then + for ncn_progname in ld; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5609: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:5612: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_LD_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -5622,7 +5625,7 @@ if test -z "$ac_cv_prog_LD_FOR_TARGET"; + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5626: checking for $ac_word" >&5 ++echo "configure:5629: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LD_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5653,7 +5656,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5657: checking for $ac_word" >&5 ++echo "configure:5660: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LD_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5703,7 +5706,7 @@ fi + if test -z "$ac_cv_path_LIPO_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for lipo in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5707: checking for lipo in $with_build_time_tools" >&5 ++echo "configure:5710: checking for lipo in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/lipo; then + LIPO_FOR_TARGET=`cd $with_build_time_tools && pwd`/lipo + ac_cv_path_LIPO_FOR_TARGET=$LIPO_FOR_TARGET +@@ -5721,7 +5724,7 @@ if test -z "$ac_cv_path_LIPO_FOR_TARGET" + # Extract the first word of "lipo", so it can be a program name with args. + set dummy lipo; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5725: checking for $ac_word" >&5 ++echo "configure:5728: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_LIPO_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5758,7 +5761,7 @@ if test -z "$ac_cv_path_LIPO_FOR_TARGET" + if test -n "$with_build_time_tools"; then + for ncn_progname in lipo; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5762: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:5765: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_LIPO_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -5775,7 +5778,7 @@ if test -z "$ac_cv_prog_LIPO_FOR_TARGET" + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5779: checking for $ac_word" >&5 ++echo "configure:5782: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LIPO_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5806,7 +5809,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5810: checking for $ac_word" >&5 ++echo "configure:5813: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_LIPO_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5856,7 +5859,7 @@ fi + if test -z "$ac_cv_path_NM_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for nm in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5860: checking for nm in $with_build_time_tools" >&5 ++echo "configure:5863: checking for nm in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/nm; then + NM_FOR_TARGET=`cd $with_build_time_tools && pwd`/nm + ac_cv_path_NM_FOR_TARGET=$NM_FOR_TARGET +@@ -5874,7 +5877,7 @@ if test -z "$ac_cv_path_NM_FOR_TARGET" ; + # Extract the first word of "nm", so it can be a program name with args. + set dummy nm; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5878: checking for $ac_word" >&5 ++echo "configure:5881: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_NM_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5911,7 +5914,7 @@ if test -z "$ac_cv_path_NM_FOR_TARGET" ; + if test -n "$with_build_time_tools"; then + for ncn_progname in nm; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:5915: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:5918: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_NM_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -5928,7 +5931,7 @@ if test -z "$ac_cv_prog_NM_FOR_TARGET"; + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5932: checking for $ac_word" >&5 ++echo "configure:5935: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_NM_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -5959,7 +5962,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:5963: checking for $ac_word" >&5 ++echo "configure:5966: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_NM_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6009,7 +6012,7 @@ fi + if test -z "$ac_cv_path_OBJDUMP_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for objdump in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:6013: checking for objdump in $with_build_time_tools" >&5 ++echo "configure:6016: checking for objdump in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/objdump; then + OBJDUMP_FOR_TARGET=`cd $with_build_time_tools && pwd`/objdump + ac_cv_path_OBJDUMP_FOR_TARGET=$OBJDUMP_FOR_TARGET +@@ -6027,7 +6030,7 @@ if test -z "$ac_cv_path_OBJDUMP_FOR_TARG + # Extract the first word of "objdump", so it can be a program name with args. + set dummy objdump; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6031: checking for $ac_word" >&5 ++echo "configure:6034: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6064,7 +6067,7 @@ if test -z "$ac_cv_path_OBJDUMP_FOR_TARG + if test -n "$with_build_time_tools"; then + for ncn_progname in objdump; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:6068: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:6071: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_OBJDUMP_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -6081,7 +6084,7 @@ if test -z "$ac_cv_prog_OBJDUMP_FOR_TARG + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6085: checking for $ac_word" >&5 ++echo "configure:6088: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6112,7 +6115,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6116: checking for $ac_word" >&5 ++echo "configure:6119: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6162,7 +6165,7 @@ fi + if test -z "$ac_cv_path_RANLIB_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for ranlib in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:6166: checking for ranlib in $with_build_time_tools" >&5 ++echo "configure:6169: checking for ranlib in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/ranlib; then + RANLIB_FOR_TARGET=`cd $with_build_time_tools && pwd`/ranlib + ac_cv_path_RANLIB_FOR_TARGET=$RANLIB_FOR_TARGET +@@ -6180,7 +6183,7 @@ if test -z "$ac_cv_path_RANLIB_FOR_TARGE + # Extract the first word of "ranlib", so it can be a program name with args. + set dummy ranlib; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6184: checking for $ac_word" >&5 ++echo "configure:6187: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_RANLIB_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6217,7 +6220,7 @@ if test -z "$ac_cv_path_RANLIB_FOR_TARGE + if test -n "$with_build_time_tools"; then + for ncn_progname in ranlib; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:6221: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:6224: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_RANLIB_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -6234,7 +6237,7 @@ if test -z "$ac_cv_prog_RANLIB_FOR_TARGE + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6238: checking for $ac_word" >&5 ++echo "configure:6241: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_RANLIB_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6265,7 +6268,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6269: checking for $ac_word" >&5 ++echo "configure:6272: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_RANLIB_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6315,7 +6318,7 @@ fi + if test -z "$ac_cv_path_STRIP_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for strip in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:6319: checking for strip in $with_build_time_tools" >&5 ++echo "configure:6322: checking for strip in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/strip; then + STRIP_FOR_TARGET=`cd $with_build_time_tools && pwd`/strip + ac_cv_path_STRIP_FOR_TARGET=$STRIP_FOR_TARGET +@@ -6333,7 +6336,7 @@ if test -z "$ac_cv_path_STRIP_FOR_TARGET + # Extract the first word of "strip", so it can be a program name with args. + set dummy strip; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6337: checking for $ac_word" >&5 ++echo "configure:6340: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_STRIP_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6370,7 +6373,7 @@ if test -z "$ac_cv_path_STRIP_FOR_TARGET + if test -n "$with_build_time_tools"; then + for ncn_progname in strip; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:6374: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:6377: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_STRIP_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -6387,7 +6390,7 @@ if test -z "$ac_cv_prog_STRIP_FOR_TARGET + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6391: checking for $ac_word" >&5 ++echo "configure:6394: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_STRIP_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6418,7 +6421,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6422: checking for $ac_word" >&5 ++echo "configure:6425: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_STRIP_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6468,7 +6471,7 @@ fi + if test -z "$ac_cv_path_WINDRES_FOR_TARGET" ; then + if test -n "$with_build_time_tools"; then + echo $ac_n "checking for windres in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:6472: checking for windres in $with_build_time_tools" >&5 ++echo "configure:6475: checking for windres in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/windres; then + WINDRES_FOR_TARGET=`cd $with_build_time_tools && pwd`/windres + ac_cv_path_WINDRES_FOR_TARGET=$WINDRES_FOR_TARGET +@@ -6486,7 +6489,7 @@ if test -z "$ac_cv_path_WINDRES_FOR_TARG + # Extract the first word of "windres", so it can be a program name with args. + set dummy windres; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6490: checking for $ac_word" >&5 ++echo "configure:6493: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_path_WINDRES_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6523,7 +6526,7 @@ if test -z "$ac_cv_path_WINDRES_FOR_TARG + if test -n "$with_build_time_tools"; then + for ncn_progname in windres; do + echo $ac_n "checking for ${ncn_progname} in $with_build_time_tools""... $ac_c" 1>&6 +-echo "configure:6527: checking for ${ncn_progname} in $with_build_time_tools" >&5 ++echo "configure:6530: checking for ${ncn_progname} in $with_build_time_tools" >&5 + if test -x $with_build_time_tools/${ncn_progname}; then + ac_cv_prog_WINDRES_FOR_TARGET=$with_build_time_tools/${ncn_progname} + echo "$ac_t""yes" 1>&6 +@@ -6540,7 +6543,7 @@ if test -z "$ac_cv_prog_WINDRES_FOR_TARG + # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6544: checking for $ac_word" >&5 ++echo "configure:6547: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_WINDRES_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6571,7 +6574,7 @@ fi + # Extract the first word of "${ncn_progname}", so it can be a program name with args. + set dummy ${ncn_progname}; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:6575: checking for $ac_word" >&5 ++echo "configure:6578: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_WINDRES_FOR_TARGET'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -6619,7 +6622,7 @@ fi + RAW_CXX_FOR_TARGET="$CXX_FOR_TARGET" + + echo $ac_n "checking where to find the target ar""... $ac_c" 1>&6 +-echo "configure:6623: checking where to find the target ar" >&5 ++echo "configure:6626: checking where to find the target ar" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$AR_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6652,7 +6655,7 @@ else + fi + fi + echo $ac_n "checking where to find the target as""... $ac_c" 1>&6 +-echo "configure:6656: checking where to find the target as" >&5 ++echo "configure:6659: checking where to find the target as" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$AS_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6685,7 +6688,7 @@ else + fi + fi + echo $ac_n "checking where to find the target cc""... $ac_c" 1>&6 +-echo "configure:6689: checking where to find the target cc" >&5 ++echo "configure:6692: checking where to find the target cc" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$CC_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6718,7 +6721,7 @@ else + fi + fi + echo $ac_n "checking where to find the target c++""... $ac_c" 1>&6 +-echo "configure:6722: checking where to find the target c++" >&5 ++echo "configure:6725: checking where to find the target c++" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$CXX_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6754,7 +6757,7 @@ else + fi + fi + echo $ac_n "checking where to find the target c++ for libstdc++""... $ac_c" 1>&6 +-echo "configure:6758: checking where to find the target c++ for libstdc++" >&5 ++echo "configure:6761: checking where to find the target c++ for libstdc++" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$RAW_CXX_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6790,7 +6793,7 @@ else + fi + fi + echo $ac_n "checking where to find the target dlltool""... $ac_c" 1>&6 +-echo "configure:6794: checking where to find the target dlltool" >&5 ++echo "configure:6797: checking where to find the target dlltool" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$DLLTOOL_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6823,7 +6826,7 @@ else + fi + fi + echo $ac_n "checking where to find the target gcc""... $ac_c" 1>&6 +-echo "configure:6827: checking where to find the target gcc" >&5 ++echo "configure:6830: checking where to find the target gcc" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$GCC_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6856,7 +6859,7 @@ else + fi + fi + echo $ac_n "checking where to find the target gcj""... $ac_c" 1>&6 +-echo "configure:6860: checking where to find the target gcj" >&5 ++echo "configure:6863: checking where to find the target gcj" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$GCJ_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6892,7 +6895,7 @@ else + fi + fi + echo $ac_n "checking where to find the target gfortran""... $ac_c" 1>&6 +-echo "configure:6896: checking where to find the target gfortran" >&5 ++echo "configure:6899: checking where to find the target gfortran" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$GFORTRAN_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6928,7 +6931,7 @@ else + fi + fi + echo $ac_n "checking where to find the target ld""... $ac_c" 1>&6 +-echo "configure:6932: checking where to find the target ld" >&5 ++echo "configure:6935: checking where to find the target ld" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$LD_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6961,7 +6964,7 @@ else + fi + fi + echo $ac_n "checking where to find the target lipo""... $ac_c" 1>&6 +-echo "configure:6965: checking where to find the target lipo" >&5 ++echo "configure:6968: checking where to find the target lipo" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$LIPO_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -6984,7 +6987,7 @@ else + fi + fi + echo $ac_n "checking where to find the target nm""... $ac_c" 1>&6 +-echo "configure:6988: checking where to find the target nm" >&5 ++echo "configure:6991: checking where to find the target nm" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$NM_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -7017,7 +7020,7 @@ else + fi + fi + echo $ac_n "checking where to find the target objdump""... $ac_c" 1>&6 +-echo "configure:7021: checking where to find the target objdump" >&5 ++echo "configure:7024: checking where to find the target objdump" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$OBJDUMP_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -7050,7 +7053,7 @@ else + fi + fi + echo $ac_n "checking where to find the target ranlib""... $ac_c" 1>&6 +-echo "configure:7054: checking where to find the target ranlib" >&5 ++echo "configure:7057: checking where to find the target ranlib" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$RANLIB_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -7083,7 +7086,7 @@ else + fi + fi + echo $ac_n "checking where to find the target strip""... $ac_c" 1>&6 +-echo "configure:7087: checking where to find the target strip" >&5 ++echo "configure:7090: checking where to find the target strip" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$STRIP_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -7116,7 +7119,7 @@ else + fi + fi + echo $ac_n "checking where to find the target windres""... $ac_c" 1>&6 +-echo "configure:7120: checking where to find the target windres" >&5 ++echo "configure:7123: checking where to find the target windres" >&5 + if test "x${build}" != "x${host}" ; then + if expr "x$WINDRES_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path +@@ -7177,7 +7180,7 @@ fi + + + echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 +-echo "configure:7181: checking whether to enable maintainer-specific portions of Makefiles" >&5 ++echo "configure:7184: checking whether to enable maintainer-specific portions of Makefiles" >&5 + # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. + if test "${enable_maintainer_mode+set}" = set; then + enableval="$enable_maintainer_mode" +@@ -7334,34 +7337,15 @@ trap 'rm -f $CONFIG_STATUS conftest*; ex + # Transform confdefs.h into DEFS. + # Protect against shell expansion while executing Makefile rules. + # Protect against Makefile macro expansion. +-# +-# If the first sed substitution is executed (which looks for macros that +-# take arguments), then we branch to the quote section. Otherwise, +-# look for a macro that doesn't take arguments. +-cat >confdef2opt.sed <<\_ACEOF +-t clear +-: clear +-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g +-t quote +-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g +-t quote +-d +-: quote +-s,[ `~#$^&*(){}\\|;'"<>?],\\&,g +-s,\[,\\&,g +-s,\],\\&,g +-s,\$,$$,g +-p +-_ACEOF +-# We use echo to avoid assuming a particular line-breaking character. +-# The extra dot is to prevent the shell from consuming trailing +-# line-breaks from the sub-command output. A line-break within +-# single-quotes doesn't work because, if this script is created in a +-# platform that uses two characters for line-breaks (e.g., DOS), tr +-# would break. +-ac_LF_and_DOT=`echo; echo .` +-DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` +-rm -f confdef2opt.sed ++cat > conftest.defs <<\EOF ++s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g ++s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g ++s%\[%\\&%g ++s%\]%\\&%g ++s%\$%$$%g ++EOF ++DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` ++rm -f conftest.defs + + + # Without the "./", some shells look in PATH for config.status. +diff -Nrup binutils-2.17/configure.in binutils-2.17.atmel.1.3.0/configure.in +--- binutils-2.17/configure.in 2006-06-23 20:19:53.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/configure.in 2007-03-26 10:20:35.000000000 +0200 +@@ -269,6 +269,9 @@ unsupported_languages= + # exist yet. + + case "${host}" in ++ avr32*-*-*) ++ noconfigdirs="$noconfigdirs readline gdb" ++ ;; + hppa*64*-*-*) + noconfigdirs="$noconfigdirs byacc" + ;; +diff -Nrup binutils-2.17/gas/as.c binutils-2.17.atmel.1.3.0/gas/as.c +--- binutils-2.17/gas/as.c 2006-02-09 01:07:41.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/as.c 2007-03-26 10:20:16.000000000 +0200 +@@ -439,10 +439,10 @@ parse_args (int * pargc, char *** pargv) + the end of the preceeding line so that it is simpler to + selectively add and remove lines from this list. */ + {"alternate", no_argument, NULL, OPTION_ALTERNATE} +- /* The entry for "a" is here to prevent getopt_long_only() from +- considering that -a is an abbreviation for --alternate. This is +- necessary because -a= is a valid switch but getopt would +- normally reject it since --alternate does not take an argument. */ ++ /* The next two entries are here to prevent getopt_long_only() from ++ considering that -a or -al is an abbreviation for --alternate. ++ This is necessary because -a= is a valid switch but getopt ++ would normally reject it since --alternate does not take an argument. */ + ,{"a", optional_argument, NULL, 'a'} + /* Handle -al=. */ + ,{"al", optional_argument, NULL, OPTION_AL} +@@ -795,8 +795,15 @@ the GNU General Public License. This pr + case 'a': + if (optarg) + { +- if (optarg != old_argv[optind] && optarg[-1] == '=') +- --optarg; ++ /* If optarg is part of the -a switch and not a separate argument ++ in its own right, then scan backwards to the just after the -a. ++ This means skipping over both '=' and 'l' which might have been ++ taken to be part of the -a switch itself. */ ++ if (optarg != old_argv[optind]) + { -+ as_warn (_("unrecognized segment flag")); ++ while (optarg[-1] == '=' || optarg[-1] == 'l') ++ --optarg; + } -+ -+ input_line_pointer = end; -+ SKIP_WHITESPACE(); -+ } -+ } -+ } -+ -+ if (*input_line_pointer == '(') -+ { -+ align = get_absolute_expression (); -+ } -+ -+ demand_empty_rest_of_line(); -+ -+ obj_elf_change_section (name, type, attr, 0, NULL, 0, 0); -+#ifdef AVR32_DEBUG -+ fprintf( stderr, "RSEG: Changed section to %s, type: 0x%x, attr: 0x%x\n", -+ name, type, attr ); -+ fprintf( stderr, "RSEG: Aligning to 2**%d\n", align ); -+#endif -+ -+ if (align > 15) -+ { -+ align = 15; -+ as_warn (_("alignment too large: %u assumed"), align); -+ } -+ -+ /* Hope not, that is */ -+ assert (now_seg != absolute_section); -+ -+ /* Only make a frag if we HAVE to... */ -+ if (align != 0 && !need_pass_2) -+ { -+ if (subseg_text_p (now_seg)) -+ frag_align_code (align, 0); -+ else -+ frag_align (align, 0, 0); -+ } -+ -+ record_alignment (now_seg, align - OCTETS_PER_BYTE_POWER); -+} -+ -+/* vim: syntax=c sw=2 -+ */ -diff -Nrup binutils-2.17/gas/config/tc-avr32.h binutils-2.17-atmel/gas/config/tc-avr32.h ---- binutils-2.17/gas/config/tc-avr32.h 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/config/tc-avr32.h 2007-02-12 15:37:09.000000000 +0100 -@@ -0,0 +1,313 @@ -+/* Assembler definitions for AVR32. -+ Copyright 2003-2006 Atmel Corporation. -+ -+ Written by Haavard Skinnemoen, Atmel Norway, + + if (md_parse_option (optc, optarg) != 0) + break; +@@ -1189,7 +1196,7 @@ main (int argc, char ** argv) + keep_it = 0; + + if (!keep_it) +- unlink_if_ordinary (out_file_name); ++ unlink (out_file_name); + + input_scrub_end (); + +diff -Nrup binutils-2.17/gas/config/bfin-aux.h binutils-2.17.atmel.1.3.0/gas/config/bfin-aux.h +--- binutils-2.17/gas/config/bfin-aux.h 2005-09-30 17:05:06.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/config/bfin-aux.h 2007-03-26 10:20:14.000000000 +0200 +@@ -1,151 +1,151 @@ +-/* bfin-aux.h ADI Blackfin Header file for gas +- Copyright 2005 +- Free Software Foundation, Inc. +- +- This file is part of GAS, the GNU Assembler. +- +- GAS is free software; you can redistribute it and/or modify +- it under the terms of the GNU General Public License as published by +- the Free Software Foundation; either version 2, or (at your option) +- any later version. +- +- GAS is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- GNU General Public License for more details. +- +- You should have received a copy of the GNU General Public License +- along with GAS; see the file COPYING. If not, write to the Free +- Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA +- 02110-1301, USA. */ +- +-#include "bfin-defs.h" +- +-#define REG_T Register * +- +-INSTR_T +-bfin_gen_dsp32mac (int op1, int mm, int mmod, int w1, int p, +- int h01, int h11, int h00, int h10, +- int op0, REG_T dst, REG_T src0, REG_T src1, int w0); +- +-INSTR_T +-bfin_gen_dsp32mult (int op1, int mm, int mmod, int w1, int p, +- int h01, int h11, int h00, int h10, +- int op0, REG_T dst, REG_T src0, REG_T src1, int w0); +- +-INSTR_T +-bfin_gen_dsp32alu (int HL, int aopcde, int aop, int s, int x, +- REG_T dst0, REG_T dst1, REG_T src0, REG_T src1); +- +-INSTR_T +-bfin_gen_dsp32shift (int sopcde, REG_T dst0, REG_T src0, REG_T src1, +- int sop, int hls); +- +-INSTR_T +-bfin_gen_dsp32shiftimm (int sopcde, REG_T dst0, int immag, REG_T src1, +- int sop, int hls); +- +-INSTR_T +-bfin_gen_ldimmhalf (REG_T reg, int h, int s, int z, Expr_Node *hword, +- int reloc); +- +-INSTR_T +-bfin_gen_ldstidxi (REG_T ptr, REG_T reg, int w, int sz, int z, +- Expr_Node *offset); +- +-INSTR_T +-bfin_gen_ldst (REG_T ptr, REG_T reg, int aop, int sz, int z, int w); +- +-INSTR_T +-bfin_gen_ldstii (REG_T ptr, REG_T reg, Expr_Node *offset, int w, int op); +- +-INSTR_T +-bfin_gen_ldstiifp (REG_T reg, Expr_Node *offset, int w); +- +-INSTR_T +-bfin_gen_ldstpmod (REG_T ptr, REG_T reg, int aop, int w, REG_T idx); +- +-INSTR_T +-bfin_gen_dspldst (REG_T i, REG_T reg, int aop, int w, int m); +- +-INSTR_T +-bfin_gen_alu2op (REG_T dst, REG_T src, int opc); +- +-INSTR_T +-bfin_gen_compi2opd (REG_T dst, int src, int op); +- +-INSTR_T +-bfin_gen_compi2opp (REG_T dst, int src, int op); +- +-INSTR_T +-bfin_gen_dagmodik (REG_T i, int op); +- +-INSTR_T +-bfin_gen_dagmodim (REG_T i, REG_T m, int op, int br); +- +-INSTR_T +-bfin_gen_ptr2op (REG_T dst, REG_T src, int opc); +- +-INSTR_T +-bfin_gen_logi2op (int dst, int src, int opc); +- +-INSTR_T +-bfin_gen_comp3op (REG_T src0, REG_T src1, REG_T dst, int opc); +- +-INSTR_T +-bfin_gen_ccmv (REG_T src, REG_T dst, int t); +- +-INSTR_T +-bfin_gen_ccflag (REG_T x, int y, int opc, int i, int g); +- +-INSTR_T +-bfin_gen_cc2stat (int cbit, int op, int d); +- +-INSTR_T +-bfin_gen_regmv (REG_T src, REG_T dst); +- +-INSTR_T +-bfin_gen_cc2dreg (int op, REG_T reg); +- +-INSTR_T +-bfin_gen_brcc (int t, int b, Expr_Node *offset); +- +-INSTR_T +-bfin_gen_ujump (Expr_Node *offset); +- +-INSTR_T +-bfin_gen_cactrl (REG_T reg, int a, int op); +- +-INSTR_T +-bfin_gen_progctrl (int prgfunc, int poprnd); +- +-INSTR_T +-bfin_gen_loopsetup (Expr_Node *soffset, REG_T c, int rop, +- Expr_Node *eoffset, REG_T reg); +- +-INSTR_T +-bfin_gen_loop (Expr_Node *expr, REG_T reg, int rop, REG_T preg); +- +-INSTR_T +-bfin_gen_pushpopmultiple (int dr, int pr, int d, int p, int w); +- +-INSTR_T +-bfin_gen_pushpopreg (REG_T reg, int w); +- +-INSTR_T +-bfin_gen_calla (Expr_Node *addr, int s); +- +-INSTR_T +-bfin_gen_linkage (int r, int framesize); +- +-INSTR_T +-bfin_gen_pseudodbg (int fn, int reg, int grp); +- +-INSTR_T +-bfin_gen_pseudodbg_assert (int dbgop, REG_T regtest, int expected); +- +-bfd_boolean +-bfin_resource_conflict (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2); +- +-INSTR_T +-bfin_gen_multi_instr (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2); ++/* bfin-aux.h ADI Blackfin Header file for gas ++ Copyright 2005 ++ Free Software Foundation, Inc. + + This file is part of GAS, the GNU Assembler. + -+ GAS is free software; you can redistribute it and/or modify it -+ under the terms of the GNU General Public License as published by ++ GAS is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + -+ GAS is distributed in the hope that it will be useful, but WITHOUT -+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public -+ License for more details. ++ GAS is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GAS; see the file COPYING. If not, write to the Free -+ Software Foundation, 59 Temple Place - Suite 330, Boston, MA -+ 02111-1307, USA. */ -+ -+#if 0 -+#define DEBUG -+#define DEBUG1 -+#define DEBUG2 -+#define DEBUG3 -+#define DEBUG4 -+#define DEBUG5 -+#endif -+ -+/* Are we trying to be compatible with the IAR assembler? (--iar) */ -+extern int avr32_iarcompat; -+ -+/* By convention, you should define this macro in the `.h' file. For -+ example, `tc-m68k.h' defines `TC_M68K'. You might have to use this -+ if it is necessary to add CPU specific code to the object format -+ file. */ -+#define TC_AVR32 -+ -+/* This macro is the BFD target name to use when creating the output -+ file. This will normally depend upon the `OBJ_FMT' macro. */ -+#define TARGET_FORMAT "elf32-avr32" -+ -+/* This macro is the BFD architecture to pass to `bfd_set_arch_mach'. */ -+#define TARGET_ARCH bfd_arch_avr32 -+ -+/* This macro is the BFD machine number to pass to -+ `bfd_set_arch_mach'. If it is not defined, GAS will use 0. */ -+#define TARGET_MACH 0 -+ -+/* UNDOCUMENTED: Allow //-style comments */ -+#define DOUBLESLASH_LINE_COMMENTS -+ -+/* You should define this macro to be non-zero if the target is big -+ endian, and zero if the target is little endian. */ -+#define TARGET_BYTES_BIG_ENDIAN 1 -+ -+/* FIXME: It seems that GAS only expects a one-byte opcode... -+ #define NOP_OPCODE 0xd703 */ -+ -+/* If you define this macro, GAS will warn about the use of -+ nonstandard escape sequences in a string. */ -+#undef ONLY_STANDARD_ESCAPES -+ -+#define DWARF2_FORMAT() dwarf2_format_32bit -+ -+/* Instructions are either 2 or 4 bytes long */ -+/* #define DWARF2_LINE_MIN_INSN_LENGTH 2 */ -+ -+/* GAS will call this function for any expression that can not be -+ recognized. When the function is called, `input_line_pointer' -+ will point to the start of the expression. */ -+#define md_operand(x) -+ -+#define md_parse_name(name, expr, mode, c) avr32_parse_name(name, expr, c) -+extern int avr32_parse_name(const char *, struct expressionS *, char *); -+ -+/* You may define this macro to generate a fixup for a data -+ allocation pseudo-op. */ -+#define TC_CONS_FIX_NEW(FRAG, OFF, LEN, EXP) \ -+ avr32_cons_fix_new(FRAG, OFF, LEN, EXP) -+void avr32_cons_fix_new (fragS *, int, int, expressionS *); -+ -+/* `extsym - .' expressions can be emitted using PC-relative relocs */ -+#define DIFF_EXPR_OK -+ -+/* This is used to construct expressions out of @gotoff, etc. The -+ relocation type is stored in X_md */ -+#define O_got O_md1 -+#define O_hi O_md2 -+#define O_lo O_md3 -+#define O_tlsgd O_md4 -+ -+/* You may define this macro to parse an expression used in a data -+ allocation pseudo-op such as `.word'. You can use this to -+ recognize relocation directives that may appear in such directives. */ -+/* #define TC_PARSE_CONS_EXPRESSION(EXPR,N) avr_parse_cons_expression (EXPR,N) -+ void avr_parse_cons_expression (expressionS *exp, int nbytes); */ -+ -+/* This should just call either `number_to_chars_bigendian' or -+ `number_to_chars_littleendian', whichever is appropriate. On -+ targets like the MIPS which support options to change the -+ endianness, which function to call is a runtime decision. On -+ other targets, `md_number_to_chars' can be a simple macro. */ -+#define md_number_to_chars number_to_chars_bigendian -+ -+/* `md_short_jump_size' -+ `md_long_jump_size' -+ `md_create_short_jump' -+ `md_create_long_jump' -+ If `WORKING_DOT_WORD' is defined, GAS will not do broken word -+ processing (*note Broken words::.). Otherwise, you should set -+ `md_short_jump_size' to the size of a short jump (a jump that is -+ just long enough to jump around a long jmp) and -+ `md_long_jump_size' to the size of a long jump (a jump that can go -+ anywhere in the function), You should define -+ `md_create_short_jump' to create a short jump around a long jump, -+ and define `md_create_long_jump' to create a long jump. */ -+#define WORKING_DOT_WORD -+ -+/* If you define this macro, it means that `tc_gen_reloc' may return -+ multiple relocation entries for a single fixup. In this case, the -+ return value of `tc_gen_reloc' is a pointer to a null terminated -+ array. */ -+#undef RELOC_EXPANSION_POSSIBLE -+ -+/* If you define this macro, GAS will not require pseudo-ops to start with a . -+ character. */ -+#define NO_PSEUDO_DOT (avr32_iarcompat) ++ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA ++ 02110-1301, USA. */ + -+/* The IAR assembler uses $ as the location counter. Unfortunately, we -+ can't make this dependent on avr32_iarcompat... */ -+#define DOLLAR_DOT ++#include "bfin-defs.h" + -+/* Values passed to md_apply_fix3 don't include the symbol value. */ -+#define MD_APPLY_SYM_VALUE(FIX) 0 ++#define REG_T Register * + -+/* The number of bytes to put into a word in a listing. This affects -+ the way the bytes are clumped together in the listing. For -+ example, a value of 2 might print `1234 5678' where a value of 1 -+ would print `12 34 56 78'. The default value is 4. */ -+#define LISTING_WORD_SIZE 4 ++INSTR_T ++bfin_gen_dsp32mac (int op1, int mm, int mmod, int w1, int p, ++ int h01, int h11, int h00, int h10, ++ int op0, REG_T dst, REG_T src0, REG_T src1, int w0); + -+/* extern const struct relax_type md_relax_table[]; -+#define TC_GENERIC_RELAX_TABLE md_relax_table */ ++INSTR_T ++bfin_gen_dsp32mult (int op1, int mm, int mmod, int w1, int p, ++ int h01, int h11, int h00, int h10, ++ int op0, REG_T dst, REG_T src0, REG_T src1, int w0); + -+/* -+ An `.lcomm' directive with no explicit alignment parameter will use -+ this macro to set P2VAR to the alignment that a request for SIZE -+ bytes will have. The alignment is expressed as a power of two. If -+ no alignment should take place, the macro definition should do -+ nothing. Some targets define a `.bss' directive that is also -+ affected by this macro. The default definition will set P2VAR to -+ the truncated power of two of sizes up to eight bytes. ++INSTR_T ++bfin_gen_dsp32alu (int HL, int aopcde, int aop, int s, int x, ++ REG_T dst0, REG_T dst1, REG_T src0, REG_T src1); + -+ We want doublewords to be word-aligned, so we're going to modify the -+ default definition a tiny bit. -+*/ -+#define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR) \ -+ do \ -+ { \ -+ if ((SIZE) >= 4) \ -+ (P2VAR) = 2; \ -+ else if ((SIZE) >= 2) \ -+ (P2VAR) = 1; \ -+ else \ -+ (P2VAR) = 0; \ -+ } \ -+ while (0) ++INSTR_T ++bfin_gen_dsp32shift (int sopcde, REG_T dst0, REG_T src0, REG_T src1, ++ int sop, int hls); + -+/* When relaxing, we need to generate relocations for alignment -+ directives. */ -+#define HANDLE_ALIGN(frag) avr32_handle_align(frag) -+extern void avr32_handle_align(fragS *); ++INSTR_T ++bfin_gen_dsp32shiftimm (int sopcde, REG_T dst0, int immag, REG_T src1, ++ int sop, int hls); + -+/* See internals doc for explanation. Oh wait... -+ Now, can you guess where "alignment" comes from? ;-) */ -+#define MAX_MEM_FOR_RS_ALIGN_CODE ((1 << alignment) - 1) ++INSTR_T ++bfin_gen_ldimmhalf (REG_T reg, int h, int s, int z, Expr_Node *hword, ++ int reloc); + -+/* We need to stop gas from reducing certain expressions (e.g. GOT -+ references) */ -+#define tc_fix_adjustable(fix) avr32_fix_adjustable(fix) -+extern bfd_boolean avr32_fix_adjustable(struct fix *); ++INSTR_T ++bfin_gen_ldstidxi (REG_T ptr, REG_T reg, int w, int sz, int z, ++ Expr_Node *offset); + -+/* The linker needs to be passed a little more information when relaxing. */ -+#define TC_FORCE_RELOCATION(fix) avr32_force_reloc(fix) -+extern bfd_boolean avr32_force_reloc(struct fix *); ++INSTR_T ++bfin_gen_ldst (REG_T ptr, REG_T reg, int aop, int sz, int z, int w); + -+/* I'm tired of working around all the madness in fixup_segment(). -+ This hook will do basically the same things as the generic code, -+ and then it will "goto" right past it. */ -+#define TC_VALIDATE_FIX(FIX, SEG, SKIP) \ -+ do \ -+ { \ -+ avr32_process_fixup(FIX, SEG); \ -+ if (!(FIX)->fx_done) \ -+ ++seg_reloc_count; \ -+ goto SKIP; \ -+ } \ -+ while (0) -+extern void avr32_process_fixup(struct fix *fixP, segT this_segment); ++INSTR_T ++bfin_gen_ldstii (REG_T ptr, REG_T reg, Expr_Node *offset, int w, int op); + -+/* We don't want the gas core to make any assumptions about our way of -+ doing linkrelaxing. */ -+#define TC_LINKRELAX_FIXUP(SEG) 0 ++INSTR_T ++bfin_gen_ldstiifp (REG_T reg, Expr_Node *offset, int w); + -+/* ... but we do want it to insert lots of padding. */ -+#define LINKER_RELAXING_SHRINKS_ONLY ++INSTR_T ++bfin_gen_ldstpmod (REG_T ptr, REG_T reg, int aop, int w, REG_T idx); + -+/* Better do it ourselves, really... */ -+#define TC_RELAX_ALIGN(SEG, FRAG, ADDR) avr32_relax_align(SEG, FRAG, ADDR) -+extern relax_addressT -+avr32_relax_align(segT segment, fragS *fragP, relax_addressT address); ++INSTR_T ++bfin_gen_dspldst (REG_T i, REG_T reg, int aop, int w, int m); + -+/* This is called by write_object_file() just before symbols are -+ attempted converted into section symbols. */ -+#define tc_frob_file_before_adjust() avr32_frob_file() -+extern void avr32_frob_file(void); ++INSTR_T ++bfin_gen_alu2op (REG_T dst, REG_T src, int opc); + -+/* If you define this macro, GAS will call it at the end of each input -+ file. */ -+#define md_cleanup() avr32_cleanup() -+extern void avr32_cleanup(void); ++INSTR_T ++bfin_gen_compi2opd (REG_T dst, int src, int op); + -+/* There's an AVR32-specific hack in operand() which creates O_md -+ expressions when encountering HWRD or LWRD. We need to generate -+ proper relocs for them */ -+/* #define md_cgen_record_fixup_exp avr32_cgen_record_fixup_exp */ ++INSTR_T ++bfin_gen_compi2opp (REG_T dst, int src, int op); + -+/* I needed to add an extra hook in gas_cgen_finish_insn() for -+ conversion of O_md* operands because md_cgen_record_fixup_exp() -+ isn't called for relaxable insns */ -+/* #define md_cgen_convert_expr(exp, opinfo) avr32_cgen_convert_expr(exp, opinfo) -+ int avr32_cgen_convert_expr(expressionS *, int); */ ++INSTR_T ++bfin_gen_dagmodik (REG_T i, int op); + -+/* #define tc_gen_reloc gas_cgen_tc_gen_reloc */ ++INSTR_T ++bfin_gen_dagmodim (REG_T i, REG_T m, int op, int br); + -+/* If you define this macro, it should return the position from which -+ the PC relative adjustment for a PC relative fixup should be -+ made. On many processors, the base of a PC relative instruction is -+ the next instruction, so this macro would return the length of an -+ instruction, plus the address of the PC relative fixup. The latter -+ can be calculated as fixp->fx_where + fixp->fx_frag->fr_address. */ -+extern long md_pcrel_from_section (struct fix *, segT); -+#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC) ++INSTR_T ++bfin_gen_ptr2op (REG_T dst, REG_T src, int opc); + -+#define LOCAL_LABEL(name) (name[0] == '.' && (name[1] == 'L')) -+#define LOCAL_LABELS_FB 1 ++INSTR_T ++bfin_gen_logi2op (int dst, int src, int opc); + -+struct avr32_relaxer -+{ -+ int (*estimate_size)(fragS *, segT); -+ long (*relax_frag)(segT, fragS *, long); -+ void (*convert_frag)(bfd *, segT, fragS *); -+}; ++INSTR_T ++bfin_gen_comp3op (REG_T src0, REG_T src1, REG_T dst, int opc); + -+/* AVR32 has quite complex instruction coding, which means we need -+ * lots of information in order to do the right thing during relaxing -+ * (basically, we need to be able to reconstruct a whole new opcode if -+ * necessary) */ -+#define TC_FRAG_TYPE struct avr32_frag_data ++INSTR_T ++bfin_gen_ccmv (REG_T src, REG_T dst, int t); + -+struct cpool; ++INSTR_T ++bfin_gen_ccflag (REG_T x, int y, int opc, int i, int g); + -+struct avr32_frag_data -+{ -+ /* TODO: Maybe add an expression object here so that we can use -+ fix_new_exp() in md_convert_frag? We may have to decide -+ pcrel-ness in md_estimate_size_before_relax() as well...or we -+ might do it when parsing. Doing it while parsing may fail -+ because the sub_symbol is undefined then... */ -+ int pcrel; -+ int force_extended; -+ int reloc_info; -+ struct avr32_relaxer *relaxer; -+ expressionS exp; ++INSTR_T ++bfin_gen_cc2stat (int cbit, int op, int d); + -+ /* Points to associated constant pool, for use by LDA and CALL in -+ non-pic mode, and when relaxing the .cpool directive */ -+ struct cpool *pool; -+ unsigned int pool_entry; -+}; ++INSTR_T ++bfin_gen_regmv (REG_T src, REG_T dst); + -+/* We will have to initialize the fields explicitly when needed */ -+#define TC_FRAG_INIT(fragP) ++INSTR_T ++bfin_gen_cc2dreg (int op, REG_T reg); + -+#define md_estimate_size_before_relax(fragP, segT) \ -+ ((fragP)->tc_frag_data.relaxer->estimate_size(fragP, segT)) -+#define md_relax_frag(segment, fragP, stretch) \ -+ ((fragP)->tc_frag_data.relaxer->relax_frag(segment, fragP, stretch)) -+#define md_convert_frag(abfd, segment, fragP) \ -+ ((fragP)->tc_frag_data.relaxer->convert_frag(abfd, segment, fragP)) ++INSTR_T ++bfin_gen_brcc (int t, int b, Expr_Node *offset); + -+#define TC_FIX_TYPE struct avr32_fix_data ++INSTR_T ++bfin_gen_ujump (Expr_Node *offset); + -+struct avr32_fix_data -+{ -+ const struct avr32_ifield *ifield; -+ unsigned int align; -+ long min; -+ long max; -+}; ++INSTR_T ++bfin_gen_cactrl (REG_T reg, int a, int op); + -+#define TC_INIT_FIX_DATA(fixP) \ -+ do \ -+ { \ -+ (fixP)->tc_fix_data.ifield = NULL; \ -+ (fixP)->tc_fix_data.align = 0; \ -+ (fixP)->tc_fix_data.min = 0; \ -+ (fixP)->tc_fix_data.max = 0; \ -+ } \ -+ while (0) -diff -Nrup binutils-2.17/gas/config.in binutils-2.17-atmel/gas/config.in ---- binutils-2.17/gas/config.in 2006-02-14 09:59:09.000000000 +0100 -+++ binutils-2.17-atmel/gas/config.in 2007-02-20 16:07:31.000000000 +0100 -@@ -246,7 +246,7 @@ - - /* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be -- automatically deduced at run-time. -+ automatically deduced at runtime. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ -@@ -311,8 +311,8 @@ - #undef inline - #endif - --/* Define to `long' if does not define. */ -+/* Define to `long int' if does not define. */ - #undef off_t - --/* Define to `unsigned' if does not define. */ -+/* Define to `unsigned int' if does not define. */ - #undef size_t -diff -Nrup binutils-2.17/gas/configure binutils-2.17-atmel/gas/configure ---- binutils-2.17/gas/configure 2006-04-06 23:49:31.000000000 +0200 -+++ binutils-2.17-atmel/gas/configure 2007-02-20 16:07:29.000000000 +0100 -@@ -1,25 +1,54 @@ - #! /bin/sh - # Guess values for system-dependent variables and create Makefiles. --# Generated by GNU Autoconf 2.59. -+# Generated by GNU Autoconf 2.61. - # --# Copyright (C) 2003 Free Software Foundation, Inc. -+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -+# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - # This configure script is free software; the Free Software Foundation - # gives unlimited permission to copy, distribute and modify it. - ## --------------------- ## - ## M4sh Initialization. ## - ## --------------------- ## - --# Be Bourne compatible -+# Be more Bourne compatible -+DUALCASE=1; export DUALCASE # for MKS sh - if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' --elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then -- set -o posix -+ setopt NO_GLOB_SUBST -+else -+ case `(set -o) 2>/dev/null` in -+ *posix*) set -o posix ;; -+esac ++INSTR_T ++bfin_gen_progctrl (int prgfunc, int poprnd); + -+fi ++INSTR_T ++bfin_gen_loopsetup (Expr_Node *soffset, REG_T c, int rop, ++ Expr_Node *eoffset, REG_T reg); + ++INSTR_T ++bfin_gen_loop (Expr_Node *expr, REG_T reg, int rop, REG_T preg); + ++INSTR_T ++bfin_gen_pushpopmultiple (int dr, int pr, int d, int p, int w); + ++INSTR_T ++bfin_gen_pushpopreg (REG_T reg, int w); + -+# PATH needs CR -+# Avoid depending upon Character Ranges. -+as_cr_letters='abcdefghijklmnopqrstuvwxyz' -+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -+as_cr_Letters=$as_cr_letters$as_cr_LETTERS -+as_cr_digits='0123456789' -+as_cr_alnum=$as_cr_Letters$as_cr_digits ++INSTR_T ++bfin_gen_calla (Expr_Node *addr, int s); + -+# The user is always right. -+if test "${PATH_SEPARATOR+set}" != set; then -+ echo "#! /bin/sh" >conf$$.sh -+ echo "exit 0" >>conf$$.sh -+ chmod +x conf$$.sh -+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then -+ PATH_SEPARATOR=';' -+ else -+ PATH_SEPARATOR=: -+ fi -+ rm -f conf$$.sh - fi --DUALCASE=1; export DUALCASE # for MKS sh - - # Support unset when possible. - if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then -@@ -29,8 +58,43 @@ else - fi - - -+# IFS -+# We need space, tab and new line, in precisely that order. Quoting is -+# there to prevent editors from complaining about space-tab. -+# (If _AS_PATH_WALK were called with IFS unset, it would disable word -+# splitting by setting IFS to empty value.) -+as_nl=' -+' -+IFS=" "" $as_nl" ++INSTR_T ++bfin_gen_linkage (int r, int framesize); + -+# Find who we are. Look in the path if we contain no directory separator. -+case $0 in -+ *[\\/]* ) as_myself=$0 ;; -+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -+done -+IFS=$as_save_IFS ++INSTR_T ++bfin_gen_pseudodbg (int fn, int reg, int grp); + -+ ;; -+esac -+# We did not find ourselves, most probably we were run as `sh COMMAND' -+# in which case we are not to be found in the path. -+if test "x$as_myself" = x; then -+ as_myself=$0 -+fi -+if test ! -f "$as_myself"; then -+ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 -+ { (exit 1); exit 1; } -+fi ++INSTR_T ++bfin_gen_pseudodbg_assert (int dbgop, REG_T regtest, int expected); + - # Work around bugs in pre-3.0 UWIN ksh. --$as_unset ENV MAIL MAILPATH -+for as_var in ENV MAIL MAILPATH -+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -+done - PS1='$ ' - PS2='> ' - PS4='+ ' -@@ -44,18 +108,19 @@ do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else -- $as_unset $as_var -+ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi - done - - # Required to use basename. --if expr a : '\(a\)' >/dev/null 2>&1; then -+if expr a : '\(a\)' >/dev/null 2>&1 && -+ test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr - else - as_expr=false - fi - --if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then -+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename - else - as_basename=false -@@ -63,157 +128,388 @@ fi - - - # Name of the executable. --as_me=`$as_basename "$0" || -+as_me=`$as_basename -- "$0" || - $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ -- X"$0" : 'X\(/\)$' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$0" : 'X\(/\)' \| . 2>/dev/null || - echo X/"$0" | -- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } -- /^X\/\(\/\/\)$/{ s//\1/; q; } -- /^X\/\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -+ sed '/^.*\/\([^/][^/]*\)\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\/\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\/\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` - -+# CDPATH. -+$as_unset CDPATH - --# PATH needs CR, and LINENO needs CR and PATH. --# Avoid depending upon Character Ranges. --as_cr_letters='abcdefghijklmnopqrstuvwxyz' --as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' --as_cr_Letters=$as_cr_letters$as_cr_LETTERS --as_cr_digits='0123456789' --as_cr_alnum=$as_cr_Letters$as_cr_digits - --# The user is always right. --if test "${PATH_SEPARATOR+set}" != set; then -- echo "#! /bin/sh" >conf$$.sh -- echo "exit 0" >>conf$$.sh -- chmod +x conf$$.sh -- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then -- PATH_SEPARATOR=';' -- else -- PATH_SEPARATOR=: -- fi -- rm -f conf$$.sh -+if test "x$CONFIG_SHELL" = x; then -+ if (eval ":") 2>/dev/null; then -+ as_have_required=yes -+else -+ as_have_required=no - fi - -+ if test $as_have_required = yes && (eval ": -+(as_func_return () { -+ (exit \$1) -+} -+as_func_success () { -+ as_func_return 0 -+} -+as_func_failure () { -+ as_func_return 1 -+} -+as_func_ret_success () { -+ return 0 -+} -+as_func_ret_failure () { -+ return 1 -+} - -- as_lineno_1=$LINENO -- as_lineno_2=$LINENO -- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` -- test "x$as_lineno_1" != "x$as_lineno_2" && -- test "x$as_lineno_3" = "x$as_lineno_2" || { -- # Find who we are. Look in the path if we contain no path at all -- # relative or not. -- case $0 in -- *[\\/]* ) as_myself=$0 ;; -- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break --done -+exitcode=0 -+if as_func_success; then -+ : -+else -+ exitcode=1 -+ echo as_func_success failed. -+fi - -- ;; -- esac -- # We did not find ourselves, most probably we were run as `sh COMMAND' -- # in which case we are not to be found in the path. -- if test "x$as_myself" = x; then -- as_myself=$0 -- fi -- if test ! -f "$as_myself"; then -- { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 -- { (exit 1); exit 1; }; } -- fi -- case $CONFIG_SHELL in -- '') -+if as_func_failure; then -+ exitcode=1 -+ echo as_func_failure succeeded. -+fi ++bfd_boolean ++bfin_resource_conflict (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2); + -+if as_func_ret_success; then -+ : -+else -+ exitcode=1 -+ echo as_func_ret_success failed. -+fi ++INSTR_T ++bfin_gen_multi_instr (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2); +diff -Nrup binutils-2.17/gas/config/tc-avr32.c binutils-2.17.atmel.1.3.0/gas/config/tc-avr32.c +--- binutils-2.17/gas/config/tc-avr32.c 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/config/tc-avr32.c 2007-09-28 10:30:46.000000000 +0200 +@@ -0,0 +1,4726 @@ ++/* Assembler implementation for AVR32. ++ Copyright 2003-2006 Atmel Corporation. + -+if as_func_ret_failure; then -+ exitcode=1 -+ echo as_func_ret_failure succeeded. -+fi ++ Written by Haavard Skinnemoen, Atmel Norway, + -+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then -+ : -+else -+ exitcode=1 -+ echo positional parameters were not saved. -+fi ++ This file is part of GAS, the GNU Assembler. + -+test \$exitcode = 0) || { (exit 1); exit 1; } ++ GAS is free software; you can redistribute it and/or modify it ++ under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2, or (at your option) ++ any later version. + -+( -+ as_lineno_1=\$LINENO -+ as_lineno_2=\$LINENO -+ test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && -+ test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } -+") 2> /dev/null; then -+ : -+else -+ as_candidate_shells= - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. -- for as_base in sh bash ksh sh5; do -- case $as_dir in -+ case $as_dir in - /*) -- if ("$as_dir/$as_base" -c ' -+ for as_base in sh bash ksh sh5; do -+ as_candidate_shells="$as_candidate_shells $as_dir/$as_base" -+ done;; -+ esac -+done -+IFS=$as_save_IFS ++ GAS is distributed in the hope that it will be useful, but WITHOUT ++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ++ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ++ License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with GAS; see the file COPYING. If not, write to the Free ++ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ++ 02111-1307, USA. */ + ++#include ++#include "as.h" ++#include "safe-ctype.h" ++#include "subsegs.h" ++#include "symcat.h" ++#include "opcodes/avr32-opc.h" ++#include "opcodes/avr32-asm.h" ++#include "elf/avr32.h" ++#include "dwarf2dbg.h" + -+ for as_shell in $as_candidate_shells $SHELL; do -+ # Try only shells that exist, to save several forks. -+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } && -+ { ("$as_shell") 2> /dev/null <<\_ASEOF -+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then -+ emulate sh -+ NULLCMD=: -+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which -+ # is contrary to our usage. Disable this feature. -+ alias -g '${1+"$@"}'='"$@"' -+ setopt NO_GLOB_SUBST -+else -+ case `(set -o) 2>/dev/null` in -+ *posix*) set -o posix ;; -+esac ++#define xDEBUG ++#define xOPC_CONSISTENCY_CHECK + -+fi ++#ifdef DEBUG ++# define pr_debug(fmt, args...) fprintf(stderr, fmt, ##args) ++#else ++# define pr_debug(fmt, args...) ++#endif + ++/* 3 MSB of instruction word indicate group. Group 7 -> extended */ ++#define AVR32_COMPACT_P(opcode) ((opcode[0] & 0xe0) != 0xe0) + -+: -+_ASEOF -+}; then -+ CONFIG_SHELL=$as_shell -+ as_have_required=yes -+ if { "$as_shell" 2> /dev/null <<\_ASEOF -+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then -+ emulate sh -+ NULLCMD=: -+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which -+ # is contrary to our usage. Disable this feature. -+ alias -g '${1+"$@"}'='"$@"' -+ setopt NO_GLOB_SUBST -+else -+ case `(set -o) 2>/dev/null` in -+ *posix*) set -o posix ;; -+esac ++#define streq(a, b) (strcmp(a, b) == 0) ++#define skip_whitespace(str) do { while(*(str) == ' ') ++(str); } while(0) + -+fi ++/* Flags given on the command line */ ++static int avr32_pic = FALSE; ++int linkrelax = FALSE; ++int avr32_iarcompat = FALSE; ++int allow_direct_data_refs = FALSE; + ++/* This array holds the chars that always start a comment. */ ++const char comment_chars[] = "#"; + -+: -+(as_func_return () { -+ (exit $1) -+} -+as_func_success () { -+ as_func_return 0 -+} -+as_func_failure () { -+ as_func_return 1 -+} -+as_func_ret_success () { -+ return 0 -+} -+as_func_ret_failure () { -+ return 1 -+} ++/* This array holds the chars that only start a comment at the ++ beginning of a line. We must include '#' here because the compiler ++ may produce #APP and #NO_APP in its output. */ ++const char line_comment_chars[] = "#"; + -+exitcode=0 -+if as_func_success; then -+ : -+else -+ exitcode=1 -+ echo as_func_success failed. -+fi ++/* These may be used instead of newline (same as ';' in C). */ ++const char line_separator_chars[] = ";"; + -+if as_func_failure; then -+ exitcode=1 -+ echo as_func_failure succeeded. -+fi ++/* Chars that can be used to separate mantissa from exponent in ++ floating point numbers. */ ++const char EXP_CHARS[] = "eE"; + -+if as_func_ret_success; then -+ : -+else -+ exitcode=1 -+ echo as_func_ret_success failed. -+fi ++/* Chars that mean this number is a floating point constant. */ ++const char FLT_CHARS[] = "dD"; + -+if as_func_ret_failure; then -+ exitcode=1 -+ echo as_func_ret_failure succeeded. -+fi ++/* Pre-defined "_GLOBAL_OFFSET_TABLE_" */ ++symbolS *GOT_symbol; + -+if ( set x; as_func_ret_success y && test x = "$1" ); then -+ : -+else -+ exitcode=1 -+ echo positional parameters were not saved. -+fi ++static struct hash_control *avr32_mnemonic_htab; + -+test $exitcode = 0) || { (exit 1); exit 1; } ++struct avr32_ifield_data ++{ ++ bfd_vma value; ++ /* FIXME: Get rid of align_order and complain. complain is never ++ used, align_order is used in one place. Try to use the relax ++ table instead. */ ++ unsigned int align_order; ++}; + -+( - as_lineno_1=$LINENO - as_lineno_2=$LINENO -- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && -- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then -- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } -- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } -- CONFIG_SHELL=$as_dir/$as_base -- export CONFIG_SHELL -- exec "$CONFIG_SHELL" "$0" ${1+"$@"} -- fi;; -- esac -- done --done --;; -- esac -+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } ++struct avr32_insn ++{ ++ const struct avr32_syntax *syntax; ++ expressionS immediate; ++ int pcrel; ++ int force_extended; ++ unsigned int next_slot; ++ bfd_reloc_code_real_type r_type; ++ struct avr32_ifield_data field_value[AVR32_MAX_FIELDS]; ++}; + -+_ASEOF -+}; then -+ break -+fi ++static struct avr32_insn current_insn; + -+fi ++/* The target specific pseudo-ops we support. */ ++static void s_rseg (int); ++static void s_cpool(int); + -+ done ++const pseudo_typeS md_pseudo_table[] = ++{ ++ /* Make sure that .word is 32 bits */ ++ { "word", cons, 4 }, ++ { "file", (void (*) PARAMS ((int))) dwarf2_directive_file, 0 }, ++ { "loc", dwarf2_directive_loc, 0 }, + -+ if test "x$CONFIG_SHELL" != x; then -+ for as_var in BASH_ENV ENV -+ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -+ done -+ export CONFIG_SHELL -+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -+fi ++ /* .lcomm requires an explicit alignment parameter */ ++ { "lcomm", s_lcomm, 1 }, + ++ /* AVR32-specific pseudo-ops */ ++ { "cpool", s_cpool, 0}, + -+ if test $as_have_required = no; then -+ echo This script requires a shell more modern than all the -+ echo shells that I found on your system. Please install a -+ echo modern shell, or manually run the script under such a -+ echo shell if you do have one. -+ { (exit 1); exit 1; } -+fi ++ /* IAR compatible pseudo-ops */ ++ { "program", s_ignore, 0 }, ++ { "public", s_globl, 0 }, ++ { "extern", s_ignore, 0 }, ++ { "module", s_ignore, 0 }, ++ { "rseg", s_rseg, 0 }, ++ { "dc8", cons, 1 }, ++ { "dc16", cons, 2 }, ++ { "dc32", cons, 4 }, + ++ { NULL, NULL, 0 } ++}; + -+fi ++/* Questionable stuff starts here */ + -+fi ++enum avr32_opinfo { ++ AVR32_OPINFO_NONE = BFD_RELOC_NONE, ++ AVR32_OPINFO_GOT, ++ AVR32_OPINFO_TLSGD, ++ AVR32_OPINFO_HI, ++ AVR32_OPINFO_LO, ++}; + ++enum avr32_arch { ++ ARCH_TYPE_AP, ++ ARCH_TYPE_UC ++}; + ++struct arch_type_s ++{ ++ /* Architecture name */ ++ char *name; ++ /* Instruction Set Architecture Flags */ ++ unsigned long isa_flags; ++}; + -+(eval "as_func_return () { -+ (exit \$1) -+} -+as_func_success () { -+ as_func_return 0 -+} -+as_func_failure () { -+ as_func_return 1 -+} -+as_func_ret_success () { -+ return 0 -+} -+as_func_ret_failure () { -+ return 1 -+} ++struct part_type_s ++{ ++ /* Part name */ ++ char *name; ++ /* Architecture type */ ++ unsigned int arch; ++}; + -+exitcode=0 -+if as_func_success; then -+ : -+else -+ exitcode=1 -+ echo as_func_success failed. -+fi ++static struct arch_type_s arch_types[] = ++{ ++ {"ap", AVR32_V1 | AVR32_SIMD | AVR32_DSP | AVR32_PICO}, ++ {"uc", AVR32_V1 | AVR32_DSP | AVR32_RMW}, ++ {"all-insn", AVR32_V1 | AVR32_SIMD | AVR32_DSP | AVR32_RMW | AVR32_FP | AVR32_PICO}, ++ {NULL, 0} ++}; + -+if as_func_failure; then -+ exitcode=1 -+ echo as_func_failure succeeded. -+fi ++static struct part_type_s part_types[] = { ++ {"ap7000", ARCH_TYPE_AP}, ++ {"ap7010", ARCH_TYPE_AP}, ++ {"ap7020", ARCH_TYPE_AP}, ++ {"uc3a0256", ARCH_TYPE_UC}, ++ {"uc3a0512", ARCH_TYPE_UC}, ++ {"uc3a1128", ARCH_TYPE_UC}, ++ {"uc3a1256", ARCH_TYPE_UC}, ++ {"uc3a1512", ARCH_TYPE_UC}, ++ {"uc3b064", ARCH_TYPE_UC}, ++ {"uc3b0128", ARCH_TYPE_UC}, ++ {"uc3b0256", ARCH_TYPE_UC}, ++ {"uc3b164", ARCH_TYPE_UC}, ++ {"uc3b1128", ARCH_TYPE_UC}, ++ {"uc3b1256", ARCH_TYPE_UC}, ++ {NULL, 0} ++}; + -+if as_func_ret_success; then -+ : -+else -+ exitcode=1 -+ echo as_func_ret_success failed. -+fi ++/* Current architecture type. */ ++static struct arch_type_s default_arch = {"all-insn", AVR32_V1 | AVR32_SIMD | AVR32_DSP | AVR32_RMW | AVR32_FP | AVR32_PICO }; ++static struct arch_type_s *avr32_arch = &default_arch; ++ ++/* Display nicely formatted list of known part- and architecture names. */ ++ ++static void ++show_arch_list (FILE *stream) ++{ ++ int i, x; + -+if as_func_ret_failure; then -+ exitcode=1 -+ echo as_func_ret_failure succeeded. -+fi ++ fprintf (stream, _("Known architecture names:")); ++ x = 1000; + -+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then -+ : -+else -+ exitcode=1 -+ echo positional parameters were not saved. -+fi ++ for (i = 0; arch_types[i].name; i++) ++ { ++ int len = strlen (arch_types[i].name); + -+test \$exitcode = 0") || { -+ echo No shell found that supports shell functions. -+ echo Please tell autoconf@gnu.org about your system, -+ echo including any error possibly output before this -+ echo message -+} ++ x += len + 1; + ++ if (x < 75) ++ fprintf (stream, " %s", arch_types[i].name); ++ else ++ { ++ fprintf (stream, "\n %s", arch_types[i].name); ++ x = len + 2; ++ } ++ } + ++ fprintf (stream, "\n"); ++} + -+ as_lineno_1=$LINENO -+ as_lineno_2=$LINENO -+ test "x$as_lineno_1" != "x$as_lineno_2" && -+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a -- # line-number line before each line; the second 'sed' does the real -- # work. The second script uses 'N' to pair each line-number line -- # with the numbered line, and appends trailing '-' during -- # substitution so that $LINENO is not a special case at line end. -+ # line-number line after each line using $LINENO; the second 'sed' -+ # does the real work. The second script uses 'N' to pair each -+ # line-number line with the line containing $LINENO, and appends -+ # trailing '-' during substitution so that $LINENO is not a special -+ # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the -- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) -- sed '=' <$as_myself | -+ # scripts with optimization help from Paolo Bonzini. Blame Lee -+ # E. McMahon (1931-1989) for sed's syntax. :-) -+ sed -n ' -+ p -+ /[$]LINENO/= -+ ' <$as_myself | - sed ' -+ s/[$]LINENO.*/&-/ -+ t lineno -+ b -+ :lineno - N -- s,$,-, -- : loop -- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, -+ :loop -+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop -- s,-$,, -- s,^['$as_cr_digits']*\n,, -+ s/-\n.*// - ' >$as_me.lineno && -- chmod +x $as_me.lineno || -+ chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the -- # original and so on. Autoconf is especially sensible to this). -- . ./$as_me.lineno -+ # original and so on. Autoconf is especially sensitive to this). -+ . "./$as_me.lineno" - # Exit status is that of the last command. - exit - } - - --case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in -- *c*,-n*) ECHO_N= ECHO_C=' --' ECHO_T=' ' ;; -- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; -- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then -+ as_dirname=dirname -+else -+ as_dirname=false -+fi ++static void ++show_part_list (FILE *stream) ++{ ++ int i, x; + -+ECHO_C= ECHO_N= ECHO_T= -+case `echo -n x` in -+-n*) -+ case `echo 'x\c'` in -+ *c*) ECHO_T=' ';; # ECHO_T is single tab character. -+ *) ECHO_C='\c';; -+ esac;; -+*) -+ ECHO_N='-n';; - esac - --if expr a : '\(a\)' >/dev/null 2>&1; then -+if expr a : '\(a\)' >/dev/null 2>&1 && -+ test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr - else - as_expr=false - fi - - rm -f conf$$ conf$$.exe conf$$.file -+if test -d conf$$.dir; then -+ rm -f conf$$.dir/conf$$.file -+else -+ rm -f conf$$.dir -+ mkdir conf$$.dir -+fi - echo >conf$$.file - if ln -s conf$$.file conf$$ 2>/dev/null; then -- # We could just check for DJGPP; but this test a) works b) is more generic -- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). -- if test -f conf$$.exe; then -- # Don't use ln at all; we don't have any links -+ as_ln_s='ln -s' -+ # ... but there are two gotchas: -+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. -+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. -+ # In both cases, we have to default to `cp -p'. -+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -- else -- as_ln_s='ln -s' -- fi - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi --rm -f conf$$ conf$$.exe conf$$.file -+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -+rmdir conf$$.dir 2>/dev/null - - if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -@@ -222,7 +518,28 @@ else - as_mkdir_p=false - fi - --as_executable_p="test -f" -+if test -x / >/dev/null 2>&1; then -+ as_test_x='test -x' -+else -+ if ls -dL / >/dev/null 2>&1; then -+ as_ls_L_option=L -+ else -+ as_ls_L_option= -+ fi -+ as_test_x=' -+ eval sh -c '\'' -+ if test -d "$1"; then -+ test -d "$1/."; -+ else -+ case $1 in -+ -*)set "./$1";; -+ esac; -+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in -+ ???[sx]*):;;*)false;;esac;fi -+ '\'' sh -+ ' -+fi -+as_executable_p=$as_test_x - - # Sed expression to map a string onto a valid CPP name. - as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" -@@ -231,39 +548,27 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P - as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - --# IFS --# We need space, tab and new line, in precisely that order. --as_nl=' --' --IFS=" $as_nl" -- --# CDPATH. --$as_unset CDPATH - -+exec 7<&0 &1 - - # Name of the host. - # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, - # so uname gets run too. - ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - --exec 6>&1 -- - # - # Initializations. - # - ac_default_prefix=/usr/local -+ac_clean_files= - ac_config_libobj_dir=. -+LIBOBJS= - cross_compiling=no - subdirs= - MFLAGS= - MAKEFLAGS= - SHELL=${CONFIG_SHELL-/bin/sh} - --# Maximum number of lines to put in a shell here document. --# This variable seems obsolete. It should probably be removed, and --# only ac_max_sed_lines should be used. --: ${ac_max_here_lines=38} -- - # Identity of this package. - PACKAGE_NAME= - PACKAGE_TARNAME= -@@ -275,42 +580,190 @@ ac_unique_file="as.h" - # Factoring default headers for most tests. - ac_includes_default="\ - #include --#if HAVE_SYS_TYPES_H -+#ifdef HAVE_SYS_TYPES_H - # include - #endif --#if HAVE_SYS_STAT_H -+#ifdef HAVE_SYS_STAT_H - # include - #endif --#if STDC_HEADERS -+#ifdef STDC_HEADERS - # include - # include - #else --# if HAVE_STDLIB_H -+# ifdef HAVE_STDLIB_H - # include - # endif - #endif --#if HAVE_STRING_H --# if !STDC_HEADERS && HAVE_MEMORY_H -+#ifdef HAVE_STRING_H -+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H - # include - # endif - # include - #endif --#if HAVE_STRINGS_H -+#ifdef HAVE_STRINGS_H - # include - #endif --#if HAVE_INTTYPES_H -+#ifdef HAVE_INTTYPES_H - # include --#else --# if HAVE_STDINT_H --# include --# endif - #endif --#if HAVE_UNISTD_H -+#ifdef HAVE_STDINT_H -+# include -+#endif -+#ifdef HAVE_UNISTD_H - # include - #endif" - --ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE LN_S RANLIB ac_ct_RANLIB LIBTOOL WARN_CFLAGS NO_WERROR GDBINIT cgen_cpu_prefix extra_objects target_cpu_type obj_format te_file install_tooldir atof BFDLIB OPCODES_LIB BFDVER_H ALL_OBJ_DEPS YACC LEX LEXLIB LEX_OUTPUT_ROOT CPP EGREP ALLOCA USE_NLS MSGFMT GMSGFMT XGETTEXT USE_INCLUDED_LIBINTL CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLDEPS INTLLIBS INTLOBJS POFILES POSUB INCLUDE_LOCALE_H GT_NO GT_YES MKINSTALLDIRS l MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBM datarootdir docdir htmldir LIBOBJS LTLIBOBJS' -+ac_subst_vars='SHELL -+PATH_SEPARATOR -+PACKAGE_NAME -+PACKAGE_TARNAME -+PACKAGE_VERSION -+PACKAGE_STRING -+PACKAGE_BUGREPORT -+exec_prefix -+prefix -+program_transform_name -+bindir -+sbindir -+libexecdir -+datarootdir -+datadir -+sysconfdir -+sharedstatedir -+localstatedir -+includedir -+oldincludedir -+docdir -+infodir -+htmldir -+dvidir -+pdfdir -+psdir -+libdir -+localedir -+mandir -+DEFS -+ECHO_C -+ECHO_N -+ECHO_T -+LIBS -+build_alias -+host_alias -+target_alias -+build -+build_cpu -+build_vendor -+build_os -+host -+host_cpu -+host_vendor -+host_os -+target -+target_cpu -+target_vendor -+target_os -+CC -+CFLAGS -+LDFLAGS -+CPPFLAGS -+ac_ct_CC -+EXEEXT -+OBJEXT -+INSTALL_PROGRAM -+INSTALL_SCRIPT -+INSTALL_DATA -+CYGPATH_W -+PACKAGE -+VERSION -+ACLOCAL -+AUTOCONF -+AUTOMAKE -+AUTOHEADER -+MAKEINFO -+install_sh -+STRIP -+INSTALL_STRIP_PROGRAM -+mkdir_p -+AWK -+SET_MAKE -+am__leading_dot -+AMTAR -+am__tar -+am__untar -+DEPDIR -+am__include -+am__quote -+AMDEP_TRUE -+AMDEP_FALSE -+AMDEPBACKSLASH -+CCDEPMODE -+am__fastdepCC_TRUE -+am__fastdepCC_FALSE -+LN_S -+RANLIB -+LIBTOOL -+WARN_CFLAGS -+NO_WERROR -+GDBINIT -+CPP -+GREP -+EGREP -+cgen_cpu_prefix -+extra_objects -+target_cpu_type -+obj_format -+te_file -+install_tooldir -+atof -+BFDLIB -+OPCODES_LIB -+BFDVER_H -+ALL_OBJ_DEPS -+YACC -+YFLAGS -+LEX -+LEX_OUTPUT_ROOT -+LEXLIB -+ALLOCA -+USE_NLS -+MSGFMT -+GMSGFMT -+XGETTEXT -+USE_INCLUDED_LIBINTL -+CATALOGS -+CATOBJEXT -+DATADIRNAME -+GMOFILES -+INSTOBJEXT -+INTLDEPS -+INTLLIBS -+INTLOBJS -+POFILES -+POSUB -+INCLUDE_LOCALE_H -+GT_NO -+GT_YES -+MKINSTALLDIRS -+l -+MAINTAINER_MODE_TRUE -+MAINTAINER_MODE_FALSE -+MAINT -+LIBM -+LIBOBJS -+LTLIBOBJS' - ac_subst_files='' -+ ac_precious_vars='build_alias -+host_alias -+target_alias -+CC -+CFLAGS -+LDFLAGS -+LIBS -+CPPFLAGS -+CPP -+YACC -+YFLAGS' ++ fprintf (stream, _("Known part names:")); ++ x = 1000; + - - # Initialize some variables set by options. - ac_init_help= -@@ -337,34 +790,48 @@ x_libraries=NONE - # and all the variables that are supposed to be based on exec_prefix - # by default will actually change. - # Use braces instead of parens because sh, perl, etc. also accept them. -+# (The list follows the same order as the GNU Coding Standards.) - bindir='${exec_prefix}/bin' - sbindir='${exec_prefix}/sbin' - libexecdir='${exec_prefix}/libexec' --datadir='${prefix}/share' -+datarootdir='${prefix}/share' -+datadir='${datarootdir}' - sysconfdir='${prefix}/etc' - sharedstatedir='${prefix}/com' - localstatedir='${prefix}/var' --libdir='${exec_prefix}/lib' - includedir='${prefix}/include' - oldincludedir='/usr/include' --infodir='${prefix}/info' --mandir='${prefix}/man' -+docdir='${datarootdir}/doc/${PACKAGE}' -+infodir='${datarootdir}/info' -+htmldir='${docdir}' -+dvidir='${docdir}' -+pdfdir='${docdir}' -+psdir='${docdir}' -+libdir='${exec_prefix}/lib' -+localedir='${datarootdir}/locale' -+mandir='${datarootdir}/man' - - ac_prev= -+ac_dashdash= - for ac_option - do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then -- eval "$ac_prev=\$ac_option" -+ eval $ac_prev=\$ac_option - ac_prev= - continue - fi - -- ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` -+ case $ac_option in -+ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; -+ *) ac_optarg=yes ;; -+ esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - -- case $ac_option in -+ case $ac_dashdash$ac_option in -+ --) -+ ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; -@@ -386,33 +853,45 @@ do - --config-cache | -C) - cache_file=config.cache ;; - -- -datadir | --datadir | --datadi | --datad | --data | --dat | --da) -+ -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; -- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ -- | --da=*) -+ -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - -+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ -+ | --dataroo | --dataro | --datar) -+ ac_prev=datarootdir ;; -+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ -+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) -+ datarootdir=$ac_optarg ;; ++ for (i = 0; part_types[i].name; i++) ++ { ++ int len = strlen(part_types[i].name); + - -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. -- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && -+ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } -- ac_feature=`echo $ac_feature | sed 's/-/_/g'` -- eval "enable_$ac_feature=no" ;; -+ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` -+ eval enable_$ac_feature=no ;; ++ x += len + 1; ++ ++ if (x < 75) ++ fprintf (stream, " %s", part_types[i].name); ++ else ++ { ++ fprintf(stream, "\n %s", part_types[i].name); ++ x = len + 2; ++ } ++ } + -+ -docdir | --docdir | --docdi | --doc | --do) -+ ac_prev=docdir ;; -+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) -+ docdir=$ac_optarg ;; ++ fprintf (stream, "\n"); ++} + -+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) -+ ac_prev=dvidir ;; -+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) -+ dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. -- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && -+ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } -- ac_feature=`echo $ac_feature | sed 's/-/_/g'` -- case $ac_option in -- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; -- *) ac_optarg=yes ;; -- esac -- eval "enable_$ac_feature='$ac_optarg'" ;; -+ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` -+ eval enable_$ac_feature=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ -@@ -439,6 +918,12 @@ do - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - -+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) -+ ac_prev=htmldir ;; -+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ -+ | --ht=*) -+ htmldir=$ac_optarg ;; ++const char *md_shortopts = ""; ++struct option md_longopts[] = ++{ ++#define OPTION_ARCH (OPTION_MD_BASE) ++#define OPTION_PART (OPTION_ARCH + 1) ++#define OPTION_IAR (OPTION_PART + 1) ++#define OPTION_PIC (OPTION_IAR + 1) ++#define OPTION_NOPIC (OPTION_PIC + 1) ++#define OPTION_LINKRELAX (OPTION_NOPIC + 1) ++#define OPTION_NOLINKRELAX (OPTION_LINKRELAX + 1) ++#define OPTION_DIRECT_DATA_REFS (OPTION_NOLINKRELAX + 1) ++ {"march", required_argument, NULL, OPTION_ARCH}, ++ {"mpart", required_argument, NULL, OPTION_PART}, ++ {"iar", no_argument, NULL, OPTION_IAR}, ++ {"pic", no_argument, NULL, OPTION_PIC}, ++ {"no-pic", no_argument, NULL, OPTION_NOPIC}, ++ {"linkrelax", no_argument, NULL, OPTION_LINKRELAX}, ++ {"no-linkrelax", no_argument, NULL, OPTION_NOLINKRELAX}, ++ {"direct-data-refs", no_argument, NULL, OPTION_DIRECT_DATA_REFS}, ++ /* deprecated alias for -mpart=xxx */ ++ {"mcpu", required_argument, NULL, OPTION_PART}, ++ {NULL, no_argument, NULL, 0} ++}; + - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; -@@ -463,13 +948,16 @@ do - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - -+ -localedir | --localedir | --localedi | --localed | --locale) -+ ac_prev=localedir ;; -+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) -+ localedir=$ac_optarg ;; ++size_t md_longopts_size = sizeof (md_longopts); + - -localstatedir | --localstatedir | --localstatedi | --localstated \ -- | --localstate | --localstat | --localsta | --localst \ -- | --locals | --local | --loca | --loc | --lo) -+ | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ -- | --localstate=* | --localstat=* | --localsta=* | --localst=* \ -- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) -+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) -@@ -534,6 +1022,16 @@ do - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - -+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) -+ ac_prev=pdfdir ;; -+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) -+ pdfdir=$ac_optarg ;; ++void ++md_show_usage (FILE *stream) ++{ ++ fprintf (stream, _("\ ++AVR32 options:\n\ ++ -march=[arch-name] Select cpu architecture. [Default `all-insn']\n\ ++ -mpart=[part-name] Select specific part. [Default `none']\n\ ++ --pic Produce Position-Independent Code\n\ ++ --no-pic Don't produce Position-Independent Code\n\ ++ --linkrelax Produce output suitable for linker relaxing\n\ ++ --no-linkrelax Don't produce output suitable for linker relaxing\n\ ++ --direct-data-refs Allows direct references (i.e. mov or sub) to the data section\n")); ++ show_arch_list(stream); ++} + -+ -psdir | --psdir | --psdi | --psd | --ps) -+ ac_prev=psdir ;; -+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) -+ psdir=$ac_optarg ;; ++int ++md_parse_option (int c, char *arg ATTRIBUTE_UNUSED) ++{ ++ switch (c) ++ { ++ case OPTION_ARCH: ++ { ++ int i; ++ char *s = alloca (strlen (arg) + 1); + - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; -@@ -586,24 +1084,20 @@ do - -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. -- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && -+ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } -- ac_package=`echo $ac_package| sed 's/-/_/g'` -- case $ac_option in -- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; -- *) ac_optarg=yes ;; -- esac -- eval "with_$ac_package='$ac_optarg'" ;; -+ ac_package=`echo $ac_package | sed 's/[-.]/_/g'` -+ eval with_$ac_package=\$ac_optarg ;; - - -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. -- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && -+ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } -- ac_package=`echo $ac_package | sed 's/-/_/g'` -- eval "with_$ac_package=no" ;; -+ ac_package=`echo $ac_package | sed 's/[-.]/_/g'` -+ eval with_$ac_package=no ;; - - --x) - # Obsolete; use --with-x. -@@ -634,8 +1128,7 @@ Try \`$0 --help' for more information." - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } -- ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` -- eval "$ac_envvar='$ac_optarg'" -+ eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) -@@ -655,27 +1148,19 @@ if test -n "$ac_prev"; then - { (exit 1); exit 1; }; } - fi - --# Be sure to have absolute paths. --for ac_var in exec_prefix prefix --do -- eval ac_val=$`echo $ac_var` -- case $ac_val in -- [\\/$]* | ?:[\\/]* | NONE | '' ) ;; -- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 -- { (exit 1); exit 1; }; };; -- esac --done -- --# Be sure to have absolute paths. --for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ -- localstatedir libdir includedir oldincludedir infodir mandir -+# Be sure to have absolute directory names. -+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ -+ datadir sysconfdir sharedstatedir localstatedir includedir \ -+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ -+ libdir localedir mandir - do -- eval ac_val=$`echo $ac_var` -+ eval ac_val=\$$ac_var - case $ac_val in -- [\\/$]* | ?:[\\/]* ) ;; -- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 -- { (exit 1); exit 1; }; };; -+ [\\/$]* | ?:[\\/]* ) continue;; -+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac -+ { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 -+ { (exit 1); exit 1; }; } - done - - # There might be people who depend on the old broken behavior: `$host' -@@ -702,74 +1187,76 @@ test -n "$host_alias" && ac_tool_prefix= - test "$silent" = yes && exec 6>/dev/null - - -+ac_pwd=`pwd` && test -n "$ac_pwd" && -+ac_ls_di=`ls -di .` && -+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || -+ { echo "$as_me: error: Working directory cannot be determined" >&2 -+ { (exit 1); exit 1; }; } -+test "X$ac_ls_di" = "X$ac_pwd_ls_di" || -+ { echo "$as_me: error: pwd does not report name of working directory" >&2 -+ { (exit 1); exit 1; }; } ++ { ++ char *t = s; ++ char *arg1 = arg; + ++ do ++ *t = TOLOWER (*arg1++); ++ while (*t++); ++ } + - # Find the source files, if location was not specified. - if test -z "$srcdir"; then - ac_srcdir_defaulted=yes -- # Try the directory containing this script, then its parent. -- ac_confdir=`(dirname "$0") 2>/dev/null || -+ # Try the directory containing this script, then the parent directory. -+ ac_confdir=`$as_dirname -- "$0" || - $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ -- X"$0" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$0" : 'X\(/\)' \| . 2>/dev/null || - echo X"$0" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)[^/].*/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\).*/{ -+ s//\1/ -+ q ++ for (i = 0; arch_types[i].name; ++i) ++ if (strcmp (arch_types[i].name, s) == 0) ++ break; ++ ++ if (!arch_types[i].name) ++ { ++ show_arch_list (stderr); ++ as_fatal (_("unknown architecture: %s\n"), arg); + } -+ s/.*/./; q'` - srcdir=$ac_confdir -- if test ! -r $srcdir/$ac_unique_file; then -+ if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi - else - ac_srcdir_defaulted=no - fi --if test ! -r $srcdir/$ac_unique_file; then -- if test "$ac_srcdir_defaulted" = yes; then -- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 -- { (exit 1); exit 1; }; } -- else -- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 -- { (exit 1); exit 1; }; } -- fi --fi --(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || -- { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 -- { (exit 1); exit 1; }; } --srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` --ac_env_build_alias_set=${build_alias+set} --ac_env_build_alias_value=$build_alias --ac_cv_env_build_alias_set=${build_alias+set} --ac_cv_env_build_alias_value=$build_alias --ac_env_host_alias_set=${host_alias+set} --ac_env_host_alias_value=$host_alias --ac_cv_env_host_alias_set=${host_alias+set} --ac_cv_env_host_alias_value=$host_alias --ac_env_target_alias_set=${target_alias+set} --ac_env_target_alias_value=$target_alias --ac_cv_env_target_alias_set=${target_alias+set} --ac_cv_env_target_alias_value=$target_alias --ac_env_CC_set=${CC+set} --ac_env_CC_value=$CC --ac_cv_env_CC_set=${CC+set} --ac_cv_env_CC_value=$CC --ac_env_CFLAGS_set=${CFLAGS+set} --ac_env_CFLAGS_value=$CFLAGS --ac_cv_env_CFLAGS_set=${CFLAGS+set} --ac_cv_env_CFLAGS_value=$CFLAGS --ac_env_LDFLAGS_set=${LDFLAGS+set} --ac_env_LDFLAGS_value=$LDFLAGS --ac_cv_env_LDFLAGS_set=${LDFLAGS+set} --ac_cv_env_LDFLAGS_value=$LDFLAGS --ac_env_CPPFLAGS_set=${CPPFLAGS+set} --ac_env_CPPFLAGS_value=$CPPFLAGS --ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} --ac_cv_env_CPPFLAGS_value=$CPPFLAGS --ac_env_CPP_set=${CPP+set} --ac_env_CPP_value=$CPP --ac_cv_env_CPP_set=${CPP+set} --ac_cv_env_CPP_value=$CPP -+if test ! -r "$srcdir/$ac_unique_file"; then -+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." -+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 -+ { (exit 1); exit 1; }; } -+fi -+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -+ac_abs_confdir=`( -+ cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 -+ { (exit 1); exit 1; }; } -+ pwd)` -+# When building in place, set srcdir=. -+if test "$ac_abs_confdir" = "$ac_pwd"; then -+ srcdir=. -+fi -+# Remove unnecessary trailing slashes from srcdir. -+# Double slashes in file names in object file debugging info -+# mess up M-x gdb in Emacs. -+case $srcdir in -+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -+esac -+for ac_var in $ac_precious_vars; do -+ eval ac_env_${ac_var}_set=\${${ac_var}+set} -+ eval ac_env_${ac_var}_value=\$${ac_var} -+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} -+ eval ac_cv_env_${ac_var}_value=\$${ac_var} -+done - - # - # Report the --help message. -@@ -798,9 +1285,6 @@ Configuration: - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - --_ACEOF -- -- cat <<_ACEOF - Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] -@@ -818,15 +1302,22 @@ Fine tuning of the installation director - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] -- --datadir=DIR read-only architecture-independent data [PREFIX/share] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] -- --infodir=DIR info documentation [PREFIX/info] -- --mandir=DIR man documentation [PREFIX/man] -+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] -+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR] -+ --infodir=DIR info documentation [DATAROOTDIR/info] -+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale] -+ --mandir=DIR man documentation [DATAROOTDIR/man] -+ --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] -+ --htmldir=DIR html documentation [DOCDIR] -+ --dvidir=DIR dvi documentation [DOCDIR] -+ --pdfdir=DIR pdf documentation [DOCDIR] -+ --psdir=DIR ps documentation [DOCDIR] - _ACEOF - - cat <<\_ACEOF -@@ -876,126 +1367,100 @@ Some influential environment variables: - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory -- CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have -- headers in a nonstandard directory -+ LIBS libraries to pass to the linker, e.g. -l -+ CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if -+ you have headers in a nonstandard directory - CPP C preprocessor -+ YACC The `Yet Another C Compiler' implementation to use. Defaults to -+ the first program found out of: `bison -y', `byacc', `yacc'. -+ YFLAGS The list of arguments that will be passed by default to $YACC. -+ This script will default YFLAGS to the empty string to avoid a -+ default value of `-d' given by some make applications. - - Use these variables to override the choices made by `configure' or to help - it to find libraries and programs with nonstandard names/locations. - - _ACEOF -+ac_status=$? - fi - - if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. -- ac_popdir=`pwd` - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue -- test -d $ac_dir || continue -+ test -d "$ac_dir" || continue - ac_builddir=. - --if test "$ac_dir" != .; then -+case "$ac_dir" in -+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -+*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` -- # A "../" for each directory in $ac_dir_suffix. -- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` --else -- ac_dir_suffix= ac_top_builddir= --fi -+ # A ".." for each directory in $ac_dir_suffix. -+ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` -+ case $ac_top_builddir_sub in -+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;; -+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; -+ esac ;; -+esac -+ac_abs_top_builddir=$ac_pwd -+ac_abs_builddir=$ac_pwd$ac_dir_suffix -+# for backward compatibility: -+ac_top_builddir=$ac_top_build_prefix - - case $srcdir in -- .) # No --srcdir option. We are building in place. -+ .) # We are building in place. - ac_srcdir=. -- if test -z "$ac_top_builddir"; then -- ac_top_srcdir=. -- else -- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` -- fi ;; -- [\\/]* | ?:[\\/]* ) # Absolute path. -+ ac_top_srcdir=$ac_top_builddir_sub -+ ac_abs_top_srcdir=$ac_pwd ;; -+ [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; -- ac_top_srcdir=$srcdir ;; -- *) # Relative path. -- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix -- ac_top_srcdir=$ac_top_builddir$srcdir ;; --esac -- --# Do not use `cd foo && pwd` to compute absolute paths, because --# the directories may not exist. --case `pwd` in --.) ac_abs_builddir="$ac_dir";; --*) -- case "$ac_dir" in -- .) ac_abs_builddir=`pwd`;; -- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; -- *) ac_abs_builddir=`pwd`/"$ac_dir";; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_builddir=${ac_top_builddir}.;; --*) -- case ${ac_top_builddir}. in -- .) ac_abs_top_builddir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; -- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_srcdir=$ac_srcdir;; --*) -- case $ac_srcdir in -- .) ac_abs_srcdir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; -- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_srcdir=$ac_top_srcdir;; --*) -- case $ac_top_srcdir in -- .) ac_abs_top_srcdir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; -- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; -- esac;; --esac -- -- cd $ac_dir -- # Check for guested configure; otherwise get Cygnus style configure. -- if test -f $ac_srcdir/configure.gnu; then -- echo -- $SHELL $ac_srcdir/configure.gnu --help=recursive -- elif test -f $ac_srcdir/configure; then -- echo -- $SHELL $ac_srcdir/configure --help=recursive -- elif test -f $ac_srcdir/configure.ac || -- test -f $ac_srcdir/configure.in; then -- echo -- $ac_configure --help -+ ac_top_srcdir=$srcdir -+ ac_abs_top_srcdir=$srcdir ;; -+ *) # Relative name. -+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix -+ ac_top_srcdir=$ac_top_build_prefix$srcdir -+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -+esac -+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + -+ cd "$ac_dir" || { ac_status=$?; continue; } -+ # Check for guested configure. -+ if test -f "$ac_srcdir/configure.gnu"; then -+ echo && -+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive -+ elif test -f "$ac_srcdir/configure"; then -+ echo && -+ $SHELL "$ac_srcdir/configure" --help=recursive - else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 -- fi -- cd $ac_popdir -+ fi || ac_status=$? -+ cd "$ac_pwd" || { ac_status=$?; break; } - done - fi - --test -n "$ac_init_help" && exit 0 -+test -n "$ac_init_help" && exit $ac_status - if $ac_init_version; then - cat <<\_ACEOF -+configure -+generated by GNU Autoconf 2.61 - --Copyright (C) 2003 Free Software Foundation, Inc. -+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -+2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - This configure script is free software; the Free Software Foundation - gives unlimited permission to copy, distribute and modify it. - _ACEOF -- exit 0 -+ exit - fi --exec 5>config.log --cat >&5 <<_ACEOF -+cat >config.log <<_ACEOF - This file contains any messages produced by compilers while - running configure, to aid debugging if configure makes a mistake. - - It was created by $as_me, which was --generated by GNU Autoconf 2.59. Invocation command line was -+generated by GNU Autoconf 2.61. Invocation command line was - - $ $0 $@ - - _ACEOF -+exec 5>>config.log - { - cat <<_ASUNAME - ## --------- ## -@@ -1014,7 +1479,7 @@ uname -v = `(uname -v) 2>/dev/null || ec - /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` - /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` - /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` --hostinfo = `(hostinfo) 2>/dev/null || echo unknown` -+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` - /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` - /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` - /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` -@@ -1028,6 +1493,7 @@ do - test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" - done -+IFS=$as_save_IFS - - } >&5 - -@@ -1049,7 +1515,6 @@ _ACEOF - ac_configure_args= - ac_configure_args0= - ac_configure_args1= --ac_sep= - ac_must_keep_next=false - for ac_pass in 1 2 - do -@@ -1060,7 +1525,7 @@ do - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; -- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) -+ *\'*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in -@@ -1082,9 +1547,7 @@ do - -* ) ac_must_keep_next=true ;; - esac - fi -- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" -- # Get rid of the leading space. -- ac_sep=" " -+ ac_configure_args="$ac_configure_args '$ac_arg'" - ;; - esac - done -@@ -1095,8 +1558,8 @@ $as_unset ac_configure_args1 || test "${ - # When interrupted or exit'd, cleanup temporary files, and complete - # config.log. We remove comments because anyway the quotes in there - # would cause problems or look ugly. --# WARNING: Be sure not to use single quotes in there, as some shells, --# such as our DU 5.0 friend, will then `close' the trap. -+# WARNING: Use '\'' to represent an apostrophe within the trap. -+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. - trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { -@@ -1109,20 +1572,34 @@ trap 'exit_status=$? - _ASBOX - echo - # The following way of writing the cache mishandles newlines in values, --{ -+( -+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do -+ eval ac_val=\$$ac_var -+ case $ac_val in #( -+ *${as_nl}*) -+ case $ac_var in #( -+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; -+ esac -+ case $ac_var in #( -+ _ | IFS | as_nl) ;; #( -+ *) $as_unset $ac_var ;; -+ esac ;; -+ esac -+ done - (set) 2>&1 | -- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in -- *ac_space=\ *) -+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( -+ *${as_nl}ac_space=\ *) - sed -n \ -- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; -- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" -- ;; -+ "s/'\''/'\''\\\\'\'''\''/g; -+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" -+ ;; #( - *) -- sed -n \ -- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" -+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; -- esac; --} -+ esac | -+ sort -+) - echo - - cat <<\_ASBOX -@@ -1133,22 +1610,28 @@ _ASBOX - echo - for ac_var in $ac_subst_vars - do -- eval ac_val=$`echo $ac_var` -- echo "$ac_var='"'"'$ac_val'"'"'" -+ eval ac_val=\$$ac_var -+ case $ac_val in -+ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; -+ esac -+ echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX --## ------------- ## --## Output files. ## --## ------------- ## -+## ------------------- ## -+## File substitutions. ## -+## ------------------- ## - _ASBOX - echo - for ac_var in $ac_subst_files - do -- eval ac_val=$`echo $ac_var` -- echo "$ac_var='"'"'$ac_val'"'"'" -+ eval ac_val=\$$ac_var -+ case $ac_val in -+ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; -+ esac -+ echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi -@@ -1160,26 +1643,24 @@ _ASBOX - ## ----------- ## - _ASBOX - echo -- sed "/^$/d" confdefs.h | sort -+ cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" - } >&5 -- rm -f core *.core && -- rm -rf conftest* confdefs* conf$$* $ac_clean_files && -+ rm -f core *.core core.conftest.* && -+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -- ' 0 -+' 0 - for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal - done - ac_signal=0 - - # confdefs.h avoids OS command line length limits that DEFS can exceed. --rm -rf conftest* confdefs.h --# AIX cpp loses on an empty file, so make sure it contains at least a newline. --echo >confdefs.h -+rm -f -r conftest* confdefs.h - - # Predefined preprocessor variables. - -@@ -1210,14 +1691,17 @@ _ACEOF - - # Let the site file select an alternate cache file if it wants to. - # Prefer explicitly selected file to automatically selected ones. --if test -z "$CONFIG_SITE"; then -- if test "x$prefix" != xNONE; then -- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" -- else -- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" -- fi -+if test -n "$CONFIG_SITE"; then -+ set x "$CONFIG_SITE" -+elif test "x$prefix" != xNONE; then -+ set x "$prefix/share/config.site" "$prefix/etc/config.site" -+else -+ set x "$ac_default_prefix/share/config.site" \ -+ "$ac_default_prefix/etc/config.site" - fi --for ac_site_file in $CONFIG_SITE; do -+shift -+for ac_site_file -+do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 - echo "$as_me: loading site script $ac_site_file" >&6;} -@@ -1233,8 +1717,8 @@ if test -r "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 - echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in -- [\\/]* | ?:[\\/]* ) . $cache_file;; -- *) . ./$cache_file;; -+ [\\/]* | ?:[\\/]* ) . "$cache_file";; -+ *) . "./$cache_file";; - esac - fi - else -@@ -1246,12 +1730,11 @@ fi - # Check that the precious variables saved in the cache have kept the same - # value. - ac_cache_corrupted=false --for ac_var in `(set) 2>&1 | -- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do -+for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set -- eval ac_old_val="\$ac_cv_env_${ac_var}_value" -- eval ac_new_val="\$ac_env_${ac_var}_value" -+ eval ac_old_val=\$ac_cv_env_${ac_var}_value -+ eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -@@ -1276,8 +1759,7 @@ echo "$as_me: current value: $ac_new_v - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in -- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) -- ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; -+ *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in -@@ -1294,12 +1776,6 @@ echo "$as_me: error: run \`make distclea - { (exit 1); exit 1; }; } - fi - --ac_ext=c --ac_cpp='$CPP $CPPFLAGS' --ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' --ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' --ac_compiler_gnu=$ac_cv_c_compiler_gnu -- - - - -@@ -1316,108 +1792,163 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -+ac_ext=c -+ac_cpp='$CPP $CPPFLAGS' -+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -+ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - ac_aux_dir= --for ac_dir in .. $srcdir/..; do -- if test -f $ac_dir/install-sh; then -+for ac_dir in .. "$srcdir"/..; do -+ if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break -- elif test -f $ac_dir/install.sh; then -+ elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break -- elif test -f $ac_dir/shtool; then -+ elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi - done - if test -z "$ac_aux_dir"; then -- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in .. $srcdir/.." >&5 --echo "$as_me: error: cannot find install-sh or install.sh in .. $srcdir/.." >&2;} -+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in .. \"$srcdir\"/.." >&5 -+echo "$as_me: error: cannot find install-sh or install.sh in .. \"$srcdir\"/.." >&2;} - { (exit 1); exit 1; }; } - fi --ac_config_guess="$SHELL $ac_aux_dir/config.guess" --ac_config_sub="$SHELL $ac_aux_dir/config.sub" --ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. ++ avr32_arch = &arch_types[i]; ++ break; ++ } ++ case OPTION_PART: ++ { ++ int i; ++ char *s = alloca (strlen (arg) + 1); ++ char *t = s; ++ char *p = arg; ++ ++ /* If arch type has already been set, don't bother. ++ -march= always overrides -mpart= */ ++ if (avr32_arch != &default_arch) ++ break; ++ ++ do ++ *t = TOLOWER (*p++); ++ while (*t++); ++ ++ for (i = 0; part_types[i].name; ++i) ++ if (strcmp (part_types[i].name, s) == 0) ++ break; ++ ++ if (!part_types[i].name) ++ { ++ show_part_list (stderr); ++ as_fatal (_("unknown part: %s\n"), arg); ++ } ++ ++ avr32_arch = &arch_types[part_types[i].arch]; ++ break; ++ } ++ case OPTION_IAR: ++ avr32_iarcompat = 1; ++ break; ++ case OPTION_PIC: ++ avr32_pic = 1; ++ break; ++ case OPTION_NOPIC: ++ avr32_pic = 0; ++ break; ++ case OPTION_LINKRELAX: ++ linkrelax = 1; ++ break; ++ case OPTION_NOLINKRELAX: ++ linkrelax = 0; ++ break; ++ case OPTION_DIRECT_DATA_REFS: ++ allow_direct_data_refs = 1; ++ break; ++ default: ++ return 0; ++ } ++ return 1; ++} ++ ++/* Can't use symbol_new here, so have to create a symbol and then at ++ a later date assign it a value. Thats what these functions do. ++ ++ Shamelessly stolen from ARM. */ ++ ++static void ++symbol_locate (symbolS * symbolP, ++ const char * name, /* It is copied, the caller can modify. */ ++ segT segment, /* Segment identifier (SEG_). */ ++ valueT valu, /* Symbol value. */ ++ fragS * frag) /* Associated fragment. */ ++{ ++ unsigned int name_length; ++ char * preserved_copy_of_name; ++ ++ name_length = strlen (name) + 1; /* +1 for \0. */ ++ obstack_grow (¬es, name, name_length); ++ preserved_copy_of_name = obstack_finish (¬es); ++#ifdef STRIP_UNDERSCORE ++ if (preserved_copy_of_name[0] == '_') ++ preserved_copy_of_name++; ++#endif ++ ++#ifdef tc_canonicalize_symbol_name ++ preserved_copy_of_name = ++ tc_canonicalize_symbol_name (preserved_copy_of_name); ++#endif ++ ++ S_SET_NAME (symbolP, preserved_copy_of_name); ++ ++ S_SET_SEGMENT (symbolP, segment); ++ S_SET_VALUE (symbolP, valu); ++ symbol_clear_list_pointers (symbolP); ++ ++ symbol_set_frag (symbolP, frag); ++ ++ /* Link to end of symbol chain. */ ++ { ++ extern int symbol_table_frozen; ++ ++ if (symbol_table_frozen) ++ abort (); ++ } ++ ++ symbol_append (symbolP, symbol_lastP, & symbol_rootP, & symbol_lastP); ++ ++ obj_symbol_new_hook (symbolP); ++ ++#ifdef tc_symbol_new_hook ++ tc_symbol_new_hook (symbolP); ++#endif ++ ++#ifdef DEBUG_SYMS ++ verify_symbol_chain (symbol_rootP, symbol_lastP); ++#endif /* DEBUG_SYMS */ ++} ++ ++struct cpool_entry ++{ ++ int refcount; ++ offsetT offset; ++ expressionS exp; ++}; ++ ++struct cpool ++{ ++ struct cpool *next; ++ int used; ++ struct cpool_entry *literals; ++ unsigned int padding; ++ unsigned int next_free_entry; ++ unsigned int id; ++ symbolS *symbol; ++ segT section; ++ subsegT sub_section; ++}; ++ ++struct cpool *cpool_list = NULL; ++ ++static struct cpool * ++find_cpool(segT section, subsegT sub_section) ++{ ++ struct cpool *pool; ++ ++ for (pool = cpool_list; pool != NULL; pool = pool->next) ++ { ++ if (!pool->used ++ && pool->section == section ++ && pool->sub_section == sub_section) ++ break; ++ } ++ ++ return pool; ++} ++ ++static struct cpool * ++find_or_make_cpool(segT section, subsegT sub_section) ++{ ++ static unsigned int next_cpool_id = 0; ++ struct cpool *pool; ++ ++ pool = find_cpool(section, sub_section); ++ ++ if (!pool) ++ { ++ pool = xmalloc(sizeof(*pool)); ++ if (!pool) ++ return NULL; ++ ++ pool->used = 0; ++ pool->literals = NULL; ++ pool->padding = 0; ++ pool->next_free_entry = 0; ++ pool->section = section; ++ pool->sub_section = sub_section; ++ pool->next = cpool_list; ++ pool->symbol = NULL; ++ ++ cpool_list = pool; ++ } ++ ++ /* NULL symbol means that the pool is new or has just been emptied. */ ++ if (!pool->symbol) ++ { ++ pool->symbol = symbol_create(FAKE_LABEL_NAME, undefined_section, ++ 0, &zero_address_frag); ++ pool->id = next_cpool_id++; ++ } ++ ++ return pool; ++} ++ ++static struct cpool * ++add_to_cpool(expressionS *exp, unsigned int *index, int ref) ++{ ++ struct cpool *pool; ++ unsigned int entry; ++ ++ pool = find_or_make_cpool(now_seg, now_subseg); ++ ++ /* Check if this constant is already in the pool. */ ++ for (entry = 0; entry < pool->next_free_entry; entry++) ++ { ++ if ((pool->literals[entry].exp.X_op == exp->X_op) ++ && (exp->X_op == O_constant) ++ && (pool->literals[entry].exp.X_add_number ++ == exp->X_add_number) ++ && (pool->literals[entry].exp.X_unsigned ++ == exp->X_unsigned)) ++ break; ++ ++ if ((pool->literals[entry].exp.X_op == exp->X_op) ++ && (exp->X_op == O_symbol) ++ && (pool->literals[entry].exp.X_add_number ++ == exp->X_add_number) ++ && (pool->literals[entry].exp.X_add_symbol ++ == exp->X_add_symbol) ++ && (pool->literals[entry].exp.X_op_symbol ++ == exp->X_op_symbol)) ++ break; ++ } + -+# These three variables are undocumented and unsupported, -+# and are intended to be withdrawn in a future Autoconf release. -+# They can cause serious problems if a builder's source tree is in a directory -+# whose full name contains unusual characters. -+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ++ /* Create an entry if we didn't find a match */ ++ if (entry == pool->next_free_entry) ++ { ++ pool->literals = xrealloc(pool->literals, ++ sizeof(struct cpool_entry) * (entry + 1)); ++ pool->literals[entry].exp = *exp; ++ pool->literals[entry].refcount = 0; ++ pool->next_free_entry++; ++ } + - - # Make sure we can run config.sub. --$ac_config_sub sun4 >/dev/null 2>&1 || -- { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 --echo "$as_me: error: cannot run $ac_config_sub" >&2;} -+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || -+ { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 -+echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} - { (exit 1); exit 1; }; } - --echo "$as_me:$LINENO: checking build system type" >&5 --echo $ECHO_N "checking build system type... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking build system type" >&5 -+echo $ECHO_N "checking build system type... $ECHO_C" >&6; } - if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- ac_cv_build_alias=$build_alias --test -z "$ac_cv_build_alias" && -- ac_cv_build_alias=`$ac_config_guess` --test -z "$ac_cv_build_alias" && -+ ac_build_alias=$build_alias -+test "x$ac_build_alias" = x && -+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -+test "x$ac_build_alias" = x && - { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 - echo "$as_me: error: cannot guess build type; you must specify one" >&2;} - { (exit 1); exit 1; }; } --ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || -- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 --echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} -+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || -+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 -+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} - { (exit 1); exit 1; }; } - - fi --echo "$as_me:$LINENO: result: $ac_cv_build" >&5 --echo "${ECHO_T}$ac_cv_build" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 -+echo "${ECHO_T}$ac_cv_build" >&6; } -+case $ac_cv_build in -+*-*-*) ;; -+*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 -+echo "$as_me: error: invalid value of canonical build" >&2;} -+ { (exit 1); exit 1; }; };; -+esac - build=$ac_cv_build --build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` --build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` --build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -+ac_save_IFS=$IFS; IFS='-' -+set x $ac_cv_build -+shift -+build_cpu=$1 -+build_vendor=$2 -+shift; shift -+# Remember, the first character of IFS is used to create $*, -+# except with old shells: -+build_os=$* -+IFS=$ac_save_IFS -+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - --echo "$as_me:$LINENO: checking host system type" >&5 --echo $ECHO_N "checking host system type... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking host system type" >&5 -+echo $ECHO_N "checking host system type... $ECHO_C" >&6; } - if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- ac_cv_host_alias=$host_alias --test -z "$ac_cv_host_alias" && -- ac_cv_host_alias=$ac_cv_build_alias --ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || -- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 --echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} -+ if test "x$host_alias" = x; then -+ ac_cv_host=$ac_cv_build -+else -+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || -+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 -+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} - { (exit 1); exit 1; }; } -+fi - - fi --echo "$as_me:$LINENO: result: $ac_cv_host" >&5 --echo "${ECHO_T}$ac_cv_host" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -+echo "${ECHO_T}$ac_cv_host" >&6; } -+case $ac_cv_host in -+*-*-*) ;; -+*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 -+echo "$as_me: error: invalid value of canonical host" >&2;} -+ { (exit 1); exit 1; }; };; -+esac - host=$ac_cv_host --host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` --host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` --host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -+ac_save_IFS=$IFS; IFS='-' -+set x $ac_cv_host -+shift -+host_cpu=$1 -+host_vendor=$2 -+shift; shift -+# Remember, the first character of IFS is used to create $*, -+# except with old shells: -+host_os=$* -+IFS=$ac_save_IFS -+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - --echo "$as_me:$LINENO: checking target system type" >&5 --echo $ECHO_N "checking target system type... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking target system type" >&5 -+echo $ECHO_N "checking target system type... $ECHO_C" >&6; } - if test "${ac_cv_target+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- ac_cv_target_alias=$target_alias --test "x$ac_cv_target_alias" = "x" && -- ac_cv_target_alias=$ac_cv_host_alias --ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || -- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5 --echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} -+ if test "x$target_alias" = x; then -+ ac_cv_target=$ac_cv_host -+else -+ ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || -+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 -+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} - { (exit 1); exit 1; }; } -+fi - - fi --echo "$as_me:$LINENO: result: $ac_cv_target" >&5 --echo "${ECHO_T}$ac_cv_target" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5 -+echo "${ECHO_T}$ac_cv_target" >&6; } -+case $ac_cv_target in -+*-*-*) ;; -+*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 -+echo "$as_me: error: invalid value of canonical target" >&2;} -+ { (exit 1); exit 1; }; };; -+esac - target=$ac_cv_target --target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` --target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` --target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -+ac_save_IFS=$IFS; IFS='-' -+set x $ac_cv_target -+shift -+target_cpu=$1 -+target_vendor=$2 -+shift; shift -+# Remember, the first character of IFS is used to create $*, -+# except with old shells: -+target_os=$* -+IFS=$ac_save_IFS -+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - - - # The aliases save the names the user supplied, while $host etc. -@@ -1434,8 +1965,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. - set dummy ${ac_tool_prefix}gcc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -1448,32 +1979,34 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - CC=$ac_cv_prog_CC - if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 -+ { echo "$as_me:$LINENO: result: $CC" >&5 -+echo "${ECHO_T}$CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ if (index) ++ *index = entry; ++ if (ref) ++ pool->literals[entry].refcount++; + - fi - if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. - set dummy gcc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -1486,36 +2019,51 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - ac_ct_CC=$ac_cv_prog_ac_ct_CC - if test -n "$ac_ct_CC"; then -- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 --echo "${ECHO_T}$ac_ct_CC" >&6 -+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -+echo "${ECHO_T}$ac_ct_CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - -- CC=$ac_ct_CC -+ if test "x$ac_ct_CC" = x; then -+ CC="" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&5 -+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&2;} -+ac_tool_warned=yes ;; -+esac -+ CC=$ac_ct_CC -+ fi - else - CC="$ac_cv_prog_CC" - fi - - if test -z "$CC"; then -- if test -n "$ac_tool_prefix"; then -- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -+ if test -n "$ac_tool_prefix"; then -+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. - set dummy ${ac_tool_prefix}cc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -1528,74 +2076,34 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - CC=$ac_cv_prog_CC - if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- --fi --if test -z "$ac_cv_prog_CC"; then -- ac_ct_CC=$CC -- # Extract the first word of "cc", so it can be a program name with args. --set dummy cc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$ac_ct_CC"; then -- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_ac_ct_CC="cc" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- --fi --fi --ac_ct_CC=$ac_cv_prog_ac_ct_CC --if test -n "$ac_ct_CC"; then -- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 --echo "${ECHO_T}$ac_ct_CC" >&6 -+ { echo "$as_me:$LINENO: result: $CC" >&5 -+echo "${ECHO_T}$CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - -- CC=$ac_ct_CC --else -- CC="$ac_cv_prog_CC" --fi - -+ fi - fi - if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. - set dummy cc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -1609,7 +2117,7 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue -@@ -1620,6 +2128,7 @@ do - fi - done - done -+IFS=$as_save_IFS - - if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. -@@ -1637,22 +2146,23 @@ fi - fi - CC=$ac_cv_prog_CC - if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 -+ { echo "$as_me:$LINENO: result: $CC" >&5 -+echo "${ECHO_T}$CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ return pool; ++} ++ ++struct avr32_operand ++{ ++ int id; ++ int is_signed; ++ int is_pcrel; ++ int align_order; ++ int (*match)(char *str); ++ void (*parse)(const struct avr32_operand *op, char *str, int opindex); ++}; ++ ++static int ++match_anything(char *str ATTRIBUTE_UNUSED) ++{ ++ return 1; ++} ++ ++static int ++match_intreg(char *str) ++{ ++ int regid, ret = 1; ++ ++ regid = avr32_parse_intreg(str); ++ if (regid < 0) ++ ret = 0; ++ ++ pr_debug("match_intreg: `%s': %d\n", str, ret); ++ ++ return ret; ++} ++ ++static int ++match_intreg_predec(char *str) ++{ ++ int regid; ++ ++ if (str[0] != '-' || str[1] != '-') ++ return 0; ++ ++ regid = avr32_parse_intreg(str + 2); ++ if (regid < 0) ++ return 0; ++ ++ return 1; ++} ++ ++static int ++match_intreg_postinc(char *str) ++{ ++ int regid, ret = 1; ++ char *p, c; ++ ++ for (p = str; *p; p++) ++ if (*p == '+') ++ break; ++ ++ if (p[0] != '+' || p[1] != '+') ++ return 0; ++ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ if (regid < 0) ++ ret = 0; ++ ++ *p = c; ++ return ret; ++} ++ ++static int ++match_intreg_lsl(char *str) ++{ ++ int regid, ret = 1; ++ char *p, c; ++ ++ for (p = str; *p; p++) ++ if (*p == '<') ++ break; ++ ++ if (p[0] && p[1] != '<') ++ return 0; ++ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ if (regid < 0) ++ ret = 0; ++ ++ *p = c; ++ return ret; ++} ++ ++static int ++match_intreg_lsr(char *str) ++{ ++ int regid, ret = 1; ++ char *p, c; ++ ++ for (p = str; *p; p++) ++ if (*p == '>') ++ break; + - fi - if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then -- for ac_prog in cl -+ for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. - set dummy $ac_tool_prefix$ac_prog; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -1665,36 +2175,38 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - CC=$ac_cv_prog_CC - if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 -+ { echo "$as_me:$LINENO: result: $CC" >&5 -+echo "${ECHO_T}$CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ if (p[0] && p[1] != '>') ++ return 0; + - test -n "$CC" && break - done - fi - if test -z "$CC"; then - ac_ct_CC=$CC -- for ac_prog in cl -+ for ac_prog in cl.exe - do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -1707,29 +2219,45 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - ac_ct_CC=$ac_cv_prog_ac_ct_CC - if test -n "$ac_ct_CC"; then -- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 --echo "${ECHO_T}$ac_ct_CC" >&6 -+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -+echo "${ECHO_T}$ac_ct_CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ c = *p, *p = 0; + - test -n "$ac_ct_CC" && break - done - -- CC=$ac_ct_CC -+ if test "x$ac_ct_CC" = x; then -+ CC="" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&5 -+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&2;} -+ac_tool_warned=yes ;; -+esac -+ CC=$ac_ct_CC -+ fi - fi - - fi -@@ -1742,21 +2270,35 @@ See \`config.log' for more details." >&2 - { (exit 1); exit 1; }; } - - # Provide some information about the compiler. --echo "$as_me:$LINENO:" \ -- "checking for C compiler version" >&5 -+echo "$as_me:$LINENO: checking for C compiler version" >&5 - ac_compiler=`set X $ac_compile; echo $2` --{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 -- (eval $ac_compiler --version &5) 2>&5 -+{ (ac_try="$ac_compiler --version >&5" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } --{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 -- (eval $ac_compiler -v &5) 2>&5 -+{ (ac_try="$ac_compiler -v >&5" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } --{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 -- (eval $ac_compiler -V &5) 2>&5 -+{ (ac_try="$ac_compiler -V >&5" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -@@ -1781,47 +2323,77 @@ ac_clean_files="$ac_clean_files a.out a. - # Try to create an executable without -o first, disregard a.out. - # It will help us diagnose broken compilers, and finding out an intuition - # of exeext. --echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 --echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } - ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` --if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 -- (eval $ac_link_default) 2>&5 -+# -+# List of possible output files, starting from the most likely. -+# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) -+# only as a last resort. b.out is created by i960 compilers. -+ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' -+# -+# The IRIX 6 linker writes into existing files which may not be -+# executable, retaining their permissions. Remove them first so a -+# subsequent execution test works. -+ac_rmfiles= -+for ac_file in $ac_files -+do -+ case $ac_file in -+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; -+ * ) ac_rmfiles="$ac_rmfiles $ac_file";; -+ esac -+done -+rm -f $ac_rmfiles ++ regid = avr32_parse_intreg(str); ++ if (regid < 0) ++ ret = 0; + -+if { (ac_try="$ac_link_default" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link_default") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then -- # Find the output, starting from the most likely. This scheme is --# not robust to junk in `.', hence go to wildcards (a.*) only as a last --# resort. -- --# Be careful to initialize this variable, since it used to be cached. --# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. --ac_cv_exeext= --# b.out is created by i960 compilers. --for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out -+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -+# in a Makefile. We should not override ac_cv_exeext if it was cached, -+# so that the user can short-circuit this test for compilers unknown to -+# Autoconf. -+for ac_file in $ac_files '' - do - test -f "$ac_file" || continue - case $ac_file in -- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) -- ;; -- conftest.$ac_ext ) -- # This is the source file. -+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) -- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` -- # FIXME: I believe we export ac_cv_exeext for Libtool, -- # but it would be cool to find out if it's true. Does anybody -- # maintain Libtool? --akim. -- export ac_cv_exeext -+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; -+ then :; else -+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` -+ fi -+ # We set ac_cv_exeext here because the later test for it is not -+ # safe: cross compilers may not add the suffix if given an `-o' -+ # argument, so we may need to know it at that point already. -+ # Even if this section looks crufty: it has the advantage of -+ # actually working. - break;; - * ) - break;; - esac - done -+test "$ac_cv_exeext" = no && ac_cv_exeext= ++ *p = c; ++ return ret; ++} + - else -+ ac_file='' -+fi ++static int ++match_intreg_part(char *str) ++{ ++ int regid, ret = 1; ++ char *p, c; + -+{ echo "$as_me:$LINENO: result: $ac_file" >&5 -+echo "${ECHO_T}$ac_file" >&6; } -+if test -z "$ac_file"; then - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - -@@ -1833,19 +2405,21 @@ See \`config.log' for more details." >&2 - fi - - ac_exeext=$ac_cv_exeext --echo "$as_me:$LINENO: result: $ac_file" >&5 --echo "${ECHO_T}$ac_file" >&6 - --# Check the compiler produces executables we can run. If not, either -+# Check that the compiler produces executables we can run. If not, either - # the compiler is broken, or we cross compile. --echo "$as_me:$LINENO: checking whether the C compiler works" >&5 --echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } - # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 - # If not cross compiling, check that we can run a simple program. - if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then -@@ -1864,22 +2438,27 @@ See \`config.log' for more details." >&2 - fi - fi - fi --echo "$as_me:$LINENO: result: yes" >&5 --echo "${ECHO_T}yes" >&6 -+{ echo "$as_me:$LINENO: result: yes" >&5 -+echo "${ECHO_T}yes" >&6; } - - rm -f a.out a.exe conftest$ac_cv_exeext b.out - ac_clean_files=$ac_clean_files_save --# Check the compiler produces executables we can run. If not, either -+# Check that the compiler produces executables we can run. If not, either - # the compiler is broken, or we cross compile. --echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 --echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 --echo "$as_me:$LINENO: result: $cross_compiling" >&5 --echo "${ECHO_T}$cross_compiling" >&6 -- --echo "$as_me:$LINENO: checking for suffix of executables" >&5 --echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&5 -+{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } -+{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 -+echo "${ECHO_T}$cross_compiling" >&6; } ++ for (p = str; *p; p++) ++ if (*p == ':') ++ break; ++ ++ if (p[0] != ':' || !ISPRINT(p[1]) || p[2] != '\0') ++ return 0; ++ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ if (regid < 0) ++ ret = 0; ++ ++ *p = c; ++ ++ return ret; ++} ++ ++#define match_intreg_disp match_anything ++ ++static int ++match_intreg_index(char *str) ++{ ++ int regid, ret = 1; ++ char *p, *end, c; ++ ++ for (p = str; *p; p++) ++ if (*p == '[') ++ break; ++ ++ /* don't allow empty displacement here (it makes no sense) */ ++ if (p[0] != '[') ++ return 0; ++ ++ for (end = p + 1; *end; end++) ; ++ if (*(--end) != ']') ++ return 0; ++ ++ c = *end, *end = 0; ++ if (!match_intreg_lsl(p + 1)) ++ ret = 0; ++ *end = c; ++ ++ if (ret) ++ { ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ if (regid < 0) ++ ret = 0; ++ *p = c; ++ } ++ ++ return ret; ++} ++ ++static int ++match_intreg_xindex(char *str) ++{ ++ int regid, ret = 1; ++ char *p, *end, c; ++ ++ for (p = str; *p; p++) ++ if (*p == '[') ++ break; ++ ++ /* empty displacement makes no sense here either */ ++ if (p[0] != '[') ++ return 0; ++ ++ for (end = p + 1; *end; end++) ++ if (*end == '<') ++ break; ++ ++ if (!streq(end, "<<2]")) ++ return 0; ++ ++ c = *end, *end = 0; ++ if (!match_intreg_part(p + 1)) ++ ret = 0; ++ *end = c; ++ ++ if (ret) ++ { ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ if (regid < 0) ++ ret = 0; ++ *p = c; ++ } ++ ++ return ret; ++} ++ ++/* The PC_UDISP_W operator may show up as a label or as a pc[disp] ++ expression. So there's no point in attempting to match this... */ ++#define match_pc_disp match_anything ++ ++static int ++match_sp(char *str) ++{ ++ /* SP in any form will do */ ++ return avr32_parse_intreg(str) == AVR32_REG_SP; ++} ++ ++static int ++match_sp_disp(char *str) ++{ ++ int regid, ret = 1; ++ char *p, c; ++ ++ for (p = str; *p; p++) ++ if (*p == '[') ++ break; ++ ++ /* allow empty displacement, meaning zero */ ++ if (p[0] == '[') ++ { ++ char *end; ++ for (end = p + 1; *end; end++) ; ++ if (end[-1] != ']') ++ return 0; ++ } ++ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ if (regid != AVR32_REG_SP) ++ ret = 0; ++ ++ *p = c; ++ return ret; ++} ++ ++static int ++match_cpno(char *str) ++{ ++ if (strncasecmp(str, "cp", 2) != 0) ++ return 0; ++ return 1; ++} ++ ++static int ++match_cpreg(char *str) ++{ ++ if (strncasecmp(str, "cr", 2) != 0) ++ return 0; ++ return 1; ++} ++ ++/* We allow complex expressions, and register names may show up as ++ symbols. Just make sure immediate expressions are always matched ++ last. */ ++#define match_const match_anything ++#define match_jmplabel match_anything ++#define match_number match_anything ++ ++/* Mnemonics that take reglists never accept anything else */ ++#define match_reglist8 match_anything ++#define match_reglist9 match_anything ++#define match_reglist16 match_anything ++#define match_reglist_ldm match_anything ++#define match_reglist_cp8 match_anything ++#define match_reglist_cpd8 match_anything ++ ++/* Ditto for retval, jospinc and mcall */ ++#define match_retval match_anything ++#define match_jospinc match_anything ++#define match_mcall match_anything ++ ++/* COH is used to select between two different syntaxes */ ++static int ++match_coh(char *str) ++{ ++ return strcasecmp(str, "coh") == 0; ++} ++ ++static int ++match_fpreg(char *str) ++{ ++ unsigned long regid; ++ char *endptr; ++ ++ if ((str[0] != 'f' && str[0] != 'F') ++ || (str[1] != 'r' && str[1] != 'R')) ++ return 0; ++ ++ str += 2; ++ regid = strtoul(str, &endptr, 10); ++ if (!*str || *endptr) ++ return 0; ++ ++ return 1; ++} ++ ++static int ++match_picoreg(char *str) ++{ ++ int regid; + -+{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 -+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then -@@ -1890,9 +2469,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_l - for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in -- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; -+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` -- export ac_cv_exeext - break;; - * ) break;; - esac -@@ -1906,14 +2484,14 @@ See \`config.log' for more details." >&2 - fi - - rm -f conftest$ac_cv_exeext --echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 --echo "${ECHO_T}$ac_cv_exeext" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -+echo "${ECHO_T}$ac_cv_exeext" >&6; } - - rm -f conftest.$ac_ext - EXEEXT=$ac_cv_exeext - ac_exeext=$EXEEXT --echo "$as_me:$LINENO: checking for suffix of object files" >&5 --echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 -+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } - if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -1933,14 +2511,20 @@ main () - } - _ACEOF - rm -f conftest.o conftest.obj --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then -- for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do -+ for ac_file in conftest.o conftest.obj conftest.*; do -+ test -f "$ac_file" || continue; - case $ac_file in -- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; -+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -@@ -1958,12 +2542,12 @@ fi - - rm -f conftest.$ac_cv_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 --echo "${ECHO_T}$ac_cv_objext" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -+echo "${ECHO_T}$ac_cv_objext" >&6; } - OBJEXT=$ac_cv_objext - ac_objext=$OBJEXT --echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 --echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } - if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -1986,50 +2570,49 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_compiler_gnu=no -+ ac_compiler_gnu=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ regid = avr32_parse_picoreg(str); ++ if (regid < 0) ++ return 0; ++ return 1; ++} + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_c_compiler_gnu=$ac_compiler_gnu - - fi --echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 --echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } - GCC=`test $ac_compiler_gnu = yes && echo yes` - ac_test_CFLAGS=${CFLAGS+set} - ac_save_CFLAGS=$CFLAGS --CFLAGS="-g" --echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 --echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } - if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- cat >conftest.$ac_ext <<_ACEOF -+ ac_save_c_werror_flag=$ac_c_werror_flag -+ ac_c_werror_flag=yes -+ ac_cv_prog_cc_g=no -+ CFLAGS="-g" -+ cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -2045,38 +2628,118 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_prog_cc_g=yes -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 ++#define match_pico_reglist_w match_anything ++#define match_pico_reglist_d match_anything + -+ CFLAGS="" -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ ++static int ++match_pico_in(char *str) ++{ ++ unsigned long regid; ++ char *end; + -+int -+main () ++ if (strncasecmp(str, "in", 2) != 0) ++ return 0; ++ ++ str += 2; ++ regid = strtoul(str, &end, 10); ++ if (!*str || *end) ++ return 0; ++ ++ return 1; ++} ++ ++static int ++match_pico_out0(char *str) +{ ++ if (strcasecmp(str, "out0") != 0) ++ return 0; ++ return 1; ++} + -+ ; -+ return 0; ++static int ++match_pico_out1(char *str) ++{ ++ if (strcasecmp(str, "out1") != 0) ++ return 0; ++ return 1; +} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 + -+ ac_c_werror_flag=$ac_save_c_werror_flag -+ CFLAGS="-g" -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ ++static int ++match_pico_out2(char *str) ++{ ++ if (strcasecmp(str, "out2") != 0) ++ return 0; ++ return 1; ++} + -+int -+main () ++static int ++match_pico_out3(char *str) +{ ++ if (strcasecmp(str, "out3") != 0) ++ return 0; ++ return 1; ++} + -+ ; -+ return 0; ++static void parse_nothing(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str ATTRIBUTE_UNUSED, ++ int opindex ATTRIBUTE_UNUSED) ++{ ++ /* Do nothing (this is used for "match-only" operands like COH) */ +} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_prog_cc_g=no + -+fi ++static void ++parse_const(const struct avr32_operand *op, char *str, ++ int opindex ATTRIBUTE_UNUSED) ++{ ++ expressionS *exp = ¤t_insn.immediate; ++ expressionS *sym_exp; ++ int slot; ++ char *save; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi ++ pr_debug("parse_const: `%s' (signed: %d, pcrel: %d, align: %d)\n", ++ str, op->is_signed, op->is_pcrel, op->align_order); + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ save = input_line_pointer; ++ input_line_pointer = str; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ ac_c_werror_flag=$ac_save_c_werror_flag - fi --echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 --echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } - if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS - elif test $ac_cv_prog_cc_g = yes; then -@@ -2092,12 +2755,12 @@ else - CFLAGS= - fi - fi --echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 --echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 --if test "${ac_cv_prog_cc_stdc+set}" = set; then -+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 -+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } -+if test "${ac_cv_prog_cc_c89+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- ac_cv_prog_cc_stdc=no -+ ac_cv_prog_cc_c89=no - ac_save_CC=$CC - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ -@@ -2131,12 +2794,17 @@ static char *f (char * (*g) (char **, in - /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated -- as 'x'. The following induces an error, until -std1 is added to get -+ as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something -- that's true only with -std1. */ -+ that's true only with -std. */ - int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters -+ inside strings and character constants. */ -+#define FOO(x) 'x' -+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; ++ expression(exp); + - int test (int i, double x); - struct s1 {int (*f) (int a);}; - struct s2 {int (*f) (double a);}; -@@ -2151,335 +2819,144 @@ return f (e, argv, 0) != argv[0] || f - return 0; - } - _ACEOF --# Don't try gcc -ansi; that turns off useful extensions and --# breaks some systems' header files. --# AIX -qlanglvl=ansi --# Ultrix and OSF/1 -std1 --# HP-UX 10.20 and later -Ae --# HP-UX older versions -Aa -D_HPUX_SOURCE --# SVR4 -Xc -D__EXTENSIONS__ --for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" - do - CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_prog_cc_stdc=$ac_arg --break -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_prog_cc_c89=$ac_arg - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].align_order = op->align_order; ++ current_insn.pcrel = op->is_pcrel; ++ ++ switch (exp->X_op) ++ { ++ case O_illegal: ++ as_bad(_("illegal operand")); ++ break; ++ case O_absent: ++ as_bad(_("missing operand")); ++ break; ++ case O_constant: ++ pr_debug(" -> constant: %ld\n", (long)exp->X_add_number); ++ current_insn.field_value[slot].value = exp->X_add_number; ++ break; ++ case O_uminus: ++ pr_debug(" -> uminus\n"); ++ sym_exp = symbol_get_value_expression(exp->X_add_symbol); ++ switch (sym_exp->X_op) { ++ case O_subtract: ++ pr_debug(" -> subtract: switching operands\n"); ++ exp->X_op_symbol = sym_exp->X_add_symbol; ++ exp->X_add_symbol = sym_exp->X_op_symbol; ++ exp->X_op = O_subtract; ++ /* TODO: Remove the old X_add_symbol */ ++ break; ++ default: ++ as_bad(_("Expression too complex\n")); ++ break; ++ } ++ break; ++#if 0 ++ case O_subtract: ++ /* Any expression subtracting a symbol from the current section ++ can be made PC-relative by adding the right offset. */ ++ if (S_GET_SEGMENT(exp->X_op_symbol) == now_seg) ++ current_insn.pcrel = TRUE; ++ pr_debug(" -> subtract: pcrel? %s\n", ++ current_insn.pcrel ? "yes" : "no"); ++ /* fall through */ ++#endif ++ default: ++ pr_debug(" -> (%p <%d> %p + %d)\n", ++ exp->X_add_symbol, exp->X_op, exp->X_op_symbol, ++ exp->X_add_number); ++ current_insn.field_value[slot].value = 0; ++ break; ++ } ++ ++ input_line_pointer = save; ++} ++ ++static void ++parse_jmplabel(const struct avr32_operand *op, char *str, ++ int opindex ATTRIBUTE_UNUSED) ++{ ++ expressionS *exp = ¤t_insn.immediate; ++ int slot; ++ char *save; ++ ++ pr_debug("parse_jmplabel: `%s' (signed: %d, pcrel: %d, align: %d)\n", ++ str, op->is_signed, op->is_pcrel, op->align_order); ++ ++ save = input_line_pointer; ++ input_line_pointer = str; ++ ++ expression(exp); ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].align_order = op->align_order; ++ current_insn.pcrel = TRUE; ++ ++ switch (exp->X_op) ++ { ++ case O_illegal: ++ as_bad(_("illegal operand")); ++ break; ++ case O_absent: ++ as_bad(_("missing operand")); ++ break; ++ case O_constant: ++ pr_debug(" -> constant: %ld\n", (long)exp->X_add_number); ++ current_insn.field_value[slot].value = exp->X_add_number; ++ current_insn.pcrel = 0; ++ break; ++ default: ++ pr_debug(" -> (%p <%d> %p + %d)\n", ++ exp->X_add_symbol, exp->X_op, exp->X_op_symbol, ++ exp->X_add_number); ++ current_insn.field_value[slot].value = 0; ++ break; ++ } + - fi --rm -f conftest.err conftest.$ac_objext ++ input_line_pointer = save; ++} + -+rm -f core conftest.err conftest.$ac_objext -+ test "x$ac_cv_prog_cc_c89" != "xno" && break - done --rm -f conftest.$ac_ext conftest.$ac_objext -+rm -f conftest.$ac_ext - CC=$ac_save_CC - - fi -- --case "x$ac_cv_prog_cc_stdc" in -- x|xno) -- echo "$as_me:$LINENO: result: none needed" >&5 --echo "${ECHO_T}none needed" >&6 ;; -+# AC_CACHE_VAL -+case "x$ac_cv_prog_cc_c89" in -+ x) -+ { echo "$as_me:$LINENO: result: none needed" >&5 -+echo "${ECHO_T}none needed" >&6; } ;; -+ xno) -+ { echo "$as_me:$LINENO: result: unsupported" >&5 -+echo "${ECHO_T}unsupported" >&6; } ;; - *) -- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 --echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 -- CC="$CC $ac_cv_prog_cc_stdc" ;; -+ CC="$CC $ac_cv_prog_cc_c89" -+ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 -+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; - esac - --# Some people use a C++ compiler to compile C. Since we use `exit', --# in C++ we need to declare it. In case someone uses the same compiler --# for both compiling C and C++ we need to have the C++ compiler decide --# the declaration of exit, since it's the most demanding environment. ++static void ++parse_intreg(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ int regid, slot; + -+ac_ext=c -+ac_cpp='$CPP $CPPFLAGS' -+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -+ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ pr_debug("parse_intreg: `%s'\n", str); + ++ regid = avr32_parse_intreg(str); ++ assert(regid >= 0); + -+{ echo "$as_me:$LINENO: checking for library containing strerror" >&5 -+echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6; } -+if test "${ac_cv_search_strerror+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ ac_func_search_save_LIBS=$LIBS - cat >conftest.$ac_ext <<_ACEOF --#ifndef __cplusplus -- choke me --#endif --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- for ac_declaration in \ -- '' \ -- 'extern "C" void std::exit (int) throw (); using std::exit;' \ -- 'extern "C" void std::exit (int); using std::exit;' \ -- 'extern "C" void exit (int) throw ();' \ -- 'extern "C" void exit (int);' \ -- 'void exit (int);' --do -- cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --$ac_declaration --#include ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++ current_insn.field_value[slot].align_order = op->align_order; ++} + -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ -+#ifdef __cplusplus -+extern "C" -+#endif -+char strerror (); - int - main () - { --exit (42); -+return strerror (); - ; - return 0; - } - _ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+for ac_lib in '' cposix; do -+ if test -z "$ac_lib"; then -+ ac_res="none required" -+ else -+ ac_res=-l$ac_lib -+ LIBS="-l$ac_lib $ac_func_search_save_LIBS" -+ fi -+ rm -f conftest.$ac_objext conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- : -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then -+ ac_cv_search_strerror=$ac_res - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --continue --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --$ac_declaration --int --main () --{ --exit (42); -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- break --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 - - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --done --rm -f conftest* --if test -n "$ac_declaration"; then -- echo '#ifdef __cplusplus' >>confdefs.h -- echo $ac_declaration >>confdefs.h -- echo '#endif' >>confdefs.h --fi -- --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 - -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ -+ conftest$ac_exeext -+ if test "${ac_cv_search_strerror+set}" = set; then -+ break - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --ac_ext=c --ac_cpp='$CPP $CPPFLAGS' --ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' --ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' --ac_compiler_gnu=$ac_cv_c_compiler_gnu -- -- --echo "$as_me:$LINENO: checking for library containing strerror" >&5 --echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6 -+done - if test "${ac_cv_search_strerror+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- ac_func_search_save_LIBS=$LIBS --ac_cv_search_strerror=no --cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --/* Override any gcc2 internal prototype to avoid an error. */ --#ifdef __cplusplus --extern "C" --#endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ --char strerror (); --int --main () --{ --strerror (); -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_search_strerror="none required" --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --if test "$ac_cv_search_strerror" = no; then -- for ac_lib in cposix; do -- LIBS="-l$ac_lib $ac_func_search_save_LIBS" -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --/* Override any gcc2 internal prototype to avoid an error. */ --#ifdef __cplusplus --extern "C" --#endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ --char strerror (); --int --main () --{ --strerror (); -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_search_strerror="-l$ac_lib" --break -+ : - else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- done -+ ac_cv_search_strerror=no - fi -+rm conftest.$ac_ext - LIBS=$ac_func_search_save_LIBS - fi --echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 --echo "${ECHO_T}$ac_cv_search_strerror" >&6 --if test "$ac_cv_search_strerror" != no; then -- test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS" -+{ echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 -+echo "${ECHO_T}$ac_cv_search_strerror" >&6; } -+ac_res=$ac_cv_search_strerror -+if test "$ac_res" != no; then -+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - - fi - -@@ -2499,8 +2976,8 @@ am__api_version="1.9" - # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" - # OS/2's system install, which has a completely different semantic - # ./install, which can be erroneously created by make from ./install.sh. --echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 --echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } - if test -z "$INSTALL"; then - if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -@@ -2522,7 +2999,7 @@ case $as_dir/ in - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. -@@ -2541,21 +3018,22 @@ case $as_dir/ in - ;; - esac - done -+IFS=$as_save_IFS - - - fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else -- # As a last resort, use the slow shell script. We don't cache a -- # path for INSTALL within a source directory, because that will -+ # As a last resort, use the slow shell script. Don't cache a -+ # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is -- # removed, or if the path is relative. -+ # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi - fi --echo "$as_me:$LINENO: result: $INSTALL" >&5 --echo "${ECHO_T}$INSTALL" >&6 -+{ echo "$as_me:$LINENO: result: $INSTALL" >&5 -+echo "${ECHO_T}$INSTALL" >&6; } - - # Use test -z because SunOS4 sh mishandles braces in ${var-val}. - # It thinks the first close brace ends the variable substitution. -@@ -2565,8 +3043,8 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCR - - test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - --echo "$as_me:$LINENO: checking whether build environment is sane" >&5 --echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 -+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } - # Just in case - sleep 1 - echo timestamp > conftest.file -@@ -2608,20 +3086,20 @@ echo "$as_me: error: newly created file - Check your system clock" >&2;} - { (exit 1); exit 1; }; } - fi --echo "$as_me:$LINENO: result: yes" >&5 --echo "${ECHO_T}yes" >&6 -+{ echo "$as_me:$LINENO: result: yes" >&5 -+echo "${ECHO_T}yes" >&6; } - test "$program_prefix" != NONE && -- program_transform_name="s,^,$program_prefix,;$program_transform_name" -+ program_transform_name="s&^&$program_prefix&;$program_transform_name" - # Use a double $ so make ignores it. - test "$program_suffix" != NONE && -- program_transform_name="s,\$,$program_suffix,;$program_transform_name" -+ program_transform_name="s&\$&$program_suffix&;$program_transform_name" - # Double any \ or $. echo might interpret backslashes. - # By default was `s,x,x', remove it if useless. - cat <<\_ACEOF >conftest.sed - s/[\\$]/&&/g;s/;s,x,x,$// - _ACEOF - program_transform_name=`echo $program_transform_name | sed -f conftest.sed` --rm conftest.sed -+rm -f conftest.sed - - # expand $ac_aux_dir to an absolute path - am_aux_dir=`cd $ac_aux_dir && pwd` -@@ -2673,8 +3151,8 @@ for ac_prog in gawk mawk nawk awk - do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -2687,54 +3165,57 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - AWK=$ac_cv_prog_AWK - if test -n "$AWK"; then -- echo "$as_me:$LINENO: result: $AWK" >&5 --echo "${ECHO_T}$AWK" >&6 -+ { echo "$as_me:$LINENO: result: $AWK" >&5 -+echo "${ECHO_T}$AWK" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++static void ++parse_intreg_predec(const struct avr32_operand *op, char *str, int opindex) ++{ ++ parse_intreg(op, str + 2, opindex); ++} ++ ++static void ++parse_intreg_postinc(const struct avr32_operand *op, char *str, int opindex) ++{ ++ char *p, c; + - test -n "$AWK" && break - done - --echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 --echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 --set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` --if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } -+set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.make <<\_ACEOF -+SHELL = /bin/sh - all: -- @echo 'ac_maketemp="$(MAKE)"' -+ @echo '@@@%%%=$(MAKE)=@@@%%%' - _ACEOF - # GNU make sometimes prints "make[1]: Entering...", which would confuse us. --eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` --if test -n "$ac_maketemp"; then -- eval ac_cv_prog_make_${ac_make}_set=yes --else -- eval ac_cv_prog_make_${ac_make}_set=no --fi -+case `${MAKE-make} -f conftest.make 2>/dev/null` in -+ *@@@%%%=?*=@@@%%%*) -+ eval ac_cv_prog_make_${ac_make}_set=yes;; -+ *) -+ eval ac_cv_prog_make_${ac_make}_set=no;; -+esac - rm -f conftest.make - fi --if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then -- echo "$as_me:$LINENO: result: yes" >&5 --echo "${ECHO_T}yes" >&6 -+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then -+ { echo "$as_me:$LINENO: result: yes" >&5 -+echo "${ECHO_T}yes" >&6; } - SET_MAKE= - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" - fi - -@@ -2749,7 +3230,7 @@ rmdir .tst 2>/dev/null - - DEPDIR="${am__leading_dot}deps" - -- ac_config_commands="$ac_config_commands depfiles" -+ac_config_commands="$ac_config_commands depfiles" - - - am_make=${MAKE-make} -@@ -2759,8 +3240,8 @@ am__doit: - .PHONY: am__doit - END - # If we don't find an include directive, just comment out the code. --echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 --echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 -+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } - am__include="#" - am__quote= - _am_result=none -@@ -2787,15 +3268,15 @@ if test "$am__include" = "#"; then - fi - - --echo "$as_me:$LINENO: result: $_am_result" >&5 --echo "${ECHO_T}$_am_result" >&6 -+{ echo "$as_me:$LINENO: result: $_am_result" >&5 -+echo "${ECHO_T}$_am_result" >&6; } - rm -f confinc confmf - --# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. -+# Check whether --enable-dependency-tracking was given. - if test "${enable_dependency_tracking+set}" = set; then -- enableval="$enable_dependency_tracking" -+ enableval=$enable_dependency_tracking; -+fi - --fi; - if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -@@ -2870,8 +3351,8 @@ if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. - set dummy ${ac_tool_prefix}strip; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -2884,32 +3365,34 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - STRIP=$ac_cv_prog_STRIP - if test -n "$STRIP"; then -- echo "$as_me:$LINENO: result: $STRIP" >&5 --echo "${ECHO_T}$STRIP" >&6 -+ { echo "$as_me:$LINENO: result: $STRIP" >&5 -+echo "${ECHO_T}$STRIP" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ pr_debug("parse_intreg_postinc: `%s'\n", str); + - fi - if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. - set dummy strip; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -2922,27 +3405,41 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - -- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" - fi - fi - ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP - if test -n "$ac_ct_STRIP"; then -- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 --echo "${ECHO_T}$ac_ct_STRIP" >&6 -+ { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -+echo "${ECHO_T}$ac_ct_STRIP" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - -- STRIP=$ac_ct_STRIP -+ if test "x$ac_ct_STRIP" = x; then -+ STRIP=":" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&5 -+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&2;} -+ac_tool_warned=yes ;; -+esac -+ STRIP=$ac_ct_STRIP -+ fi - else - STRIP="$ac_cv_prog_STRIP" - fi -@@ -2963,8 +3460,8 @@ am__tar='${AMTAR} chof - "$$tardir"'; am - - depcc="$CC" am_compiler_list= - --echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 --echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } - if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3053,8 +3550,8 @@ else - fi - - fi --echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 --echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 -+{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } - CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - -@@ -3072,10 +3569,9 @@ fi - - - --# Check whether --enable-shared or --disable-shared was given. -+# Check whether --enable-shared was given. - if test "${enable_shared+set}" = set; then -- enableval="$enable_shared" -- p=${PACKAGE-default} -+ enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; -@@ -3093,11 +3589,11 @@ no) enable_shared=no ;; - esac - else - enable_shared=yes --fi; --# Check whether --enable-static or --disable-static was given. -+fi ++ for (p = str; *p != '+'; p++) ; + -+# Check whether --enable-static was given. - if test "${enable_static+set}" = set; then -- enableval="$enable_static" -- p=${PACKAGE-default} -+ enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; -@@ -3115,11 +3611,11 @@ no) enable_static=no ;; - esac - else - enable_static=yes --fi; --# Check whether --enable-fast-install or --disable-fast-install was given. -+fi ++ c = *p, *p = 0; ++ parse_intreg(op, str, opindex); ++ *p = c; ++} + -+# Check whether --enable-fast-install was given. - if test "${enable_fast_install+set}" = set; then -- enableval="$enable_fast_install" -- p=${PACKAGE-default} -+ enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; -@@ -3137,20 +3633,21 @@ no) enable_fast_install=no ;; - esac - else - enable_fast_install=yes --fi; -+fi ++static void ++parse_intreg_shift(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ int regid, slot, shift = 0; ++ char *p, c; ++ char shiftop; + - --# Check whether --with-gnu-ld or --without-gnu-ld was given. -+# Check whether --with-gnu-ld was given. - if test "${with_gnu_ld+set}" = set; then -- withval="$with_gnu_ld" -- test "$withval" = no || with_gnu_ld=yes -+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes - else - with_gnu_ld=no --fi; -+fi ++ pr_debug("parse Ry<&5 --echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for ld used by GCC" >&5 -+echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw -@@ -3179,11 +3676,11 @@ echo $ECHO_N "checking for ld used by GC - ;; - esac - elif test "$with_gnu_ld" = yes; then -- echo "$as_me:$LINENO: checking for GNU ld" >&5 --echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for GNU ld" >&5 -+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } - else -- echo "$as_me:$LINENO: checking for non-GNU ld" >&5 --echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } - fi - if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -@@ -3212,17 +3709,17 @@ fi - - LD="$lt_cv_path_LD" - if test -n "$LD"; then -- echo "$as_me:$LINENO: result: $LD" >&5 --echo "${ECHO_T}$LD" >&6 -+ { echo "$as_me:$LINENO: result: $LD" >&5 -+echo "${ECHO_T}$LD" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 - echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } --echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 --echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } - if test "${lt_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3233,25 +3730,25 @@ else - lt_cv_prog_gnu_ld=no - fi - fi --echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 --echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 -+{ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 -+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } - with_gnu_ld=$lt_cv_prog_gnu_ld - - --echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 --echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 -+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } - if test "${lt_cv_ld_reload_flag+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - lt_cv_ld_reload_flag='-r' - fi --echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 --echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 -+{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 -+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } - reload_flag=$lt_cv_ld_reload_flag - test -n "$reload_flag" && reload_flag=" $reload_flag" - --echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 --echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 -+echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } - if test "${lt_cv_path_NM+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3286,22 +3783,22 @@ fi - fi - - NM="$lt_cv_path_NM" --echo "$as_me:$LINENO: result: $NM" >&5 --echo "${ECHO_T}$NM" >&6 -+{ echo "$as_me:$LINENO: result: $NM" >&5 -+echo "${ECHO_T}$NM" >&6; } - --echo "$as_me:$LINENO: checking whether ln -s works" >&5 --echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 -+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } - LN_S=$as_ln_s - if test "$LN_S" = "ln -s"; then -- echo "$as_me:$LINENO: result: yes" >&5 --echo "${ECHO_T}yes" >&6 -+ { echo "$as_me:$LINENO: result: yes" >&5 -+echo "${ECHO_T}yes" >&6; } - else -- echo "$as_me:$LINENO: result: no, using $LN_S" >&5 --echo "${ECHO_T}no, using $LN_S" >&6 -+ { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 -+echo "${ECHO_T}no, using $LN_S" >&6; } - fi - --echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5 --echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5 -+echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6; } - if test "${lt_cv_deplibs_check_method+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3463,8 +3960,8 @@ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - esac - - fi --echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 --echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 -+{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 -+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } - file_magic_cmd=$lt_cv_file_magic_cmd - deplibs_check_method=$lt_cv_deplibs_check_method - -@@ -3474,8 +3971,8 @@ deplibs_check_method=$lt_cv_deplibs_chec - # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! - - # find the maximum length of command line arguments --echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 --echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 -+echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } - if test "${lt_cv_sys_max_cmd_len+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3526,11 +4023,11 @@ else - fi - - if test -n "$lt_cv_sys_max_cmd_len" ; then -- echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 --echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 -+ { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 -+echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } - else -- echo "$as_me:$LINENO: result: none" >&5 --echo "${ECHO_T}none" >&6 -+ { echo "$as_me:$LINENO: result: none" >&5 -+echo "${ECHO_T}none" >&6; } - fi - - -@@ -3538,8 +4035,8 @@ fi - case $deplibs_check_method in - file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then -- echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 --echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 -+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } - if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3593,17 +4090,17 @@ fi - - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if test -n "$MAGIC_CMD"; then -- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 --echo "${ECHO_T}$MAGIC_CMD" >&6 -+ { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -+echo "${ECHO_T}$MAGIC_CMD" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - - if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then -- echo "$as_me:$LINENO: checking for file" >&5 --echo $ECHO_N "checking for file... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for file" >&5 -+echo $ECHO_N "checking for file... $ECHO_C" >&6; } - if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3657,11 +4154,11 @@ fi - - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if test -n "$MAGIC_CMD"; then -- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 --echo "${ECHO_T}$MAGIC_CMD" >&6 -+ { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -+echo "${ECHO_T}$MAGIC_CMD" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - - else -@@ -3676,8 +4173,8 @@ esac - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. - set dummy ${ac_tool_prefix}ranlib; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3690,32 +4187,34 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - RANLIB=$ac_cv_prog_RANLIB - if test -n "$RANLIB"; then -- echo "$as_me:$LINENO: result: $RANLIB" >&5 --echo "${ECHO_T}$RANLIB" >&6 -+ { echo "$as_me:$LINENO: result: $RANLIB" >&5 -+echo "${ECHO_T}$RANLIB" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ for (p = str; *p; p++) ++ if (*p == '<' || *p == '>') ++ break; + - fi - if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. - set dummy ranlib; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3728,27 +4227,41 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - -- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" - fi - fi - ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB - if test -n "$ac_ct_RANLIB"; then -- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 --echo "${ECHO_T}$ac_ct_RANLIB" >&6 -+ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -+echo "${ECHO_T}$ac_ct_RANLIB" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - -- RANLIB=$ac_ct_RANLIB -+ if test "x$ac_ct_RANLIB" = x; then -+ RANLIB=":" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&5 -+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&2;} -+ac_tool_warned=yes ;; -+esac -+ RANLIB=$ac_ct_RANLIB -+ fi - else - RANLIB="$ac_cv_prog_RANLIB" - fi -@@ -3756,8 +4269,8 @@ fi - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. - set dummy ${ac_tool_prefix}strip; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3770,32 +4283,34 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi - STRIP=$ac_cv_prog_STRIP - if test -n "$STRIP"; then -- echo "$as_me:$LINENO: result: $STRIP" >&5 --echo "${ECHO_T}$STRIP" >&6 -+ { echo "$as_me:$LINENO: result: $STRIP" >&5 -+echo "${ECHO_T}$STRIP" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ shiftop = *p; + - fi - if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. - set dummy strip; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -3808,27 +4323,41 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - -- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" - fi - fi - ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP - if test -n "$ac_ct_STRIP"; then -- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 --echo "${ECHO_T}$ac_ct_STRIP" >&6 -+ { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -+echo "${ECHO_T}$ac_ct_STRIP" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - -- STRIP=$ac_ct_STRIP -+ if test "x$ac_ct_STRIP" = x; then -+ STRIP=":" ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ assert(regid >= 0); ++ *p = c; ++ ++ if (c) ++ { ++ if (p[0] != shiftop || p[1] != shiftop) ++ as_bad(_("expected shift operator in `%s'"), p); ++ else ++ { ++ expressionS exp; ++ char *saved; ++ ++ saved = input_line_pointer; ++ input_line_pointer = p + 2; ++ expression(&exp); ++ input_line_pointer = saved; ++ ++ if (exp.X_op != O_constant) ++ as_bad(_("shift amount must be a numeric constant")); ++ else ++ shift = exp.X_add_number; ++ } ++ } ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = shift; ++} ++ ++/* The match() function selected the right opcode, so it doesn't ++ matter which way we shift any more. */ ++#define parse_intreg_lsl parse_intreg_shift ++#define parse_intreg_lsr parse_intreg_shift ++ ++static void ++parse_intreg_part(const struct avr32_operand *op, char *str, ++ int opindex ATTRIBUTE_UNUSED) ++{ ++ static const char bparts[] = { 'b', 'l', 'u', 't' }; ++ static const char hparts[] = { 'b', 't' }; ++ unsigned int slot, sel; ++ int regid; ++ char *p, c; ++ ++ pr_debug("parse reg:part `%s'\n", str); ++ ++ for (p = str; *p; p++) ++ if (*p == ':') ++ break; ++ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ assert(regid >= 0); ++ *p = c; ++ ++ assert(c == ':'); ++ ++ if (op->align_order) ++ { ++ for (sel = 0; sel < sizeof(hparts); sel++) ++ if (TOLOWER(p[1]) == hparts[sel]) ++ break; ++ ++ if (sel >= sizeof(hparts)) ++ { ++ as_bad(_("invalid halfword selector `%c' (must be either b or t)"), ++ p[1]); ++ sel = 0; ++ } ++ } + else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&5 -+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&2;} -+ac_tool_warned=yes ;; -+esac -+ STRIP=$ac_ct_STRIP -+ fi - else - STRIP="$ac_cv_prog_STRIP" - fi -@@ -3843,22 +4372,22 @@ test "$GCC" = yes && libtool_flags="$lib - test "$lt_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" - - --# Check whether --enable-libtool-lock or --disable-libtool-lock was given. -+# Check whether --enable-libtool-lock was given. - if test "${enable_libtool_lock+set}" = set; then -- enableval="$enable_libtool_lock" -+ enableval=$enable_libtool_lock; -+fi - --fi; - test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" - test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" - - --# Check whether --with-pic or --without-pic was given. -+# Check whether --with-pic was given. - if test "${with_pic+set}" = set; then -- withval="$with_pic" -- pic_mode="$withval" -+ withval=$with_pic; pic_mode="$withval" - else - pic_mode=default --fi; -+fi ++ { ++ for (sel = 0; sel < sizeof(bparts); sel++) ++ if (TOLOWER(p[1]) == bparts[sel]) ++ break; + - test x"$pic_mode" = xyes && libtool_flags="$libtool_flags --prefer-pic" - test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic" - -@@ -3867,7 +4396,7 @@ test x"$pic_mode" = xno && libtool_flags - case $host in - *-*-irix6*) - # Find out which ABI we are using. -- echo '#line 3870 "configure"' > conftest.$ac_ext -+ echo '#line 4399 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? -@@ -3972,13 +4501,12 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*li - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" -- echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 --echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 -+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } - if test "${lt_cv_cc_needs_belf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - -- - ac_ext=c - ac_cpp='$CPP $CPPFLAGS' - ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -@@ -4001,35 +4529,32 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - lt_cv_cc_needs_belf=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --lt_cv_cc_needs_belf=no -+ lt_cv_cc_needs_belf=no - fi --rm -f conftest.err conftest.$ac_objext \ ++ if (sel >= sizeof(bparts)) ++ { ++ as_bad(_("invalid byte selector `%c' (must be one of b,l,u,t)"), ++ p[1]); ++ sel = 0; ++ } ++ } + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c - ac_cpp='$CPP $CPPFLAGS' -@@ -4038,8 +4563,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLA - ac_compiler_gnu=$ac_cv_c_compiler_gnu - - fi --echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 --echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 -+{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 -+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" -@@ -4069,39 +4594,58 @@ _ACEOF - - # The following way of writing the cache mishandles newlines in values, - # but we know of no workaround that is simple, portable, and efficient. --# So, don't put newlines in cache variables' values. -+# So, we kill variables containing newlines. - # Ultrix sh set writes to stderr and can't be redirected directly, - # and sets the high bit in the cache file unless we assign to the vars. --{ -+( -+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do -+ eval ac_val=\$$ac_var -+ case $ac_val in #( -+ *${as_nl}*) -+ case $ac_var in #( -+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; -+ esac -+ case $ac_var in #( -+ _ | IFS | as_nl) ;; #( -+ *) $as_unset $ac_var ;; -+ esac ;; -+ esac -+ done ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = sel; ++} + - (set) 2>&1 | -- case `(ac_space=' '; set | grep ac_space) 2>&1` in -- *ac_space=\ *) -+ case $as_nl`(ac_space=' '; set) 2>&1` in #( -+ *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" -- ;; -+ ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. -- sed -n \ -- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" -+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; -- esac; --} | -+ esac | -+ sort -+) | - sed ' -+ /^ac_cv_env_/b end - t clear -- : clear -+ :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end -- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ -- : end' >>confcache --if diff $cache_file confcache >/dev/null 2>&1; then :; else -- if test -w $cache_file; then -- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" -+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ -+ :end' >>confcache -+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else -+ if test -w "$cache_file"; then -+ test "x$cache_file" != "x/dev/null" && -+ { echo "$as_me:$LINENO: updating cache $cache_file" >&5 -+echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else -- echo "not updating unwritable cache $cache_file" -+ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -+echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi - fi - rm -f confcache -@@ -4127,8 +4671,8 @@ if test -r "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 - echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in -- [\\/]* | ?:[\\/]* ) . $cache_file;; -- *) . ./$cache_file;; -+ [\\/]* | ?:[\\/]* ) . "$cache_file";; -+ *) . "./$cache_file";; - esac - fi - else -@@ -4154,10 +4698,9 @@ exec 5>>./config.log - - - --# Check whether --enable-targets or --disable-targets was given. -+# Check whether --enable-targets was given. - if test "${enable_targets+set}" = set; then -- enableval="$enable_targets" -- case "${enableval}" in -+ enableval=$enable_targets; case "${enableval}" in - yes | "") { { echo "$as_me:$LINENO: error: enable-targets option must specify target names or 'all'" >&5 - echo "$as_me: error: enable-targets option must specify target names or 'all'" >&2;} - { (exit 1); exit 1; }; } -@@ -4165,33 +4708,34 @@ echo "$as_me: error: enable-targets opti - no) enable_targets= ;; - *) enable_targets=$enableval ;; - esac --fi; # Check whether --enable-commonbfdlib or --disable-commonbfdlib was given. -+fi -+# Check whether --enable-commonbfdlib was given. - if test "${enable_commonbfdlib+set}" = set; then -- enableval="$enable_commonbfdlib" -- case "${enableval}" in -+ enableval=$enable_commonbfdlib; case "${enableval}" in - yes) commonbfdlib=true ;; - no) commonbfdlib=false ;; - *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for BFD commonbfdlib option" >&5 - echo "$as_me: error: bad value ${enableval} for BFD commonbfdlib option" >&2;} - { (exit 1); exit 1; }; } ;; - esac --fi; -+fi ++/* This is the parser for "Rp[displacement]" expressions. In addition ++ to the "official" syntax, we accept a label as a replacement for ++ the register expression. This syntax implies Rp=PC and the ++ displacement is the pc-relative distance to the label. */ ++static void ++parse_intreg_disp(const struct avr32_operand *op, char *str, int opindex) ++{ ++ expressionS *exp = ¤t_insn.immediate; ++ int slot, regid; ++ char *save, *p, c; ++ ++ pr_debug("parse_intreg_disp: `%s' (signed: %d, pcrel: %d, align: %d)\n", ++ str, op->is_signed, op->is_pcrel, op->align_order); ++ ++ for (p = str; *p; p++) ++ if (*p == '[') ++ break; ++ ++ slot = current_insn.next_slot++; ++ ++ /* First, check if we have a valid register either before '[' or as ++ the sole expression. If so, we use the Rp[disp] syntax. */ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ *p = c; ++ ++ if (regid >= 0) ++ { ++ current_insn.field_value[slot].value = regid; ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].align_order = op->align_order; ++ ++ if (c == '[') ++ { ++ save = input_line_pointer; ++ input_line_pointer = p + 1; ++ ++ expression(exp); ++ ++ if (*input_line_pointer != ']') ++ as_bad(_("junk after displacement expression")); ++ ++ input_line_pointer = save; + - using_cgen=no - - - GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes" - --# Check whether --enable-werror or --disable-werror was given. -+# Check whether --enable-werror was given. - if test "${enable_werror+set}" = set; then -- enableval="$enable_werror" -- case "${enableval}" in -+ enableval=$enable_werror; case "${enableval}" in - yes | y) ERROR_ON_WARNING="yes" ;; - no | n) ERROR_ON_WARNING="no" ;; - *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-werror" >&5 - echo "$as_me: error: bad value ${enableval} for --enable-werror" >&2;} - { (exit 1); exit 1; }; } ;; - esac --fi; -+fi ++ switch (exp->X_op) ++ { ++ case O_illegal: ++ as_bad(_("illegal displacement expression")); ++ break; ++ case O_absent: ++ as_bad(_("missing displacement expression")); ++ break; ++ case O_constant: ++ pr_debug(" -> constant: %ld\n", exp->X_add_number); ++ current_insn.field_value[slot].value = exp->X_add_number; ++ break; ++#if 0 ++ case O_subtract: ++ if (S_GET_SEGMENT(exp->X_op_symbol) == now_seg) ++ current_insn.pcrel = TRUE; ++ pr_debug(" -> subtract: pcrel? %s\n", ++ current_insn.pcrel ? "yes" : "no"); ++ /* fall through */ ++#endif ++ default: ++ pr_debug(" -> (%p <%d> %p + %d)\n", ++ exp->X_add_symbol, exp->X_op, exp->X_op_symbol, ++ exp->X_add_number); ++ current_insn.field_value[slot].value = 0; ++ } ++ } ++ else ++ { ++ exp->X_op = O_constant; ++ exp->X_add_number = 0; ++ current_insn.field_value[slot].value = 0; ++ } ++ } ++ else ++ { ++ /* Didn't find a valid register. Try parsing it as a label. */ ++ current_insn.field_value[slot].value = AVR32_REG_PC; ++ parse_jmplabel(op, str, opindex); ++ } ++} + - - # Enable -Werror by default when using gcc - if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then -@@ -4208,10 +4752,9 @@ if test "${GCC}" = yes ; then - WARN_CFLAGS="${GCC_WARN_CFLAGS}" - fi - --# Check whether --enable-build-warnings or --disable-build-warnings was given. -+# Check whether --enable-build-warnings was given. - if test "${enable_build_warnings+set}" = set; then -- enableval="$enable_build_warnings" -- case "${enableval}" in -+ enableval=$enable_build_warnings; case "${enableval}" in - yes) WARN_CFLAGS="${GCC_WARN_CFLAGS}";; - no) if test "${GCC}" = yes ; then - WARN_CFLAGS="-w" -@@ -4222,7 +4765,8 @@ if test "${enable_build_warnings+set}" = - WARN_CFLAGS="${t} ${GCC_WARN_CFLAGS}";; - *) WARN_CFLAGS=`echo "${enableval}" | sed -e "s/,/ /g"`;; - esac --fi; -+fi ++static void ++parse_intreg_index(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ int slot, regid; ++ char *p, *end, c; + - - if test x"$silent" != x"yes" && test x"$WARN_CFLAGS" != x""; then - echo "Setting warning flags = $WARN_CFLAGS" 6>&1 -@@ -4233,7 +4777,7 @@ fi - - - # Generate a header file -- ac_config_headers="$ac_config_headers config.h:config.in" -+ac_config_headers="$ac_config_headers config.h:config.in" - - - # If we are on a DOS filesystem, we must use gdb.ini rather than -@@ -4241,789 +4785,913 @@ fi - case "${host}" in - *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-windows*) - GDBINIT="gdb.ini" -- ac_config_files="$ac_config_files gdb.ini:gdbinit.in" -+ ac_config_files="$ac_config_files gdb.ini:gdbinit.in" - - ;; - *) - GDBINIT=".gdbinit" -- ac_config_files="$ac_config_files .gdbinit:gdbinit.in" -+ ac_config_files="$ac_config_files .gdbinit:gdbinit.in" - - ;; - esac - - - #We need this for the host. BOUT header is in host order. --echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 --echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6 --if test "${ac_cv_c_bigendian+set}" = set; then -+ac_ext=c -+ac_cpp='$CPP $CPPFLAGS' -+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -+ac_compiler_gnu=$ac_cv_c_compiler_gnu -+{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } -+# On Suns, sometimes $CPP names a directory. -+if test -n "$CPP" && test -d "$CPP"; then -+ CPP= -+fi -+if test -z "$CPP"; then -+ if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- # See if sys/param.h defines the BYTE_ORDER macro. --cat >conftest.$ac_ext <<_ACEOF -+ # Double quotes because CPP needs to be expanded -+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" -+ do -+ ac_preproc_ok=false -+for ac_c_preproc_warn_flag in '' yes -+do -+ # Use a header file that comes with gcc, so configuring glibc -+ # with a fresh cross-compiler works. -+ # Prefer to if __STDC__ is defined, since -+ # exists even on freestanding compilers. -+ # On the NeXT, cc -E runs the code through the compiler's parser, -+ # not just through cpp. "Syntax error" is here to catch this case. -+ cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#include --#include -- --int --main () --{ --#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN -- bogus endian macros -+#ifdef __STDC__ -+# include -+#else -+# include - #endif -- -- ; -- return 0; --} -+ Syntax error - _ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- # It does; now see whether it defined to BIG_ENDIAN or not. --cat >conftest.$ac_ext <<_ACEOF -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then -+ : -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 ++ for (p = str; *p; p++) ++ if (*p == '[') ++ break; + -+ # Broken: fails on valid input. -+continue -+fi ++ assert(*p); + -+rm -f conftest.err conftest.$ac_ext ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ assert(regid >= 0); ++ *p = c; + -+ # OK, works on sane cases. Now check whether nonexistent headers -+ # can be detected and how. -+ cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#include --#include -- --int --main () --{ --#if BYTE_ORDER != BIG_ENDIAN -- not big endian --#endif -- -- ; -- return 0; --} -+#include - _ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_c_bigendian=yes -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then -+ # Broken: success on invalid input. -+continue - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_c_bigendian=no -+ # Passes both tests. -+ac_preproc_ok=: -+break - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 - --# It does not; compile a test program. --if test "$cross_compiling" = yes; then -- # try to guess the endianness by grepping values into an object file -- ac_cv_c_bigendian=unknown -+rm -f conftest.err conftest.$ac_ext ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; + -+done -+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -+rm -f conftest.err conftest.$ac_ext -+if $ac_preproc_ok; then -+ break -+fi ++ p++; ++ for (end = p; *end; end++) ++ if (*end == ']' || *end == '<') ++ break; + -+ done -+ ac_cv_prog_CPP=$CPP ++ assert(*end); + -+fi -+ CPP=$ac_cv_prog_CPP -+else -+ ac_cv_prog_CPP=$CPP -+fi -+{ echo "$as_me:$LINENO: result: $CPP" >&5 -+echo "${ECHO_T}$CPP" >&6; } -+ac_preproc_ok=false -+for ac_c_preproc_warn_flag in '' yes -+do -+ # Use a header file that comes with gcc, so configuring glibc -+ # with a fresh cross-compiler works. -+ # Prefer to if __STDC__ is defined, since -+ # exists even on freestanding compilers. -+ # On the NeXT, cc -E runs the code through the compiler's parser, -+ # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; --short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; --void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } --short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; --short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; --void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } --int --main () --{ -- _ascii (); _ebcdic (); -- ; -- return 0; --} -+#ifdef __STDC__ -+# include -+#else -+# include -+#endif -+ Syntax error - _ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then -- ac_cv_c_bigendian=yes --fi --if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then -- if test "$ac_cv_c_bigendian" = unknown; then -- ac_cv_c_bigendian=no -- else -- # finding both strings is unlikely to happen, but who knows? -- ac_cv_c_bigendian=unknown -- fi --fi -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then -+ : - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - -+ # Broken: fails on valid input. -+continue - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --else ++ c = *end, *end = 0; ++ regid = avr32_parse_intreg(p); ++ assert(regid >= 0); ++ *end = c; + -+rm -f conftest.err conftest.$ac_ext ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; + -+ # OK, works on sane cases. Now check whether nonexistent headers -+ # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --int --main () --{ -- /* Are we little or big endian? From Harbison&Steele. */ -- union -- { -- long l; -- char c[sizeof (long)]; -- } u; -- u.l = 1; -- exit (u.c[sizeof (long) - 1] == 1); --} -+#include - _ACEOF --rm -f conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_c_bigendian=no -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then -+ # Broken: success on invalid input. -+continue - else -- echo "$as_me: program exited with status $ac_status" >&5 --echo "$as_me: failed program was:" >&5 -+ echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --( exit $ac_status ) --ac_cv_c_bigendian=yes --fi --rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext --fi --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -+ # Passes both tests. -+ac_preproc_ok=: -+break - fi --echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 --echo "${ECHO_T}$ac_cv_c_bigendian" >&6 --case $ac_cv_c_bigendian in -- yes) - --cat >>confdefs.h <<\_ACEOF --#define WORDS_BIGENDIAN 1 --_ACEOF -- ;; -- no) -- ;; -- *) -- { { echo "$as_me:$LINENO: error: unknown endianness --presetting ac_cv_c_bigendian=no (or yes) will help" >&5 --echo "$as_me: error: unknown endianness --presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} -- { (exit 1); exit 1; }; } ;; --esac -+rm -f conftest.err conftest.$ac_ext - -+done -+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -+rm -f conftest.err conftest.$ac_ext -+if $ac_preproc_ok; then -+ : -+else -+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -+See \`config.log' for more details." >&5 -+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -+See \`config.log' for more details." >&2;} -+ { (exit 1); exit 1; }; } -+fi - --te_file=generic -+ac_ext=c -+ac_cpp='$CPP $CPPFLAGS' -+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -+ac_compiler_gnu=$ac_cv_c_compiler_gnu - --# Makefile target for installing gas in $(tooldir)/bin. --install_tooldir=install-exec-tooldir - --canon_targets="" --all_targets=no --if test -n "$enable_targets" ; then -- for t in `echo $enable_targets | sed 's/,/ /g'`; do -- if test $t = "all"; then -- all_targets=yes -- continue -- fi -- result=`$ac_config_sub $t 2>/dev/null` -- if test -n "$result" ; then -- canon_targets="$canon_targets $result" --# else --# # Permit "all", etc. We don't support it yet though. --# canon_targets="$canon_targets $t" -+{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 -+echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } -+if test "${ac_cv_path_GREP+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ # Extract the first word of "grep ggrep" to use in msg output -+if test -z "$GREP"; then -+set dummy grep ggrep; ac_prog_name=$2 -+if test "${ac_cv_path_GREP+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ ac_path_GREP_found=false -+# Loop through the user's path and test for each of PROGNAME-LIST -+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_prog in grep ggrep; do -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" -+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -+ # Check for GNU ac_path_GREP and select it if it is found. -+ # Check for GNU $ac_path_GREP -+case `"$ac_path_GREP" --version 2>&1` in -+*GNU*) -+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -+*) -+ ac_count=0 -+ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" -+ while : -+ do -+ cat "conftest.in" "conftest.in" >"conftest.tmp" -+ mv "conftest.tmp" "conftest.in" -+ cp "conftest.in" "conftest.nl" -+ echo 'GREP' >> "conftest.nl" -+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break -+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break -+ ac_count=`expr $ac_count + 1` -+ if test $ac_count -gt ${ac_path_GREP_max-0}; then -+ # Best one so far, save it but keep looking for a better one -+ ac_cv_path_GREP="$ac_path_GREP" -+ ac_path_GREP_max=$ac_count - fi -+ # 10*(2^10) chars as input seems more than enough -+ test $ac_count -gt 10 && break -+ done -+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -+esac ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = 0; + ++ if (*end == '<') ++ { ++ expressionS exp; ++ char *save; + -+ $ac_path_GREP_found && break 3 - done -- _gas_uniq_list="$canon_targets" --_gas_uniq_newlist="" --for _gas_uniq_i in _gas_uniq_dummy $_gas_uniq_list ; do -- case $_gas_uniq_i in -- _gas_uniq_dummy) ;; -- *) case " $_gas_uniq_newlist " in -- *" $_gas_uniq_i "*) ;; -- *) _gas_uniq_newlist="$_gas_uniq_newlist $_gas_uniq_i" ;; -- esac ;; -- esac - done --canon_targets=$_gas_uniq_newlist - --fi -+done -+IFS=$as_save_IFS - --emulations="" - --for this_target in $target $canon_targets ; do -+fi - -- targ=${this_target} -- . ${srcdir}/configure.tgt -+GREP="$ac_cv_path_GREP" -+if test -z "$GREP"; then -+ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} -+ { (exit 1); exit 1; }; } -+fi - -- case ${target_cpu} in -- crisv32) -+else -+ ac_cv_path_GREP=$GREP -+fi - --cat >>confdefs.h <<_ACEOF --#define DEFAULT_CRIS_ARCH $arch --_ACEOF - -- ;; -- esac -+fi -+{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 -+echo "${ECHO_T}$ac_cv_path_GREP" >&6; } -+ GREP="$ac_cv_path_GREP" - -- if test ${this_target} = $target ; then -- target_cpu_type=${cpu_type} -- elif test ${target_cpu_type} != ${cpu_type} ; then -- continue ++ p = end + 2; ++ for (end = p; *end; end++) ++ if (*end == ']') ++ break; ++ ++ assert(*end == ']'); ++ ++ c = *end, *end = 0; ++ save = input_line_pointer; ++ input_line_pointer = p; ++ expression(&exp); ++ ++ if (*input_line_pointer) ++ as_bad(_("junk after shift expression")); ++ ++ *end = c; ++ input_line_pointer = save; ++ ++ if (exp.X_op == O_constant) ++ current_insn.field_value[slot].value = exp.X_add_number; ++ else ++ as_bad(_("shift expression too complex")); ++ } ++} ++ ++static void ++parse_intreg_xindex(const struct avr32_operand *op, char *str, int opindex) ++{ ++ int slot, regid; ++ char *p, *end, c; ++ ++ for (p = str; *p; p++) ++ if (*p == '[') ++ break; + -+{ echo "$as_me:$LINENO: checking for egrep" >&5 -+echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } -+if test "${ac_cv_path_EGREP+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 -+ then ac_cv_path_EGREP="$GREP -E" -+ else -+ # Extract the first word of "egrep" to use in msg output -+if test -z "$EGREP"; then -+set dummy egrep; ac_prog_name=$2 -+if test "${ac_cv_path_EGREP+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ ac_path_EGREP_found=false -+# Loop through the user's path and test for each of PROGNAME-LIST -+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_prog in egrep; do -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" -+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -+ # Check for GNU ac_path_EGREP and select it if it is found. -+ # Check for GNU $ac_path_EGREP -+case `"$ac_path_EGREP" --version 2>&1` in -+*GNU*) -+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -+*) -+ ac_count=0 -+ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" -+ while : -+ do -+ cat "conftest.in" "conftest.in" >"conftest.tmp" -+ mv "conftest.tmp" "conftest.in" -+ cp "conftest.in" "conftest.nl" -+ echo 'EGREP' >> "conftest.nl" -+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break -+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break -+ ac_count=`expr $ac_count + 1` -+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then -+ # Best one so far, save it but keep looking for a better one -+ ac_cv_path_EGREP="$ac_path_EGREP" -+ ac_path_EGREP_max=$ac_count - fi -+ # 10*(2^10) chars as input seems more than enough -+ test $ac_count -gt 10 && break -+ done -+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -+esac - -- generic_target=${cpu_type}-${target_vendor}-${target_os} -- case ${generic_target} in -- i386-*-sco3.2v5*) -- if test ${this_target} = $target; then - --cat >>confdefs.h <<\_ACEOF --#define SCO_ELF 1 --_ACEOF -+ $ac_path_EGREP_found && break 3 -+ done -+done - -- fi -- ;; -+done -+IFS=$as_save_IFS - -- i386-*-msdosdjgpp* \ -- | i386-*-go32* \ -- | i386-go32-rtems*) - --cat >>confdefs.h <<\_ACEOF --#define STRICTCOFF 1 --_ACEOF -+fi - -- ;; -+EGREP="$ac_cv_path_EGREP" -+if test -z "$EGREP"; then -+ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} -+ { (exit 1); exit 1; }; } -+fi - -- i860-*-*) -- { echo "$as_me:$LINENO: WARNING: GAS support for ${generic_target} is preliminary and a work in progress" >&5 --echo "$as_me: WARNING: GAS support for ${generic_target} is preliminary and a work in progress" >&2;} -- ;; -+else -+ ac_cv_path_EGREP=$EGREP -+fi - -- mips-sony-bsd*) -- ;; -- mips-*-bsd*) -- { { echo "$as_me:$LINENO: error: Unknown vendor for mips-bsd configuration." >&5 --echo "$as_me: error: Unknown vendor for mips-bsd configuration." >&2;} -- { (exit 1); exit 1; }; } -- ;; - -- ppc-*-aix5.*) -+ fi -+fi -+{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 -+echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } -+ EGREP="$ac_cv_path_EGREP" - --cat >>confdefs.h <<\_ACEOF --#define AIX_WEAK_SUPPORT 1 ++ assert(*p); + -+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } -+if test "${ac_cv_header_stdc+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ - _ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+#include -+#include -+#include - -- ;; -- ppc-*-linux-*) -- case "$endian" in -- big) ;; -- *) { { echo "$as_me:$LINENO: error: GNU/Linux must be configured big endian" >&5 --echo "$as_me: error: GNU/Linux must be configured big endian" >&2;} -- { (exit 1); exit 1; }; } ;; -- esac -- ;; -- ppc-*-solaris*) -- if test ${this_target} = $target; then -+int -+main () ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ assert(regid >= 0); ++ *p = c; ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++ ++ p++; ++ for (end = p; *end; end++) ++ if (*end == '<') ++ break; ++ ++ assert(*end); ++ ++ c = *end, *end = 0; ++ parse_intreg_part(op, p, opindex); ++ *end = c; ++} ++ ++static void ++parse_pc_disp(const struct avr32_operand *op, char *str, int opindex) +{ - --cat >>confdefs.h <<\_ACEOF --#define TARGET_SOLARIS_COMMENT 1 -+ ; -+ return 0; ++ char *p, c; ++ ++ for (p = str; *p; p++) ++ if (*p == '[') ++ break; ++ ++ /* The lddpc instruction comes in two different syntax variants: ++ lddpc reg, expression ++ lddpc reg, pc[disp] ++ If the operand contains a '[', we use the second form. */ ++ if (*p) ++ { ++ int regid; ++ ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ *p = c; ++ if (regid == AVR32_REG_PC) ++ { ++ char *end; ++ ++ for (end = ++p; *end; end++) ; ++ if (*(--end) != ']') ++ as_bad(_("unrecognized form of instruction: `%s'"), str); ++ else ++ { ++ c = *end, *end = 0; ++ parse_const(op, p, opindex); ++ *end = c; ++ current_insn.pcrel = 0; ++ } ++ } ++ else ++ as_bad(_("unrecognized form of instruction: `%s'"), str); ++ } ++ else ++ { ++ parse_jmplabel(op, str, opindex); ++ } +} - _ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_header_stdc=yes -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -- fi -- if test x${endian} = xbig; then -- { { echo "$as_me:$LINENO: error: Solaris must be configured little endian" >&5 --echo "$as_me: error: Solaris must be configured little endian" >&2;} -- { (exit 1); exit 1; }; } -- fi -- ;; -+ ac_cv_header_stdc=no -+fi - -- sh*-*-symbianelf*) -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - --cat >>confdefs.h <<\_ACEOF --#define TARGET_SYMBIAN 1 -+if test $ac_cv_header_stdc = yes; then -+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI. -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ - _ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include - -- ;; -- esac -+_ACEOF -+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -+ $EGREP "memchr" >/dev/null 2>&1; then -+ : -+else -+ ac_cv_header_stdc=no -+fi -+rm -f conftest* - -- if test ${this_target} = $target ; then -- endian_def= -- if test x${endian} = xbig; then -- endian_def=1 -- elif test x${endian} = xlittle; then -- endian_def=0 -- fi -- if test x${endian_def} != x; then -+fi - --cat >>confdefs.h <<_ACEOF --#define TARGET_BYTES_BIG_ENDIAN $endian_def -+if test $ac_cv_header_stdc = yes; then -+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ - _ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include - -- fi -- fi -+_ACEOF -+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -+ $EGREP "free" >/dev/null 2>&1; then -+ : -+else -+ ac_cv_header_stdc=no -+fi -+rm -f conftest* - --# Other random stuff. -+fi - -- case ${cpu_type} in -- mips) -- # Set mips_cpu to the name of the default CPU. -- case ${target_cpu} in -- mips | mipsbe | mipseb | mipsle | mipsel | mips64 | mips64el) -- mips_cpu=from-abi -- ;; -- mipsisa32 | mipsisa32el) -- mips_cpu=mips32 -- ;; -- mipsisa32r2 | mipsisa32r2el) -- mips_cpu=mips32r2 -- ;; -- mipsisa64 | mipsisa64el) -- mips_cpu=mips64 -- ;; -- mipsisa64r2 | mipsisa64r2el) -- mips_cpu=mips64r2 -- ;; -- mipstx39 | mipstx39el) -- mips_cpu=r3900 -- ;; -- mips64vr | mips64vrel) -- mips_cpu=vr4100 -- ;; -- mipsisa32r2* | mipsisa64r2*) -- mips_cpu=`echo $target_cpu | sed -e 's/[a-z]*..r2//' -e 's/el$//'` -- ;; -- mips64* | mipsisa64* | mipsisa32*) -- mips_cpu=`echo $target_cpu | sed -e 's/[a-z]*..//' -e 's/el$//'` -- ;; -- *) -- { { echo "$as_me:$LINENO: error: $target_cpu isn't a supported MIPS CPU name" >&5 --echo "$as_me: error: $target_cpu isn't a supported MIPS CPU name" >&2;} -- { (exit 1); exit 1; }; } -- ;; -- esac -- # See whether it's appropriate to set E_MIPS_ABI_O32 for o32 -- # binaries. It's a GNU extension that some OSes don't understand. -- # The value only matters on ELF targets. -- case ${target} in -- *-*-irix*) -- use_e_mips_abi_o32=0 -- ;; -- *) -- use_e_mips_abi_o32=1 -- ;; -- esac -- # Decide whether to generate 32-bit or 64-bit code by default. -- # Used to resolve -march=from-abi when an embedded ABI is selected. -- case ${target} in -- mips64*-*-* | mipsisa64*-*-*) -- mips_default_64bit=1 -- ;; -- *) -- mips_default_64bit=0 -- ;; -- esac -- # Decide which ABI to target by default. -- case ${target} in -- mips64*-linux* | mips-sgi-irix6*) -- mips_default_abi=N32_ABI -- ;; -- mips*-linux*) -- mips_default_abi=O32_ABI -- ;; -- mips64*-openbsd*) -- mips_default_abi=N64_ABI -- ;; -- *) -- mips_default_abi=NO_ABI -- ;; -- esac -+if test $ac_cv_header_stdc = yes; then -+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. -+ if test "$cross_compiling" = yes; then -+ : -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+#include -+#if ((' ' & 0x0FF) == 0x020) -+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -+#else -+# define ISLOWER(c) \ -+ (('a' <= (c) && (c) <= 'i') \ -+ || ('j' <= (c) && (c) <= 'r') \ -+ || ('s' <= (c) && (c) <= 'z')) -+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -+#endif - --cat >>confdefs.h <<_ACEOF --#define MIPS_CPU_STRING_DEFAULT "$mips_cpu" -+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -+int -+main () ++ ++static void parse_sp(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str ATTRIBUTE_UNUSED, ++ int opindex ATTRIBUTE_UNUSED) +{ -+ int i; -+ for (i = 0; i < 256; i++) -+ if (XOR (islower (i), ISLOWER (i)) -+ || toupper (i) != TOUPPER (i)) -+ return 2; -+ return 0; ++ int slot; ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = AVR32_REG_SP; +} - _ACEOF -+rm -f conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>&5 -+ ac_status=$? -+ echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_try") 2>&5 -+ ac_status=$? -+ echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); }; }; then -+ : -+else -+ echo "$as_me: program exited with status $ac_status" >&5 -+echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -+( exit $ac_status ) -+ac_cv_header_stdc=no -+fi -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+fi - --cat >>confdefs.h <<_ACEOF --#define USE_E_MIPS_ABI_O32 $use_e_mips_abi_o32 --_ACEOF - -+fi -+fi -+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -+echo "${ECHO_T}$ac_cv_header_stdc" >&6; } -+if test $ac_cv_header_stdc = yes; then - --cat >>confdefs.h <<_ACEOF --#define MIPS_DEFAULT_64BIT $mips_default_64bit -+cat >>confdefs.h <<\_ACEOF -+#define STDC_HEADERS 1 - _ACEOF - -+fi - --cat >>confdefs.h <<_ACEOF --#define MIPS_DEFAULT_ABI $mips_default_abi --_ACEOF -+# On IRIX 5.3, sys/types and inttypes.h are conflicting. - -- ;; -- esac - -- # Do we need the opcodes library? -- case ${cpu_type} in -- vax | i386 | tic30) -- ;; - -- *) -- need_opcodes=yes - -- case "${enable_shared}" in -- yes) shared_opcodes=true ;; -- *opcodes*) shared_opcodes=true ;; -- *) shared_opcodes=false ;; -- esac -- ;; -- esac - -- # Any other special object files needed ? -- case ${cpu_type} in - -- bfin) -- echo ${extra_objects} | grep -s "bfin-parse.o" -- if test $? -ne 0 ; then -- extra_objects="$extra_objects bfin-parse.o" -- fi - -- echo ${extra_objects} | grep -s "bfin-lex.o" -- if test $? -ne 0 ; then -- extra_objects="$extra_objects bfin-lex.o" -- fi -- ;; - -- fr30 | ip2k | iq2000 | m32r | openrisc) -- using_cgen=yes -- ;; - -- m32c) -- using_cgen=yes -- ;; -- frv) -- using_cgen=yes -- ;; -- m68k) -- case ${extra_objects} in -- *m68k-parse.o*) ;; -- *) extra_objects="$extra_objects m68k-parse.o" ;; -- esac -- ;; -+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ -+ inttypes.h stdint.h unistd.h -+do -+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -+{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default - -- mips) -- echo ${extra_objects} | grep -s "itbl-parse.o" -- if test $? -ne 0 ; then -- extra_objects="$extra_objects itbl-parse.o" -- fi -+#include <$ac_header> -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ eval "$as_ac_Header=yes" -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -- echo ${extra_objects} | grep -s "itbl-lex.o" -- if test $? -ne 0 ; then -- extra_objects="$extra_objects itbl-lex.o" -- fi -+ eval "$as_ac_Header=no" -+fi - -- echo ${extra_objects} | grep -s "itbl-ops.o" -- if test $? -ne 0 ; then -- extra_objects="$extra_objects itbl-ops.o" -- fi -- ;; -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+ac_res=`eval echo '${'$as_ac_Header'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } -+if test `eval echo '${'$as_ac_Header'}'` = yes; then -+ cat >>confdefs.h <<_ACEOF -+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -+_ACEOF - -- mt) -- using_cgen=yes -- ;; -+fi - -- i386 | s390 | sparc) -- if test $this_target = $target ; then -+done - --cat >>confdefs.h <<_ACEOF --#define DEFAULT_ARCH "${arch}" + -+{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 -+echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; } -+if test "${ac_cv_c_bigendian+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ # See if sys/param.h defines the BYTE_ORDER macro. -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ - _ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+#include - -- fi -- ;; -+int -+main () ++static void ++parse_sp_disp(const struct avr32_operand *op, char *str, int opindex) +{ -+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \ -+ && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN) -+ bogus endian macros -+#endif - -- xstormy16) -- using_cgen=yes -- ;; -+ ; -+ return 0; ++ char *p, c; ++ ++ for (; *str; str++) ++ if (*str == '[') ++ break; ++ ++ assert(*str); ++ ++ for (p = ++str; *p; p++) ++ if (*p == ']') ++ break; ++ ++ c = *p, *p = 0; ++ parse_const(op, str, opindex); ++ *p = c; +} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ # It does; now see whether it defined to BIG_ENDIAN or not. -+cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+#include - -- xc16x) -- using_cgen=yes -- ;; -+int -+main () ++ ++static void ++parse_cpno(const struct avr32_operand *op ATTRIBUTE_UNUSED, char *str, ++ int opindex ATTRIBUTE_UNUSED) +{ -+#if BYTE_ORDER != BIG_ENDIAN -+ not big endian -+#endif - -- xtensa) -- echo ${extra_objects} | grep -s "xtensa-relax.o" -- if test $? -ne 0 ; then -- extra_objects="$extra_objects xtensa-relax.o" -- fi -- ;; -+ ; -+ return 0; ++ int slot; ++ ++ str += 2; ++ if (*str == '#') ++ str++; ++ if (*str < '0' || *str > '7' || str[1]) ++ as_bad(_("invalid coprocessor `%s'"), str); ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = *str - '0'; +} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_c_bigendian=yes -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -- *) -- ;; -- esac -+ ac_cv_c_bigendian=no -+fi - -- if test $using_cgen = yes ; then -- case "x${extra_objects}" in -- *cgen.o*) ;; -- *) extra_objects="$extra_objects cgen.o" ;; -- esac -- fi -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - --# See if we really can support this configuration with the emulation code. -+ # It does not; compile a test program. -+if test "$cross_compiling" = yes; then -+ # try to guess the endianness by grepping values into an object file -+ ac_cv_c_bigendian=unknown -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; -+short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; -+void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } -+short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; -+short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; -+void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } -+int -+main () ++ ++static void ++parse_cpreg(const struct avr32_operand *op, char *str, ++ int opindex ATTRIBUTE_UNUSED) +{ -+ _ascii (); _ebcdic (); -+ ; -+ return 0; ++ unsigned int crid; ++ int slot; ++ char *endptr; ++ ++ str += 2; ++ crid = strtoul(str, &endptr, 10); ++ if (*endptr || crid > 15 || crid & ((1 << op->align_order) - 1)) ++ as_bad(_("invalid coprocessor register `%s'"), str); ++ ++ crid >>= op->align_order; ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = crid; +} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 -+ ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 -+ echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then -+ ac_cv_c_bigendian=yes -+fi -+if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then -+ if test "$ac_cv_c_bigendian" = unknown; then -+ ac_cv_c_bigendian=no ++ ++static void ++parse_number(const struct avr32_operand *op, char *str, ++ int opindex ATTRIBUTE_UNUSED) ++{ ++ expressionS exp; ++ int slot; ++ char *save; ++ ++ save = input_line_pointer; ++ input_line_pointer = str; ++ expression(&exp); ++ input_line_pointer = save; ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].align_order = op->align_order; ++ ++ if (exp.X_op == O_constant) ++ current_insn.field_value[slot].value = exp.X_add_number; + else -+ # finding both strings is unlikely to happen, but who knows? -+ ac_cv_c_bigendian=unknown -+ fi -+fi -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - -- if test $this_target = $target ; then -- obj_format=$fmt -- te_file=$em -- fi - --# From target name and format, produce a list of supported emulations. -+fi - -- case ${generic_target}-${fmt} in -- mips-*-irix5*-*) emulation="mipsbelf mipslelf mipself mipsbecoff mipslecoff mipsecoff" ;; -- mips*-*-linux*-*) case "$endian" in -- big) emulation="mipsbelf mipslelf mipself" ;; -- *) emulation="mipslelf mipsbelf mipself" ;; -- esac ;; -- mips-*-lnews*-ecoff) ;; -- mips-*-*-ecoff) case "$endian" in -- big) emulation="mipsbecoff mipslecoff mipsecoff" ;; -- *) emulation="mipslecoff mipsbecoff mipsecoff" ;; -- esac ;; -- mips-*-*-elf) case "$endian" in -- big) emulation="mipsbelf mipslelf mipself" ;; -- *) emulation="mipslelf mipsbelf mipself" ;; -- esac ;; -- mips-*-sysv4*MP*-*) emulation="mipsbelf mipslelf mipself mipsbecoff mipslecoff mipsecoff" ;; -- # i386-pc-pe-coff != i386-pc-coff. -- i386-*-pe-coff) ;; -- # Uncommenting the next line will turn on support for i386 AOUT -- # for the default linux configuration -- # i386-*-linux*-elf) emulation="i386elf i386aout" ;; -- # -- i386-*-aout) emulation="i386aout" ;; -- i386-*-coff) emulation="i386coff" ;; -- i386-*-elf) emulation="i386elf" ;; -- -- # Always all formats. The first stated emulation becomes the default. -- cris-*-*aout*) emulation="crisaout criself" ;; -- cris-*-*) emulation="criself crisaout" ;; -- esac -- -- emulations="$emulations $emulation" -- --done -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+else -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+$ac_includes_default -+int -+main () ++ as_bad(_("invalid numeric expression `%s'"), str); ++} ++ ++static void ++parse_reglist8(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) +{ - --# Turn on all targets if possible --if test ${all_targets} = "yes"; then -- case ${target_cpu_type} in -- i386) -- case ${obj_format} in -- aout) -- emulations="$emulations i386coff i386elf" -- ;; -- coff) -- emulations="$emulations i386aout i386elf" -- ;; -- elf) -- emulations="$emulations i386aout i386coff" -- ;; -- esac -- ;; -- esac --fi -+ /* Are we little or big endian? From Harbison&Steele. */ -+ union -+ { -+ long int l; -+ char c[sizeof (long int)]; -+ } u; -+ u.l = 1; -+ return u.c[sizeof (long int) - 1] == 1; - --# Assign floating point type. Most processors with FP support --# IEEE FP. On those that don't support FP at all, usually IEEE --# is emulated. --case ${target_cpu} in -- vax | tahoe ) atof=${target_cpu} ;; -- pdp11) atof=vax ;; -- *) atof=ieee ;; -+ ; -+ return 0; ++ unsigned long regmask; ++ unsigned long value = 0; ++ int slot; ++ char *tail; ++ ++ regmask = avr32_parse_reglist(str, &tail); ++ if (*tail) ++ as_bad(_("invalid register list `%s'"), str); ++ else ++ { ++ if (avr32_make_regmask8(regmask, &value)) ++ as_bad(_("register list `%s' doesn't fit"), str); ++ } ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = value; +} -+_ACEOF -+rm -f conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; - esac -- --case "${obj_format}" in -- "") { { echo "$as_me:$LINENO: error: GAS does not know what format to use for target ${target}" >&5 --echo "$as_me: error: GAS does not know what format to use for target ${target}" >&2;} -- { (exit 1); exit 1; }; } ;; -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>&5 -+ ac_status=$? -+ echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; - esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_try") 2>&5 -+ ac_status=$? -+ echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); }; }; then -+ ac_cv_c_bigendian=no -+else -+ echo "$as_me: program exited with status $ac_status" >&5 -+echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 - --# Unfortunately the cpu in cpu-opc.h file isn't always $(TARGET_CPU). --cgen_cpu_prefix="" --if test $using_cgen = yes ; then -- case ${target_cpu} in -- *) cgen_cpu_prefix=${target_cpu} ;; -- esac -- -- --cat >>confdefs.h <<\_ACEOF --#define USING_CGEN 1 --_ACEOF -- -+( exit $ac_status ) -+ac_cv_c_bigendian=yes -+fi -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext - fi - - --if test ! -r ${srcdir}/config/tc-${target_cpu_type}.c; then -- { { echo "$as_me:$LINENO: error: GAS does not support target CPU ${target_cpu_type}" >&5 --echo "$as_me: error: GAS does not support target CPU ${target_cpu_type}" >&2;} -- { (exit 1); exit 1; }; } - fi - --if test ! -r ${srcdir}/config/obj-${obj_format}.c; then -- { { echo "$as_me:$LINENO: error: GAS does not have support for object file format ${obj_format}" >&5 --echo "$as_me: error: GAS does not have support for object file format ${obj_format}" >&2;} -- { (exit 1); exit 1; }; } -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi -+{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 -+echo "${ECHO_T}$ac_cv_c_bigendian" >&6; } -+case $ac_cv_c_bigendian in -+ yes) - --# Some COFF configurations want these random other flags set. --case ${obj_format} in -- coff) -- case ${target_cpu_type} in -- i386) --cat >>confdefs.h <<\_ACEOF --#define I386COFF 1 --_ACEOF -- ;; -- m68k) --cat >>confdefs.h <<\_ACEOF --#define M68KCOFF 1 --_ACEOF -- ;; -- m88k) - cat >>confdefs.h <<\_ACEOF --#define M88KCOFF 1 -+#define WORDS_BIGENDIAN 1 - _ACEOF - ;; -- esac -- ;; -+ no) -+ ;; -+ *) -+ { { echo "$as_me:$LINENO: error: unknown endianness -+presetting ac_cv_c_bigendian=no (or yes) will help" >&5 -+echo "$as_me: error: unknown endianness -+presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} -+ { (exit 1); exit 1; }; } ;; - esac - --# Getting this done right is going to be a bitch. Each configuration specified --# with --enable-targets=... should be checked for environment, format, cpu --# setting. --# --# For each configuration, the necessary object file support code must be linked --# in. This might be only one, it might be up to four. The necessary emulation --# code needs to be provided, too. --# --# And then there's "--enable-targets=all".... --# --# For now, just always do it for MIPS ELF or ECOFF configurations. Sigh. - --formats="${obj_format}" --emfiles="" --EMULATIONS="" --_gas_uniq_list="$emulations" --_gas_uniq_newlist="" --for _gas_uniq_i in _gas_uniq_dummy $_gas_uniq_list ; do -- case $_gas_uniq_i in -- _gas_uniq_dummy) ;; -- *) case " $_gas_uniq_newlist " in -- *" $_gas_uniq_i "*) ;; -- *) _gas_uniq_newlist="$_gas_uniq_newlist $_gas_uniq_i" ;; -- esac ;; -- esac --done --emulations=$_gas_uniq_newlist -+te_file=generic - --for em in . $emulations ; do -- case $em in -- .) continue ;; -- mipsbelf | mipslelf | mipself) -- fmt=elf file=mipself ;; -- mipsbecoff | mipslecoff | mipsecoff) -- fmt=ecoff file=mipsecoff ;; -- *coff) -- fmt=coff file=$em ;; -- *aout) -- fmt=aout file=$em ;; -- *elf) -- fmt=elf file=$em ;; -- esac -- formats="$formats $fmt" -- emfiles="$emfiles e-$file.o" -- EMULATIONS="$EMULATIONS &$em," --done --_gas_uniq_list="$formats" --_gas_uniq_newlist="" --for _gas_uniq_i in _gas_uniq_dummy $_gas_uniq_list ; do -- case $_gas_uniq_i in -- _gas_uniq_dummy) ;; -- *) case " $_gas_uniq_newlist " in -- *" $_gas_uniq_i "*) ;; -- *) _gas_uniq_newlist="$_gas_uniq_newlist $_gas_uniq_i" ;; -- esac ;; -- esac --done --formats=$_gas_uniq_newlist -+# Makefile target for installing gas in $(tooldir)/bin. -+install_tooldir=install-exec-tooldir - --_gas_uniq_list="$emfiles" -+canon_targets="" -+all_targets=no -+if test -n "$enable_targets" ; then -+ for t in `echo $enable_targets | sed 's/,/ /g'`; do -+ if test $t = "all"; then -+ all_targets=yes -+ continue -+ fi -+ result=`$ac_config_sub $t 2>/dev/null` -+ if test -n "$result" ; then -+ canon_targets="$canon_targets $result" -+# else -+# # Permit "all", etc. We don't support it yet though. -+# canon_targets="$canon_targets $t" -+ fi -+ done -+ _gas_uniq_list="$canon_targets" - _gas_uniq_newlist="" - for _gas_uniq_i in _gas_uniq_dummy $_gas_uniq_list ; do - case $_gas_uniq_i in -@@ -5034,883 +5702,871 @@ for _gas_uniq_i in _gas_uniq_dummy $_gas - esac ;; - esac - done --emfiles=$_gas_uniq_newlist -+canon_targets=$_gas_uniq_newlist - --if test `set . $formats ; shift ; echo $#` -gt 1 ; then -- for fmt in $formats ; do -- case $fmt in -- aout) --cat >>confdefs.h <<\_ACEOF --#define OBJ_MAYBE_AOUT 1 -+fi + -+emulations="" ++static int ++parse_reglist_tail(char *str, unsigned long regmask) ++{ ++ expressionS exp; ++ char *save, *p, c; ++ int regid; + -+for this_target in $target $canon_targets ; do ++ for (p = str + 1; *p; p++) ++ if (*p == '=') ++ break; + -+ targ=${this_target} -+ . ${srcdir}/configure.tgt ++ if (!*p) ++ { ++ as_bad(_("invalid register list `%s'"), str); ++ return -2; ++ } + -+ case ${target_cpu} in -+ crisv32) ++ c = *p, *p = 0; ++ regid = avr32_parse_intreg(str); ++ *p = c; + -+cat >>confdefs.h <<_ACEOF -+#define DEFAULT_CRIS_ARCH $arch - _ACEOF -- ;; -- bout) ++ if (regid != 12) ++ { ++ as_bad(_("invalid register list `%s'"), str); ++ return -2; ++ } + -+ ;; -+ esac ++ /* If we have an assignment, we must pop PC and we must _not_ ++ pop LR or R12 */ ++ if (!(regmask & (1 << AVR32_REG_PC))) ++ { ++ as_bad(_("return value specified for non-return instruction")); ++ return -2; ++ } ++ else if (regmask & ((1 << AVR32_REG_R12) | (1 << AVR32_REG_LR))) ++ { ++ as_bad(_("can't pop LR or R12 when specifying return value")); ++ return -2; ++ } + -+ if test ${this_target} = $target ; then -+ target_cpu_type=${cpu_type} -+ elif test ${target_cpu_type} != ${cpu_type} ; then -+ continue -+ fi ++ save = input_line_pointer; ++ input_line_pointer = p + 1; ++ expression(&exp); ++ input_line_pointer = save; + -+ generic_target=${cpu_type}-${target_vendor}-${target_os} -+ case ${generic_target} in -+ i386-*-sco3.2v5*) -+ if test ${this_target} = $target; then ++ if (exp.X_op != O_constant ++ || exp.X_add_number < -1 ++ || exp.X_add_number > 1) ++ { ++ as_bad(_("invalid return value `%s'"), str); ++ return -2; ++ } + - cat >>confdefs.h <<\_ACEOF --#define OBJ_MAYBE_BOUT 1 -+#define SCO_ELF 1 - _ACEOF -- ;; -- coff) ++ return exp.X_add_number; ++} + -+ fi -+ ;; ++static void ++parse_reglist9(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regmask; ++ unsigned long value = 0, kbit = 0; ++ int slot; ++ char *tail; + -+ i386-*-msdosdjgpp* \ -+ | i386-*-go32* \ -+ | i386-go32-rtems*) ++ regmask = avr32_parse_reglist(str, &tail); ++ /* printf("parsed reglist16: %04lx, tail: `%s'\n", regmask, tail); */ ++ if (*tail) ++ { ++ int retval; + - cat >>confdefs.h <<\_ACEOF --#define OBJ_MAYBE_COFF 1 -+#define STRICTCOFF 1 - _ACEOF -- ;; -- ecoff) --cat >>confdefs.h <<\_ACEOF --#define OBJ_MAYBE_ECOFF 1 --_ACEOF -- ;; -- elf) --cat >>confdefs.h <<\_ACEOF --#define OBJ_MAYBE_ELF 1 --_ACEOF -- ;; -- generic) --cat >>confdefs.h <<\_ACEOF --#define OBJ_MAYBE_GENERIC 1 --_ACEOF -- ;; -- ieee) --cat >>confdefs.h <<\_ACEOF --#define OBJ_MAYBE_IEEE 1 --_ACEOF -- ;; -- som) --cat >>confdefs.h <<\_ACEOF --#define OBJ_MAYBE_SOM 1 --_ACEOF -- ;; -- esac -- extra_objects="$extra_objects obj-$fmt.o" -- done -- obj_format=multi --fi --if test `set . $emfiles ; shift ; echo $#` -gt 0 ; then -- DEFAULT_EMULATION=`set . $emulations ; echo $2` -- # e-mips* has more than one emulation per file, e-i386* has just one at the -- # moment. If only one emulation is specified, then don't define -- # USE_EMULATIONS or include any of the e-files as they will only be bloat. -- case "${obj_format}${emfiles}" in -- multi* | *mips*) -- extra_objects="$extra_objects $emfiles" - --cat >>confdefs.h <<\_ACEOF --#define USE_EMULATIONS 1 --_ACEOF -- ;; -- esac --fi -+ ;; - -+ i860-*-*) -+ { echo "$as_me:$LINENO: WARNING: GAS support for ${generic_target} is preliminary and a work in progress" >&5 -+echo "$as_me: WARNING: GAS support for ${generic_target} is preliminary and a work in progress" >&2;} -+ ;; - --cat >>confdefs.h <<_ACEOF --#define EMULATIONS $EMULATIONS --_ACEOF -+ mips-sony-bsd*) -+ ;; -+ mips-*-bsd*) -+ { { echo "$as_me:$LINENO: error: Unknown vendor for mips-bsd configuration." >&5 -+echo "$as_me: error: Unknown vendor for mips-bsd configuration." >&2;} -+ { (exit 1); exit 1; }; } -+ ;; - -+ ppc-*-aix5.*) - --cat >>confdefs.h <<_ACEOF --#define DEFAULT_EMULATION "$DEFAULT_EMULATION" -+cat >>confdefs.h <<\_ACEOF -+#define AIX_WEAK_SUPPORT 1 - _ACEOF - -+ ;; -+ ppc-*-linux-*) -+ case "$endian" in -+ big) ;; -+ *) { { echo "$as_me:$LINENO: error: GNU/Linux must be configured big endian" >&5 -+echo "$as_me: error: GNU/Linux must be configured big endian" >&2;} -+ { (exit 1); exit 1; }; } ;; -+ esac -+ ;; -+ ppc-*-solaris*) -+ if test ${this_target} = $target; then - --reject_dev_configs=yes -+cat >>confdefs.h <<\_ACEOF -+#define TARGET_SOLARIS_COMMENT 1 -+_ACEOF - --case ${reject_dev_configs}-${dev} in -- yes-yes) # Oops. -- { { echo "$as_me:$LINENO: error: GAS does not support the ${generic_target} configuration." >&5 --echo "$as_me: error: GAS does not support the ${generic_target} configuration." >&2;} -+ fi -+ if test x${endian} = xbig; then -+ { { echo "$as_me:$LINENO: error: Solaris must be configured little endian" >&5 -+echo "$as_me: error: Solaris must be configured little endian" >&2;} - { (exit 1); exit 1; }; } -- ;; --esac -- -- -- -- -- -- -- --# do we need the opcodes library? --case "${need_opcodes}" in --yes) -- OPCODES_LIB=../opcodes/libopcodes.la -- ;; --esac -+ fi -+ ;; - --BFDLIB=../bfd/libbfd.la --BFDVER_H=../bfd/bfdver.h --ALL_OBJ_DEPS="$ALL_OBJ_DEPS"' ../bfd/bfd.h $(INCDIR)/symcat.h' -+ sh*-*-symbianelf*) - -+cat >>confdefs.h <<\_ACEOF -+#define TARGET_SYMBIAN 1 -+_ACEOF - -+ ;; -+ esac - -+ if test ${this_target} = $target ; then -+ endian_def= -+ if test x${endian} = xbig; then -+ endian_def=1 -+ elif test x${endian} = xlittle; then -+ endian_def=0 -+ fi -+ if test x${endian_def} != x; then - -+cat >>confdefs.h <<_ACEOF -+#define TARGET_BYTES_BIG_ENDIAN $endian_def -+_ACEOF - -+ fi -+ fi - -+# Other random stuff. - -+ case ${cpu_type} in -+ mips) -+ # Set mips_cpu to the name of the default CPU. -+ case ${target_cpu} in -+ mips | mipsbe | mipseb | mipsle | mipsel | mips64 | mips64el) -+ mips_cpu=from-abi -+ ;; -+ mipsisa32 | mipsisa32el) -+ mips_cpu=mips32 -+ ;; -+ mipsisa32r2 | mipsisa32r2el) -+ mips_cpu=mips32r2 -+ ;; -+ mipsisa64 | mipsisa64el) -+ mips_cpu=mips64 -+ ;; -+ mipsisa64r2 | mipsisa64r2el) -+ mips_cpu=mips64r2 -+ ;; -+ mipstx39 | mipstx39el) -+ mips_cpu=r3900 -+ ;; -+ mips64vr | mips64vrel) -+ mips_cpu=vr4100 -+ ;; -+ mipsisa32r2* | mipsisa64r2*) -+ mips_cpu=`echo $target_cpu | sed -e 's/[a-z]*..r2//' -e 's/el$//'` -+ ;; -+ mips64* | mipsisa64* | mipsisa32*) -+ mips_cpu=`echo $target_cpu | sed -e 's/[a-z]*..//' -e 's/el$//'` -+ ;; -+ *) -+ { { echo "$as_me:$LINENO: error: $target_cpu isn't a supported MIPS CPU name" >&5 -+echo "$as_me: error: $target_cpu isn't a supported MIPS CPU name" >&2;} -+ { (exit 1); exit 1; }; } -+ ;; -+ esac -+ # See whether it's appropriate to set E_MIPS_ABI_O32 for o32 -+ # binaries. It's a GNU extension that some OSes don't understand. -+ # The value only matters on ELF targets. -+ case ${target} in -+ *-*-irix*) -+ use_e_mips_abi_o32=0 -+ ;; -+ *) -+ use_e_mips_abi_o32=1 -+ ;; -+ esac -+ # Decide whether to generate 32-bit or 64-bit code by default. -+ # Used to resolve -march=from-abi when an embedded ABI is selected. -+ case ${target} in -+ mips64*-*-* | mipsisa64*-*-*) -+ mips_default_64bit=1 -+ ;; -+ *) -+ mips_default_64bit=0 -+ ;; -+ esac -+ # Decide which ABI to target by default. -+ case ${target} in -+ mips64*-linux* | mips-sgi-irix6*) -+ mips_default_abi=N32_ABI -+ ;; -+ mips*-linux*) -+ mips_default_abi=O32_ABI -+ ;; -+ mips64*-openbsd*) -+ mips_default_abi=N64_ABI -+ ;; -+ *) -+ mips_default_abi=NO_ABI -+ ;; -+ esac - - cat >>confdefs.h <<_ACEOF --#define TARGET_ALIAS "${target_alias}" -+#define MIPS_CPU_STRING_DEFAULT "$mips_cpu" - _ACEOF - - - cat >>confdefs.h <<_ACEOF --#define TARGET_CANONICAL "${target}" -+#define USE_E_MIPS_ABI_O32 $use_e_mips_abi_o32 - _ACEOF - - - cat >>confdefs.h <<_ACEOF --#define TARGET_CPU "${target_cpu}" -+#define MIPS_DEFAULT_64BIT $mips_default_64bit - _ACEOF - - - cat >>confdefs.h <<_ACEOF --#define TARGET_VENDOR "${target_vendor}" -+#define MIPS_DEFAULT_ABI $mips_default_abi - _ACEOF - -+ ;; -+ esac - --cat >>confdefs.h <<_ACEOF --#define TARGET_OS "${target_os}" --_ACEOF -+ # Do we need the opcodes library? -+ case ${cpu_type} in -+ vax | i386 | tic30) -+ ;; - -+ *) -+ need_opcodes=yes - --ac_ext=c --ac_cpp='$CPP $CPPFLAGS' --ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' --ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' --ac_compiler_gnu=$ac_cv_c_compiler_gnu --if test -n "$ac_tool_prefix"; then -- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. --set dummy ${ac_tool_prefix}gcc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$CC"; then -- ac_cv_prog_CC="$CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_CC="${ac_tool_prefix}gcc" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -+ case "${enable_shared}" in -+ yes) shared_opcodes=true ;; -+ *opcodes*) shared_opcodes=true ;; -+ *) shared_opcodes=false ;; -+ esac -+ ;; -+ esac - --fi --fi --CC=$ac_cv_prog_CC --if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -+ # Any other special object files needed ? -+ case ${cpu_type} in - --fi --if test -z "$ac_cv_prog_CC"; then -- ac_ct_CC=$CC -- # Extract the first word of "gcc", so it can be a program name with args. --set dummy gcc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$ac_ct_CC"; then -- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_ac_ct_CC="gcc" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -+ bfin) -+ echo ${extra_objects} | grep -s "bfin-parse.o" -+ if test $? -ne 0 ; then -+ extra_objects="$extra_objects bfin-parse.o" -+ fi - --fi --fi --ac_ct_CC=$ac_cv_prog_ac_ct_CC --if test -n "$ac_ct_CC"; then -- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 --echo "${ECHO_T}$ac_ct_CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -+ echo ${extra_objects} | grep -s "bfin-lex.o" -+ if test $? -ne 0 ; then -+ extra_objects="$extra_objects bfin-lex.o" -+ fi -+ ;; - -- CC=$ac_ct_CC --else -- CC="$ac_cv_prog_CC" --fi -+ fr30 | ip2k | iq2000 | m32r | openrisc) -+ using_cgen=yes -+ ;; - --if test -z "$CC"; then -- if test -n "$ac_tool_prefix"; then -- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. --set dummy ${ac_tool_prefix}cc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$CC"; then -- ac_cv_prog_CC="$CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_CC="${ac_tool_prefix}cc" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -+ m32c) -+ using_cgen=yes -+ ;; -+ frv) -+ using_cgen=yes -+ ;; -+ m68k) -+ case ${extra_objects} in -+ *m68k-parse.o*) ;; -+ *) extra_objects="$extra_objects m68k-parse.o" ;; -+ esac -+ ;; - --fi --fi --CC=$ac_cv_prog_CC --if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -+ mips) -+ echo ${extra_objects} | grep -s "itbl-parse.o" -+ if test $? -ne 0 ; then -+ extra_objects="$extra_objects itbl-parse.o" -+ fi - --fi --if test -z "$ac_cv_prog_CC"; then -- ac_ct_CC=$CC -- # Extract the first word of "cc", so it can be a program name with args. --set dummy cc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$ac_ct_CC"; then -- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_ac_ct_CC="cc" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -+ echo ${extra_objects} | grep -s "itbl-lex.o" -+ if test $? -ne 0 ; then -+ extra_objects="$extra_objects itbl-lex.o" -+ fi - --fi --fi --ac_ct_CC=$ac_cv_prog_ac_ct_CC --if test -n "$ac_ct_CC"; then -- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 --echo "${ECHO_T}$ac_ct_CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -+ echo ${extra_objects} | grep -s "itbl-ops.o" -+ if test $? -ne 0 ; then -+ extra_objects="$extra_objects itbl-ops.o" -+ fi -+ ;; - -- CC=$ac_ct_CC --else -- CC="$ac_cv_prog_CC" --fi -+ mt) -+ using_cgen=yes -+ ;; ++ retval = parse_reglist_tail(tail, regmask); ++ ++ switch (retval) ++ { ++ case -1: ++ regmask |= 1 << AVR32_REG_LR; ++ break; ++ case 0: ++ break; ++ case 1: ++ regmask |= 1 << AVR32_REG_R12; ++ break; ++ default: ++ break; ++ } ++ ++ kbit = 1; ++ } ++ ++ if (avr32_make_regmask8(regmask, &value)) ++ as_bad(_("register list `%s' doesn't fit"), str); ++ ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = (value << 1) | kbit; ++} ++ ++static void ++parse_reglist16(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regmask; ++ int slot; ++ char *tail; + -+ i386 | s390 | sparc) -+ if test $this_target = $target ; then ++ regmask = avr32_parse_reglist(str, &tail); ++ if (*tail) ++ as_bad(_("invalid register list `%s'"), str); + -+cat >>confdefs.h <<_ACEOF -+#define DEFAULT_ARCH "${arch}" -+_ACEOF ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regmask; ++} + -+ fi -+ ;; ++static void ++parse_reglist_ldm(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regmask; ++ int slot, rp, w_bit = 0; ++ char *tail, *p, c; + -+ xstormy16) -+ using_cgen=yes -+ ;; ++ for (p = str; *p && *p != ','; p++) ++ if (*p == '+') ++ break; + -+ xc16x) -+ using_cgen=yes -+ ;; ++ c = *p, *p = 0; ++ rp = avr32_parse_intreg(str); ++ *p = c; ++ if (rp < 0) ++ { ++ as_bad(_("invalid destination register in `%s'"), str); ++ return; ++ } + -+ xtensa) -+ echo ${extra_objects} | grep -s "xtensa-relax.o" -+ if test $? -ne 0 ; then -+ extra_objects="$extra_objects xtensa-relax.o" -+ fi -+ ;; ++ if (p[0] == '+' && p[1] == '+') ++ { ++ w_bit = 1; ++ p += 2; ++ } + -+ *) -+ ;; -+ esac ++ if (*p != ',') ++ { ++ as_bad(_("expected `,' after destination register in `%s'"), str); ++ return; ++ } + -+ if test $using_cgen = yes ; then -+ case "x${extra_objects}" in -+ *cgen.o*) ;; -+ *) extra_objects="$extra_objects cgen.o" ;; -+ esac -+ fi ++ str = p + 1; ++ regmask = avr32_parse_reglist(str, &tail); ++ if (*tail) ++ { ++ int retval; + -+# See if we really can support this configuration with the emulation code. ++ if (rp != AVR32_REG_SP) ++ { ++ as_bad(_("junk at end of line: `%s'"), tail); ++ return; ++ } + -+ if test $this_target = $target ; then -+ obj_format=$fmt -+ te_file=$em -+ fi ++ rp = AVR32_REG_PC; + -+# From target name and format, produce a list of supported emulations. -+ -+ case ${generic_target}-${fmt} in -+ mips-*-irix5*-*) emulation="mipsbelf mipslelf mipself mipsbecoff mipslecoff mipsecoff" ;; -+ mips*-*-linux*-*) case "$endian" in -+ big) emulation="mipsbelf mipslelf mipself" ;; -+ *) emulation="mipslelf mipsbelf mipself" ;; -+ esac ;; -+ mips-*-lnews*-ecoff) ;; -+ mips-*-*-ecoff) case "$endian" in -+ big) emulation="mipsbecoff mipslecoff mipsecoff" ;; -+ *) emulation="mipslecoff mipsbecoff mipsecoff" ;; -+ esac ;; -+ mips-*-*-elf) case "$endian" in -+ big) emulation="mipsbelf mipslelf mipself" ;; -+ *) emulation="mipslelf mipsbelf mipself" ;; -+ esac ;; -+ mips-*-sysv4*MP*-*) emulation="mipsbelf mipslelf mipself mipsbecoff mipslecoff mipsecoff" ;; -+ # i386-pc-pe-coff != i386-pc-coff. -+ i386-*-pe-coff) ;; -+ # Uncommenting the next line will turn on support for i386 AOUT -+ # for the default linux configuration -+ # i386-*-linux*-elf) emulation="i386elf i386aout" ;; -+ # -+ i386-*-aout) emulation="i386aout" ;; -+ i386-*-coff) emulation="i386coff" ;; -+ i386-*-elf) emulation="i386elf" ;; -+ -+ # Always all formats. The first stated emulation becomes the default. -+ cris-*-*aout*) emulation="crisaout criself" ;; -+ cris-*-*) emulation="criself crisaout" ;; -+ esac ++ retval = parse_reglist_tail(tail, regmask); + -+ emulations="$emulations $emulation" - --fi --if test -z "$CC"; then -- # Extract the first word of "cc", so it can be a program name with args. --set dummy cc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$CC"; then -- ac_cv_prog_CC="$CC" # Let the user override the test. --else -- ac_prog_rejected=no --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then -- ac_prog_rejected=yes -- continue -- fi -- ac_cv_prog_CC="cc" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done - done - --if test $ac_prog_rejected = yes; then -- # We found a bogon in the path, so make sure we never use it. -- set dummy $ac_cv_prog_CC -- shift -- if test $# != 0; then -- # We chose a different compiler from the bogus one. -- # However, it has the same basename, so the bogon will be chosen -- # first if we set CC to just the basename; use the full file name. -- shift -- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" -- fi --fi -+# Turn on all targets if possible -+if test ${all_targets} = "yes"; then -+ case ${target_cpu_type} in -+ i386) -+ case ${obj_format} in -+ aout) -+ emulations="$emulations i386coff i386elf" -+ ;; -+ coff) -+ emulations="$emulations i386aout i386elf" -+ ;; -+ elf) -+ emulations="$emulations i386aout i386coff" -+ ;; -+ esac -+ ;; -+ esac - fi ++ switch (retval) ++ { ++ case -1: ++ regmask |= 1 << AVR32_REG_LR; ++ break; ++ case 0: ++ break; ++ case 1: ++ regmask |= 1 << AVR32_REG_R12; ++ break; ++ default: ++ return; ++ } ++ } + -+# Assign floating point type. Most processors with FP support -+# IEEE FP. On those that don't support FP at all, usually IEEE -+# is emulated. -+case ${target_cpu} in -+ vax | tahoe ) atof=${target_cpu} ;; -+ pdp11) atof=vax ;; -+ *) atof=ieee ;; -+esac ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = rp; ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = w_bit; ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regmask; ++} + -+case "${obj_format}" in -+ "") { { echo "$as_me:$LINENO: error: GAS does not know what format to use for target ${target}" >&5 -+echo "$as_me: error: GAS does not know what format to use for target ${target}" >&2;} -+ { (exit 1); exit 1; }; } ;; -+esac ++static void ++parse_reglist_cp8(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regmask; ++ int slot, h_bit = 0; ++ char *tail; + -+# Unfortunately the cpu in cpu-opc.h file isn't always $(TARGET_CPU). -+cgen_cpu_prefix="" -+if test $using_cgen = yes ; then -+ case ${target_cpu} in -+ *) cgen_cpu_prefix=${target_cpu} ;; -+ esac ++ regmask = avr32_parse_cpreglist(str, &tail); ++ if (*tail) ++ as_bad(_("junk at end of line: `%s'"), tail); ++ else if (regmask & 0xffUL) ++ { ++ if (regmask & 0xff00UL) ++ as_bad(_("register list `%s' doesn't fit"), str); ++ regmask &= 0xff; ++ } ++ else if (regmask & 0xff00UL) ++ { ++ regmask >>= 8; ++ h_bit = 1; ++ } ++ else ++ as_warn(_("register list is empty")); + ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regmask; ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = h_bit; ++} + -+cat >>confdefs.h <<\_ACEOF -+#define USING_CGEN 1 -+_ACEOF ++static void ++parse_reglist_cpd8(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regmask, regmask_d = 0; ++ int slot, i; ++ char *tail; + - fi --CC=$ac_cv_prog_CC --if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 ++ regmask = avr32_parse_cpreglist(str, &tail); ++ if (*tail) ++ as_bad(_("junk at end of line: `%s'"), tail); + ++ for (i = 0; i < 8; i++) ++ { ++ if (regmask & 1) ++ { ++ if (!(regmask & 2)) ++ { ++ as_bad(_("register list `%s' doesn't fit"), str); ++ break; ++ } ++ regmask_d |= 1 << i; ++ } ++ else if (regmask & 2) ++ { ++ as_bad(_("register list `%s' doesn't fit"), str); ++ break; ++ } + -+if test ! -r ${srcdir}/config/tc-${target_cpu_type}.c; then -+ { { echo "$as_me:$LINENO: error: GAS does not support target CPU ${target_cpu_type}" >&5 -+echo "$as_me: error: GAS does not support target CPU ${target_cpu_type}" >&2;} -+ { (exit 1); exit 1; }; } - fi - -+if test ! -r ${srcdir}/config/obj-${obj_format}.c; then -+ { { echo "$as_me:$LINENO: error: GAS does not have support for object file format ${obj_format}" >&5 -+echo "$as_me: error: GAS does not have support for object file format ${obj_format}" >&2;} -+ { (exit 1); exit 1; }; } - fi --if test -z "$CC"; then -- if test -n "$ac_tool_prefix"; then -- for ac_prog in cl -- do -- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. --set dummy $ac_tool_prefix$ac_prog; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$CC"; then -- ac_cv_prog_CC="$CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_CC="$ac_tool_prefix$ac_prog" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi ++ regmask >>= 2; ++ } + -+# Some COFF configurations want these random other flags set. -+case ${obj_format} in -+ coff) -+ case ${target_cpu_type} in -+ i386) -+cat >>confdefs.h <<\_ACEOF -+#define I386COFF 1 -+_ACEOF -+ ;; -+ m68k) -+cat >>confdefs.h <<\_ACEOF -+#define M68KCOFF 1 -+_ACEOF -+ ;; -+ m88k) -+cat >>confdefs.h <<\_ACEOF -+#define M88KCOFF 1 -+_ACEOF -+ ;; -+ esac -+ ;; -+esac ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regmask_d; ++} + -+# Getting this done right is going to be a bitch. Each configuration specified -+# with --enable-targets=... should be checked for environment, format, cpu -+# setting. -+# -+# For each configuration, the necessary object file support code must be linked -+# in. This might be only one, it might be up to four. The necessary emulation -+# code needs to be provided, too. -+# -+# And then there's "--enable-targets=all".... -+# -+# For now, just always do it for MIPS ELF or ECOFF configurations. Sigh. -+ -+formats="${obj_format}" -+emfiles="" -+EMULATIONS="" -+_gas_uniq_list="$emulations" -+_gas_uniq_newlist="" -+for _gas_uniq_i in _gas_uniq_dummy $_gas_uniq_list ; do -+ case $_gas_uniq_i in -+ _gas_uniq_dummy) ;; -+ *) case " $_gas_uniq_newlist " in -+ *" $_gas_uniq_i "*) ;; -+ *) _gas_uniq_newlist="$_gas_uniq_newlist $_gas_uniq_i" ;; -+ esac ;; -+ esac - done -+emulations=$_gas_uniq_newlist -+ -+for em in . $emulations ; do -+ case $em in -+ .) continue ;; -+ mipsbelf | mipslelf | mipself) -+ fmt=elf file=mipself ;; -+ mipsbecoff | mipslecoff | mipsecoff) -+ fmt=ecoff file=mipsecoff ;; -+ *coff) -+ fmt=coff file=$em ;; -+ *aout) -+ fmt=aout file=$em ;; -+ *elf) -+ fmt=elf file=$em ;; -+ esac -+ formats="$formats $fmt" -+ emfiles="$emfiles e-$file.o" -+ EMULATIONS="$EMULATIONS &$em," - done -+_gas_uniq_list="$formats" -+_gas_uniq_newlist="" -+for _gas_uniq_i in _gas_uniq_dummy $_gas_uniq_list ; do -+ case $_gas_uniq_i in -+ _gas_uniq_dummy) ;; -+ *) case " $_gas_uniq_newlist " in -+ *" $_gas_uniq_i "*) ;; -+ *) _gas_uniq_newlist="$_gas_uniq_newlist $_gas_uniq_i" ;; -+ esac ;; -+ esac -+done -+formats=$_gas_uniq_newlist - -+_gas_uniq_list="$emfiles" -+_gas_uniq_newlist="" -+for _gas_uniq_i in _gas_uniq_dummy $_gas_uniq_list ; do -+ case $_gas_uniq_i in -+ _gas_uniq_dummy) ;; -+ *) case " $_gas_uniq_newlist " in -+ *" $_gas_uniq_i "*) ;; -+ *) _gas_uniq_newlist="$_gas_uniq_newlist $_gas_uniq_i" ;; -+ esac ;; -+ esac -+done -+emfiles=$_gas_uniq_newlist ++static void ++parse_retval(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ int regid, slot; + -+if test `set . $formats ; shift ; echo $#` -gt 1 ; then -+ for fmt in $formats ; do -+ case $fmt in -+ aout) -+cat >>confdefs.h <<\_ACEOF -+#define OBJ_MAYBE_AOUT 1 -+_ACEOF -+ ;; -+ bout) -+cat >>confdefs.h <<\_ACEOF -+#define OBJ_MAYBE_BOUT 1 -+_ACEOF -+ ;; -+ coff) -+cat >>confdefs.h <<\_ACEOF -+#define OBJ_MAYBE_COFF 1 -+_ACEOF -+ ;; -+ ecoff) -+cat >>confdefs.h <<\_ACEOF -+#define OBJ_MAYBE_ECOFF 1 -+_ACEOF -+ ;; -+ elf) -+cat >>confdefs.h <<\_ACEOF -+#define OBJ_MAYBE_ELF 1 -+_ACEOF -+ ;; -+ generic) -+cat >>confdefs.h <<\_ACEOF -+#define OBJ_MAYBE_GENERIC 1 -+_ACEOF -+ ;; -+ ieee) -+cat >>confdefs.h <<\_ACEOF -+#define OBJ_MAYBE_IEEE 1 -+_ACEOF -+ ;; -+ som) -+cat >>confdefs.h <<\_ACEOF -+#define OBJ_MAYBE_SOM 1 -+_ACEOF -+ ;; -+ esac -+ extra_objects="$extra_objects obj-$fmt.o" -+ done -+ obj_format=multi - fi --fi --CC=$ac_cv_prog_CC --if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+if test `set . $emfiles ; shift ; echo $#` -gt 0 ; then -+ DEFAULT_EMULATION=`set . $emulations ; echo $2` -+ # e-mips* has more than one emulation per file, e-i386* has just one at the -+ # moment. If only one emulation is specified, then don't define -+ # USE_EMULATIONS or include any of the e-files as they will only be bloat. -+ case "${obj_format}${emfiles}" in -+ multi* | *mips*) -+ extra_objects="$extra_objects $emfiles" ++ regid = avr32_parse_intreg(str); ++ if (regid < 0) ++ { ++ expressionS exp; ++ char *save; + -+cat >>confdefs.h <<\_ACEOF -+#define USE_EMULATIONS 1 -+_ACEOF -+ ;; -+ esac - fi - -- test -n "$CC" && break -- done --fi --if test -z "$CC"; then -- ac_ct_CC=$CC -- for ac_prog in cl --do -- # Extract the first word of "$ac_prog", so it can be a program name with args. --set dummy $ac_prog; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$ac_ct_CC"; then -- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_ac_ct_CC="$ac_prog" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done - --fi --fi --ac_ct_CC=$ac_cv_prog_ac_ct_CC --if test -n "$ac_ct_CC"; then -- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 --echo "${ECHO_T}$ac_ct_CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -+cat >>confdefs.h <<_ACEOF -+#define EMULATIONS $EMULATIONS -+_ACEOF - -- test -n "$ac_ct_CC" && break --done - -- CC=$ac_ct_CC --fi -+cat >>confdefs.h <<_ACEOF -+#define DEFAULT_EMULATION "$DEFAULT_EMULATION" -+_ACEOF - --fi - -+reject_dev_configs=yes - --test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH --See \`config.log' for more details." >&5 --echo "$as_me: error: no acceptable C compiler found in \$PATH --See \`config.log' for more details." >&2;} -+case ${reject_dev_configs}-${dev} in -+ yes-yes) # Oops. -+ { { echo "$as_me:$LINENO: error: GAS does not support the ${generic_target} configuration." >&5 -+echo "$as_me: error: GAS does not support the ${generic_target} configuration." >&2;} - { (exit 1); exit 1; }; } -+ ;; -+esac - --# Provide some information about the compiler. --echo "$as_me:$LINENO:" \ -- "checking for C compiler version" >&5 --ac_compiler=`set X $ac_compile; echo $2` --{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 -- (eval $ac_compiler --version &5) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } --{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 -- (eval $ac_compiler -v &5) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } --{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 -- (eval $ac_compiler -V &5) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } - --echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 --echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 --if test "${ac_cv_c_compiler_gnu+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ - --int --main () --{ --#ifndef __GNUC__ -- choke me --#endif - -- ; -- return 0; --} ++ regid = 0; ++ ++ save = input_line_pointer; ++ input_line_pointer = str; ++ expression(&exp); ++ input_line_pointer = save; + ++ if (exp.X_op != O_constant) ++ as_bad(_("invalid return value `%s'"), str); ++ else ++ switch (exp.X_add_number) ++ { ++ case -1: ++ regid = AVR32_REG_LR; ++ break; ++ case 0: ++ regid = AVR32_REG_SP; ++ break; ++ case 1: ++ regid = AVR32_REG_PC; ++ break; ++ default: ++ as_bad(_("invalid return value `%s'"), str); ++ break; ++ } ++ } + ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++} + -+# do we need the opcodes library? -+case "${need_opcodes}" in -+yes) -+ OPCODES_LIB=../opcodes/libopcodes.la -+ ;; -+esac ++#define parse_mcall parse_intreg_disp ++ ++static void ++parse_jospinc(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ expressionS exp; ++ int slot; ++ char *save; ++ ++ save = input_line_pointer; ++ input_line_pointer = str; ++ expression(&exp); ++ input_line_pointer = save; ++ ++ slot = current_insn.next_slot++; ++ ++ if (exp.X_op == O_constant) ++ { ++ if (exp.X_add_number > 0) ++ exp.X_add_number--; ++ current_insn.field_value[slot].value = exp.X_add_number; ++ } ++ else ++ as_bad(_("invalid numeric expression `%s'"), str); ++} ++ ++#define parse_coh parse_nothing ++ ++static void ++parse_fpreg(const struct avr32_operand *op, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regid; ++ int slot; ++ ++ regid = strtoul(str + 2, NULL, 10); ++ ++ if ((regid >= 16) || (regid & ((1 << op->align_order) - 1))) ++ as_bad(_("invalid floating-point register `%s'"), str); ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++ current_insn.field_value[slot].align_order = op->align_order; ++} ++ ++static void ++parse_picoreg(const struct avr32_operand *op, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regid; ++ int slot; ++ ++ regid = avr32_parse_picoreg(str); ++ if (regid & ((1 << op->align_order) - 1)) ++ as_bad(_("invalid double-word PiCo register `%s'"), str); ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++ current_insn.field_value[slot].align_order = op->align_order; ++} ++ ++static void ++parse_pico_reglist_w(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regmask; ++ int slot, h_bit = 0; ++ char *tail; ++ ++ regmask = avr32_parse_pico_reglist(str, &tail); ++ if (*tail) ++ as_bad(_("junk at end of line: `%s'"), tail); ++ ++ if (regmask & 0x00ffUL) ++ { ++ if (regmask & 0xff00UL) ++ as_bad(_("register list `%s' doesn't fit"), str); ++ regmask &= 0x00ffUL; ++ } ++ else if (regmask & 0xff00UL) ++ { ++ regmask >>= 8; ++ h_bit = 1; ++ } ++ else ++ as_warn(_("register list is empty")); ++ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regmask; ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = h_bit; ++} + -+BFDLIB=../bfd/libbfd.la -+BFDVER_H=../bfd/bfdver.h -+ALL_OBJ_DEPS="$ALL_OBJ_DEPS"' ../bfd/bfd.h $(INCDIR)/symcat.h' ++static void ++parse_pico_reglist_d(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regmask, regmask_d = 0; ++ int slot, i; ++ char *tail; + ++ regmask = avr32_parse_pico_reglist(str, &tail); ++ if (*tail) ++ as_bad(_("junk at end of line: `%s'"), tail); + ++ for (i = 0; i < 8; i++) ++ { ++ if (regmask & 1) ++ { ++ if (!(regmask & 2)) ++ { ++ as_bad(_("register list `%s' doesn't fit"), str); ++ break; ++ } ++ regmask_d |= 1 << i; ++ } ++ else if (regmask & 2) ++ { ++ as_bad(_("register list `%s' doesn't fit"), str); ++ break; ++ } + ++ regmask >>= 2; ++ } + ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regmask_d; ++} + ++static void ++parse_pico_in(const struct avr32_operand *op ATTRIBUTE_UNUSED, ++ char *str, int opindex ATTRIBUTE_UNUSED) ++{ ++ unsigned long regid; ++ int slot; + ++ regid = strtoul(str + 2, NULL, 10); + ++ if (regid >= 12) ++ as_bad(_("invalid PiCo IN register `%s'"), str); + -+cat >>confdefs.h <<_ACEOF -+#define TARGET_ALIAS "${target_alias}" - _ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_compiler_gnu=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 - --ac_compiler_gnu=no --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --ac_cv_c_compiler_gnu=$ac_compiler_gnu - --fi --echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 --echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 --GCC=`test $ac_compiler_gnu = yes && echo yes` --ac_test_CFLAGS=${CFLAGS+set} --ac_save_CFLAGS=$CFLAGS --CFLAGS="-g" --echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 --echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 --if test "${ac_cv_prog_cc_g+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ -+cat >>confdefs.h <<_ACEOF -+#define TARGET_CANONICAL "${target}" - _ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ - --int --main () --{ - -- ; -- return 0; --} -+cat >>confdefs.h <<_ACEOF -+#define TARGET_CPU "${target_cpu}" - _ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_prog_cc_g=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_prog_cc_g=no --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --fi --echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 --echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 --if test "$ac_test_CFLAGS" = set; then -- CFLAGS=$ac_save_CFLAGS --elif test $ac_cv_prog_cc_g = yes; then -- if test "$GCC" = yes; then -- CFLAGS="-g -O2" -- else -- CFLAGS="-g" -- fi --else -- if test "$GCC" = yes; then -- CFLAGS="-O2" -- else -- CFLAGS= -- fi --fi --echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 --echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 --if test "${ac_cv_prog_cc_stdc+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- ac_cv_prog_cc_stdc=no --ac_save_CC=$CC --cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ ++ slot = current_insn.next_slot++; ++ current_insn.field_value[slot].value = regid; ++ current_insn.field_value[slot].align_order = 0; ++} + -+cat >>confdefs.h <<_ACEOF -+#define TARGET_VENDOR "${target_vendor}" - _ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#include --#include --#include --#include --/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ --struct buf { int x; }; --FILE * (*rcsopen) (struct buf *, struct stat *, int); --static char *e (p, i) -- char **p; -- int i; --{ -- return p[i]; --} --static char *f (char * (*g) (char **, int), char **p, ...) --{ -- char *s; -- va_list v; -- va_start (v,p); -- s = g (p, va_arg (v,int)); -- va_end (v); -- return s; --} - --/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has -- function prototypes and stuff, but not '\xHH' hex character constants. -- These don't provoke an error unfortunately, instead are silently treated -- as 'x'. The following induces an error, until -std1 is added to get -- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an -- array size at least. It's necessary to write '\x00'==0 to get something -- that's true only with -std1. */ --int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - --int test (int i, double x); --struct s1 {int (*f) (int a);}; --struct s2 {int (*f) (double a);}; --int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); --int argc; --char **argv; --int --main () --{ --return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; -- ; -- return 0; --} -+cat >>confdefs.h <<_ACEOF -+#define TARGET_OS "${target_os}" - _ACEOF --# Don't try gcc -ansi; that turns off useful extensions and --# breaks some systems' header files. --# AIX -qlanglvl=ansi --# Ultrix and OSF/1 -std1 --# HP-UX 10.20 and later -Ae --# HP-UX older versions -Aa -D_HPUX_SOURCE --# SVR4 -Xc -D__EXTENSIONS__ --for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" --do -- CC="$ac_save_CC $ac_arg" -- rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_prog_cc_stdc=$ac_arg --break ++#define parse_pico_out0 parse_nothing ++#define parse_pico_out1 parse_nothing ++#define parse_pico_out2 parse_nothing ++#define parse_pico_out3 parse_nothing + ++#define OP(name, sgn, pcrel, align, func) \ ++ { AVR32_OPERAND_##name, sgn, pcrel, align, match_##func, parse_##func } + -+ac_ext=c -+ac_cpp='$CPP $CPPFLAGS' -+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -+ac_compiler_gnu=$ac_cv_c_compiler_gnu -+if test -n "$ac_tool_prefix"; then -+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -+set dummy ${ac_tool_prefix}gcc; ac_word=$2 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -+if test "${ac_cv_prog_CC+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -+ if test -n "$CC"; then -+ ac_cv_prog_CC="$CC" # Let the user override the test. -+else -+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -+ ac_cv_prog_CC="${ac_tool_prefix}gcc" -+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ break 2 -+ fi -+done -+done -+IFS=$as_save_IFS ++struct avr32_operand avr32_operand_table[] = { ++ OP(INTREG, 0, 0, 0, intreg), ++ OP(INTREG_PREDEC, 0, 0, 0, intreg_predec), ++ OP(INTREG_POSTINC, 0, 0, 0, intreg_postinc), ++ OP(INTREG_LSL, 0, 0, 0, intreg_lsl), ++ OP(INTREG_LSR, 0, 0, 0, intreg_lsr), ++ OP(INTREG_BSEL, 0, 0, 0, intreg_part), ++ OP(INTREG_HSEL, 0, 0, 1, intreg_part), ++ OP(INTREG_SDISP, 1, 0, 0, intreg_disp), ++ OP(INTREG_SDISP_H, 1, 0, 1, intreg_disp), ++ OP(INTREG_SDISP_W, 1, 0, 2, intreg_disp), ++ OP(INTREG_UDISP, 0, 0, 0, intreg_disp), ++ OP(INTREG_UDISP_H, 0, 0, 1, intreg_disp), ++ OP(INTREG_UDISP_W, 0, 0, 2, intreg_disp), ++ OP(INTREG_INDEX, 0, 0, 0, intreg_index), ++ OP(INTREG_XINDEX, 0, 0, 0, intreg_xindex), ++ OP(DWREG, 0, 0, 1, intreg), ++ OP(PC_UDISP_W, 0, 1, 2, pc_disp), ++ OP(SP, 0, 0, 0, sp), ++ OP(SP_UDISP_W, 0, 0, 2, sp_disp), ++ OP(CPNO, 0, 0, 0, cpno), ++ OP(CPREG, 0, 0, 0, cpreg), ++ OP(CPREG_D, 0, 0, 1, cpreg), ++ OP(UNSIGNED_CONST, 0, 0, 0, const), ++ OP(UNSIGNED_CONST_W, 0, 0, 2, const), ++ OP(SIGNED_CONST, 1, 0, 0, const), ++ OP(SIGNED_CONST_W, 1, 0, 2, const), ++ OP(JMPLABEL, 1, 1, 1, jmplabel), ++ OP(UNSIGNED_NUMBER, 0, 0, 0, number), ++ OP(UNSIGNED_NUMBER_W, 0, 0, 2, number), ++ OP(REGLIST8, 0, 0, 0, reglist8), ++ OP(REGLIST9, 0, 0, 0, reglist9), ++ OP(REGLIST16, 0, 0, 0, reglist16), ++ OP(REGLIST_LDM, 0, 0, 0, reglist_ldm), ++ OP(REGLIST_CP8, 0, 0, 0, reglist_cp8), ++ OP(REGLIST_CPD8, 0, 0, 0, reglist_cpd8), ++ OP(RETVAL, 0, 0, 0, retval), ++ OP(MCALL, 1, 0, 2, mcall), ++ OP(JOSPINC, 0, 0, 0, jospinc), ++ OP(COH, 0, 0, 0, coh), ++ OP(FPREG_S, 0, 0, 0, fpreg), ++ OP(FPREG_D, 0, 0, 1, fpreg), ++ OP(PICO_REG_W, 0, 0, 0, picoreg), ++ OP(PICO_REG_D, 0, 0, 1, picoreg), ++ OP(PICO_REGLIST_W, 0, 0, 0, pico_reglist_w), ++ OP(PICO_REGLIST_D, 0, 0, 0, pico_reglist_d), ++ OP(PICO_IN, 0, 0, 0, pico_in), ++ OP(PICO_OUT0, 0, 0, 0, pico_out0), ++ OP(PICO_OUT1, 0, 0, 0, pico_out1), ++ OP(PICO_OUT2, 0, 0, 0, pico_out2), ++ OP(PICO_OUT3, 0, 0, 0, pico_out3), ++}; + -+fi -+fi -+CC=$ac_cv_prog_CC -+if test -n "$CC"; then -+ { echo "$as_me:$LINENO: result: $CC" >&5 -+echo "${ECHO_T}$CC" >&6; } -+else -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } -+fi ++symbolS * ++md_undefined_symbol (char *name ATTRIBUTE_UNUSED) ++{ ++ pr_debug("md_undefined_symbol: %s\n", name); ++ return 0; ++} + - - fi --rm -f conftest.err conftest.$ac_objext -+if test -z "$ac_cv_prog_CC"; then -+ ac_ct_CC=$CC -+ # Extract the first word of "gcc", so it can be a program name with args. -+set dummy gcc; ac_word=$2 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ if test -n "$ac_ct_CC"; then -+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -+else -+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -+ ac_cv_prog_ac_ct_CC="gcc" -+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ break 2 -+ fi - done --rm -f conftest.$ac_ext conftest.$ac_objext --CC=$ac_save_CC -+done -+IFS=$as_save_IFS - - fi -+fi -+ac_ct_CC=$ac_cv_prog_ac_ct_CC -+if test -n "$ac_ct_CC"; then -+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -+echo "${ECHO_T}$ac_ct_CC" >&6; } -+else -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } -+fi - --case "x$ac_cv_prog_cc_stdc" in -- x|xno) -- echo "$as_me:$LINENO: result: none needed" >&5 --echo "${ECHO_T}none needed" >&6 ;; -- *) -- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 --echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 -- CC="$CC $ac_cv_prog_cc_stdc" ;; -+ if test "x$ac_ct_CC" = x; then -+ CC="" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&5 -+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&2;} -+ac_tool_warned=yes ;; - esac -+ CC=$ac_ct_CC -+ fi -+else -+ CC="$ac_cv_prog_CC" -+fi - --# Some people use a C++ compiler to compile C. Since we use `exit', --# in C++ we need to declare it. In case someone uses the same compiler --# for both compiling C and C++ we need to have the C++ compiler decide --# the declaration of exit, since it's the most demanding environment. --cat >conftest.$ac_ext <<_ACEOF --#ifndef __cplusplus -- choke me --#endif --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- for ac_declaration in \ -- '' \ -- 'extern "C" void std::exit (int) throw (); using std::exit;' \ -- 'extern "C" void std::exit (int); using std::exit;' \ -- 'extern "C" void exit (int) throw ();' \ -- 'extern "C" void exit (int);' \ -- 'void exit (int);' --do -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --$ac_declaration --#include --int --main () --{ --exit (42); -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- : -+if test -z "$CC"; then -+ if test -n "$ac_tool_prefix"; then -+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -+set dummy ${ac_tool_prefix}cc; ac_word=$2 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -+if test "${ac_cv_prog_CC+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -+ if test -n "$CC"; then -+ ac_cv_prog_CC="$CC" # Let the user override the test. -+else -+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -+ ac_cv_prog_CC="${ac_tool_prefix}cc" -+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ break 2 -+ fi -+done -+done -+IFS=$as_save_IFS - --continue - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --$ac_declaration --int --main () --{ --exit (42); -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- break -+fi -+CC=$ac_cv_prog_CC -+if test -n "$CC"; then -+ { echo "$as_me:$LINENO: result: $CC" >&5 -+echo "${ECHO_T}$CC" >&6; } - else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } -+fi - ++struct avr32_relax_type ++{ ++ long lower_bound; ++ long upper_bound; ++ unsigned char align; ++ unsigned char length; ++ signed short next; ++}; + -+ fi - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -+if test -z "$CC"; then -+ # Extract the first word of "cc", so it can be a program name with args. -+set dummy cc; ac_word=$2 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -+if test "${ac_cv_prog_CC+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ if test -n "$CC"; then -+ ac_cv_prog_CC="$CC" # Let the user override the test. -+else -+ ac_prog_rejected=no -+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then -+ ac_prog_rejected=yes -+ continue -+ fi -+ ac_cv_prog_CC="cc" -+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ break 2 -+ fi - done --rm -f conftest* --if test -n "$ac_declaration"; then -- echo '#ifdef __cplusplus' >>confdefs.h -- echo $ac_declaration >>confdefs.h -- echo '#endif' >>confdefs.h --fi -+done -+IFS=$as_save_IFS - -+if test $ac_prog_rejected = yes; then -+ # We found a bogon in the path, so make sure we never use it. -+ set dummy $ac_cv_prog_CC -+ shift -+ if test $# != 0; then -+ # We chose a different compiler from the bogus one. -+ # However, it has the same basename, so the bogon will be chosen -+ # first if we set CC to just the basename; use the full file name. -+ shift -+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" -+ fi -+fi -+fi -+fi -+CC=$ac_cv_prog_CC -+if test -n "$CC"; then -+ { echo "$as_me:$LINENO: result: $CC" >&5 -+echo "${ECHO_T}$CC" >&6; } - else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --ac_ext=c --ac_cpp='$CPP $CPPFLAGS' --ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' --ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' --ac_compiler_gnu=$ac_cv_c_compiler_gnu - - --for ac_prog in 'bison -y' byacc --do -- # Extract the first word of "$ac_prog", so it can be a program name with args. --set dummy $ac_prog; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_YACC+set}" = set; then -+fi -+if test -z "$CC"; then -+ if test -n "$ac_tool_prefix"; then -+ for ac_prog in cl.exe -+ do -+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -+set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -+if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- if test -n "$YACC"; then -- ac_cv_prog_YACC="$YACC" # Let the user override the test. -+ if test -n "$CC"; then -+ ac_cv_prog_CC="$CC" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH -@@ -5918,40 +6574,43 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_YACC="$ac_prog" -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi --YACC=$ac_cv_prog_YACC --if test -n "$YACC"; then -- echo "$as_me:$LINENO: result: $YACC" >&5 --echo "${ECHO_T}$YACC" >&6 -+CC=$ac_cv_prog_CC -+if test -n "$CC"; then -+ { echo "$as_me:$LINENO: result: $CC" >&5 -+echo "${ECHO_T}$CC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - -- test -n "$YACC" && break --done --test -n "$YACC" || YACC="yacc" - --for ac_prog in flex lex -+ test -n "$CC" && break -+ done -+fi -+if test -z "$CC"; then -+ ac_ct_CC=$CC -+ for ac_prog in cl.exe - do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_LEX+set}" = set; then -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- if test -n "$LEX"; then -- ac_cv_prog_LEX="$LEX" # Let the user override the test. -+ if test -n "$ac_ct_CC"; then -+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH -@@ -5959,277 +6618,432 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_LEX="$ac_prog" -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -+ ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi --LEX=$ac_cv_prog_LEX --if test -n "$LEX"; then -- echo "$as_me:$LINENO: result: $LEX" >&5 --echo "${ECHO_T}$LEX" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ac_ct_CC=$ac_cv_prog_ac_ct_CC -+if test -n "$ac_ct_CC"; then -+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -+echo "${ECHO_T}$ac_ct_CC" >&6; } -+else -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } -+fi ++#define EMPTY { 0, 0, 0, 0, -1 } ++#define C(lower, upper, align, next) \ ++ { (lower), (upper), (align), 2, AVR32_OPC_##next } ++#define E(lower, upper, align) \ ++ { (lower), (upper), (align), 4, -1 } + ++static const struct avr32_relax_type avr32_relax_table[] = ++ { ++ /* 0 */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, ++ E(0, 65535, 0), E(0, 65535, 0), E(0, 65535, 0), E(0, 65535, 0), ++ EMPTY, ++ /* 16 */ ++ EMPTY, EMPTY, EMPTY, EMPTY, + -+ test -n "$ac_ct_CC" && break -+done ++ C(-256, 254, 1, BREQ2), C(-256, 254, 1, BRNE2), ++ C(-256, 254, 1, BRCC2), C(-256, 254, 1, BRCS2), ++ C(-256, 254, 1, BRGE2), C(-256, 254, 1, BRLT2), ++ C(-256, 254, 1, BRMI2), C(-256, 254, 1, BRPL2), ++ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), ++ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), ++ /* 32 */ ++ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), ++ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), ++ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), ++ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), ++ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), ++ E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), + -+ if test "x$ac_ct_CC" = x; then -+ CC="" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&5 -+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&2;} -+ac_tool_warned=yes ;; -+esac -+ CC=$ac_ct_CC -+ fi -+fi ++ EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 48 */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, + - fi - -- test -n "$LEX" && break --done --test -n "$LEX" || LEX=":" - --if test -z "$LEXLIB" --then -- echo "$as_me:$LINENO: checking for yywrap in -lfl" >&5 --echo $ECHO_N "checking for yywrap in -lfl... $ECHO_C" >&6 --if test "${ac_cv_lib_fl_yywrap+set}" = set; then -+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -+See \`config.log' for more details." >&5 -+echo "$as_me: error: no acceptable C compiler found in \$PATH -+See \`config.log' for more details." >&2;} -+ { (exit 1); exit 1; }; } ++ C(-32, 31, 0, CP_W3), E(-1048576, 1048575, 0), + -+# Provide some information about the compiler. -+echo "$as_me:$LINENO: checking for C compiler version" >&5 -+ac_compiler=`set X $ac_compile; echo $2` -+{ (ac_try="$ac_compiler --version >&5" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compiler --version >&5") 2>&5 -+ ac_status=$? -+ echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } -+{ (ac_try="$ac_compiler -v >&5" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compiler -v >&5") 2>&5 -+ ac_status=$? -+ echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } -+{ (ac_try="$ac_compiler -V >&5" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compiler -V >&5") 2>&5 -+ ac_status=$? -+ echo "$as_me:$LINENO: \$? = $ac_status" >&5 -+ (exit $ac_status); } ++ EMPTY, EMPTY, EMPTY, ++ /* 64: csrfcz */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ E(0, 65535, 0), E(0, 65535, 0), ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ E(-32768, 32767, 0), ++ /* 80: LD_SB2 */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, + -+{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } -+if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- ac_check_lib_save_LIBS=$LIBS --LIBS="-lfl $LIBS" --cat >conftest.$ac_ext <<_ACEOF -+ cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - --/* Override any gcc2 internal prototype to avoid an error. */ --#ifdef __cplusplus --extern "C" --#endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ --char yywrap (); - int - main () - { --yywrap (); -+#ifndef __GNUC__ -+ choke me -+#endif ++ C(0, 7, 0, LD_UB4), E(-32768, 32767, 0), + - ; - return 0; - } - _ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_lib_fl_yywrap=yes -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_compiler_gnu=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_lib_fl_yywrap=no -+ ac_compiler_gnu=no - fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --LIBS=$ac_check_lib_save_LIBS ++ EMPTY, ++ EMPTY, EMPTY, + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ac_cv_c_compiler_gnu=$ac_compiler_gnu ++ C(0, 14, 1, LD_SH4), E(-32768, 32767, 0), + - fi --echo "$as_me:$LINENO: result: $ac_cv_lib_fl_yywrap" >&5 --echo "${ECHO_T}$ac_cv_lib_fl_yywrap" >&6 --if test $ac_cv_lib_fl_yywrap = yes; then -- LEXLIB="-lfl" --else -- echo "$as_me:$LINENO: checking for yywrap in -ll" >&5 --echo $ECHO_N "checking for yywrap in -ll... $ECHO_C" >&6 --if test "${ac_cv_lib_l_yywrap+set}" = set; then -+{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } -+GCC=`test $ac_compiler_gnu = yes && echo yes` -+ac_test_CFLAGS=${CFLAGS+set} -+ac_save_CFLAGS=$CFLAGS -+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } -+if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- ac_check_lib_save_LIBS=$LIBS --LIBS="-ll $LIBS" --cat >conftest.$ac_ext <<_ACEOF -+ ac_save_c_werror_flag=$ac_c_werror_flag -+ ac_c_werror_flag=yes -+ ac_cv_prog_cc_g=no -+ CFLAGS="-g" -+ cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - --/* Override any gcc2 internal prototype to avoid an error. */ --#ifdef __cplusplus --extern "C" --#endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ --char yywrap (); - int - main () - { --yywrap (); ++ EMPTY, EMPTY, EMPTY, + - ; - return 0; - } - _ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_prog_cc_g=yes -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 ++ C(0, 14, 1, LD_UH4), E(-32768, 32767, 0), ++ ++ EMPTY, EMPTY, EMPTY, EMPTY, ++ ++ C(0, 124, 2, LD_W4), E(-32768, 32767, 0), ++ ++ E(0, 1020, 2), /* LDC_D1 */ ++ EMPTY, EMPTY, ++ E(0, 1020, 2), /* LDC_W1 */ ++ EMPTY, EMPTY, ++ E(0, 16380, 2), /* LDC0_D */ ++ E(0, 16380, 2), /* LDC0_W */ ++ EMPTY, EMPTY, EMPTY, EMPTY, ++ ++ C(0, 508, 2, LDDPC_EXT), E(-32768, 32767, 0), ++ ++ EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 128: MACHH_W */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ E(-131072, 131068, 2), /* MCALL */ ++ E(0, 1020, 2), /* MFDR */ ++ E(0, 1020, 2), /* MFSR */ ++ EMPTY, EMPTY, ++ ++ C(-128, 127, 0, MOV2), E(-1048576, 1048575, 0), ++ ++ EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ ++ E(-128, 127, 0), /* MOVEQ2 */ ++ E(-128, 127, 0), /* MOVNE2 */ ++ E(-128, 127, 0), /* MOVCC2 */ ++ E(-128, 127, 0), /* 160: MOVCS2 */ ++ E(-128, 127, 0), /* MOVGE2 */ ++ E(-128, 127, 0), /* MOVLT2 */ ++ E(-128, 127, 0), /* MOVMI2 */ ++ E(-128, 127, 0), /* MOVPL2 */ ++ E(-128, 127, 0), /* MOVLS2 */ ++ E(-128, 127, 0), /* MOVGT2 */ ++ E(-128, 127, 0), /* MOVLE2 */ ++ E(-128, 127, 0), /* MOVHI2 */ ++ E(-128, 127, 0), /* MOVVS2 */ ++ E(-128, 127, 0), /* MOVVC2 */ ++ E(-128, 127, 0), /* MOVQS2 */ ++ E(-128, 127, 0), /* MOVAL2 */ ++ ++ E(0, 1020, 2), /* MTDR */ ++ E(0, 1020, 2), /* MTSR */ ++ EMPTY, ++ EMPTY, ++ E(-128, 127, 0), /* MUL3 */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 192: MVCR_W */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ E(0, 65535, 0), E(0, 65535, 0), ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 224: PASR_H */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 256: PUNPCKSB_H */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ ++ C(-1024, 1022, 1, RCALL2), E(-2097152, 2097150, 1), ++ ++ EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, ++ ++ C(-1024, 1022, 1, BRAL), ++ ++ EMPTY, EMPTY, EMPTY, ++ E(-128, 127, 0), /* RSUB2 */ ++ /* 288: SATADD_H */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ E(0, 255, 0), /* SLEEP */ ++ EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 320: ST_B2 */ ++ EMPTY, EMPTY, ++ C(0, 7, 0, ST_B4), E(-32768, 32767, 0), ++ EMPTY, EMPTY, EMPTY, EMPTY, ++ E(-32768, 32767, 0), ++ EMPTY, EMPTY, EMPTY, ++ C(0, 14, 1, ST_H4), E(-32768, 32767, 0), ++ EMPTY, EMPTY, ++ EMPTY, ++ C(0, 60, 2, ST_W4), E(-32768, 32767, 0), ++ E(0, 1020, 2), /* STC_D1 */ ++ EMPTY, EMPTY, ++ E(0, 1020, 2), /* STC_W1 */ ++ EMPTY, EMPTY, ++ E(0, 16380, 2), /* STC0_D */ ++ E(0, 16380, 2), /* STC0_W */ ++ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 352: STDSP */ ++ EMPTY, EMPTY, ++ E(0, 1020, 2), /* STHH_W1 */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ EMPTY, EMPTY, EMPTY, ++ E(-32768, 32767, 0), ++ C(-512, 508, 2, SUB4), ++ C(-128, 127, 0, SUB4), E(-1048576, 1048576, 0), ++ /* SUB{cond} */ ++ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), ++ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), ++ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), ++ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), ++ /* SUBF{cond} */ ++ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), ++ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), ++ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), ++ E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), ++ EMPTY, ++ ++ /* 400: SWAP_B */ ++ EMPTY, EMPTY, EMPTY, ++ E(0, 255, 0), /* SYNC */ ++ EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 408: TST */ ++ EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, ++ /* 416: EXTRACT_B */ ++ EMPTY, EMPTY, EMPTY, EMPTY, ++ }; + -+ CFLAGS="" -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ ++#undef E ++#undef C ++#undef EMPTY + -+int -+main () ++#define AVR32_RS_NONE (-1) ++ ++#define avr32_rs_size(state) (avr32_relax_table[(state)].length) ++#define avr32_rs_align(state) (avr32_relax_table[(state)].align) ++#define relax_more(state) (avr32_relax_table[(state)].next) ++ ++#define opc_initial_substate(opc) ((opc)->id) ++ ++static int need_relax(int subtype, offsetT distance) +{ ++ offsetT upper_bound, lower_bound; ++ ++ upper_bound = avr32_relax_table[subtype].upper_bound; ++ lower_bound = avr32_relax_table[subtype].lower_bound; ++ ++ if (distance & ((1 << avr32_rs_align(subtype)) - 1)) ++ return 1; ++ if ((distance > upper_bound) || (distance < lower_bound)) ++ return 1; + -+ ; + return 0; +} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ : -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 + -+ ac_c_werror_flag=$ac_save_c_werror_flag -+ CFLAGS="-g" -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ ++enum { ++ LDA_SUBTYPE_MOV1, ++ LDA_SUBTYPE_MOV2, ++ LDA_SUBTYPE_SUB, ++ LDA_SUBTYPE_LDDPC, ++ LDA_SUBTYPE_LDW, ++ LDA_SUBTYPE_GOTLOAD, ++ LDA_SUBTYPE_GOTLOAD_LARGE, ++}; + -+int -+main () ++enum { ++ CALL_SUBTYPE_RCALL1, ++ CALL_SUBTYPE_RCALL2, ++ CALL_SUBTYPE_MCALL_CP, ++ CALL_SUBTYPE_MCALL_GOT, ++ CALL_SUBTYPE_MCALL_LARGE, ++}; ++ ++#define LDA_INITIAL_SIZE (avr32_pic ? 4 : 2) ++#define CALL_INITIAL_SIZE 2 ++ ++#define need_reloc(sym, seg, pcrel) \ ++ (!(S_IS_DEFINED(sym) \ ++ && ((pcrel && S_GET_SEGMENT(sym) == seg) \ ++ || (!pcrel && S_GET_SEGMENT(sym) == absolute_section))) \ ++ || S_FORCE_RELOC(sym, 1)) ++ ++/* Return an initial guess of the length by which a fragment must grow to ++ hold a branch to reach its destination. ++ Also updates fr_type/fr_subtype as necessary. ++ ++ Called just before doing relaxation. ++ Any symbol that is now undefined will not become defined. ++ The guess for fr_var is ACTUALLY the growth beyond fr_fix. ++ Whatever we do to grow fr_fix or fr_var contributes to our returned value. ++ Although it may not be explicit in the frag, pretend fr_var starts with a ++ 0 value. */ ++ ++static int ++avr32_default_estimate_size_before_relax (fragS *fragP, segT segment) +{ ++ int growth = 0; + -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? -+ grep -v '^ *+' conftest.er1 >conftest.err -+ rm -f conftest.er1 -+ cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_lib_l_yywrap=yes -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_prog_cc_g=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_lib_l_yywrap=no --fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --LIBS=$ac_check_lib_save_LIBS --fi --echo "$as_me:$LINENO: result: $ac_cv_lib_l_yywrap" >&5 --echo "${ECHO_T}$ac_cv_lib_l_yywrap" >&6 --if test $ac_cv_lib_l_yywrap = yes; then -- LEXLIB="-ll" ++ assert(fragP); ++ assert(fragP->fr_symbol); + - fi - -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - --if test "x$LEX" != "x:"; then -- echo "$as_me:$LINENO: checking lex output file root" >&5 --echo $ECHO_N "checking lex output file root... $ECHO_C" >&6 --if test "${ac_cv_prog_lex_root+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- # The minimal lex program is just a single line: %%. But some broken lexes --# (Solaris, I think it was) want two %% lines, so accommodate them. --cat >conftest.l <<_ACEOF --%% --%% --_ACEOF --{ (eval echo "$as_me:$LINENO: \"$LEX conftest.l\"") >&5 -- (eval $LEX conftest.l) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } --if test -f lex.yy.c; then -- ac_cv_prog_lex_root=lex.yy --elif test -f lexyy.c; then -- ac_cv_prog_lex_root=lexyy --else -- { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5 --echo "$as_me: error: cannot find output from $LEX; giving up" >&2;} -- { (exit 1); exit 1; }; } -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ ac_c_werror_flag=$ac_save_c_werror_flag - fi -+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } -+if test "$ac_test_CFLAGS" = set; then -+ CFLAGS=$ac_save_CFLAGS -+elif test $ac_cv_prog_cc_g = yes; then -+ if test "$GCC" = yes; then -+ CFLAGS="-g -O2" -+ else -+ CFLAGS="-g" -+ fi -+else -+ if test "$GCC" = yes; then -+ CFLAGS="-O2" ++ if (fragP->tc_frag_data.force_extended ++ || need_reloc(fragP->fr_symbol, segment, fragP->tc_frag_data.pcrel)) ++ { ++ int largest_state = fragP->fr_subtype; ++ while (relax_more(largest_state) != AVR32_RS_NONE) ++ largest_state = relax_more(largest_state); ++ growth = avr32_rs_size(largest_state) - fragP->fr_var; ++ } + else -+ CFLAGS= -+ fi - fi --echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5 --echo "${ECHO_T}$ac_cv_prog_lex_root" >&6 --rm -f conftest.l --LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root -- --echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5 --echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6 --if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then -+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 -+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } -+if test "${ac_cv_prog_cc_c89+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- # POSIX says lex can declare yytext either as a pointer or an array; the --# default is implementation-dependent. Figure out which it is, since --# not all implementations provide the %pointer and %array declarations. --ac_cv_prog_lex_yytext_pointer=no --echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c --ac_save_LIBS=$LIBS --LIBS="$LIBS $LEXLIB" -+ ac_cv_prog_cc_c89=no -+ac_save_CC=$CC - cat >conftest.$ac_ext <<_ACEOF --`cat $LEX_OUTPUT_ROOT.c` -+/* confdefs.h. */ - _ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include -+#include -+#include -+#include -+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -+struct buf { int x; }; -+FILE * (*rcsopen) (struct buf *, struct stat *, int); -+static char *e (p, i) -+ char **p; -+ int i; -+{ -+ return p[i]; ++ { ++ growth = avr32_rs_size(fragP->fr_subtype) - fragP->fr_var; ++ } ++ ++ pr_debug("%s:%d: md_estimate_size_before_relax: %d\n", ++ fragP->fr_file, fragP->fr_line, growth); ++ ++ return growth; +} -+static char *f (char * (*g) (char **, int), char **p, ...) ++ ++static int ++avr32_lda_estimate_size_before_relax(fragS *fragP, segT segment ATTRIBUTE_UNUSED) +{ -+ char *s; -+ va_list v; -+ va_start (v,p); -+ s = g (p, va_arg (v,int)); -+ va_end (v); -+ return s; ++ return fragP->fr_var - LDA_INITIAL_SIZE; +} + -+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has -+ function prototypes and stuff, but not '\xHH' hex character constants. -+ These don't provoke an error unfortunately, instead are silently treated -+ as 'x'. The following induces an error, until -std is added to get -+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an -+ array size at least. It's necessary to write '\x00'==0 to get something -+ that's true only with -std. */ -+int osf4_cc_array ['\x00' == 0 ? 1 : -1]; ++static int ++avr32_call_estimate_size_before_relax(fragS *fragP, segT segment ATTRIBUTE_UNUSED) ++{ ++ return fragP->fr_var - CALL_INITIAL_SIZE; ++} + -+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters -+ inside strings and character constants. */ -+#define FOO(x) 'x' -+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; ++static int ++avr32_cpool_estimate_size_before_relax(fragS *fragP, ++ segT segment ATTRIBUTE_UNUSED) ++{ ++ return fragP->fr_var; ++} + -+int test (int i, double x); -+struct s1 {int (*f) (int a);}; -+struct s2 {int (*f) (double a);}; -+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -+int argc; -+char **argv; -+int -+main () ++/* This macro may be defined to relax a frag. GAS will call this with the ++ * segment, the frag, and the change in size of all previous frags; ++ * md_relax_frag should return the change in size of the frag. */ ++static long ++avr32_default_relax_frag (segT segment, fragS *fragP, long stretch) +{ -+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; -+ ; -+ return 0; ++ int state, next_state; ++ symbolS *symbolP; /* The target symbol */ ++ long growth = 0; ++ ++ state = next_state = fragP->fr_subtype; ++ ++ symbolP = fragP->fr_symbol; ++ ++ if (fragP->tc_frag_data.force_extended ++ || need_reloc(symbolP, segment, fragP->tc_frag_data.pcrel)) ++ { ++ /* Symbol must be resolved by the linker. Emit the largest ++ possible opcode. */ ++ while (relax_more(next_state) != AVR32_RS_NONE) ++ next_state = relax_more(next_state); ++ } ++ else ++ { ++ addressT address; /* The address of fragP */ ++ addressT target; /* The address of the target symbol */ ++ offsetT distance; /* The distance between the insn and the symbol */ ++ fragS *sym_frag; ++ ++ address = fragP->fr_address; ++ target = fragP->fr_offset; ++ symbolP = fragP->fr_symbol; ++ sym_frag = symbol_get_frag(symbolP); ++ ++ address += fragP->fr_fix - fragP->fr_var; ++ target += S_GET_VALUE(symbolP); ++ ++ if (stretch != 0 ++ && sym_frag->relax_marker != fragP->relax_marker ++ && S_GET_SEGMENT(symbolP) == segment) ++ /* if it was correctly aligned before, make sure it stays aligned */ ++ target += stretch & (~0UL << avr32_rs_align(state)); ++ ++ if (fragP->tc_frag_data.pcrel) ++ distance = target - (address & (~0UL << avr32_rs_align(state))); ++ else ++ distance = target; ++ ++ pr_debug("%s:%d: relax more? 0x%x - 0x%x = 0x%x (%d), align %d\n", ++ fragP->fr_file, fragP->fr_line, target, address, ++ distance, distance, avr32_rs_align(state)); ++ ++ if (need_relax(state, distance)) ++ { ++ if (relax_more(state) != AVR32_RS_NONE) ++ next_state = relax_more(state); ++ pr_debug("%s:%d: relax more %d -> %d (%d - %d, align %d)\n", ++ fragP->fr_file, fragP->fr_line, state, next_state, ++ target, address, avr32_rs_align(state)); ++ } ++ } ++ ++ growth = avr32_rs_size(next_state) - avr32_rs_size(state); ++ fragP->fr_subtype = next_state; ++ ++ pr_debug("%s:%d: md_relax_frag: growth=%d, subtype=%d, opc=0x%08lx\n", ++ fragP->fr_file, fragP->fr_line, growth, fragP->fr_subtype, ++ avr32_opc_table[next_state].value); ++ ++ return growth; +} -+_ACEOF -+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -+do -+ CC="$ac_save_CC $ac_arg" -+ rm -f conftest.$ac_objext -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_prog_lex_yytext_pointer=yes -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_prog_cc_c89=$ac_arg - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --LIBS=$ac_save_LIBS --rm -f "${LEX_OUTPUT_ROOT}.c" - - fi --echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5 --echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6 --if test $ac_cv_prog_lex_yytext_pointer = yes; then - --cat >>confdefs.h <<\_ACEOF --#define YYTEXT_POINTER 1 --_ACEOF -+rm -f core conftest.err conftest.$ac_objext -+ test "x$ac_cv_prog_cc_c89" != "xno" && break -+done -+rm -f conftest.$ac_ext -+CC=$ac_save_CC - - fi -+# AC_CACHE_VAL -+case "x$ac_cv_prog_cc_c89" in -+ x) -+ { echo "$as_me:$LINENO: result: none needed" >&5 -+echo "${ECHO_T}none needed" >&6; } ;; -+ xno) -+ { echo "$as_me:$LINENO: result: unsupported" >&5 -+echo "${ECHO_T}unsupported" >&6; } ;; -+ *) -+ CC="$CC $ac_cv_prog_cc_c89" -+ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 -+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; -+esac - --fi --if test "$LEX" = :; then -- LEX=${am_missing_run}flex --fi - --ALL_LINGUAS="fr tr es rw" --if test -n "$ac_tool_prefix"; then -- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. --set dummy ${ac_tool_prefix}ranlib; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_RANLIB+set}" = set; then -+ac_ext=c -+ac_cpp='$CPP $CPPFLAGS' -+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -+ac_compiler_gnu=$ac_cv_c_compiler_gnu + ++static long ++avr32_lda_relax_frag(segT segment, fragS *fragP, long stretch) ++{ ++ struct cpool *pool= NULL; ++ unsigned int entry = 0; ++ addressT address, target; ++ offsetT distance; ++ symbolS *symbolP; ++ fragS *sym_frag; ++ long old_size, new_size; ++ ++ symbolP = fragP->fr_symbol; ++ old_size = fragP->fr_var; ++ if (!avr32_pic) ++ { ++ pool = fragP->tc_frag_data.pool; ++ entry = fragP->tc_frag_data.pool_entry; ++ } ++ ++ address = fragP->fr_address; ++ address += fragP->fr_fix - LDA_INITIAL_SIZE; ++ ++ if (!S_IS_DEFINED(symbolP) || S_FORCE_RELOC(symbolP, 1)) ++ goto relax_max; ++ ++ target = fragP->fr_offset; ++ sym_frag = symbol_get_frag(symbolP); ++ target += S_GET_VALUE(symbolP); ++ ++ if (sym_frag->relax_marker != fragP->relax_marker ++ && S_GET_SEGMENT(symbolP) == segment) ++ target += stretch; ++ ++ distance = target - address; ++ ++ pr_debug("lda_relax_frag: target: %d, address: %d, var: %d\n", ++ target, address, fragP->fr_var); ++ ++ if (!avr32_pic && S_GET_SEGMENT(symbolP) == absolute_section ++ && target <= 127 && (offsetT)target >= -128) ++ { ++ if (fragP->fr_subtype == LDA_SUBTYPE_LDDPC ++ || fragP->fr_subtype == LDA_SUBTYPE_LDW) ++ pool->literals[entry].refcount--; ++ new_size = 2; ++ fragP->fr_subtype = LDA_SUBTYPE_MOV1; ++ } ++ else if (!avr32_pic && S_GET_SEGMENT(symbolP) == absolute_section ++ && target <= 1048575 && (offsetT)target >= -1048576) ++ { ++ if (fragP->fr_subtype == LDA_SUBTYPE_LDDPC ++ || fragP->fr_subtype == LDA_SUBTYPE_LDW) ++ pool->literals[entry].refcount--; ++ new_size = 4; ++ fragP->fr_subtype = LDA_SUBTYPE_MOV2; ++ } ++ else if (!linkrelax && S_GET_SEGMENT(symbolP) == segment ++ /* the field will be negated, so this is really -(-32768) ++ and -(32767) */ ++ && distance <= 32768 && distance >= -32767) ++ { ++ if (!avr32_pic ++ && (fragP->fr_subtype == LDA_SUBTYPE_LDDPC ++ || fragP->fr_subtype == LDA_SUBTYPE_LDW)) ++ pool->literals[entry].refcount--; ++ new_size = 4; ++ fragP->fr_subtype = LDA_SUBTYPE_SUB; ++ } ++ else ++ { ++ relax_max: ++ if (avr32_pic) ++ { ++ if (linkrelax) ++ { ++ new_size = 8; ++ fragP->fr_subtype = LDA_SUBTYPE_GOTLOAD_LARGE; ++ } ++ else ++ { ++ new_size = 4; ++ fragP->fr_subtype = LDA_SUBTYPE_GOTLOAD; ++ } ++ } ++ else ++ { ++ if (fragP->fr_subtype != LDA_SUBTYPE_LDDPC ++ && fragP->fr_subtype != LDA_SUBTYPE_LDW) ++ pool->literals[entry].refcount++; ++ ++ sym_frag = symbol_get_frag(pool->symbol); ++ target = (sym_frag->fr_address + sym_frag->fr_fix ++ + pool->padding + pool->literals[entry].offset); + -+for ac_prog in 'bison -y' byacc -+do -+ # Extract the first word of "$ac_prog", so it can be a program name with args. -+set dummy $ac_prog; ac_word=$2 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -+if test "${ac_cv_prog_YACC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- if test -n "$RANLIB"; then -- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -+ if test -n "$YACC"; then -+ ac_cv_prog_YACC="$YACC" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH -@@ -6237,37 +7051,42 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -+ ac_cv_prog_YACC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - fi - fi --RANLIB=$ac_cv_prog_RANLIB --if test -n "$RANLIB"; then -- echo "$as_me:$LINENO: result: $RANLIB" >&5 --echo "${ECHO_T}$RANLIB" >&6 -+YACC=$ac_cv_prog_YACC -+if test -n "$YACC"; then -+ { echo "$as_me:$LINENO: result: $YACC" >&5 -+echo "${ECHO_T}$YACC" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - --fi --if test -z "$ac_cv_prog_RANLIB"; then -- ac_ct_RANLIB=$RANLIB -- # Extract the first word of "ranlib", so it can be a program name with args. --set dummy ranlib; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then ++ pr_debug("cpool sym address: 0x%lx\n", ++ sym_frag->fr_address + sym_frag->fr_fix); + -+ test -n "$YACC" && break -+done -+test -n "$YACC" || YACC="yacc" ++ know(pool->section == segment); + -+for ac_prog in flex lex -+do -+ # Extract the first word of "$ac_prog", so it can be a program name with args. -+set dummy $ac_prog; ac_word=$2 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -+if test "${ac_cv_prog_LEX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- if test -n "$ac_ct_RANLIB"; then -- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -+ if test -n "$LEX"; then -+ ac_cv_prog_LEX="$LEX" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH -@@ -6275,449 +7094,295 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_ac_ct_RANLIB="ranlib" -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -+ ac_cv_prog_LEX="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - -- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" - fi - fi --ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB --if test -n "$ac_ct_RANLIB"; then -- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 --echo "${ECHO_T}$ac_ct_RANLIB" >&6 -+LEX=$ac_cv_prog_LEX -+if test -n "$LEX"; then -+ { echo "$as_me:$LINENO: result: $LEX" >&5 -+echo "${ECHO_T}$LEX" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - -- RANLIB=$ac_ct_RANLIB --else -- RANLIB="$ac_cv_prog_RANLIB" --fi - --ac_ext=c --ac_cpp='$CPP $CPPFLAGS' --ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' --ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' --ac_compiler_gnu=$ac_cv_c_compiler_gnu --echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 --echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 --# On Suns, sometimes $CPP names a directory. --if test -n "$CPP" && test -d "$CPP"; then -- CPP= --fi --if test -z "$CPP"; then -- if test "${ac_cv_prog_CPP+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- # Double quotes because CPP needs to be expanded -- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" -- do -- ac_preproc_ok=false --for ac_c_preproc_warn_flag in '' yes --do -- # Use a header file that comes with gcc, so configuring glibc -- # with a fresh cross-compiler works. -- # Prefer to if __STDC__ is defined, since -- # exists even on freestanding compilers. -- # On the NeXT, cc -E runs the code through the compiler's parser, -- # not just through cpp. "Syntax error" is here to catch this case. -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#ifdef __STDC__ --# include --#else --# include -+ test -n "$LEX" && break -+done -+test -n "$LEX" || LEX=":" ++ if (sym_frag->relax_marker != fragP->relax_marker) ++ target += stretch; + -+if test "x$LEX" != "x:"; then -+ cat >conftest.l <<_ACEOF -+%% -+a { ECHO; } -+b { REJECT; } -+c { yymore (); } -+d { yyless (1); } -+e { yyless (input () != 0); } -+f { unput (yytext[0]); } -+. { BEGIN INITIAL; } -+%% -+#ifdef YYTEXT_POINTER -+extern char *yytext; - #endif -- Syntax error -+int -+main (void) -+{ -+ return ! yylex () + ! yywrap (); ++ distance = target - address; ++ if (distance <= 508 && distance >= 0) ++ { ++ new_size = 2; ++ fragP->fr_subtype = LDA_SUBTYPE_LDDPC; ++ } ++ else ++ { ++ new_size = 4; ++ fragP->fr_subtype = LDA_SUBTYPE_LDW; ++ } ++ ++ pr_debug("lda_relax_frag (cpool): target=0x%lx, address=0x%lx, refcount=%d\n", ++ target, address, pool->literals[entry].refcount); ++ } ++ } ++ ++ fragP->fr_var = new_size; ++ ++ pr_debug("%s:%d: lda: relax pass done. subtype: %d, growth: %ld\n", ++ fragP->fr_file, fragP->fr_line, ++ fragP->fr_subtype, new_size - old_size); ++ ++ return new_size - old_size; +} - _ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -+{ (ac_try="$LEX conftest.l" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$LEX conftest.l") 2>&5 - ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -- : -+ (exit $ac_status); } -+{ echo "$as_me:$LINENO: checking lex output file root" >&5 -+echo $ECHO_N "checking lex output file root... $ECHO_C" >&6; } -+if test "${ac_cv_prog_lex_root+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- -- # Broken: fails on valid input. --continue --fi --rm -f conftest.err conftest.$ac_ext - -- # OK, works on sane cases. Now check whether non-existent headers -- # can be detected and how. -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#include --_ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -- # Broken: success on invalid input. --continue -+if test -f lex.yy.c; then -+ ac_cv_prog_lex_root=lex.yy -+elif test -f lexyy.c; then -+ ac_cv_prog_lex_root=lexyy - else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- -- # Passes both tests. --ac_preproc_ok=: --break -+ { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5 -+echo "$as_me: error: cannot find output from $LEX; giving up" >&2;} -+ { (exit 1); exit 1; }; } - fi --rm -f conftest.err conftest.$ac_ext -- --done --# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. --rm -f conftest.err conftest.$ac_ext --if $ac_preproc_ok; then -- break - fi -+{ echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5 -+echo "${ECHO_T}$ac_cv_prog_lex_root" >&6; } -+LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root - -- done -- ac_cv_prog_CPP=$CPP -- --fi -- CPP=$ac_cv_prog_CPP --else -- ac_cv_prog_CPP=$CPP --fi --echo "$as_me:$LINENO: result: $CPP" >&5 --echo "${ECHO_T}$CPP" >&6 --ac_preproc_ok=false --for ac_c_preproc_warn_flag in '' yes --do -- # Use a header file that comes with gcc, so configuring glibc -- # with a fresh cross-compiler works. -- # Prefer to if __STDC__ is defined, since -- # exists even on freestanding compilers. -- # On the NeXT, cc -E runs the code through the compiler's parser, -- # not just through cpp. "Syntax error" is here to catch this case. -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#ifdef __STDC__ --# include --#else --# include --#endif -- Syntax error --_ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -- : -+if test -z "${LEXLIB+set}"; then -+ { echo "$as_me:$LINENO: checking lex library" >&5 -+echo $ECHO_N "checking lex library... $ECHO_C" >&6; } -+if test "${ac_cv_lib_lex+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- -- # Broken: fails on valid input. --continue --fi --rm -f conftest.err conftest.$ac_ext - -- # OK, works on sane cases. Now check whether non-existent headers -- # can be detected and how. -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#include -+ ac_save_LIBS=$LIBS -+ ac_cv_lib_lex='none needed' -+ for ac_lib in '' -lfl -ll; do -+ LIBS="$ac_lib $ac_save_LIBS" -+ cat >conftest.$ac_ext <<_ACEOF -+`cat $LEX_OUTPUT_ROOT.c` - _ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -+rm -f conftest.$ac_objext conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -- # Broken: success on invalid input. --continue -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then -+ ac_cv_lib_lex=$ac_lib - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - -- # Passes both tests. --ac_preproc_ok=: --break --fi --rm -f conftest.err conftest.$ac_ext - --done --# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. --rm -f conftest.err conftest.$ac_ext --if $ac_preproc_ok; then -- : --else -- { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check --See \`config.log' for more details." >&5 --echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check --See \`config.log' for more details." >&2;} -- { (exit 1); exit 1; }; } - fi - --ac_ext=c --ac_cpp='$CPP $CPPFLAGS' --ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' --ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' --ac_compiler_gnu=$ac_cv_c_compiler_gnu -- -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ -+ conftest$ac_exeext conftest.$ac_ext -+ test "$ac_cv_lib_lex" != 'none needed' && break -+ done -+ LIBS=$ac_save_LIBS - --echo "$as_me:$LINENO: checking for egrep" >&5 --echo $ECHO_N "checking for egrep... $ECHO_C" >&6 --if test "${ac_cv_prog_egrep+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if echo a | (grep -E '(a|b)') >/dev/null 2>&1 -- then ac_cv_prog_egrep='grep -E' -- else ac_cv_prog_egrep='egrep' -- fi - fi --echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 --echo "${ECHO_T}$ac_cv_prog_egrep" >&6 -- EGREP=$ac_cv_prog_egrep -- -- --echo "$as_me:$LINENO: checking for ANSI C header files" >&5 --echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 --if test "${ac_cv_header_stdc+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#include --#include --#include --#include -+{ echo "$as_me:$LINENO: result: $ac_cv_lib_lex" >&5 -+echo "${ECHO_T}$ac_cv_lib_lex" >&6; } -+ test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex -+fi - --int --main () --{ - -- ; -- return 0; --} -+{ echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5 -+echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6; } -+if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ # POSIX says lex can declare yytext either as a pointer or an array; the -+# default is implementation-dependent. Figure out which it is, since -+# not all implementations provide the %pointer and %array declarations. -+ac_cv_prog_lex_yytext_pointer=no -+ac_save_LIBS=$LIBS -+LIBS="$LEXLIB $ac_save_LIBS" -+cat >conftest.$ac_ext <<_ACEOF -+#define YYTEXT_POINTER 1 -+`cat $LEX_OUTPUT_ROOT.c` - _ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+rm -f conftest.$ac_objext conftest$ac_exeext -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_header_stdc=yes -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then -+ ac_cv_prog_lex_yytext_pointer=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_header_stdc=no --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -- --if test $ac_cv_header_stdc = yes; then -- # SunOS 4.x string.h does not declare mem*, contrary to ANSI. -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#include - --_ACEOF --if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -- $EGREP "memchr" >/dev/null 2>&1; then -- : --else -- ac_cv_header_stdc=no - fi --rm -f conftest* + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ -+ conftest$ac_exeext conftest.$ac_ext -+LIBS=$ac_save_LIBS - - fi -+{ echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5 -+echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6; } -+if test $ac_cv_prog_lex_yytext_pointer = yes; then - --if test $ac_cv_header_stdc = yes; then -- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ -+cat >>confdefs.h <<\_ACEOF -+#define YYTEXT_POINTER 1 - _ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#include - --_ACEOF --if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -- $EGREP "free" >/dev/null 2>&1; then -- : --else -- ac_cv_header_stdc=no - fi --rm -f conftest* -+rm -f conftest.l $LEX_OUTPUT_ROOT.c - - fi -+if test "$LEX" = :; then -+ LEX=${am_missing_run}flex -+fi - --if test $ac_cv_header_stdc = yes; then -- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. -- if test "$cross_compiling" = yes; then -- : -+ALL_LINGUAS="fr tr es rw" -+if test -n "$ac_tool_prefix"; then -+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -+set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -+if test "${ac_cv_prog_RANLIB+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#include --#if ((' ' & 0x0FF) == 0x020) --# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') --# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) --#else --# define ISLOWER(c) \ -- (('a' <= (c) && (c) <= 'i') \ -- || ('j' <= (c) && (c) <= 'r') \ -- || ('s' <= (c) && (c) <= 'z')) --# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) --#endif -- --#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) --int --main () --{ -- int i; -- for (i = 0; i < 256; i++) -- if (XOR (islower (i), ISLOWER (i)) -- || toupper (i) != TOUPPER (i)) -- exit(2); -- exit (0); --} --_ACEOF --rm -f conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- : -+ if test -n "$RANLIB"; then -+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. - else -- echo "$as_me: program exited with status $ac_status" >&5 --echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" -+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ break 2 -+ fi -+done -+done -+IFS=$as_save_IFS - --( exit $ac_status ) --ac_cv_header_stdc=no - fi --rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext - fi -+RANLIB=$ac_cv_prog_RANLIB -+if test -n "$RANLIB"; then -+ { echo "$as_me:$LINENO: result: $RANLIB" >&5 -+echo "${ECHO_T}$RANLIB" >&6; } -+else -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi ++static long ++avr32_call_relax_frag(segT segment, fragS *fragP, long stretch) ++{ ++ struct cpool *pool = NULL; ++ unsigned int entry = 0; ++ addressT address, target; ++ offsetT distance; ++ symbolS *symbolP; ++ fragS *sym_frag; ++ long old_size, new_size; ++ ++ symbolP = fragP->fr_symbol; ++ old_size = fragP->fr_var; ++ if (!avr32_pic) ++ { ++ pool = fragP->tc_frag_data.pool; ++ entry = fragP->tc_frag_data.pool_entry; ++ } ++ ++ address = fragP->fr_address; ++ address += fragP->fr_fix - CALL_INITIAL_SIZE; ++ ++ if (need_reloc(symbolP, segment, 1)) ++ { ++ pr_debug("call: must emit reloc\n"); ++ goto relax_max; ++ } ++ ++ target = fragP->fr_offset; ++ sym_frag = symbol_get_frag(symbolP); ++ target += S_GET_VALUE(symbolP); + ++ if (sym_frag->relax_marker != fragP->relax_marker ++ && S_GET_SEGMENT(symbolP) == segment) ++ target += stretch; + - fi --echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 --echo "${ECHO_T}$ac_cv_header_stdc" >&6 --if test $ac_cv_header_stdc = yes; then -+if test -z "$ac_cv_prog_RANLIB"; then -+ ac_ct_RANLIB=$RANLIB -+ # Extract the first word of "ranlib", so it can be a program name with args. -+set dummy ranlib; ac_word=$2 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ if test -n "$ac_ct_RANLIB"; then -+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -+else -+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then -+ ac_cv_prog_ac_ct_RANLIB="ranlib" -+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ break 2 -+ fi -+done -+done -+IFS=$as_save_IFS - --cat >>confdefs.h <<\_ACEOF --#define STDC_HEADERS 1 --_ACEOF -+fi -+fi -+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -+if test -n "$ac_ct_RANLIB"; then -+ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -+echo "${ECHO_T}$ac_ct_RANLIB" >&6; } -+else -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } -+fi - -+ if test "x$ac_ct_RANLIB" = x; then -+ RANLIB=":" ++ distance = target - address; ++ ++ if (distance <= 1022 && distance >= -1024) ++ { ++ pr_debug("call: distance is %d, emitting short rcall\n", distance); ++ if (!avr32_pic && fragP->fr_subtype == CALL_SUBTYPE_MCALL_CP) ++ pool->literals[entry].refcount--; ++ new_size = 2; ++ fragP->fr_subtype = CALL_SUBTYPE_RCALL1; ++ } ++ else if (distance <= 2097150 && distance >= -2097152) ++ { ++ pr_debug("call: distance is %d, emitting long rcall\n", distance); ++ if (!avr32_pic && fragP->fr_subtype == CALL_SUBTYPE_MCALL_CP) ++ pool->literals[entry].refcount--; ++ new_size = 4; ++ fragP->fr_subtype = CALL_SUBTYPE_RCALL2; ++ } + else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&5 -+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -+whose name does not start with the host triplet. If you think this -+configuration is useful to you, please write to autoconf@gnu.org." >&2;} -+ac_tool_warned=yes ;; -+esac -+ RANLIB=$ac_ct_RANLIB -+ fi -+else -+ RANLIB="$ac_cv_prog_RANLIB" - fi - --echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 --echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 -+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } - if test "${ac_cv_c_const+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -6735,10 +7400,10 @@ main () - #ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; -- const charset x; -+ const charset cs; - /* SunOS 4.1.1 cc rejects this. */ -- char const *const *ccp; -- char **p; -+ char const *const *pcpcc; -+ char **ppc; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; -@@ -6747,16 +7412,17 @@ main () - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; -- ccp = &g + (g ? g-g : 0); -+ pcpcc = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ -- ++ccp; -- p = (char**) ccp; -- ccp = (char const *const *) p; -+ ++pcpcc; -+ ppc = (char**) pcpcc; -+ pcpcc = (char const *const *) ppc; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; -+ if (s) return 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; -@@ -6775,7 +7441,9 @@ main () - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; -+ if (!foo) return 0; - } -+ return !cs[0] && !zero.x; - #endif - - ; -@@ -6783,38 +7451,34 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_c_const=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_c_const=no -+ ac_cv_c_const=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ { ++ pr_debug("call: distance %d too far, emitting something big\n", distance); + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 --echo "${ECHO_T}$ac_cv_c_const" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 -+echo "${ECHO_T}$ac_cv_c_const" >&6; } - if test $ac_cv_c_const = no; then - - cat >>confdefs.h <<\_ACEOF -@@ -6823,8 +7487,8 @@ _ACEOF - - fi - --echo "$as_me:$LINENO: checking for inline" >&5 --echo $ECHO_N "checking for inline... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for inline" >&5 -+echo $ECHO_N "checking for inline... $ECHO_C" >&6; } - if test "${ac_cv_c_inline+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -6844,39 +7508,37 @@ $ac_kw foo_t foo () {return 0; } - - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_c_inline=$ac_kw; break -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_c_inline=$ac_kw - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - ++ relax_max: ++ if (avr32_pic) ++ { ++ if (linkrelax) ++ { ++ new_size = 10; ++ fragP->fr_subtype = CALL_SUBTYPE_MCALL_LARGE; ++ } ++ else ++ { ++ new_size = 4; ++ fragP->fr_subtype = CALL_SUBTYPE_MCALL_GOT; ++ } ++ } ++ else ++ { ++ if (fragP->fr_subtype != CALL_SUBTYPE_MCALL_CP) ++ pool->literals[entry].refcount++; + - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ new_size = 4; ++ fragP->fr_subtype = CALL_SUBTYPE_MCALL_CP; ++ } ++ } + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ test "$ac_cv_c_inline" != no && break - done - - fi --echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 --echo "${ECHO_T}$ac_cv_c_inline" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 -+echo "${ECHO_T}$ac_cv_c_inline" >&6; } - - - case $ac_cv_c_inline in -@@ -6894,80 +7556,8 @@ _ACEOF - ;; - esac - --# On IRIX 5.3, sys/types and inttypes.h are conflicting. -- -- -- -- -- -- -- -- -- --for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ -- inttypes.h stdint.h unistd.h --do --as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_header" >&5 --echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 --if eval "test \"\${$as_ac_Header+set}\" = set"; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --$ac_includes_default -- --#include <$ac_header> --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- eval "$as_ac_Header=yes" --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --eval "$as_ac_Header=no" --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 --if test `eval echo '${'$as_ac_Header'}'` = yes; then -- cat >>confdefs.h <<_ACEOF --#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 --_ACEOF -- --fi -- --done -- -- --echo "$as_me:$LINENO: checking for off_t" >&5 --echo $ECHO_N "checking for off_t... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for off_t" >&5 -+echo $ECHO_N "checking for off_t... $ECHO_C" >&6; } - if test "${ac_cv_type_off_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -6978,62 +7568,59 @@ cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - $ac_includes_default -+typedef off_t ac__type_new_; - int - main () - { --if ((off_t *) 0) -+if ((ac__type_new_ *) 0) - return 0; --if (sizeof (off_t)) -+if (sizeof (ac__type_new_)) - return 0; - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_type_off_t=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_type_off_t=no -+ ac_cv_type_off_t=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ fragP->fr_var = new_size; ++ ++ pr_debug("%s:%d: call: relax pass done, growth: %d, fr_var: %d\n", ++ fragP->fr_file, fragP->fr_line, ++ new_size - old_size, fragP->fr_var); ++ ++ return new_size - old_size; ++} ++ ++static long ++avr32_cpool_relax_frag(segT segment ATTRIBUTE_UNUSED, ++ fragS *fragP, ++ long stretch ATTRIBUTE_UNUSED) ++{ ++ struct cpool *pool; ++ addressT address; ++ long old_size, new_size; ++ unsigned int entry; ++ ++ pool = fragP->tc_frag_data.pool; ++ address = fragP->fr_address + fragP->fr_fix; ++ old_size = fragP->fr_var; ++ new_size = 0; ++ ++ for (entry = 0; entry < pool->next_free_entry; entry++) ++ { ++ if (pool->literals[entry].refcount > 0) ++ { ++ pool->literals[entry].offset = new_size; ++ new_size += 4; ++ } ++ } + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 --echo "${ECHO_T}$ac_cv_type_off_t" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 -+echo "${ECHO_T}$ac_cv_type_off_t" >&6; } - if test $ac_cv_type_off_t = yes; then - : - else - - cat >>confdefs.h <<_ACEOF --#define off_t long -+#define off_t long int - _ACEOF - - fi - --echo "$as_me:$LINENO: checking for size_t" >&5 --echo $ECHO_N "checking for size_t... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for size_t" >&5 -+echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } - if test "${ac_cv_type_size_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -7044,64 +7631,61 @@ cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - $ac_includes_default -+typedef size_t ac__type_new_; - int - main () - { --if ((size_t *) 0) -+if ((ac__type_new_ *) 0) - return 0; --if (sizeof (size_t)) -+if (sizeof (ac__type_new_)) - return 0; - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_type_size_t=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_type_size_t=no -+ ac_cv_type_size_t=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ fragP->fr_var = new_size; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 --echo "${ECHO_T}$ac_cv_type_size_t" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 -+echo "${ECHO_T}$ac_cv_type_size_t" >&6; } - if test $ac_cv_type_size_t = yes; then - : - else - - cat >>confdefs.h <<_ACEOF --#define size_t unsigned -+#define size_t unsigned int - _ACEOF - - fi - - # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works - # for constant arguments. Useless! --echo "$as_me:$LINENO: checking for working alloca.h" >&5 --echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for working alloca.h" >&5 -+echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } - if test "${ac_cv_working_alloca_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -7116,44 +7700,42 @@ int - main () - { - char *p = (char *) alloca (2 * sizeof (int)); -+ if (p) return 0; - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - ac_cv_working_alloca_h=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_working_alloca_h=no -+ ac_cv_working_alloca_h=no - fi --rm -f conftest.err conftest.$ac_objext \ ++ return new_size - old_size; ++} + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 --echo "${ECHO_T}$ac_cv_working_alloca_h" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 -+echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } - if test $ac_cv_working_alloca_h = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -7162,8 +7744,8 @@ _ACEOF - - fi - --echo "$as_me:$LINENO: checking for alloca" >&5 --echo $ECHO_N "checking for alloca... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for alloca" >&5 -+echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } - if test "${ac_cv_func_alloca_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -7180,7 +7762,7 @@ cat >>conftest.$ac_ext <<_ACEOF - # include - # define alloca _alloca - # else --# if HAVE_ALLOCA_H -+# ifdef HAVE_ALLOCA_H - # include - # else - # ifdef _AIX -@@ -7198,44 +7780,42 @@ int - main () - { - char *p = (char *) alloca (1); -+ if (p) return 0; - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - ac_cv_func_alloca_works=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_func_alloca_works=no -+ ac_cv_func_alloca_works=no - fi --rm -f conftest.err conftest.$ac_objext \ ++/* *fragP has been relaxed to its final size, and now needs to have ++ the bytes inside it modified to conform to the new size. + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 --echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 -+echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } - - if test $ac_cv_func_alloca_works = yes; then - -@@ -7249,15 +7829,15 @@ else - # contain a buggy version. If you still want to use their alloca, - # use ar to extract alloca.o from them instead of compiling alloca.c. - --ALLOCA=alloca.$ac_objext -+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext - - cat >>confdefs.h <<\_ACEOF - #define C_ALLOCA 1 - _ACEOF - - --echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 --echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 -+echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } - if test "${ac_cv_os_cray+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -7267,7 +7847,7 @@ _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#if defined(CRAY) && ! defined(CRAY2) -+#if defined CRAY && ! defined CRAY2 - webecray - #else - wenotbecray -@@ -7283,14 +7863,14 @@ fi - rm -f conftest* - - fi --echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 --echo "${ECHO_T}$ac_cv_os_cray" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 -+echo "${ECHO_T}$ac_cv_os_cray" >&6; } - if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_func" >&5 --echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 --if eval "test \"\${$as_ac_var+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF -@@ -7316,68 +7896,60 @@ cat >>conftest.$ac_ext <<_ACEOF - - #undef $ac_func - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" --{ - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char $ac_func (); - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ --#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -+#if defined __stub_$ac_func || defined __stub___$ac_func - choke me --#else --char (*f) () = $ac_func; --#endif --#ifdef __cplusplus --} - #endif - - int - main () - { --return f != $ac_func; -+return $ac_func (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --eval "$as_ac_var=no" -+ eval "$as_ac_var=no" - fi --rm -f conftest.err conftest.$ac_objext \ ++ Called after relaxation is finished. ++ fragP->fr_type == rs_machine_dependent. ++ fragP->fr_subtype is the subtype of what the address relaxed to. */ + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_var'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_var'}'` = yes; then - - cat >>confdefs.h <<_ACEOF -@@ -7390,8 +7962,8 @@ fi - done - fi - --echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 --echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 -+echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } - if test "${ac_cv_c_stack_direction+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -7404,6 +7976,7 @@ _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ -+$ac_includes_default - int - find_stack_direction () - { -@@ -7421,17 +7994,26 @@ find_stack_direction () - int - main () - { -- exit (find_stack_direction () < 0); -+ return find_stack_direction () < 0; - } - _ACEOF - rm -f conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&5 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then -@@ -7444,11 +8026,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 - ( exit $ac_status ) - ac_cv_c_stack_direction=-1 - fi --rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext - fi ++static void ++avr32_default_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, ++ segT segment ATTRIBUTE_UNUSED, ++ fragS *fragP) ++{ ++ const struct avr32_opcode *opc; ++ const struct avr32_ifield *ifield; ++ bfd_reloc_code_real_type r_type; ++ symbolS *symbolP; ++ fixS *fixP; ++ bfd_vma value; ++ int subtype; ++ ++ opc = &avr32_opc_table[fragP->fr_subtype]; ++ ifield = opc->fields[opc->var_field]; ++ symbolP = fragP->fr_symbol; ++ subtype = fragP->fr_subtype; ++ r_type = opc->reloc_type; ++ ++ /* Clear the opcode bits and the bits belonging to the relaxed ++ field. We assume all other fields stay the same. */ ++ value = bfd_getb32(fragP->fr_opcode); ++ value &= ~(opc->mask | ifield->mask); ++ ++ /* Insert the new opcode */ ++ value |= opc->value; ++ bfd_putb32(value, fragP->fr_opcode); ++ ++ fragP->fr_fix += opc->size - fragP->fr_var; ++ ++ if (fragP->tc_frag_data.reloc_info != AVR32_OPINFO_NONE) ++ { ++ switch (fragP->tc_frag_data.reloc_info) ++ { ++ case AVR32_OPINFO_HI: ++ r_type = BFD_RELOC_HI16; ++ break; ++ case AVR32_OPINFO_LO: ++ r_type = BFD_RELOC_LO16; ++ break; ++ case AVR32_OPINFO_GOT: ++ switch (r_type) ++ { ++ case BFD_RELOC_AVR32_18W_PCREL: ++ r_type = BFD_RELOC_AVR32_GOT18SW; ++ break; ++ case BFD_RELOC_AVR32_16S: ++ r_type = BFD_RELOC_AVR32_GOT16S; ++ break; ++ default: ++ BAD_CASE(r_type); ++ break; ++ } ++ break; ++ default: ++ BAD_CASE(fragP->tc_frag_data.reloc_info); ++ break; ++ } ++ } ++ ++ pr_debug("%s:%d: convert_frag: new %s fixup\n", ++ fragP->fr_file, fragP->fr_line, ++ bfd_get_reloc_code_name(r_type)); + ++#if 1 ++ fixP = fix_new_exp(fragP, fragP->fr_fix - opc->size, opc->size, ++ &fragP->tc_frag_data.exp, ++ fragP->tc_frag_data.pcrel, r_type); ++#else ++ fixP = fix_new(fragP, fragP->fr_fix - opc->size, opc->size, symbolP, ++ fragP->fr_offset, fragP->tc_frag_data.pcrel, r_type); ++#endif + - fi --echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 --echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 -+echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } - - cat >>confdefs.h <<_ACEOF - #define STACK_DIRECTION $ac_cv_c_stack_direction -@@ -7462,18 +8046,19 @@ fi - for ac_header in stdlib.h unistd.h - do - as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` --if eval "test \"\${$as_ac_Header+set}\" = set"; then -- echo "$as_me:$LINENO: checking for $ac_header" >&5 --echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 --if eval "test \"\${$as_ac_Header+set}\" = set"; then -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then -+ { echo "$as_me:$LINENO: checking for $ac_header" >&5 -+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_Header'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - else - # Is the header compilable? --echo "$as_me:$LINENO: checking $ac_header usability" >&5 --echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -7484,41 +8069,37 @@ $ac_includes_default - #include <$ac_header> - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_header_compiler=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_header_compiler=no -+ ac_header_compiler=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 --echo "${ECHO_T}$ac_header_compiler" >&6 ++ /* Revert fix_new brain damage. "dot_value" is the value of PC at ++ the point of the fixup, relative to the frag address. fix_new() ++ and friends think they are only being called during the assembly ++ pass, not during relaxation or similar, so fx_dot_value, fx_file ++ and fx_line are all initialized to the wrong value. But we don't ++ know the size of the fixup until now, so we really can't live up ++ to the assumptions these functions make about the target. What ++ do these functions think the "where" and "frag" argument mean ++ anyway? */ ++ fixP->fx_dot_value = fragP->fr_fix - opc->size; ++ fixP->fx_file = fragP->fr_file; ++ fixP->fx_line = fragP->fr_line; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -+echo "${ECHO_T}$ac_header_compiler" >&6; } - - # Is the header present? --echo "$as_me:$LINENO: checking $ac_header presence" >&5 --echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -7527,24 +8108,22 @@ cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include <$ac_header> - _ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - ac_header_preproc=yes - else - echo "$as_me: failed program was:" >&5 -@@ -7552,9 +8131,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no - fi ++ fixP->tc_fix_data.ifield = ifield; ++ fixP->tc_fix_data.align = avr32_rs_align(subtype); ++ fixP->tc_fix_data.min = avr32_relax_table[subtype].lower_bound; ++ fixP->tc_fix_data.max = avr32_relax_table[subtype].upper_bound; ++} + - rm -f conftest.err conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 --echo "${ECHO_T}$ac_header_preproc" >&6 -+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -+echo "${ECHO_T}$ac_header_preproc" >&6; } - - # So? What about this header? - case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in -@@ -7578,25 +8158,19 @@ echo "$as_me: WARNING: $ac_header: s - echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 - echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} -- ( -- cat <<\_ASBOX --## ------------------------------------------ ## --## Report this to the AC_PACKAGE_NAME lists. ## --## ------------------------------------------ ## --_ASBOX -- ) | -- sed "s/^/$as_me: WARNING: /" >&2 ++static void ++avr32_lda_convert_frag(bfd *abfd ATTRIBUTE_UNUSED, ++ segT segment ATTRIBUTE_UNUSED, ++ fragS *fragP) ++{ ++ const struct avr32_opcode *opc; ++ const struct avr32_ifield *ifield; ++ bfd_reloc_code_real_type r_type; ++ expressionS exp; ++ struct cpool *pool; ++ fixS *fixP; ++ bfd_vma value; ++ int regid, pcrel = 0, align = 0; ++ char *p; + - ;; - esac --echo "$as_me:$LINENO: checking for $ac_header" >&5 --echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 --if eval "test \"\${$as_ac_Header+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - eval "$as_ac_Header=\$ac_header_preproc" - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_Header'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - - fi - if test `eval echo '${'$as_ac_Header'}'` = yes; then -@@ -7612,9 +8186,9 @@ done - for ac_func in getpagesize - do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_func" >&5 --echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 --if eval "test \"\${$as_ac_var+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF -@@ -7640,68 +8214,60 @@ cat >>conftest.$ac_ext <<_ACEOF - - #undef $ac_func - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" --{ - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char $ac_func (); - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ --#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -+#if defined __stub_$ac_func || defined __stub___$ac_func - choke me --#else --char (*f) () = $ac_func; --#endif --#ifdef __cplusplus --} - #endif - - int - main () - { --return f != $ac_func; -+return $ac_func (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --eval "$as_ac_var=no" -+ eval "$as_ac_var=no" - fi --rm -f conftest.err conftest.$ac_objext \ ++ r_type = BFD_RELOC_NONE; ++ regid = fragP->tc_frag_data.reloc_info; ++ p = fragP->fr_opcode; ++ exp.X_add_symbol = fragP->fr_symbol; ++ exp.X_add_number = fragP->fr_offset; ++ exp.X_op = O_symbol; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_var'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF - #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -@@ -7710,8 +8276,8 @@ _ACEOF - fi - done - --echo "$as_me:$LINENO: checking for working mmap" >&5 --echo $ECHO_N "checking for working mmap... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for working mmap" >&5 -+echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; } - if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -7753,21 +8319,21 @@ $ac_includes_default - #include - #include - --#if !STDC_HEADERS && !HAVE_STDLIB_H -+#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H - char *malloc (); - #endif - - /* This mess was copied from the GNU getpagesize.h. */ --#if !HAVE_GETPAGESIZE -+#ifndef HAVE_GETPAGESIZE - /* Assume that all systems that can run configure have sys/param.h. */ --# if !HAVE_SYS_PARAM_H -+# ifndef HAVE_SYS_PARAM_H - # define HAVE_SYS_PARAM_H 1 - # endif - - # ifdef _SC_PAGESIZE - # define getpagesize() sysconf(_SC_PAGESIZE) - # else /* no _SC_PAGESIZE */ --# if HAVE_SYS_PARAM_H -+# ifdef HAVE_SYS_PARAM_H - # include - # ifdef EXEC_PAGESIZE - # define getpagesize() EXEC_PAGESIZE -@@ -7806,15 +8372,15 @@ main () - /* First, make a file with some known garbage in it. */ - data = (char *) malloc (pagesize); - if (!data) -- exit (1); -+ return 1; - for (i = 0; i < pagesize; ++i) - *(data + i) = rand (); - umask (0); - fd = creat ("conftest.mmap", 0600); - if (fd < 0) -- exit (1); -+ return 1; - if (write (fd, data, pagesize) != pagesize) -- exit (1); -+ return 1; - close (fd); - - /* Next, try to mmap the file at a fixed address which already has -@@ -7822,17 +8388,17 @@ main () - we see the same garbage. */ - fd = open ("conftest.mmap", O_RDWR); - if (fd < 0) -- exit (1); -+ return 1; - data2 = (char *) malloc (2 * pagesize); - if (!data2) -- exit (1); -- data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1); -+ return 1; -+ data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1); - if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_FIXED, fd, 0L)) -- exit (1); -+ return 1; - for (i = 0; i < pagesize; ++i) - if (*(data + i) != *(data2 + i)) -- exit (1); -+ return 1; - - /* Finally, make sure that changes to the mapped area do not - percolate back to the file as seen by read(). (This is a bug on -@@ -7841,24 +8407,33 @@ main () - *(data2 + i) = *(data2 + i) + 1; - data3 = (char *) malloc (pagesize); - if (!data3) -- exit (1); -+ return 1; - if (read (fd, data3, pagesize) != pagesize) -- exit (1); -+ return 1; - for (i = 0; i < pagesize; ++i) - if (*(data + i) != *(data3 + i)) -- exit (1); -+ return 1; - close (fd); -- exit (0); -+ return 0; - } - _ACEOF - rm -f conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&5 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then -@@ -7871,11 +8446,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 - ( exit $ac_status ) - ac_cv_func_mmap_fixed_mapped=no - fi --rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext - fi ++ pr_debug("%s:%d: lda_convert_frag, subtype: %d, fix: %d, var: %d, regid: %d\n", ++ fragP->fr_file, fragP->fr_line, ++ fragP->fr_subtype, fragP->fr_fix, fragP->fr_var, regid); ++ ++ switch (fragP->fr_subtype) ++ { ++ case LDA_SUBTYPE_MOV1: ++ opc = &avr32_opc_table[AVR32_OPC_MOV1]; ++ opc->fields[0]->insert(opc->fields[0], p, regid); ++ ifield = opc->fields[1]; ++ r_type = opc->reloc_type; ++ break; ++ case LDA_SUBTYPE_MOV2: ++ opc = &avr32_opc_table[AVR32_OPC_MOV2]; ++ opc->fields[0]->insert(opc->fields[0], p, regid); ++ ifield = opc->fields[1]; ++ r_type = opc->reloc_type; ++ break; ++ case LDA_SUBTYPE_SUB: ++ opc = &avr32_opc_table[AVR32_OPC_SUB5]; ++ opc->fields[0]->insert(opc->fields[0], p, regid); ++ opc->fields[1]->insert(opc->fields[1], p, AVR32_REG_PC); ++ ifield = opc->fields[2]; ++ r_type = BFD_RELOC_AVR32_16N_PCREL; ++ ++ /* Pretend that SUB5 isn't a "negated" pcrel expression for now. ++ We'll have to fix it up later when we know whether to ++ generate a reloc for it (in which case the linker will negate ++ it, so we shouldn't). */ ++ pcrel = 1; ++ break; ++ case LDA_SUBTYPE_LDDPC: ++ opc = &avr32_opc_table[AVR32_OPC_LDDPC]; ++ align = 2; ++ r_type = BFD_RELOC_AVR32_9W_CP; ++ goto cpool_common; ++ case LDA_SUBTYPE_LDW: ++ opc = &avr32_opc_table[AVR32_OPC_LDDPC_EXT]; ++ r_type = BFD_RELOC_AVR32_16_CP; ++ cpool_common: ++ opc->fields[0]->insert(opc->fields[0], p, regid); ++ ifield = opc->fields[1]; ++ pool = fragP->tc_frag_data.pool; ++ exp.X_add_symbol = pool->symbol; ++ exp.X_add_number = pool->literals[fragP->tc_frag_data.pool_entry].offset; ++ pcrel = 1; ++ break; ++ case LDA_SUBTYPE_GOTLOAD_LARGE: ++ /* ld.w Rd, r6[Rd << 2] (last) */ ++ opc = &avr32_opc_table[AVR32_OPC_LD_W5]; ++ bfd_putb32(opc->value, p + 4); ++ opc->fields[0]->insert(opc->fields[0], p + 4, regid); ++ opc->fields[1]->insert(opc->fields[1], p + 4, 6); ++ opc->fields[2]->insert(opc->fields[2], p + 4, regid); ++ opc->fields[3]->insert(opc->fields[3], p + 4, 2); ++ ++ /* mov Rd, (got_offset / 4) */ ++ opc = &avr32_opc_table[AVR32_OPC_MOV2]; ++ opc->fields[0]->insert(opc->fields[0], p, regid); ++ ifield = opc->fields[1]; ++ r_type = BFD_RELOC_AVR32_LDA_GOT; ++ break; ++ case LDA_SUBTYPE_GOTLOAD: ++ opc = &avr32_opc_table[AVR32_OPC_LD_W4]; ++ opc->fields[0]->insert(opc->fields[0], p, regid); ++ opc->fields[1]->insert(opc->fields[1], p, 6); ++ ifield = opc->fields[2]; ++ if (r_type == BFD_RELOC_NONE) ++ r_type = BFD_RELOC_AVR32_GOT16S; ++ break; ++ default: ++ BAD_CASE(fragP->fr_subtype); ++ } + ++ value = bfd_getb32(p); ++ value &= ~(opc->mask | ifield->mask); ++ value |= opc->value; ++ bfd_putb32(value, p); + - fi --echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 --echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 -+echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; } - if test $ac_cv_func_mmap_fixed_mapped = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -7899,18 +8476,19 @@ for ac_header in argz.h limits.h locale. - unistd.h values.h sys/param.h - do - as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` --if eval "test \"\${$as_ac_Header+set}\" = set"; then -- echo "$as_me:$LINENO: checking for $ac_header" >&5 --echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 --if eval "test \"\${$as_ac_Header+set}\" = set"; then -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then -+ { echo "$as_me:$LINENO: checking for $ac_header" >&5 -+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_Header'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - else - # Is the header compilable? --echo "$as_me:$LINENO: checking $ac_header usability" >&5 --echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -7921,41 +8499,37 @@ $ac_includes_default - #include <$ac_header> - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_header_compiler=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_header_compiler=no -+ ac_header_compiler=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 --echo "${ECHO_T}$ac_header_compiler" >&6 ++ fragP->fr_fix += fragP->fr_var - LDA_INITIAL_SIZE; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -+echo "${ECHO_T}$ac_header_compiler" >&6; } - - # Is the header present? --echo "$as_me:$LINENO: checking $ac_header presence" >&5 --echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -7964,24 +8538,22 @@ cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include <$ac_header> - _ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - ac_header_preproc=yes - else - echo "$as_me: failed program was:" >&5 -@@ -7989,9 +8561,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no - fi ++ if (fragP->fr_next ++ && ((offsetT)(fragP->fr_next->fr_address - fragP->fr_address) ++ != fragP->fr_fix)) ++ { ++ fprintf(stderr, "LDA frag: fr_fix is wrong! fragP->fr_var = %ld, r_type = %s\n", ++ fragP->fr_var, bfd_get_reloc_code_name(r_type)); ++ abort(); ++ } + - rm -f conftest.err conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 --echo "${ECHO_T}$ac_header_preproc" >&6 -+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -+echo "${ECHO_T}$ac_header_preproc" >&6; } - - # So? What about this header? - case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in -@@ -8015,25 +8588,19 @@ echo "$as_me: WARNING: $ac_header: s - echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 - echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} -- ( -- cat <<\_ASBOX --## ------------------------------------------ ## --## Report this to the AC_PACKAGE_NAME lists. ## --## ------------------------------------------ ## --_ASBOX -- ) | -- sed "s/^/$as_me: WARNING: /" >&2 ++ fixP = fix_new_exp(fragP, fragP->fr_fix - fragP->fr_var, fragP->fr_var, ++ &exp, pcrel, r_type); + - ;; - esac --echo "$as_me:$LINENO: checking for $ac_header" >&5 --echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 --if eval "test \"\${$as_ac_Header+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - eval "$as_ac_Header=\$ac_header_preproc" - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_Header'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - - fi - if test `eval echo '${'$as_ac_Header'}'` = yes; then -@@ -8059,9 +8626,9 @@ for ac_func in getcwd munmap putenv sete - __argz_count __argz_stringify __argz_next - do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_func" >&5 --echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 --if eval "test \"\${$as_ac_var+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF -@@ -8087,68 +8654,60 @@ cat >>conftest.$ac_ext <<_ACEOF - - #undef $ac_func - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" --{ - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char $ac_func (); - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ --#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -+#if defined __stub_$ac_func || defined __stub___$ac_func - choke me --#else --char (*f) () = $ac_func; --#endif --#ifdef __cplusplus --} - #endif - - int - main () - { --return f != $ac_func; -+return $ac_func (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --eval "$as_ac_var=no" -+ eval "$as_ac_var=no" - fi --rm -f conftest.err conftest.$ac_objext \ ++ /* Revert fix_new brain damage. "dot_value" is the value of PC at ++ the point of the fixup, relative to the frag address. fix_new() ++ and friends think they are only being called during the assembly ++ pass, not during relaxation or similar, so fx_dot_value, fx_file ++ and fx_line are all initialized to the wrong value. But we don't ++ know the size of the fixup until now, so we really can't live up ++ to the assumptions these functions make about the target. What ++ do these functions think the "where" and "frag" argument mean ++ anyway? */ ++ fixP->fx_dot_value = fragP->fr_fix - opc->size; ++ fixP->fx_file = fragP->fr_file; ++ fixP->fx_line = fragP->fr_line; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_var'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF - #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -@@ -8163,9 +8722,9 @@ done - for ac_func in stpcpy - do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_func" >&5 --echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 --if eval "test \"\${$as_ac_var+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF -@@ -8191,68 +8750,60 @@ cat >>conftest.$ac_ext <<_ACEOF - - #undef $ac_func - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" --{ - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char $ac_func (); - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ --#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -+#if defined __stub_$ac_func || defined __stub___$ac_func - choke me --#else --char (*f) () = $ac_func; --#endif --#ifdef __cplusplus --} - #endif - - int - main () - { --return f != $ac_func; -+return $ac_func (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --eval "$as_ac_var=no" -+ eval "$as_ac_var=no" - fi --rm -f conftest.err conftest.$ac_objext \ ++ fixP->tc_fix_data.ifield = ifield; ++ fixP->tc_fix_data.align = align; ++ /* these are only used if the fixup can actually be resolved */ ++ fixP->tc_fix_data.min = -32768; ++ fixP->tc_fix_data.max = 32767; ++} + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_var'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF - #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -@@ -8271,8 +8822,8 @@ _ACEOF - fi - - if test $ac_cv_header_locale_h = yes; then -- echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 --echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 -+echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6; } - if test "${am_cv_val_LC_MESSAGES+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -8292,39 +8843,36 @@ return LC_MESSAGES - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - am_cv_val_LC_MESSAGES=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --am_cv_val_LC_MESSAGES=no -+ am_cv_val_LC_MESSAGES=no - fi --rm -f conftest.err conftest.$ac_objext \ ++static void ++avr32_call_convert_frag(bfd *abfd ATTRIBUTE_UNUSED, ++ segT segment ATTRIBUTE_UNUSED, ++ fragS *fragP) ++{ ++ const struct avr32_opcode *opc = NULL; ++ const struct avr32_ifield *ifield; ++ bfd_reloc_code_real_type r_type; ++ symbolS *symbol; ++ offsetT offset; ++ fixS *fixP; ++ bfd_vma value; ++ int pcrel = 0, align = 0; ++ char *p; ++ ++ symbol = fragP->fr_symbol; ++ offset = fragP->fr_offset; ++ r_type = BFD_RELOC_NONE; ++ p = fragP->fr_opcode; ++ ++ pr_debug("%s:%d: call_convert_frag, subtype: %d, fix: %d, var: %d\n", ++ fragP->fr_file, fragP->fr_line, ++ fragP->fr_subtype, fragP->fr_fix, fragP->fr_var); ++ ++ switch (fragP->fr_subtype) ++ { ++ case CALL_SUBTYPE_RCALL1: ++ opc = &avr32_opc_table[AVR32_OPC_RCALL1]; ++ /* fall through */ ++ case CALL_SUBTYPE_RCALL2: ++ if (!opc) ++ opc = &avr32_opc_table[AVR32_OPC_RCALL2]; ++ ifield = opc->fields[0]; ++ r_type = opc->reloc_type; ++ pcrel = 1; ++ align = 1; ++ break; ++ case CALL_SUBTYPE_MCALL_CP: ++ opc = &avr32_opc_table[AVR32_OPC_MCALL]; ++ opc->fields[0]->insert(opc->fields[0], p, AVR32_REG_PC); ++ ifield = opc->fields[1]; ++ r_type = BFD_RELOC_AVR32_CPCALL; ++ symbol = fragP->tc_frag_data.pool->symbol; ++ offset = fragP->tc_frag_data.pool->literals[fragP->tc_frag_data.pool_entry].offset; ++ assert(fragP->tc_frag_data.pool->literals[fragP->tc_frag_data.pool_entry].refcount > 0); ++ pcrel = 1; ++ align = 2; ++ break; ++ case CALL_SUBTYPE_MCALL_GOT: ++ opc = &avr32_opc_table[AVR32_OPC_MCALL]; ++ opc->fields[0]->insert(opc->fields[0], p, 6); ++ ifield = opc->fields[1]; ++ r_type = BFD_RELOC_AVR32_GOT18SW; ++ break; ++ case CALL_SUBTYPE_MCALL_LARGE: ++ assert(fragP->fr_var == 10); ++ /* ld.w lr, r6[lr << 2] */ ++ opc = &avr32_opc_table[AVR32_OPC_LD_W5]; ++ bfd_putb32(opc->value, p + 4); ++ opc->fields[0]->insert(opc->fields[0], p + 4, AVR32_REG_LR); ++ opc->fields[1]->insert(opc->fields[1], p + 4, 6); ++ opc->fields[2]->insert(opc->fields[2], p + 4, AVR32_REG_LR); ++ opc->fields[3]->insert(opc->fields[3], p + 4, 2); + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 --echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6 -+{ echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 -+echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6; } - if test $am_cv_val_LC_MESSAGES = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -8333,34 +8881,34 @@ _ACEOF - - fi - fi -- echo "$as_me:$LINENO: checking whether NLS is requested" >&5 --echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 -- # Check whether --enable-nls or --disable-nls was given. -+ { echo "$as_me:$LINENO: checking whether NLS is requested" >&5 -+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; } -+ # Check whether --enable-nls was given. - if test "${enable_nls+set}" = set; then -- enableval="$enable_nls" -- USE_NLS=$enableval -+ enableval=$enable_nls; USE_NLS=$enableval - else - USE_NLS=yes --fi; -- echo "$as_me:$LINENO: result: $USE_NLS" >&5 --echo "${ECHO_T}$USE_NLS" >&6 -+fi ++ /* icall lr */ ++ opc = &avr32_opc_table[AVR32_OPC_ICALL]; ++ bfd_putb16(opc->value >> 16, p + 8); ++ opc->fields[0]->insert(opc->fields[0], p + 8, AVR32_REG_LR); + -+ { echo "$as_me:$LINENO: result: $USE_NLS" >&5 -+echo "${ECHO_T}$USE_NLS" >&6; } - - - USE_INCLUDED_LIBINTL=no - - if test "$USE_NLS" = "yes"; then -- echo "$as_me:$LINENO: checking whether included gettext is requested" >&5 --echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking whether included gettext is requested" >&5 -+echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6; } - --# Check whether --with-included-gettext or --without-included-gettext was given. -+# Check whether --with-included-gettext was given. - if test "${with_included_gettext+set}" = set; then -- withval="$with_included_gettext" -- nls_cv_force_use_gnu_gettext=$withval -+ withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval - else - nls_cv_force_use_gnu_gettext=no --fi; -- echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5 --echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6 -+fi ++ /* mov lr, (got_offset / 4) */ ++ opc = &avr32_opc_table[AVR32_OPC_MOV2]; ++ opc->fields[0]->insert(opc->fields[0], p, AVR32_REG_LR); ++ ifield = opc->fields[1]; ++ r_type = BFD_RELOC_AVR32_GOTCALL; ++ break; ++ default: ++ BAD_CASE(fragP->fr_subtype); ++ } + -+ { echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5 -+echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6; } - - nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" - if test "$nls_cv_force_use_gnu_gettext" != "yes"; then -@@ -8369,17 +8917,17 @@ echo "${ECHO_T}$nls_cv_force_use_gnu_get - CATOBJEXT= - - if test "${ac_cv_header_libintl_h+set}" = set; then -- echo "$as_me:$LINENO: checking for libintl.h" >&5 --echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for libintl.h" >&5 -+echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6; } - if test "${ac_cv_header_libintl_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - fi --echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 --echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 -+echo "${ECHO_T}$ac_cv_header_libintl_h" >&6; } - else - # Is the header compilable? --echo "$as_me:$LINENO: checking libintl.h usability" >&5 --echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking libintl.h usability" >&5 -+echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -8390,41 +8938,37 @@ $ac_includes_default - #include - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_header_compiler=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_header_compiler=no -+ ac_header_compiler=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 --echo "${ECHO_T}$ac_header_compiler" >&6 ++ /* Insert the opcode and clear the variable ifield */ ++ value = bfd_getb32(p); ++ value &= ~(opc->mask | ifield->mask); ++ value |= opc->value; ++ bfd_putb32(value, p); + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -+echo "${ECHO_T}$ac_header_compiler" >&6; } - - # Is the header present? --echo "$as_me:$LINENO: checking libintl.h presence" >&5 --echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking libintl.h presence" >&5 -+echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -8433,24 +8977,22 @@ cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - _ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - ac_header_preproc=yes - else - echo "$as_me: failed program was:" >&5 -@@ -8458,9 +9000,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no - fi ++ fragP->fr_fix += fragP->fr_var - CALL_INITIAL_SIZE; + - rm -f conftest.err conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 --echo "${ECHO_T}$ac_header_preproc" >&6 -+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -+echo "${ECHO_T}$ac_header_preproc" >&6; } - - # So? What about this header? - case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in -@@ -8484,30 +9027,23 @@ echo "$as_me: WARNING: libintl.h: se - echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: libintl.h: in the future, the compiler will take precedence" >&5 - echo "$as_me: WARNING: libintl.h: in the future, the compiler will take precedence" >&2;} -- ( -- cat <<\_ASBOX --## ------------------------------------------ ## --## Report this to the AC_PACKAGE_NAME lists. ## --## ------------------------------------------ ## --_ASBOX -- ) | -- sed "s/^/$as_me: WARNING: /" >&2 ++ if (fragP->fr_next ++ && ((offsetT)(fragP->fr_next->fr_address - fragP->fr_address) ++ != fragP->fr_fix)) ++ { ++ fprintf(stderr, "%s:%d: fr_fix %lu is wrong! fr_var=%lu, r_type=%s\n", ++ fragP->fr_file, fragP->fr_line, ++ fragP->fr_fix, fragP->fr_var, bfd_get_reloc_code_name(r_type)); ++ fprintf(stderr, "fr_fix should be %ld. next frag is %s:%d\n", ++ (offsetT)(fragP->fr_next->fr_address - fragP->fr_address), ++ fragP->fr_next->fr_file, fragP->fr_next->fr_line); ++ } + - ;; - esac --echo "$as_me:$LINENO: checking for libintl.h" >&5 --echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for libintl.h" >&5 -+echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6; } - if test "${ac_cv_header_libintl_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - ac_cv_header_libintl_h=$ac_header_preproc - fi --echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 --echo "${ECHO_T}$ac_cv_header_libintl_h" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5 -+echo "${ECHO_T}$ac_cv_header_libintl_h" >&6; } - - fi - if test $ac_cv_header_libintl_h = yes; then -- echo "$as_me:$LINENO: checking for gettext in libc" >&5 --echo $ECHO_N "checking for gettext in libc... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for gettext in libc" >&5 -+echo $ECHO_N "checking for gettext in libc... $ECHO_C" >&6; } - if test "${gt_cv_func_gettext_libc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -8527,43 +9063,40 @@ return (int) gettext ("") - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - gt_cv_func_gettext_libc=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --gt_cv_func_gettext_libc=no -+ gt_cv_func_gettext_libc=no - fi --rm -f conftest.err conftest.$ac_objext \ ++ fixP = fix_new(fragP, fragP->fr_fix - fragP->fr_var, fragP->fr_var, ++ symbol, offset, pcrel, r_type); + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5 --echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6 -+{ echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5 -+echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6; } - - if test "$gt_cv_func_gettext_libc" != "yes"; then -- echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5 --echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5 -+echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6; } - if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -8576,59 +9109,56 @@ cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char bindtextdomain (); - int - main () - { --bindtextdomain (); -+return bindtextdomain (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - ac_cv_lib_intl_bindtextdomain=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_lib_intl_bindtextdomain=no -+ ac_cv_lib_intl_bindtextdomain=no - fi --rm -f conftest.err conftest.$ac_objext \ ++ /* Revert fix_new brain damage. "dot_value" is the value of PC at ++ the point of the fixup, relative to the frag address. fix_new() ++ and friends think they are only being called during the assembly ++ pass, not during relaxation or similar, so fx_dot_value, fx_file ++ and fx_line are all initialized to the wrong value. But we don't ++ know the size of the fixup until now, so we really can't live up ++ to the assumptions these functions make about the target. What ++ do these functions think the "where" and "frag" argument mean ++ anyway? */ ++ fixP->fx_dot_value = fragP->fr_fix - opc->size; ++ fixP->fx_file = fragP->fr_file; ++ fixP->fx_line = fragP->fr_line; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - LIBS=$ac_check_lib_save_LIBS - fi --echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5 --echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5 -+echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6; } - if test $ac_cv_lib_intl_bindtextdomain = yes; then -- echo "$as_me:$LINENO: checking for gettext in libintl" >&5 --echo $ECHO_N "checking for gettext in libintl... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for gettext in libintl" >&5 -+echo $ECHO_N "checking for gettext in libintl... $ECHO_C" >&6; } - if test "${gt_cv_func_gettext_libintl+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -8648,39 +9178,36 @@ return (int) gettext ("") - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - gt_cv_func_gettext_libintl=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --gt_cv_func_gettext_libintl=no -+ gt_cv_func_gettext_libintl=no - fi --rm -f conftest.err conftest.$ac_objext \ ++ fixP->tc_fix_data.ifield = ifield; ++ fixP->tc_fix_data.align = align; ++ /* these are only used if the fixup can actually be resolved */ ++ fixP->tc_fix_data.min = -2097152; ++ fixP->tc_fix_data.max = 2097150; ++} ++ ++static void ++avr32_cpool_convert_frag(bfd *abfd ATTRIBUTE_UNUSED, ++ segT segment ATTRIBUTE_UNUSED, ++ fragS *fragP) ++{ ++ struct cpool *pool; ++ addressT address; ++ unsigned int entry; ++ char *p; ++ char sym_name[20]; ++ ++ /* Did we get rid of the frag altogether? */ ++ if (!fragP->fr_var) ++ return; ++ ++ pool = fragP->tc_frag_data.pool; ++ address = fragP->fr_address + fragP->fr_fix; ++ p = fragP->fr_literal + fragP->fr_fix; ++ ++ sprintf(sym_name, "$$cp_\002%x", pool->id); ++ symbol_locate(pool->symbol, sym_name, pool->section, fragP->fr_fix, fragP); ++ symbol_table_insert(pool->symbol); ++ ++ for (entry = 0; entry < pool->next_free_entry; entry++) ++ { ++ if (pool->literals[entry].refcount > 0) ++ { ++ fix_new_exp(fragP, fragP->fr_fix, 4, &pool->literals[entry].exp, ++ FALSE, BFD_RELOC_AVR32_32_CPENT); ++ fragP->fr_fix += 4; ++ } ++ } ++} ++ ++static struct avr32_relaxer avr32_default_relaxer = { ++ .estimate_size = avr32_default_estimate_size_before_relax, ++ .relax_frag = avr32_default_relax_frag, ++ .convert_frag = avr32_default_convert_frag, ++}; ++static struct avr32_relaxer avr32_lda_relaxer = { ++ .estimate_size = avr32_lda_estimate_size_before_relax, ++ .relax_frag = avr32_lda_relax_frag, ++ .convert_frag = avr32_lda_convert_frag, ++}; ++static struct avr32_relaxer avr32_call_relaxer = { ++ .estimate_size = avr32_call_estimate_size_before_relax, ++ .relax_frag = avr32_call_relax_frag, ++ .convert_frag = avr32_call_convert_frag, ++}; ++static struct avr32_relaxer avr32_cpool_relaxer = { ++ .estimate_size = avr32_cpool_estimate_size_before_relax, ++ .relax_frag = avr32_cpool_relax_frag, ++ .convert_frag = avr32_cpool_convert_frag, ++}; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libintl" >&5 --echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6 -+{ echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libintl" >&5 -+echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6; } - fi - - fi -@@ -8694,8 +9221,8 @@ _ACEOF - - # Extract the first word of "msgfmt", so it can be a program name with args. - set dummy msgfmt; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_path_MSGFMT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -8721,20 +9248,20 @@ esac - fi - MSGFMT="$ac_cv_path_MSGFMT" - if test -n "$MSGFMT"; then -- echo "$as_me:$LINENO: result: $MSGFMT" >&5 --echo "${ECHO_T}$MSGFMT" >&6 -+ { echo "$as_me:$LINENO: result: $MSGFMT" >&5 -+echo "${ECHO_T}$MSGFMT" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - if test "$MSGFMT" != "no"; then - - for ac_func in dcgettext - do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_func" >&5 --echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 --if eval "test \"\${$as_ac_var+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF -@@ -8760,68 +9287,60 @@ cat >>conftest.$ac_ext <<_ACEOF - - #undef $ac_func - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" --{ - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char $ac_func (); - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ --#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -+#if defined __stub_$ac_func || defined __stub___$ac_func - choke me --#else --char (*f) () = $ac_func; --#endif --#ifdef __cplusplus --} - #endif - - int - main () - { --return f != $ac_func; -+return $ac_func (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --eval "$as_ac_var=no" -+ eval "$as_ac_var=no" - fi --rm -f conftest.err conftest.$ac_objext \ ++static void s_cpool(int arg ATTRIBUTE_UNUSED) ++{ ++ struct cpool *pool; ++ unsigned int max_size; ++ char *buf; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_var'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF - #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -@@ -8832,8 +9351,8 @@ done - - # Extract the first word of "gmsgfmt", so it can be a program name with args. - set dummy gmsgfmt; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_path_GMSGFMT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -8848,32 +9367,33 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" - ;; - esac - fi - GMSGFMT=$ac_cv_path_GMSGFMT -- - if test -n "$GMSGFMT"; then -- echo "$as_me:$LINENO: result: $GMSGFMT" >&5 --echo "${ECHO_T}$GMSGFMT" >&6 -+ { echo "$as_me:$LINENO: result: $GMSGFMT" >&5 -+echo "${ECHO_T}$GMSGFMT" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ pool = find_cpool(now_seg, now_subseg); ++ if (!pool || !pool->symbol || pool->next_free_entry == 0) ++ return; + - # Extract the first word of "xgettext", so it can be a program name with args. - set dummy xgettext; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_path_XGETTEXT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -8899,11 +9419,11 @@ esac - fi - XGETTEXT="$ac_cv_path_XGETTEXT" - if test -n "$XGETTEXT"; then -- echo "$as_me:$LINENO: result: $XGETTEXT" >&5 --echo "${ECHO_T}$XGETTEXT" >&6 -+ { echo "$as_me:$LINENO: result: $XGETTEXT" >&5 -+echo "${ECHO_T}$XGETTEXT" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - - cat >conftest.$ac_ext <<_ACEOF -@@ -8923,37 +9443,34 @@ extern int _nl_msg_cat_cntr; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - CATOBJEXT=.gmo - DATADIRNAME=share - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --CATOBJEXT=.mo -+ CATOBJEXT=.mo - DATADIRNAME=lib - fi --rm -f conftest.err conftest.$ac_objext \ ++ /* Make sure the constant pool is properly aligned */ ++ frag_align_code(2, 0); + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - INSTOBJEXT=.mo - fi -@@ -8975,8 +9492,8 @@ fi - INTLOBJS="\$(GETTOBJS)" - # Extract the first word of "msgfmt", so it can be a program name with args. - set dummy msgfmt; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_path_MSGFMT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -9002,17 +9519,17 @@ esac - fi - MSGFMT="$ac_cv_path_MSGFMT" - if test -n "$MSGFMT"; then -- echo "$as_me:$LINENO: result: $MSGFMT" >&5 --echo "${ECHO_T}$MSGFMT" >&6 -+ { echo "$as_me:$LINENO: result: $MSGFMT" >&5 -+echo "${ECHO_T}$MSGFMT" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - - # Extract the first word of "gmsgfmt", so it can be a program name with args. - set dummy gmsgfmt; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_path_GMSGFMT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -9027,32 +9544,33 @@ do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi - done - done -+IFS=$as_save_IFS - - test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" - ;; - esac - fi - GMSGFMT=$ac_cv_path_GMSGFMT -- - if test -n "$GMSGFMT"; then -- echo "$as_me:$LINENO: result: $GMSGFMT" >&5 --echo "${ECHO_T}$GMSGFMT" >&6 -+ { echo "$as_me:$LINENO: result: $GMSGFMT" >&5 -+echo "${ECHO_T}$GMSGFMT" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - ++ /* Assume none of the entries are discarded, and that we need the ++ maximum amount of alignment. But we're not going to allocate ++ anything up front. */ ++ max_size = pool->next_free_entry * 4 + 2; ++ frag_grow(max_size); ++ buf = frag_more(0); + - # Extract the first word of "xgettext", so it can be a program name with args. - set dummy xgettext; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } - if test "${ac_cv_path_XGETTEXT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -9078,11 +9596,11 @@ esac - fi - XGETTEXT="$ac_cv_path_XGETTEXT" - if test -n "$XGETTEXT"; then -- echo "$as_me:$LINENO: result: $XGETTEXT" >&5 --echo "${ECHO_T}$XGETTEXT" >&6 -+ { echo "$as_me:$LINENO: result: $XGETTEXT" >&5 -+echo "${ECHO_T}$XGETTEXT" >&6; } - else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -+ { echo "$as_me:$LINENO: result: no" >&5 -+echo "${ECHO_T}no" >&6; } - fi - - -@@ -9101,8 +9619,8 @@ fi - if $XGETTEXT --omit-header /dev/null 2> /dev/null; then - : ; - else -- echo "$as_me:$LINENO: result: found xgettext programs is not GNU xgettext; ignore it" >&5 --echo "${ECHO_T}found xgettext programs is not GNU xgettext; ignore it" >&6 -+ { echo "$as_me:$LINENO: result: found xgettext programs is not GNU xgettext; ignore it" >&5 -+echo "${ECHO_T}found xgettext programs is not GNU xgettext; ignore it" >&6; } - XGETTEXT=":" - fi - fi -@@ -9151,8 +9669,8 @@ _ACEOF - if test "x$ALL_LINGUAS" = "x"; then - LINGUAS= - else -- echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 --echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 -+echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6; } - NEW_LINGUAS= - for lang in ${LINGUAS=$ALL_LINGUAS}; do - case "$ALL_LINGUAS" in -@@ -9160,8 +9678,8 @@ echo $ECHO_N "checking for catalogs to b - esac - done - LINGUAS=$NEW_LINGUAS -- echo "$as_me:$LINENO: result: $LINGUAS" >&5 --echo "${ECHO_T}$LINGUAS" >&6 -+ { echo "$as_me:$LINENO: result: $LINGUAS" >&5 -+echo "${ECHO_T}$LINGUAS" >&6; } - fi - - if test -n "$LINGUAS"; then -@@ -9180,17 +9698,17 @@ echo "${ECHO_T}$LINGUAS" >&6 - if test -f $srcdir/po2tbl.sed.in; then - if test "$CATOBJEXT" = ".cat"; then - if test "${ac_cv_header_linux_version_h+set}" = set; then -- echo "$as_me:$LINENO: checking for linux/version.h" >&5 --echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for linux/version.h" >&5 -+echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6; } - if test "${ac_cv_header_linux_version_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - fi --echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 --echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 -+echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6; } - else - # Is the header compilable? --echo "$as_me:$LINENO: checking linux/version.h usability" >&5 --echo $ECHO_N "checking linux/version.h usability... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking linux/version.h usability" >&5 -+echo $ECHO_N "checking linux/version.h usability... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -9201,41 +9719,37 @@ $ac_includes_default - #include - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_header_compiler=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_header_compiler=no -+ ac_header_compiler=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 --echo "${ECHO_T}$ac_header_compiler" >&6 ++ frag_now->tc_frag_data.relaxer = &avr32_cpool_relaxer; ++ frag_now->tc_frag_data.pool = pool; ++ ++ symbol_set_frag(pool->symbol, frag_now); ++ ++ /* Assume zero initial size, allowing other relaxers to be ++ optimistic about things. */ ++ frag_var(rs_machine_dependent, max_size, 0, ++ 0, pool->symbol, 0, NULL); ++ ++ /* Mark the pool as empty. */ ++ pool->used = 1; ++} ++ ++/* The location from which a PC relative jump should be calculated, ++ given a PC relative reloc. */ ++ ++long ++md_pcrel_from_section (fixS *fixP, segT sec) ++{ ++ pr_debug("pcrel_from_section, fx_offset = %d\n", fixP->fx_offset); ++ ++ if (fixP->fx_addsy != NULL ++ && (! S_IS_DEFINED (fixP->fx_addsy) ++ || S_GET_SEGMENT (fixP->fx_addsy) != sec ++ || S_FORCE_RELOC(fixP->fx_addsy, 1))) ++ { ++ pr_debug("Unknown pcrel symbol: %s\n", S_GET_NAME(fixP->fx_addsy)); ++ ++ /* The symbol is undefined (or is defined but not in this section). ++ Let the linker figure it out. */ ++ return 0; ++ } ++ ++ pr_debug("pcrel from %x + %x, symbol: %s (%x)\n", ++ fixP->fx_frag->fr_address, fixP->fx_where, ++ fixP->fx_addsy?S_GET_NAME(fixP->fx_addsy):"(null)", ++ fixP->fx_addsy?S_GET_VALUE(fixP->fx_addsy):0); ++ ++ return ((fixP->fx_frag->fr_address + fixP->fx_where) ++ & (~0UL << fixP->tc_fix_data.align)); ++} + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -+echo "${ECHO_T}$ac_header_compiler" >&6; } - - # Is the header present? --echo "$as_me:$LINENO: checking linux/version.h presence" >&5 --echo $ECHO_N "checking linux/version.h presence... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking linux/version.h presence" >&5 -+echo $ECHO_N "checking linux/version.h presence... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -9244,24 +9758,22 @@ cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include - _ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - ac_header_preproc=yes - else - echo "$as_me: failed program was:" >&5 -@@ -9269,9 +9781,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no - fi ++valueT ++md_section_align (segT segment, valueT size) ++{ ++ int align = bfd_get_section_alignment (stdoutput, segment); ++ return ((size + (1 << align) - 1) & (-1 << align)); ++} + - rm -f conftest.err conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 --echo "${ECHO_T}$ac_header_preproc" >&6 -+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -+echo "${ECHO_T}$ac_header_preproc" >&6; } - - # So? What about this header? - case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in -@@ -9295,25 +9808,18 @@ echo "$as_me: WARNING: linux/version.h: - echo "$as_me: WARNING: linux/version.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: linux/version.h: in the future, the compiler will take precedence" >&5 - echo "$as_me: WARNING: linux/version.h: in the future, the compiler will take precedence" >&2;} -- ( -- cat <<\_ASBOX --## ------------------------------------------ ## --## Report this to the AC_PACKAGE_NAME lists. ## --## ------------------------------------------ ## --_ASBOX -- ) | -- sed "s/^/$as_me: WARNING: /" >&2 ++static int syntax_matches(const struct avr32_syntax *syntax, ++ char *str) ++{ ++ int i; + - ;; - esac --echo "$as_me:$LINENO: checking for linux/version.h" >&5 --echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for linux/version.h" >&5 -+echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6; } - if test "${ac_cv_header_linux_version_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - ac_cv_header_linux_version_h=$ac_header_preproc - fi --echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 --echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5 -+echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6; } - - fi - if test $ac_cv_header_linux_version_h = yes; then -@@ -9363,17 +9869,17 @@ fi - fi - - --echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 --echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 -- # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. -+{ echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 -+echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; } -+ # Check whether --enable-maintainer-mode was given. - if test "${enable_maintainer_mode+set}" = set; then -- enableval="$enable_maintainer_mode" -- USE_MAINTAINER_MODE=$enableval -+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval - else - USE_MAINTAINER_MODE=no --fi; -- echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 --echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 -+fi ++ pr_debug("syntax %d matches `%s'?\n", syntax->id, str); + -+ { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 -+echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; } - - - if test $USE_MAINTAINER_MODE = yes; then -@@ -9401,18 +9907,19 @@ fi - for ac_header in string.h stdlib.h memory.h strings.h unistd.h stdarg.h varargs.h errno.h sys/types.h - do - as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` --if eval "test \"\${$as_ac_Header+set}\" = set"; then -- echo "$as_me:$LINENO: checking for $ac_header" >&5 --echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 --if eval "test \"\${$as_ac_Header+set}\" = set"; then -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then -+ { echo "$as_me:$LINENO: checking for $ac_header" >&5 -+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_Header'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - else - # Is the header compilable? --echo "$as_me:$LINENO: checking $ac_header usability" >&5 --echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -9423,41 +9930,37 @@ $ac_includes_default - #include <$ac_header> - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_header_compiler=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_header_compiler=no -+ ac_header_compiler=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 --echo "${ECHO_T}$ac_header_compiler" >&6 ++ if (syntax->nr_operands < 0) ++ { ++ struct avr32_operand *op; ++ int optype; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -+echo "${ECHO_T}$ac_header_compiler" >&6; } - - # Is the header present? --echo "$as_me:$LINENO: checking $ac_header presence" >&5 --echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -9466,24 +9969,22 @@ cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - #include <$ac_header> - _ACEOF --if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -+if { (ac_try="$ac_cpp conftest.$ac_ext" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -+ (exit $ac_status); } >/dev/null && { -+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || -+ test ! -s conftest.err -+ }; then - ac_header_preproc=yes - else - echo "$as_me: failed program was:" >&5 -@@ -9491,9 +9992,10 @@ sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no - fi ++ for (i = 0; i < (-syntax->nr_operands - 1); i++) ++ { ++ char *p; ++ char c; + - rm -f conftest.err conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 --echo "${ECHO_T}$ac_header_preproc" >&6 -+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -+echo "${ECHO_T}$ac_header_preproc" >&6; } - - # So? What about this header? - case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in -@@ -9517,25 +10019,19 @@ echo "$as_me: WARNING: $ac_header: s - echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 - echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} -- ( -- cat <<\_ASBOX --## ------------------------------------------ ## --## Report this to the AC_PACKAGE_NAME lists. ## --## ------------------------------------------ ## --_ASBOX -- ) | -- sed "s/^/$as_me: WARNING: /" >&2 ++ optype = syntax->operand[i]; ++ assert(optype < AVR32_NR_OPERANDS); ++ op = &avr32_operand_table[optype]; + - ;; - esac --echo "$as_me:$LINENO: checking for $ac_header" >&5 --echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 --if eval "test \"\${$as_ac_Header+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - eval "$as_ac_Header=\$ac_header_preproc" - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_Header'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - - fi - if test `eval echo '${'$as_ac_Header'}'` = yes; then -@@ -9550,8 +10046,8 @@ done - - # Put this here so that autoconf's "cross-compiling" message doesn't confuse - # people who are not cross-compiling but are compiling cross-assemblers. --echo "$as_me:$LINENO: checking whether compiling a cross-assembler" >&5 --echo $ECHO_N "checking whether compiling a cross-assembler... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether compiling a cross-assembler" >&5 -+echo $ECHO_N "checking whether compiling a cross-assembler... $ECHO_C" >&6; } - if test "${host}" = "${target}"; then - cross_gas=no - else -@@ -9562,13 +10058,13 @@ cat >>confdefs.h <<\_ACEOF - _ACEOF - - fi --echo "$as_me:$LINENO: result: $cross_gas" >&5 --echo "${ECHO_T}$cross_gas" >&6 -+{ echo "$as_me:$LINENO: result: $cross_gas" >&5 -+echo "${ECHO_T}$cross_gas" >&6; } - - # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works - # for constant arguments. Useless! --echo "$as_me:$LINENO: checking for working alloca.h" >&5 --echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for working alloca.h" >&5 -+echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } - if test "${ac_cv_working_alloca_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -9583,44 +10079,42 @@ int - main () - { - char *p = (char *) alloca (2 * sizeof (int)); -+ if (p) return 0; - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - ac_cv_working_alloca_h=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_working_alloca_h=no -+ ac_cv_working_alloca_h=no - fi --rm -f conftest.err conftest.$ac_objext \ ++ for (p = str; *p; p++) ++ if (*p == ',') ++ break; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 --echo "${ECHO_T}$ac_cv_working_alloca_h" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 -+echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } - if test $ac_cv_working_alloca_h = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -9629,8 +10123,8 @@ _ACEOF - - fi - --echo "$as_me:$LINENO: checking for alloca" >&5 --echo $ECHO_N "checking for alloca... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for alloca" >&5 -+echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } - if test "${ac_cv_func_alloca_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -9647,7 +10141,7 @@ cat >>conftest.$ac_ext <<_ACEOF - # include - # define alloca _alloca - # else --# if HAVE_ALLOCA_H -+# ifdef HAVE_ALLOCA_H - # include - # else - # ifdef _AIX -@@ -9665,44 +10159,42 @@ int - main () - { - char *p = (char *) alloca (1); -+ if (p) return 0; - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - ac_cv_func_alloca_works=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_func_alloca_works=no -+ ac_cv_func_alloca_works=no - fi --rm -f conftest.err conftest.$ac_objext \ ++ if (p == str) ++ return 0; ++ ++ c = *p; ++ *p = 0; ++ ++ if (!op->match(str)) ++ { ++ *p = c; ++ return 0; ++ } ++ ++ str = p; ++ *p = c; ++ if (c) ++ str++; ++ } ++ ++ optype = syntax->operand[i]; ++ assert(optype < AVR32_NR_OPERANDS); ++ op = &avr32_operand_table[optype]; ++ ++ if (!op->match(str)) ++ return 0; ++ return 1; ++ } ++ ++ for (i = 0; i < syntax->nr_operands; i++) ++ { ++ struct avr32_operand *op; ++ int optype = syntax->operand[i]; ++ char *p; ++ char c; ++ ++ assert(optype < AVR32_NR_OPERANDS); ++ op = &avr32_operand_table[optype]; ++ ++ for (p = str; *p; p++) ++ if (*p == ',') ++ break; ++ ++ if (p == str) ++ return 0; ++ ++ c = *p; ++ *p = 0; ++ ++ if (!op->match(str)) ++ { ++ *p = c; ++ return 0; ++ } ++ ++ str = p; ++ *p = c; ++ if (c) ++ str++; ++ } ++ ++ if (*str == '\0') ++ return 1; ++ ++ if ((*str == 'e' || *str == 'E') && !str[1]) ++ return 1; ++ ++ return 0; ++} ++ ++static int parse_operands(char *str) ++{ ++ int i; ++ ++ if (current_insn.syntax->nr_operands < 0) ++ { ++ int optype; ++ struct avr32_operand *op; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 --echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 -+echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } - - if test $ac_cv_func_alloca_works = yes; then - -@@ -9716,15 +10208,15 @@ else - # contain a buggy version. If you still want to use their alloca, - # use ar to extract alloca.o from them instead of compiling alloca.c. - --ALLOCA=alloca.$ac_objext -+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext - - cat >>confdefs.h <<\_ACEOF - #define C_ALLOCA 1 - _ACEOF - - --echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 --echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 -+echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } - if test "${ac_cv_os_cray+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -9734,7 +10226,7 @@ _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#if defined(CRAY) && ! defined(CRAY2) -+#if defined CRAY && ! defined CRAY2 - webecray - #else - wenotbecray -@@ -9750,14 +10242,14 @@ fi - rm -f conftest* - - fi --echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 --echo "${ECHO_T}$ac_cv_os_cray" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 -+echo "${ECHO_T}$ac_cv_os_cray" >&6; } - if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_func" >&5 --echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 --if eval "test \"\${$as_ac_var+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF -@@ -9783,68 +10275,60 @@ cat >>conftest.$ac_ext <<_ACEOF - - #undef $ac_func - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" --{ - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char $ac_func (); - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ --#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -+#if defined __stub_$ac_func || defined __stub___$ac_func - choke me --#else --char (*f) () = $ac_func; --#endif --#ifdef __cplusplus --} - #endif - - int - main () - { --return f != $ac_func; -+return $ac_func (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --eval "$as_ac_var=no" -+ eval "$as_ac_var=no" - fi --rm -f conftest.err conftest.$ac_objext \ ++ for (i = 0; i < (-current_insn.syntax->nr_operands - 1); i++) ++ { ++ char *p; ++ char c; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_var'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_var'}'` = yes; then - - cat >>confdefs.h <<_ACEOF -@@ -9857,8 +10341,8 @@ fi - done - fi - --echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 --echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 -+echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } - if test "${ac_cv_c_stack_direction+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -9871,6 +10355,7 @@ _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ -+$ac_includes_default - int - find_stack_direction () - { -@@ -9888,17 +10373,26 @@ find_stack_direction () - int - main () - { -- exit (find_stack_direction () < 0); -+ return find_stack_direction () < 0; - } - _ACEOF - rm -f conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&5 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -+ { (case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then -@@ -9911,11 +10405,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 - ( exit $ac_status ) - ac_cv_c_stack_direction=-1 - fi --rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext - fi ++ optype = current_insn.syntax->operand[i]; ++ op = &avr32_operand_table[optype]; + ++ for (p = str; *p; p++) ++ if (*p == ',') ++ break; + - fi --echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 --echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 -+echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } - - cat >>confdefs.h <<_ACEOF - #define STACK_DIRECTION $ac_cv_c_stack_direction -@@ -9924,8 +10420,8 @@ _ACEOF - - fi - --echo "$as_me:$LINENO: checking for inline" >&5 --echo $ECHO_N "checking for inline... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for inline" >&5 -+echo $ECHO_N "checking for inline... $ECHO_C" >&6; } - if test "${ac_cv_c_inline+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -9945,39 +10441,37 @@ $ac_kw foo_t foo () {return 0; } - - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_c_inline=$ac_kw; break -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then -+ ac_cv_c_inline=$ac_kw - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - ++ assert(p != str); + - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ c = *p, *p = 0; ++ op->parse(op, str, i); ++ *p = c; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ test "$ac_cv_c_inline" != no && break - done - - fi --echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 --echo "${ECHO_T}$ac_cv_c_inline" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 -+echo "${ECHO_T}$ac_cv_c_inline" >&6; } - - - case $ac_cv_c_inline in -@@ -10002,9 +10496,9 @@ esac - for ac_func in unlink remove - do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_func" >&5 --echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 --if eval "test \"\${$as_ac_var+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF -@@ -10030,68 +10524,60 @@ cat >>conftest.$ac_ext <<_ACEOF - - #undef $ac_func - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" --{ - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char $ac_func (); - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ --#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -+#if defined __stub_$ac_func || defined __stub___$ac_func - choke me --#else --char (*f) () = $ac_func; --#endif --#ifdef __cplusplus --} - #endif - - int - main () - { --return f != $ac_func; -+return $ac_func (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --eval "$as_ac_var=no" -+ eval "$as_ac_var=no" - fi --rm -f conftest.err conftest.$ac_objext \ ++ str = p; ++ if (c) str++; ++ } + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_var'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF - #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -@@ -10106,9 +10592,9 @@ done - for ac_func in sbrk - do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_func" >&5 --echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 --if eval "test \"\${$as_ac_var+set}\" = set"; then -+{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF -@@ -10134,68 +10620,60 @@ cat >>conftest.$ac_ext <<_ACEOF - - #undef $ac_func - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" --{ - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char $ac_func (); - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ --#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -+#if defined __stub_$ac_func || defined __stub___$ac_func - choke me --#else --char (*f) () = $ac_func; --#endif --#ifdef __cplusplus --} - #endif - - int - main () - { --return f != $ac_func; -+return $ac_func (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --eval "$as_ac_var=no" -+ eval "$as_ac_var=no" - fi --rm -f conftest.err conftest.$ac_objext \ ++ /* give the rest of the line to the last operand */ ++ optype = current_insn.syntax->operand[i]; ++ op = &avr32_operand_table[optype]; ++ op->parse(op, str, i); ++ } ++ else ++ { ++ for (i = 0; i < current_insn.syntax->nr_operands; i++) ++ { ++ int optype = current_insn.syntax->operand[i]; ++ struct avr32_operand *op = &avr32_operand_table[optype]; ++ char *p; ++ char c; ++ ++ skip_whitespace(str); ++ ++ for (p = str; *p; p++) ++ if (*p == ',') ++ break; ++ ++ assert(p != str); ++ ++ c = *p, *p = 0; ++ op->parse(op, str, i); ++ *p = c; ++ ++ str = p; ++ if (c) str++; ++ } + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -+ac_res=`eval echo '${'$as_ac_var'}'` -+ { echo "$as_me:$LINENO: result: $ac_res" >&5 -+echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF - #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -@@ -10215,8 +10693,8 @@ case $host in - # on darwin the libm is a symbolic link to libSystem.dylib - ;; - *-ncr-sysv4.3*) -- echo "$as_me:$LINENO: checking for _mwvalidcheckl in -lmw" >&5 --echo $ECHO_N "checking for _mwvalidcheckl in -lmw... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for _mwvalidcheckl in -lmw" >&5 -+echo $ECHO_N "checking for _mwvalidcheckl in -lmw... $ECHO_C" >&6; } - if test "${ac_cv_lib_mw__mwvalidcheckl+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10229,62 +10707,59 @@ cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ - --/* Override any gcc2 internal prototype to avoid an error. */ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ - #ifdef __cplusplus - extern "C" - #endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ - char _mwvalidcheckl (); - int - main () - { --_mwvalidcheckl (); -+return _mwvalidcheckl (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - ac_cv_lib_mw__mwvalidcheckl=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_lib_mw__mwvalidcheckl=no -+ ac_cv_lib_mw__mwvalidcheckl=no - fi --rm -f conftest.err conftest.$ac_objext \ ++ if (*str == 'E' || *str == 'e') ++ current_insn.force_extended = 1; ++ } + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - LIBS=$ac_check_lib_save_LIBS - fi --echo "$as_me:$LINENO: result: $ac_cv_lib_mw__mwvalidcheckl" >&5 --echo "${ECHO_T}$ac_cv_lib_mw__mwvalidcheckl" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_lib_mw__mwvalidcheckl" >&5 -+echo "${ECHO_T}$ac_cv_lib_mw__mwvalidcheckl" >&6; } - if test $ac_cv_lib_mw__mwvalidcheckl = yes; then - LIBM="-lmw" - fi - -- echo "$as_me:$LINENO: checking for main in -lm" >&5 --echo $ECHO_N "checking for main in -lm... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for main in -lm" >&5 -+echo $ECHO_N "checking for main in -lm... $ECHO_C" >&6; } - if test "${ac_cv_lib_m_main+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10301,54 +10776,51 @@ cat >>conftest.$ac_ext <<_ACEOF - int - main () - { --main (); -+return main (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - ac_cv_lib_m_main=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_lib_m_main=no -+ ac_cv_lib_m_main=no - fi --rm -f conftest.err conftest.$ac_objext \ ++ return 0; ++} + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - LIBS=$ac_check_lib_save_LIBS - fi --echo "$as_me:$LINENO: result: $ac_cv_lib_m_main" >&5 --echo "${ECHO_T}$ac_cv_lib_m_main" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_main" >&5 -+echo "${ECHO_T}$ac_cv_lib_m_main" >&6; } - if test $ac_cv_lib_m_main = yes; then - LIBM="$LIBM -lm" - fi - - ;; - *) -- echo "$as_me:$LINENO: checking for main in -lm" >&5 --echo $ECHO_N "checking for main in -lm... $ECHO_C" >&6 -+ { echo "$as_me:$LINENO: checking for main in -lm" >&5 -+echo $ECHO_N "checking for main in -lm... $ECHO_C" >&6; } - if test "${ac_cv_lib_m_main+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10365,46 +10837,43 @@ cat >>conftest.$ac_ext <<_ACEOF - int - main () - { --main (); -+return main (); - ; - return 0; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - ac_cv_lib_m_main=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_lib_m_main=no -+ ac_cv_lib_m_main=no - fi --rm -f conftest.err conftest.$ac_objext \ ++static const char * ++finish_insn(const struct avr32_opcode *opc) ++{ ++ expressionS *exp = ¤t_insn.immediate; ++ unsigned int i; ++ int will_relax = 0; ++ char *buf; + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - LIBS=$ac_check_lib_save_LIBS - fi --echo "$as_me:$LINENO: result: $ac_cv_lib_m_main" >&5 --echo "${ECHO_T}$ac_cv_lib_m_main" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_main" >&5 -+echo "${ECHO_T}$ac_cv_lib_m_main" >&6; } - if test $ac_cv_lib_m_main = yes; then - LIBM="-lm" - fi -@@ -10419,8 +10888,8 @@ esac - # Some non-ANSI preprocessors botch requoting inside strings. That's bad - # enough, but on some of those systems, the assert macro relies on requoting - # working properly! --echo "$as_me:$LINENO: checking for working assert macro" >&5 --echo $ECHO_N "checking for working assert macro... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for working assert macro" >&5 -+echo $ECHO_N "checking for working assert macro... $ECHO_C" >&6; } - if test "${gas_cv_assert_ok+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10449,39 +10918,36 @@ assert (a == b - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - gas_cv_assert_ok=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --gas_cv_assert_ok=no -+ gas_cv_assert_ok=no - fi --rm -f conftest.err conftest.$ac_objext \ ++ assert(current_insn.next_slot == opc->nr_fields); + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $gas_cv_assert_ok" >&5 --echo "${ECHO_T}$gas_cv_assert_ok" >&6 -+{ echo "$as_me:$LINENO: result: $gas_cv_assert_ok" >&5 -+echo "${ECHO_T}$gas_cv_assert_ok" >&6; } - test $gas_cv_assert_ok = yes || - cat >>confdefs.h <<\_ACEOF - #define BROKEN_ASSERT 1 -@@ -10514,8 +10980,8 @@ gas_test_headers=" - # Does errno.h declare errno, or do we have to add a separate declaration - # for it? - --echo "$as_me:$LINENO: checking whether declaration is required for errno" >&5 --echo $ECHO_N "checking whether declaration is required for errno... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether declaration is required for errno" >&5 -+echo $ECHO_N "checking whether declaration is required for errno... $ECHO_C" >&6; } - if test "${gas_cv_decl_needed_errno+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10543,39 +11009,36 @@ x = (f) errno; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - gas_cv_decl_needed_errno=no - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --gas_cv_decl_needed_errno=yes -+ gas_cv_decl_needed_errno=yes - fi --rm -f conftest.err conftest.$ac_objext \ ++ pr_debug("%s:%d: finish_insn: trying opcode %d\n", ++ frag_now->fr_file, frag_now->fr_line, opc->id); + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $gas_cv_decl_needed_errno" >&5 --echo "${ECHO_T}$gas_cv_decl_needed_errno" >&6 -+{ echo "$as_me:$LINENO: result: $gas_cv_decl_needed_errno" >&5 -+echo "${ECHO_T}$gas_cv_decl_needed_errno" >&6; } - if test $gas_cv_decl_needed_errno = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -10585,8 +11048,8 @@ _ACEOF - fi - - --echo "$as_me:$LINENO: checking for a known getopt prototype in unistd.h" >&5 --echo $ECHO_N "checking for a known getopt prototype in unistd.h... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking for a known getopt prototype in unistd.h" >&5 -+echo $ECHO_N "checking for a known getopt prototype in unistd.h... $ECHO_C" >&6; } - if test "${gas_cv_decl_getopt_unistd_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10606,39 +11069,35 @@ extern int getopt (int, char *const*, co - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - gas_cv_decl_getopt_unistd_h=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --gas_cv_decl_getopt_unistd_h=no -+ gas_cv_decl_getopt_unistd_h=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ /* Go through the relaxation stage for all instructions that can ++ possibly take a symbolic immediate. The relax code will take ++ care of range checking and alignment. */ ++ if (opc->var_field != -1) ++ { ++ int substate, largest_substate; ++ symbolS *sym; ++ offsetT off; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - --echo "$as_me:$LINENO: result: $gas_cv_decl_getopt_unistd_h" >&5 --echo "${ECHO_T}$gas_cv_decl_getopt_unistd_h" >&6 -+{ echo "$as_me:$LINENO: result: $gas_cv_decl_getopt_unistd_h" >&5 -+echo "${ECHO_T}$gas_cv_decl_getopt_unistd_h" >&6; } - if test $gas_cv_decl_getopt_unistd_h = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -10648,8 +11107,8 @@ _ACEOF - fi - - --echo "$as_me:$LINENO: checking whether declaration is required for environ" >&5 --echo $ECHO_N "checking whether declaration is required for environ... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether declaration is required for environ" >&5 -+echo $ECHO_N "checking whether declaration is required for environ... $ECHO_C" >&6; } - if test "${gas_cv_decl_needed_environ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10673,39 +11132,36 @@ x = (f) environ; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - gas_cv_decl_needed_environ=no - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --gas_cv_decl_needed_environ=yes -+ gas_cv_decl_needed_environ=yes - fi --rm -f conftest.err conftest.$ac_objext \ ++ will_relax = 1; ++ substate = largest_substate = opc_initial_substate(opc); + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $gas_cv_decl_needed_environ" >&5 --echo "${ECHO_T}$gas_cv_decl_needed_environ" >&6 -+{ echo "$as_me:$LINENO: result: $gas_cv_decl_needed_environ" >&5 -+echo "${ECHO_T}$gas_cv_decl_needed_environ" >&6; } - if test $gas_cv_decl_needed_environ = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -10715,8 +11171,8 @@ _ACEOF - fi - - --echo "$as_me:$LINENO: checking whether declaration is required for ffs" >&5 --echo $ECHO_N "checking whether declaration is required for ffs... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether declaration is required for ffs" >&5 -+echo $ECHO_N "checking whether declaration is required for ffs... $ECHO_C" >&6; } - if test "${gas_cv_decl_needed_ffs+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10740,39 +11196,36 @@ x = (f) ffs; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - gas_cv_decl_needed_ffs=no - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --gas_cv_decl_needed_ffs=yes -+ gas_cv_decl_needed_ffs=yes - fi --rm -f conftest.err conftest.$ac_objext \ ++ while (relax_more(largest_substate) != AVR32_RS_NONE) ++ largest_substate = relax_more(largest_substate); ++ ++ pr_debug("will relax. initial substate: %d (size %d), largest substate: %d (size %d)\n", ++ substate, avr32_rs_size(substate), ++ largest_substate, avr32_rs_size(largest_substate)); ++ ++ /* make sure we have enough room for the largest possible opcode */ ++ frag_grow(avr32_rs_size(largest_substate)); ++ buf = frag_more(opc->size); ++ ++ dwarf2_emit_insn(opc->size); ++ ++ frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_NONE; ++ frag_now->tc_frag_data.pcrel = current_insn.pcrel; ++ frag_now->tc_frag_data.force_extended = current_insn.force_extended; ++ frag_now->tc_frag_data.relaxer = &avr32_default_relaxer; ++ ++ if (exp->X_op == O_hi) ++ { ++ frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_HI; ++ exp->X_op = exp->X_md; ++ } ++ else if (exp->X_op == O_lo) ++ { ++ frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_LO; ++ exp->X_op = exp->X_md; ++ } ++ else if (exp->X_op == O_got) ++ { ++ frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_GOT; ++ exp->X_op = O_symbol; ++ } ++ ++#if 0 ++ if ((opc->reloc_type == BFD_RELOC_AVR32_SUB5) ++ && exp->X_op == O_subtract) ++ { ++ symbolS *tmp; ++ tmp = exp->X_add_symbol; ++ exp->X_add_symbol = exp->X_op_symbol; ++ exp->X_op_symbol = tmp; ++ } ++#endif ++ ++ frag_now->tc_frag_data.exp = current_insn.immediate; ++ ++ sym = exp->X_add_symbol; ++ off = exp->X_add_number; ++ if (exp->X_op != O_symbol) ++ { ++ sym = make_expr_symbol(exp); ++ off = 0; ++ } + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $gas_cv_decl_needed_ffs" >&5 --echo "${ECHO_T}$gas_cv_decl_needed_ffs" >&6 -+{ echo "$as_me:$LINENO: result: $gas_cv_decl_needed_ffs" >&5 -+echo "${ECHO_T}$gas_cv_decl_needed_ffs" >&6; } - if test $gas_cv_decl_needed_ffs = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -10782,8 +11235,8 @@ _ACEOF - fi - - --echo "$as_me:$LINENO: checking whether declaration is required for free" >&5 --echo $ECHO_N "checking whether declaration is required for free... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether declaration is required for free" >&5 -+echo $ECHO_N "checking whether declaration is required for free... $ECHO_C" >&6; } - if test "${gas_cv_decl_needed_free+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10807,39 +11260,36 @@ x = (f) free; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - gas_cv_decl_needed_free=no - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --gas_cv_decl_needed_free=yes -+ gas_cv_decl_needed_free=yes - fi --rm -f conftest.err conftest.$ac_objext \ ++ frag_var(rs_machine_dependent, ++ avr32_rs_size(largest_substate) - opc->size, ++ opc->size, ++ substate, sym, off, buf); ++ } ++ else ++ { ++ assert(avr32_rs_size(opc_initial_substate(opc)) == 0); + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $gas_cv_decl_needed_free" >&5 --echo "${ECHO_T}$gas_cv_decl_needed_free" >&6 -+{ echo "$as_me:$LINENO: result: $gas_cv_decl_needed_free" >&5 -+echo "${ECHO_T}$gas_cv_decl_needed_free" >&6; } - if test $gas_cv_decl_needed_free = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -10849,8 +11299,8 @@ _ACEOF - fi - - --echo "$as_me:$LINENO: checking whether declaration is required for malloc" >&5 --echo $ECHO_N "checking whether declaration is required for malloc... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether declaration is required for malloc" >&5 -+echo $ECHO_N "checking whether declaration is required for malloc... $ECHO_C" >&6; } - if test "${gas_cv_decl_needed_malloc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10874,39 +11324,36 @@ x = (f) malloc; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - gas_cv_decl_needed_malloc=no - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --gas_cv_decl_needed_malloc=yes -+ gas_cv_decl_needed_malloc=yes - fi --rm -f conftest.err conftest.$ac_objext \ ++ /* Make sure we always have room for another whole word, as the ifield ++ inserters can only write words. */ ++ frag_grow(4); ++ buf = frag_more(opc->size); ++ dwarf2_emit_insn(opc->size); ++ } + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $gas_cv_decl_needed_malloc" >&5 --echo "${ECHO_T}$gas_cv_decl_needed_malloc" >&6 -+{ echo "$as_me:$LINENO: result: $gas_cv_decl_needed_malloc" >&5 -+echo "${ECHO_T}$gas_cv_decl_needed_malloc" >&6; } - if test $gas_cv_decl_needed_malloc = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -10916,8 +11363,8 @@ _ACEOF - fi - - --echo "$as_me:$LINENO: checking whether declaration is required for sbrk" >&5 --echo $ECHO_N "checking whether declaration is required for sbrk... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether declaration is required for sbrk" >&5 -+echo $ECHO_N "checking whether declaration is required for sbrk... $ECHO_C" >&6; } - if test "${gas_cv_decl_needed_sbrk+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -10941,39 +11388,36 @@ x = (f) sbrk; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - gas_cv_decl_needed_sbrk=no - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --gas_cv_decl_needed_sbrk=yes -+ gas_cv_decl_needed_sbrk=yes - fi --rm -f conftest.err conftest.$ac_objext \ ++ assert(!(opc->value & ~opc->mask)); + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $gas_cv_decl_needed_sbrk" >&5 --echo "${ECHO_T}$gas_cv_decl_needed_sbrk" >&6 -+{ echo "$as_me:$LINENO: result: $gas_cv_decl_needed_sbrk" >&5 -+echo "${ECHO_T}$gas_cv_decl_needed_sbrk" >&6; } - if test $gas_cv_decl_needed_sbrk = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -10983,8 +11427,8 @@ _ACEOF - fi - - --echo "$as_me:$LINENO: checking whether declaration is required for strstr" >&5 --echo $ECHO_N "checking whether declaration is required for strstr... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether declaration is required for strstr" >&5 -+echo $ECHO_N "checking whether declaration is required for strstr... $ECHO_C" >&6; } - if test "${gas_cv_decl_needed_strstr+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -11008,39 +11452,36 @@ x = (f) strstr; - } - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>conftest.er1 -+if { (ac_try="$ac_link" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest$ac_exeext && -+ $as_test_x conftest$ac_exeext; then - gas_cv_decl_needed_strstr=no - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --gas_cv_decl_needed_strstr=yes -+ gas_cv_decl_needed_strstr=yes - fi --rm -f conftest.err conftest.$ac_objext \ ++ pr_debug("inserting opcode: 0x%lx\n", opc->value); ++ bfd_putb32(opc->value, buf); + -+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $gas_cv_decl_needed_strstr" >&5 --echo "${ECHO_T}$gas_cv_decl_needed_strstr" >&6 -+{ echo "$as_me:$LINENO: result: $gas_cv_decl_needed_strstr" >&5 -+echo "${ECHO_T}$gas_cv_decl_needed_strstr" >&6; } - if test $gas_cv_decl_needed_strstr = yes; then - - cat >>confdefs.h <<\_ACEOF -@@ -11050,8 +11491,8 @@ _ACEOF - fi - - --echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5 --echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6 -+{ echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5 -+echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6; } - if test "${ac_cv_have_decl_vsnprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -11066,7 +11507,7 @@ int - main () - { - #ifndef vsnprintf -- char *p = (char *) vsnprintf; -+ (void) vsnprintf; - #endif - - ; -@@ -11074,38 +11515,34 @@ main () - } - _ACEOF - rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>conftest.er1 -+if { (ac_try="$ac_compile" -+case "(($ac_try" in -+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+ *) ac_try_echo=$ac_try;; -+esac -+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 -+ (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: \$? = $ac_status" >&5 -- (exit $ac_status); }; }; then -+ (exit $ac_status); } && { -+ test -z "$ac_c_werror_flag" || -+ test ! -s conftest.err -+ } && test -s conftest.$ac_objext; then - ac_cv_have_decl_vsnprintf=yes - else - echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - --ac_cv_have_decl_vsnprintf=no -+ ac_cv_have_decl_vsnprintf=no - fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++ for (i = 0; i < opc->nr_fields; i++) ++ { ++ const struct avr32_ifield *f = opc->fields[i]; ++ const struct avr32_ifield_data *fd = ¤t_insn.field_value[i]; + -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi --echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5 --echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6 -+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5 -+echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6; } - if test $ac_cv_have_decl_vsnprintf = yes; then - - cat >>confdefs.h <<_ACEOF -@@ -11129,9 +11566,9 @@ fi - - - -- ac_config_files="$ac_config_files Makefile doc/Makefile po/Makefile.in:po/Make-in" -+ac_config_files="$ac_config_files Makefile doc/Makefile po/Makefile.in:po/Make-in" - -- ac_config_commands="$ac_config_commands default" -+ac_config_commands="$ac_config_commands default" - - - cat >confcache <<\_ACEOF -@@ -11152,39 +11589,58 @@ _ACEOF - - # The following way of writing the cache mishandles newlines in values, - # but we know of no workaround that is simple, portable, and efficient. --# So, don't put newlines in cache variables' values. -+# So, we kill variables containing newlines. - # Ultrix sh set writes to stderr and can't be redirected directly, - # and sets the high bit in the cache file unless we assign to the vars. --{ -+( -+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do -+ eval ac_val=\$$ac_var -+ case $ac_val in #( -+ *${as_nl}*) -+ case $ac_var in #( -+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; -+ esac -+ case $ac_var in #( -+ _ | IFS | as_nl) ;; #( -+ *) $as_unset $ac_var ;; -+ esac ;; -+ esac -+ done ++ pr_debug("inserting field: 0x%lx & 0x%lx\n", ++ fd->value >> fd->align_order, f->mask); + - (set) 2>&1 | -- case `(ac_space=' '; set | grep ac_space) 2>&1` in -- *ac_space=\ *) -+ case $as_nl`(ac_space=' '; set) 2>&1` in #( -+ *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" -- ;; -+ ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. -- sed -n \ -- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" -+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; -- esac; --} | -+ esac | -+ sort -+) | - sed ' -+ /^ac_cv_env_/b end - t clear -- : clear -+ :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end -- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ -- : end' >>confcache --if diff $cache_file confcache >/dev/null 2>&1; then :; else -- if test -w $cache_file; then -- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" -+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ -+ :end' >>confcache -+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else -+ if test -w "$cache_file"; then -+ test "x$cache_file" != "x/dev/null" && -+ { echo "$as_me:$LINENO: updating cache $cache_file" >&5 -+echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else -- echo "not updating unwritable cache $cache_file" -+ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -+echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi - fi - rm -f confcache -@@ -11193,32 +11649,18 @@ test "x$prefix" = xNONE && prefix=$ac_de - # Let make expand exec_prefix. - test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - --# VPATH may cause trouble with some makes, so we remove $(srcdir), --# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and --# trailing colons and then remove the whole line if VPATH becomes empty --# (actually we leave an empty line to preserve line numbers). --if test "x$srcdir" = x.; then -- ac_vpsub='/^[ ]*VPATH[ ]*=/{ --s/:*\$(srcdir):*/:/; --s/:*\${srcdir}:*/:/; --s/:*@srcdir@:*/:/; --s/^\([^=]*=[ ]*\):*/\1/; --s/:*$//; --s/^[^=]*=[ ]*$//; --}' --fi -- - DEFS=-DHAVE_CONFIG_H - - ac_libobjs= - ac_ltlibobjs= - for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. -- ac_i=`echo "$ac_i" | -- sed 's/\$U\././;s/\.o$//;s/\.obj$//'` -- # 2. Add them. -- ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" -- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' -+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' -+ ac_i=`echo "$ac_i" | sed "$ac_script"` -+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR -+ # will be set to the directory where LIBOBJS objects are built. -+ ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" -+ ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' - done - LIBOBJS=$ac_libobjs - -@@ -11270,17 +11712,45 @@ cat >>$CONFIG_STATUS <<\_ACEOF - ## M4sh Initialization. ## - ## --------------------- ## - --# Be Bourne compatible -+# Be more Bourne compatible -+DUALCASE=1; export DUALCASE # for MKS sh - if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' --elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then -- set -o posix -+ setopt NO_GLOB_SUBST -+else -+ case `(set -o) 2>/dev/null` in -+ *posix*) set -o posix ;; -+esac ++ f->insert(f, buf, fd->value >> fd->align_order); ++ } ++ ++ assert(will_relax || !current_insn.immediate.X_add_symbol); ++ return NULL; ++} ++ ++static const char * ++finish_alias(const struct avr32_alias *alias) ++{ ++ const struct avr32_opcode *opc; ++ struct { ++ unsigned long value; ++ unsigned long align; ++ } mapped_operand[AVR32_MAX_OPERANDS]; ++ unsigned int i; ++ ++ opc = alias->opc; ++ ++ /* Remap the operands from the alias to the real opcode */ ++ for (i = 0; i < opc->nr_fields; i++) ++ { ++ if (alias->operand_map[i].is_opindex) ++ { ++ struct avr32_ifield_data *fd; ++ fd = ¤t_insn.field_value[alias->operand_map[i].value]; ++ mapped_operand[i].value = fd->value; ++ mapped_operand[i].align = fd->align_order; ++ } ++ else ++ { ++ mapped_operand[i].value = alias->operand_map[i].value; ++ mapped_operand[i].align = 0; ++ } ++ } ++ ++ for (i = 0; i < opc->nr_fields; i++) ++ { ++ current_insn.field_value[i].value = mapped_operand[i].value; ++ if (opc->id == AVR32_OPC_COP) ++ current_insn.field_value[i].align_order = 0; ++ else ++ current_insn.field_value[i].align_order ++ = mapped_operand[i].align; ++ } ++ ++ current_insn.next_slot = opc->nr_fields; ++ ++ return finish_insn(opc); ++} ++ ++static const char * ++finish_lda(const struct avr32_syntax *syntax ATTRIBUTE_UNUSED) ++{ ++ expressionS *exp = ¤t_insn.immediate; ++ relax_substateT initial_subtype; ++ symbolS *sym; ++ offsetT off; ++ int initial_size, max_size; ++ char *buf; + -+fi ++ initial_size = LDA_INITIAL_SIZE; + ++ if (avr32_pic) ++ { ++ initial_subtype = LDA_SUBTYPE_SUB; ++ if (linkrelax) ++ max_size = 8; ++ else ++ max_size = 4; ++ } ++ else ++ { ++ initial_subtype = LDA_SUBTYPE_MOV1; ++ max_size = 4; ++ } + ++ frag_grow(max_size); ++ buf = frag_more(initial_size); ++ dwarf2_emit_insn(initial_size); + ++ if (exp->X_op == O_symbol) ++ { ++ sym = exp->X_add_symbol; ++ off = exp->X_add_number; ++ } ++ else ++ { ++ sym = make_expr_symbol(exp); ++ off = 0; ++ } + -+# PATH needs CR -+# Avoid depending upon Character Ranges. -+as_cr_letters='abcdefghijklmnopqrstuvwxyz' -+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -+as_cr_Letters=$as_cr_letters$as_cr_LETTERS -+as_cr_digits='0123456789' -+as_cr_alnum=$as_cr_Letters$as_cr_digits ++ frag_now->tc_frag_data.reloc_info = current_insn.field_value[0].value; ++ frag_now->tc_frag_data.relaxer = &avr32_lda_relaxer; + -+# The user is always right. -+if test "${PATH_SEPARATOR+set}" != set; then -+ echo "#! /bin/sh" >conf$$.sh -+ echo "exit 0" >>conf$$.sh -+ chmod +x conf$$.sh -+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then -+ PATH_SEPARATOR=';' ++ if (!avr32_pic) ++ { ++ /* The relaxer will bump the refcount if necessary */ ++ frag_now->tc_frag_data.pool ++ = add_to_cpool(exp, &frag_now->tc_frag_data.pool_entry, 0); ++ } ++ ++ frag_var(rs_machine_dependent, max_size - initial_size, ++ initial_size, initial_subtype, sym, off, buf); ++ ++ return NULL; ++} ++ ++static const char * ++finish_call(const struct avr32_syntax *syntax ATTRIBUTE_UNUSED) ++{ ++ expressionS *exp = ¤t_insn.immediate; ++ symbolS *sym; ++ offsetT off; ++ int initial_size, max_size; ++ char *buf; ++ ++ initial_size = CALL_INITIAL_SIZE; ++ ++ if (avr32_pic) ++ { ++ if (linkrelax) ++ max_size = 10; ++ else ++ max_size = 4; ++ } + else -+ PATH_SEPARATOR=: -+ fi -+ rm -f conf$$.sh - fi --DUALCASE=1; export DUALCASE # for MKS sh - - # Support unset when possible. - if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then -@@ -11290,8 +11760,43 @@ else - fi - - -+# IFS -+# We need space, tab and new line, in precisely that order. Quoting is -+# there to prevent editors from complaining about space-tab. -+# (If _AS_PATH_WALK were called with IFS unset, it would disable word -+# splitting by setting IFS to empty value.) -+as_nl=' -+' -+IFS=" "" $as_nl" ++ max_size = 4; + -+# Find who we are. Look in the path if we contain no directory separator. -+case $0 in -+ *[\\/]* ) as_myself=$0 ;; -+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -+done -+IFS=$as_save_IFS ++ frag_grow(max_size); ++ buf = frag_more(initial_size); ++ dwarf2_emit_insn(initial_size); + -+ ;; -+esac -+# We did not find ourselves, most probably we were run as `sh COMMAND' -+# in which case we are not to be found in the path. -+if test "x$as_myself" = x; then -+ as_myself=$0 -+fi -+if test ! -f "$as_myself"; then -+ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 -+ { (exit 1); exit 1; } -+fi ++ frag_now->tc_frag_data.relaxer = &avr32_call_relaxer; + - # Work around bugs in pre-3.0 UWIN ksh. --$as_unset ENV MAIL MAILPATH -+for as_var in ENV MAIL MAILPATH -+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -+done - PS1='$ ' - PS2='> ' - PS4='+ ' -@@ -11305,18 +11810,19 @@ do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else -- $as_unset $as_var -+ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi - done - - # Required to use basename. --if expr a : '\(a\)' >/dev/null 2>&1; then -+if expr a : '\(a\)' >/dev/null 2>&1 && -+ test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr - else - as_expr=false - fi - --if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then -+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename - else - as_basename=false -@@ -11324,159 +11830,120 @@ fi - - - # Name of the executable. --as_me=`$as_basename "$0" || -+as_me=`$as_basename -- "$0" || - $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ -- X"$0" : 'X\(/\)$' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$0" : 'X\(/\)' \| . 2>/dev/null || - echo X/"$0" | -- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } -- /^X\/\(\/\/\)$/{ s//\1/; q; } -- /^X\/\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -- -- --# PATH needs CR, and LINENO needs CR and PATH. --# Avoid depending upon Character Ranges. --as_cr_letters='abcdefghijklmnopqrstuvwxyz' --as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' --as_cr_Letters=$as_cr_letters$as_cr_LETTERS --as_cr_digits='0123456789' --as_cr_alnum=$as_cr_Letters$as_cr_digits -+ sed '/^.*\/\([^/][^/]*\)\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\/\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\/\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` - --# The user is always right. --if test "${PATH_SEPARATOR+set}" != set; then -- echo "#! /bin/sh" >conf$$.sh -- echo "exit 0" >>conf$$.sh -- chmod +x conf$$.sh -- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then -- PATH_SEPARATOR=';' -- else -- PATH_SEPARATOR=: -- fi -- rm -f conf$$.sh --fi -+# CDPATH. -+$as_unset CDPATH - - -- as_lineno_1=$LINENO -- as_lineno_2=$LINENO -- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` -- test "x$as_lineno_1" != "x$as_lineno_2" && -- test "x$as_lineno_3" = "x$as_lineno_2" || { -- # Find who we are. Look in the path if we contain no path at all -- # relative or not. -- case $0 in -- *[\\/]* ) as_myself=$0 ;; -- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break --done - -- ;; -- esac -- # We did not find ourselves, most probably we were run as `sh COMMAND' -- # in which case we are not to be found in the path. -- if test "x$as_myself" = x; then -- as_myself=$0 -- fi -- if test ! -f "$as_myself"; then -- { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 --echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} -- { (exit 1); exit 1; }; } -- fi -- case $CONFIG_SHELL in -- '') -- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for as_base in sh bash ksh sh5; do -- case $as_dir in -- /*) -- if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO -- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && -- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then -- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } -- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } -- CONFIG_SHELL=$as_dir/$as_base -- export CONFIG_SHELL -- exec "$CONFIG_SHELL" "$0" ${1+"$@"} -- fi;; -- esac -- done --done --;; -- esac -+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a -- # line-number line before each line; the second 'sed' does the real -- # work. The second script uses 'N' to pair each line-number line -- # with the numbered line, and appends trailing '-' during -- # substitution so that $LINENO is not a special case at line end. -+ # line-number line after each line using $LINENO; the second 'sed' -+ # does the real work. The second script uses 'N' to pair each -+ # line-number line with the line containing $LINENO, and appends -+ # trailing '-' during substitution so that $LINENO is not a special -+ # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the -- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) -- sed '=' <$as_myself | -+ # scripts with optimization help from Paolo Bonzini. Blame Lee -+ # E. McMahon (1931-1989) for sed's syntax. :-) -+ sed -n ' -+ p -+ /[$]LINENO/= -+ ' <$as_myself | - sed ' -+ s/[$]LINENO.*/&-/ -+ t lineno -+ b -+ :lineno - N -- s,$,-, -- : loop -- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, -+ :loop -+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop -- s,-$,, -- s,^['$as_cr_digits']*\n,, -+ s/-\n.*// - ' >$as_me.lineno && -- chmod +x $as_me.lineno || -- { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 --echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} -+ chmod +x "$as_me.lineno" || -+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the -- # original and so on. Autoconf is especially sensible to this). -- . ./$as_me.lineno -+ # original and so on. Autoconf is especially sensitive to this). -+ . "./$as_me.lineno" - # Exit status is that of the last command. - exit - } - - --case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in -- *c*,-n*) ECHO_N= ECHO_C=' --' ECHO_T=' ' ;; -- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; -- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then -+ as_dirname=dirname -+else -+ as_dirname=false -+fi ++ if (exp->X_op == O_symbol) ++ { ++ sym = exp->X_add_symbol; ++ off = exp->X_add_number; ++ } ++ else ++ { ++ sym = make_expr_symbol(exp); ++ off = 0; ++ } + -+ECHO_C= ECHO_N= ECHO_T= -+case `echo -n x` in -+-n*) -+ case `echo 'x\c'` in -+ *c*) ECHO_T=' ';; # ECHO_T is single tab character. -+ *) ECHO_C='\c';; -+ esac;; -+*) -+ ECHO_N='-n';; - esac - --if expr a : '\(a\)' >/dev/null 2>&1; then -+if expr a : '\(a\)' >/dev/null 2>&1 && -+ test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr - else - as_expr=false - fi - - rm -f conf$$ conf$$.exe conf$$.file -+if test -d conf$$.dir; then -+ rm -f conf$$.dir/conf$$.file -+else -+ rm -f conf$$.dir -+ mkdir conf$$.dir -+fi - echo >conf$$.file - if ln -s conf$$.file conf$$ 2>/dev/null; then -- # We could just check for DJGPP; but this test a) works b) is more generic -- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). -- if test -f conf$$.exe; then -- # Don't use ln at all; we don't have any links -+ as_ln_s='ln -s' -+ # ... but there are two gotchas: -+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. -+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. -+ # In both cases, we have to default to `cp -p'. -+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -- else -- as_ln_s='ln -s' -- fi - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi --rm -f conf$$ conf$$.exe conf$$.file -+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -+rmdir conf$$.dir 2>/dev/null - - if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -@@ -11485,7 +11952,28 @@ else - as_mkdir_p=false - fi - --as_executable_p="test -f" -+if test -x / >/dev/null 2>&1; then -+ as_test_x='test -x' -+else -+ if ls -dL / >/dev/null 2>&1; then -+ as_ls_L_option=L ++ if (!avr32_pic) ++ { ++ /* The relaxer will bump the refcount if necessary */ ++ frag_now->tc_frag_data.pool ++ = add_to_cpool(exp, &frag_now->tc_frag_data.pool_entry, 0); ++ } ++ ++ frag_var(rs_machine_dependent, max_size - initial_size, ++ initial_size, CALL_SUBTYPE_RCALL1, sym, off, buf); ++ ++ return NULL; ++} ++ ++void ++md_begin (void) ++{ ++ unsigned long flags = 0; ++ int i; ++ ++ avr32_mnemonic_htab = hash_new(); ++ ++ if (!avr32_mnemonic_htab) ++ as_fatal(_("virtual memory exhausted")); ++ ++ for (i = 0; i < AVR32_NR_MNEMONICS; i++) ++ { ++ hash_insert(avr32_mnemonic_htab, avr32_mnemonic_table[i].name, ++ (void *)&avr32_mnemonic_table[i]); ++ } ++ ++ if (linkrelax) ++ flags |= EF_AVR32_LINKRELAX; ++ if (avr32_pic) ++ flags |= EF_AVR32_PIC; ++ ++ bfd_set_private_flags(stdoutput, flags); ++ ++#ifdef OPC_CONSISTENCY_CHECK ++ if (sizeof(avr32_operand_table)/sizeof(avr32_operand_table[0]) ++ < AVR32_NR_OPERANDS) ++ as_fatal(_("operand table is incomplete")); ++ ++ for (i = 0; i < AVR32_NR_OPERANDS; i++) ++ if (avr32_operand_table[i].id != i) ++ as_fatal(_("operand table inconsistency found at index %d\n"), i); ++ pr_debug("%d operands verified\n", AVR32_NR_OPERANDS); ++ ++ for (i = 0; i < AVR32_NR_IFIELDS; i++) ++ if (avr32_ifield_table[i].id != i) ++ as_fatal(_("ifield table inconsistency found at index %d\n"), i); ++ pr_debug("%d instruction fields verified\n", AVR32_NR_IFIELDS); ++ ++ for (i = 0; i < AVR32_NR_OPCODES; i++) ++ { ++ if (avr32_opc_table[i].id != i) ++ as_fatal(_("opcode table inconsistency found at index %d\n"), i); ++ if ((avr32_opc_table[i].var_field == -1 ++ && avr32_relax_table[i].length != 0) ++ || (avr32_opc_table[i].var_field != -1 ++ && avr32_relax_table[i].length == 0)) ++ as_fatal(_("relax table inconsistency found at index %d\n"), i); ++ } ++ pr_debug("%d opcodes verified\n", AVR32_NR_OPCODES); ++ ++ for (i = 0; i < AVR32_NR_SYNTAX; i++) ++ if (avr32_syntax_table[i].id != i) ++ as_fatal(_("syntax table inconsistency found at index %d\n"), i); ++ pr_debug("%d syntax variants verified\n", AVR32_NR_SYNTAX); ++ ++ for (i = 0; i < AVR32_NR_ALIAS; i++) ++ if (avr32_alias_table[i].id != i) ++ as_fatal(_("alias table inconsistency found at index %d\n"), i); ++ pr_debug("%d aliases verified\n", AVR32_NR_ALIAS); ++ ++ for (i = 0; i < AVR32_NR_MNEMONICS; i++) ++ if (avr32_mnemonic_table[i].id != i) ++ as_fatal(_("mnemonic table inconsistency found at index %d\n"), i); ++ pr_debug("%d mnemonics verified\n", AVR32_NR_MNEMONICS); ++#endif ++} ++ ++void ++md_assemble (char *str) ++{ ++ struct avr32_mnemonic *mnemonic; ++ char *p, c; ++ ++ memset(¤t_insn, 0, sizeof(current_insn)); ++ current_insn.immediate.X_op = O_constant; ++ ++ skip_whitespace(str); ++ for (p = str; *p; p++) ++ if (*p == ' ') ++ break; ++ c = *p; ++ *p = 0; ++ ++ mnemonic = hash_find(avr32_mnemonic_htab, str); ++ *p = c; ++ if (c) p++; ++ ++ if (mnemonic) ++ { ++ const struct avr32_syntax *syntax; ++ ++ for (syntax = mnemonic->syntax; syntax; syntax = syntax->next) ++ { ++ const char *errmsg = NULL; ++ ++ if (syntax_matches(syntax, p)) ++ { ++ if (!(syntax->isa_flags & avr32_arch->isa_flags)) ++ { ++ as_bad(_("Selected architecture `%s' does not support `%s'"), ++ avr32_arch->name, str); ++ return; ++ } ++ ++ current_insn.syntax = syntax; ++ parse_operands(p); ++ ++ switch (syntax->type) ++ { ++ case AVR32_PARSER_NORMAL: ++ errmsg = finish_insn(syntax->u.opc); ++ break; ++ case AVR32_PARSER_ALIAS: ++ errmsg = finish_alias(syntax->u.alias); ++ break; ++ case AVR32_PARSER_LDA: ++ errmsg = finish_lda(syntax); ++ break; ++ case AVR32_PARSER_CALL: ++ errmsg = finish_call(syntax); ++ break; ++ default: ++ BAD_CASE(syntax->type); ++ break; ++ } ++ ++ if (errmsg) ++ as_bad("%s in `%s'", errmsg, str); ++ ++ return; ++ } ++ } ++ ++ as_bad(_("unrecognized form of instruction: `%s'"), str); ++ } + else -+ as_ls_L_option= -+ fi -+ as_test_x=' -+ eval sh -c '\'' -+ if test -d "$1"; then -+ test -d "$1/."; -+ else -+ case $1 in -+ -*)set "./$1";; -+ esac; -+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in -+ ???[sx]*):;;*)false;;esac;fi -+ '\'' sh -+ ' -+fi -+as_executable_p=$as_test_x - - # Sed expression to map a string onto a valid CPP name. - as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" -@@ -11493,32 +11981,15 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P - # Sed expression to map a string onto a valid variable name. - as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - -- --# IFS --# We need space, tab and new line, in precisely that order. --as_nl=' --' --IFS=" $as_nl" -- --# CDPATH. --$as_unset CDPATH -- ++ as_bad(_("unrecognized instruction `%s'"), str); ++} + - exec 6>&1 - --# Open the log real soon, to keep \$[0] and so on meaningful, and to -+# Save the log message, to keep $[0] and so on meaningful, and to - # report actual input values of CONFIG_FILES etc. instead of their --# values after options handling. Logging --version etc. is OK. --exec 5>>config.log --{ -- echo -- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX --## Running $as_me. ## --_ASBOX --} >&5 --cat >&5 <<_CSEOF -- -+# values after options handling. -+ac_log=" - This file was extended by $as_me, which was --generated by GNU Autoconf 2.59. Invocation command line was -+generated by GNU Autoconf 2.61. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS -@@ -11526,30 +11997,20 @@ generated by GNU Autoconf 2.59. Invocat - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - --_CSEOF --echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 --echo >&5 -+on `(hostname || uname -n) 2>/dev/null | sed 1q` -+" ++void avr32_cleanup(void) ++{ ++ struct cpool *pool; + - _ACEOF - -+cat >>$CONFIG_STATUS <<_ACEOF - # Files that config.status was made for. --if test -n "$ac_config_files"; then -- echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS --fi -- --if test -n "$ac_config_headers"; then -- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS --fi -- --if test -n "$ac_config_links"; then -- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS --fi -+config_files="$ac_config_files" -+config_headers="$ac_config_headers" -+config_commands="$ac_config_commands" - --if test -n "$ac_config_commands"; then -- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS --fi -+_ACEOF - - cat >>$CONFIG_STATUS <<\_ACEOF -- - ac_cs_usage="\ - \`$as_me' instantiates files from templates according to the - current configuration. -@@ -11557,7 +12018,7 @@ current configuration. - Usage: $0 [OPTIONS] [FILE]... - - -h, --help print this help, then exit -- -V, --version print version number, then exit -+ -V, --version print version number and configuration settings, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions -@@ -11576,19 +12037,21 @@ Configuration commands: - $config_commands - - Report bugs to ." --_ACEOF - -+_ACEOF - cat >>$CONFIG_STATUS <<_ACEOF - ac_cs_version="\\ - config.status --configured by $0, generated by GNU Autoconf 2.59, -- with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" -+configured by $0, generated by GNU Autoconf 2.61, -+ with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" - --Copyright (C) 2003 Free Software Foundation, Inc. -+Copyright (C) 2006 Free Software Foundation, Inc. - This config.status script is free software; the Free Software Foundation - gives unlimited permission to copy, distribute and modify it." --srcdir=$srcdir --INSTALL="$INSTALL" ++ /* Emit any constant pools that haven't been explicitly flushed with ++ a .cpool directive. */ ++ for (pool = cpool_list; pool; pool = pool->next) ++ { ++ subseg_set(pool->section, pool->sub_section); ++ s_cpool(0); ++ } ++} + -+ac_pwd='$ac_pwd' -+srcdir='$srcdir' -+INSTALL='$INSTALL' - _ACEOF - - cat >>$CONFIG_STATUS <<\_ACEOF -@@ -11599,39 +12062,24 @@ while test $# != 0 - do - case $1 in - --*=*) -- ac_option=`expr "x$1" : 'x\([^=]*\)='` -- ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` -+ ac_option=`expr "X$1" : 'X\([^=]*\)='` -+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; -- -*) -+ *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; -- *) # This is not an option, so the user has probably given explicit -- # arguments. -- ac_option=$1 -- ac_need_defaults=false;; - esac - - case $ac_option in - # Handling of the options. --_ACEOF --cat >>$CONFIG_STATUS <<\_ACEOF - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; -- --version | --vers* | -V ) -- echo "$ac_cs_version"; exit 0 ;; -- --he | --h) -- # Conflict between --help and --header -- { { echo "$as_me:$LINENO: error: ambiguous option: $1 --Try \`$0 --help' for more information." >&5 --echo "$as_me: error: ambiguous option: $1 --Try \`$0 --help' for more information." >&2;} -- { (exit 1); exit 1; }; };; -- --help | --hel | -h ) -- echo "$ac_cs_usage"; exit 0 ;; -- --debug | --d* | -d ) -+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) -+ echo "$ac_cs_version"; exit ;; -+ --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift -@@ -11641,18 +12089,24 @@ Try \`$0 --help' for more information." - $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" - ac_need_defaults=false;; -+ --he | --h) -+ # Conflict between --help and --header -+ { echo "$as_me: error: ambiguous option: $1 -+Try \`$0 --help' for more information." >&2 -+ { (exit 1); exit 1; }; };; -+ --help | --hel | -h ) -+ echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. -- -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 --Try \`$0 --help' for more information." >&5 --echo "$as_me: error: unrecognized option: $1 --Try \`$0 --help' for more information." >&2;} -+ -*) { echo "$as_me: error: unrecognized option: $1 -+Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } ;; - -- *) ac_config_targets="$ac_config_targets $1" ;; -+ *) ac_config_targets="$ac_config_targets $1" -+ ac_need_defaults=false ;; - - esac - shift -@@ -11668,17 +12122,28 @@ fi - _ACEOF - cat >>$CONFIG_STATUS <<_ACEOF - if \$ac_cs_recheck; then -- echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 -- exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion -+ echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 -+ CONFIG_SHELL=$SHELL -+ export CONFIG_SHELL -+ exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - fi - - _ACEOF -+cat >>$CONFIG_STATUS <<\_ACEOF -+exec 5>>config.log ++/* Handle any PIC-related operands in data allocation pseudo-ops */ ++void ++avr32_cons_fix_new (fragS *frag, int off, int size, expressionS *exp) +{ -+ echo -+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -+## Running $as_me. ## -+_ASBOX -+ echo "$ac_log" -+} >&5 - -+_ACEOF - cat >>$CONFIG_STATUS <<_ACEOF - # --# INIT-COMMANDS section. -+# INIT-COMMANDS - # -- - AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - target_cpu_type=${target_cpu_type} - cgen_cpu_prefix=${cgen_cpu_prefix} -@@ -11687,27 +12152,28 @@ target_cpu_type=${target_cpu_type} - - _ACEOF - -- -- - cat >>$CONFIG_STATUS <<\_ACEOF ++ bfd_reloc_code_real_type r_type = BFD_RELOC_UNUSED; ++ int pcrel = 0; ++ ++ pr_debug("%s:%u: cons_fix_new, add_sym: %s, op_sym: %s, op: %d, add_num: %d\n", ++ frag->fr_file, frag->fr_line, ++ exp->X_add_symbol?S_GET_NAME(exp->X_add_symbol):"(none)", ++ exp->X_op_symbol?S_GET_NAME(exp->X_op_symbol):"(none)", ++ exp->X_op, exp->X_add_number); ++ ++ if (exp->X_op == O_subtract && exp->X_op_symbol) ++ { ++ if (exp->X_op_symbol == GOT_symbol) ++ { ++ if (size != 4) ++ goto bad_size; ++ r_type = BFD_RELOC_AVR32_GOTPC; ++ exp->X_op = O_symbol; ++ exp->X_op_symbol = NULL; ++ } ++ } ++ else if (exp->X_op == O_got) ++ { ++ switch (size) ++ { ++ case 1: ++ r_type = BFD_RELOC_AVR32_GOT8; ++ break; ++ case 2: ++ r_type = BFD_RELOC_AVR32_GOT16; ++ break; ++ case 4: ++ r_type = BFD_RELOC_AVR32_GOT32; ++ break; ++ default: ++ goto bad_size; ++ } ++ ++ exp->X_op = O_symbol; ++ } ++ ++ if (r_type == BFD_RELOC_UNUSED) ++ switch (size) ++ { ++ case 1: ++ r_type = BFD_RELOC_8; ++ break; ++ case 2: ++ r_type = BFD_RELOC_16; ++ break; ++ case 4: ++ r_type = BFD_RELOC_32; ++ break; ++ default: ++ goto bad_size; ++ } ++ else if (size != 4) ++ { ++ bad_size: ++ as_bad(_("unsupported BFD relocation size %u"), size); ++ r_type = BFD_RELOC_UNUSED; ++ } ++ ++ fix_new_exp (frag, off, size, exp, pcrel, r_type); ++} ++ ++static void ++avr32_frob_section(bfd *abfd ATTRIBUTE_UNUSED, segT sec, ++ void *ignore ATTRIBUTE_UNUSED) ++{ ++ segment_info_type *seginfo; ++ fixS *fix; ++ ++ seginfo = seg_info(sec); ++ if (!seginfo) ++ return; ++ ++ for (fix = seginfo->fix_root; fix; fix = fix->fx_next) ++ { ++ if (fix->fx_done) ++ continue; ++ ++ if (fix->fx_r_type == BFD_RELOC_AVR32_SUB5 ++ && fix->fx_addsy && fix->fx_subsy) ++ { ++ if (S_GET_SEGMENT(fix->fx_addsy) != S_GET_SEGMENT(fix->fx_subsy) ++ || linkrelax) ++ { ++ symbolS *tmp; ++#ifdef DEBUG ++ fprintf(stderr, "Swapping symbols in fixup:\n"); ++ print_fixup(fix); ++#endif ++ tmp = fix->fx_addsy; ++ fix->fx_addsy = fix->fx_subsy; ++ fix->fx_subsy = tmp; ++ fix->fx_offset = -fix->fx_offset; ++ } ++ } ++ } ++} ++ ++/* We need to look for SUB5 instructions with expressions that will be ++ made PC-relative and switch fx_addsy with fx_subsy. This has to be ++ done before adjustment or the wrong symbol might be adjusted. ++ ++ This applies to fixups that are a result of expressions like -(sym ++ - .) and that will make it all the way to md_apply_fix3(). LDA ++ does the right thing in convert_frag, so we must not convert ++ those. */ ++void ++avr32_frob_file(void) ++{ ++ /* if (1 || !linkrelax) ++ return; */ ++ ++ bfd_map_over_sections(stdoutput, avr32_frob_section, NULL); ++} ++ ++static bfd_boolean ++convert_to_diff_reloc(fixS *fixP) ++{ ++ switch (fixP->fx_r_type) ++ { ++ case BFD_RELOC_32: ++ fixP->fx_r_type = BFD_RELOC_AVR32_DIFF32; ++ break; ++ case BFD_RELOC_16: ++ fixP->fx_r_type = BFD_RELOC_AVR32_DIFF16; ++ break; ++ case BFD_RELOC_8: ++ fixP->fx_r_type = BFD_RELOC_AVR32_DIFF8; ++ break; ++ default: ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++/* Simplify a fixup. If possible, the fixup is reduced to a single ++ constant which is written to the output file. Otherwise, a ++ relocation is generated so that the linker can take care of the ++ rest. ++ ++ ELF relocations have certain constraints: They can only take a ++ single symbol and a single addend. This means that for difference ++ expressions, we _must_ get rid of the fx_subsy symbol somehow. ++ ++ The difference between two labels in the same section can be ++ calculated directly unless 'linkrelax' is set, or a relocation is ++ forced. If so, we must emit a R_AVR32_DIFFxx relocation. If there ++ are addends involved at this point, we must be especially careful ++ as the relocation must point exactly to the symbol being ++ subtracted. ++ ++ When subtracting a symbol defined in the same section as the fixup, ++ we might be able to convert it to a PC-relative expression, unless ++ linkrelax is set. If this is the case, there's no way we can make ++ sure that the difference between the fixup and fx_subsy stays ++ constant. So for now, we're just going to disallow that. ++ */ ++void ++avr32_process_fixup(fixS *fixP, segT this_segment) ++{ ++ segT add_symbol_segment = absolute_section; ++ segT sub_symbol_segment = absolute_section; ++ symbolS *fx_addsy, *fx_subsy; ++ offsetT value = 0, fx_offset; ++ bfd_boolean apply = FALSE; ++ ++ assert(this_segment != absolute_section); ++ ++ if (fixP->fx_r_type >= BFD_RELOC_UNUSED) ++ { ++ as_bad_where(fixP->fx_file, fixP->fx_line, ++ _("Bad relocation type %d\n"), fixP->fx_r_type); ++ return; ++ } ++ ++ /* BFD_RELOC_AVR32_SUB5 fixups have been swapped by avr32_frob_section() */ ++ fx_addsy = fixP->fx_addsy; ++ fx_subsy = fixP->fx_subsy; ++ fx_offset = fixP->fx_offset; ++ ++ if (fx_addsy) ++ add_symbol_segment = S_GET_SEGMENT(fx_addsy); ++ ++ if (fx_subsy) ++ { ++ resolve_symbol_value(fx_subsy); ++ sub_symbol_segment = S_GET_SEGMENT(fx_subsy); ++ ++ if (sub_symbol_segment == this_segment ++ && (!linkrelax ++ || S_GET_VALUE(fx_subsy) == (fixP->fx_frag->fr_address ++ + fixP->fx_where))) ++ { ++ fixP->fx_pcrel = TRUE; ++ fx_offset += (fixP->fx_frag->fr_address + fixP->fx_where ++ - S_GET_VALUE(fx_subsy)); ++ fx_subsy = NULL; ++ } ++ else if (sub_symbol_segment == absolute_section) ++ { ++ /* The symbol is really a constant. */ ++ fx_offset -= S_GET_VALUE(fx_subsy); ++ fx_subsy = NULL; ++ } ++ else if (SEG_NORMAL(add_symbol_segment) ++ && sub_symbol_segment == add_symbol_segment ++ && (!linkrelax || convert_to_diff_reloc(fixP))) ++ { ++ /* Difference between two labels in the same section. */ ++ if (linkrelax) ++ { ++ /* convert_to_diff() has ensured that the reloc type is ++ either DIFF32, DIFF16 or DIFF8. */ ++ value = (S_GET_VALUE(fx_addsy) + fixP->fx_offset ++ - S_GET_VALUE(fx_subsy)); ++ ++ /* Try to convert it to a section symbol if possible */ ++ if (!S_FORCE_RELOC(fx_addsy, 1) ++ && !(sub_symbol_segment->flags & SEC_THREAD_LOCAL)) ++ { ++ fx_offset = S_GET_VALUE(fx_subsy); ++ fx_addsy = section_symbol(sub_symbol_segment); ++ } ++ else ++ { ++ fx_addsy = fx_subsy; ++ fx_offset = 0; ++ } + -+# Handling of arguments. - for ac_config_target in $ac_config_targets - do -- case "$ac_config_target" in -- # Handling of arguments. -- "gdb.ini" ) CONFIG_FILES="$CONFIG_FILES gdb.ini:gdbinit.in" ;; -- ".gdbinit" ) CONFIG_FILES="$CONFIG_FILES .gdbinit:gdbinit.in" ;; -- "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; -- "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; -- "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;; -- "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; -- "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; -- "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; -+ case $ac_config_target in -+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; -+ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; -+ "gdb.ini") CONFIG_FILES="$CONFIG_FILES gdb.ini:gdbinit.in" ;; -+ ".gdbinit") CONFIG_FILES="$CONFIG_FILES .gdbinit:gdbinit.in" ;; -+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; -+ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; -+ "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;; -+ "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; ++ fx_subsy = NULL; ++ apply = TRUE; ++ } ++ else ++ { ++ fx_offset += S_GET_VALUE(fx_addsy); ++ fx_offset -= S_GET_VALUE(fx_subsy); ++ fx_addsy = NULL; ++ fx_subsy = NULL; ++ } ++ } ++ else ++ { ++ as_bad_where(fixP->fx_file, fixP->fx_line, ++ _("can't resolve `%s' {%s section} - `%s' {%s section}"), ++ fx_addsy ? S_GET_NAME (fx_addsy) : "0", ++ segment_name (add_symbol_segment), ++ S_GET_NAME (fx_subsy), ++ segment_name (sub_symbol_segment)); ++ return; ++ } ++ } + - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 - echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - esac - done - ++ if (fx_addsy && !TC_FORCE_RELOCATION(fixP)) ++ { ++ if (add_symbol_segment == this_segment ++ && fixP->fx_pcrel) ++ { ++ value += S_GET_VALUE(fx_addsy); ++ value -= md_pcrel_from_section(fixP, this_segment); ++ fx_addsy = NULL; ++ fixP->fx_pcrel = FALSE; ++ } ++ else if (add_symbol_segment == absolute_section) ++ { ++ fx_offset += S_GET_VALUE(fixP->fx_addsy); ++ fx_addsy = NULL; ++ } ++ } + - # If the user did not use the arguments to specify the items to instantiate, - # then the envvar interface is used. Set only those that are not. - # We use the long form for the default assignment because of an extremely -@@ -11719,388 +12185,493 @@ if $ac_need_defaults; then - fi - - # Have a temporary directory for convenience. Make it in the build tree --# simply because there is no reason to put it here, and in addition, -+# simply because there is no reason against having it here, and in addition, - # creating and moving files from /tmp can sometimes cause problems. --# Create a temporary directory, and hook for its removal unless debugging. -+# Hook for its removal unless debugging. -+# Note that there is a small window in which the directory will not be cleaned: -+# after its creation but before its name has been assigned to `$tmp'. - $debug || - { -- trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 -+ tmp= -+ trap 'exit_status=$? -+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -+' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 - } -- - # Create a (secure) tmp directory for tmp files. - - { -- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && -+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" - } || - { -- tmp=./confstat$$-$RANDOM -- (umask 077 && mkdir $tmp) -+ tmp=./conf$$-$RANDOM -+ (umask 077 && mkdir "$tmp") - } || - { - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } - } - --_ACEOF -- --cat >>$CONFIG_STATUS <<_ACEOF -- - # --# CONFIG_FILES section. -+# Set up the sed scripts for CONFIG_FILES section. - # - - # No need to generate the scripts if there are no CONFIG_FILES. - # This happens for instance when ./config.status config.h --if test -n "\$CONFIG_FILES"; then -- # Protect against being on the right side of a sed subst in config.status. -- sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; -- s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF --s,@SHELL@,$SHELL,;t t --s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t --s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t --s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t --s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t --s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t --s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t --s,@exec_prefix@,$exec_prefix,;t t --s,@prefix@,$prefix,;t t --s,@program_transform_name@,$program_transform_name,;t t --s,@bindir@,$bindir,;t t --s,@sbindir@,$sbindir,;t t --s,@libexecdir@,$libexecdir,;t t --s,@datadir@,$datadir,;t t --s,@sysconfdir@,$sysconfdir,;t t --s,@sharedstatedir@,$sharedstatedir,;t t --s,@localstatedir@,$localstatedir,;t t --s,@libdir@,$libdir,;t t --s,@includedir@,$includedir,;t t --s,@oldincludedir@,$oldincludedir,;t t --s,@infodir@,$infodir,;t t --s,@mandir@,$mandir,;t t --s,@build_alias@,$build_alias,;t t --s,@host_alias@,$host_alias,;t t --s,@target_alias@,$target_alias,;t t --s,@DEFS@,$DEFS,;t t --s,@ECHO_C@,$ECHO_C,;t t --s,@ECHO_N@,$ECHO_N,;t t --s,@ECHO_T@,$ECHO_T,;t t --s,@LIBS@,$LIBS,;t t --s,@build@,$build,;t t --s,@build_cpu@,$build_cpu,;t t --s,@build_vendor@,$build_vendor,;t t --s,@build_os@,$build_os,;t t --s,@host@,$host,;t t --s,@host_cpu@,$host_cpu,;t t --s,@host_vendor@,$host_vendor,;t t --s,@host_os@,$host_os,;t t --s,@target@,$target,;t t --s,@target_cpu@,$target_cpu,;t t --s,@target_vendor@,$target_vendor,;t t --s,@target_os@,$target_os,;t t --s,@CC@,$CC,;t t --s,@CFLAGS@,$CFLAGS,;t t --s,@LDFLAGS@,$LDFLAGS,;t t --s,@CPPFLAGS@,$CPPFLAGS,;t t --s,@ac_ct_CC@,$ac_ct_CC,;t t --s,@EXEEXT@,$EXEEXT,;t t --s,@OBJEXT@,$OBJEXT,;t t --s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t --s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t --s,@INSTALL_DATA@,$INSTALL_DATA,;t t --s,@CYGPATH_W@,$CYGPATH_W,;t t --s,@PACKAGE@,$PACKAGE,;t t --s,@VERSION@,$VERSION,;t t --s,@ACLOCAL@,$ACLOCAL,;t t --s,@AUTOCONF@,$AUTOCONF,;t t --s,@AUTOMAKE@,$AUTOMAKE,;t t --s,@AUTOHEADER@,$AUTOHEADER,;t t --s,@MAKEINFO@,$MAKEINFO,;t t --s,@install_sh@,$install_sh,;t t --s,@STRIP@,$STRIP,;t t --s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t --s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t --s,@mkdir_p@,$mkdir_p,;t t --s,@AWK@,$AWK,;t t --s,@SET_MAKE@,$SET_MAKE,;t t --s,@am__leading_dot@,$am__leading_dot,;t t --s,@AMTAR@,$AMTAR,;t t --s,@am__tar@,$am__tar,;t t --s,@am__untar@,$am__untar,;t t --s,@DEPDIR@,$DEPDIR,;t t --s,@am__include@,$am__include,;t t --s,@am__quote@,$am__quote,;t t --s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t --s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t --s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t --s,@CCDEPMODE@,$CCDEPMODE,;t t --s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t --s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t --s,@LN_S@,$LN_S,;t t --s,@RANLIB@,$RANLIB,;t t --s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t --s,@LIBTOOL@,$LIBTOOL,;t t --s,@WARN_CFLAGS@,$WARN_CFLAGS,;t t --s,@NO_WERROR@,$NO_WERROR,;t t --s,@GDBINIT@,$GDBINIT,;t t --s,@cgen_cpu_prefix@,$cgen_cpu_prefix,;t t --s,@extra_objects@,$extra_objects,;t t --s,@target_cpu_type@,$target_cpu_type,;t t --s,@obj_format@,$obj_format,;t t --s,@te_file@,$te_file,;t t --s,@install_tooldir@,$install_tooldir,;t t --s,@atof@,$atof,;t t --s,@BFDLIB@,$BFDLIB,;t t --s,@OPCODES_LIB@,$OPCODES_LIB,;t t --s,@BFDVER_H@,$BFDVER_H,;t t --s,@ALL_OBJ_DEPS@,$ALL_OBJ_DEPS,;t t --s,@YACC@,$YACC,;t t --s,@LEX@,$LEX,;t t --s,@LEXLIB@,$LEXLIB,;t t --s,@LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t --s,@CPP@,$CPP,;t t --s,@EGREP@,$EGREP,;t t --s,@ALLOCA@,$ALLOCA,;t t --s,@USE_NLS@,$USE_NLS,;t t --s,@MSGFMT@,$MSGFMT,;t t --s,@GMSGFMT@,$GMSGFMT,;t t --s,@XGETTEXT@,$XGETTEXT,;t t --s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t --s,@CATALOGS@,$CATALOGS,;t t --s,@CATOBJEXT@,$CATOBJEXT,;t t --s,@DATADIRNAME@,$DATADIRNAME,;t t --s,@GMOFILES@,$GMOFILES,;t t --s,@INSTOBJEXT@,$INSTOBJEXT,;t t --s,@INTLDEPS@,$INTLDEPS,;t t --s,@INTLLIBS@,$INTLLIBS,;t t --s,@INTLOBJS@,$INTLOBJS,;t t --s,@POFILES@,$POFILES,;t t --s,@POSUB@,$POSUB,;t t --s,@INCLUDE_LOCALE_H@,$INCLUDE_LOCALE_H,;t t --s,@GT_NO@,$GT_NO,;t t --s,@GT_YES@,$GT_YES,;t t --s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t --s,@l@,$l,;t t --s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t --s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t --s,@MAINT@,$MAINT,;t t --s,@LIBM@,$LIBM,;t t --s,@datarootdir@,$datarootdir,;t t --s,@docdir@,$docdir,;t t --s,@htmldir@,$htmldir,;t t --s,@LIBOBJS@,$LIBOBJS,;t t --s,@LTLIBOBJS@,$LTLIBOBJS,;t t --CEOF -- --_ACEOF -- -- cat >>$CONFIG_STATUS <<\_ACEOF -- # Split the substitutions into bite-sized pieces for seds with -- # small command number limits, like on Digital OSF/1 and HP-UX. -- ac_max_sed_lines=48 -- ac_sed_frag=1 # Number of current file. -- ac_beg=1 # First line for current file. -- ac_end=$ac_max_sed_lines # Line after last line for current file. -- ac_more_lines=: -- ac_sed_cmds= -- while $ac_more_lines; do -- if test $ac_beg -gt 1; then -- sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag -- else -- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag -- fi -- if test ! -s $tmp/subs.frag; then -- ac_more_lines=false -- else -- # The purpose of the label and of the branching condition is to -- # speed up the sed processing (if there are no `@' at all, there -- # is no need to browse any of the substitutions). -- # These are the two extra sed commands mentioned above. -- (echo ':t -- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed -- if test -z "$ac_sed_cmds"; then -- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" -- else -- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" -- fi -- ac_sed_frag=`expr $ac_sed_frag + 1` -- ac_beg=$ac_end -- ac_end=`expr $ac_end + $ac_max_sed_lines` -- fi -- done -- if test -z "$ac_sed_cmds"; then -- ac_sed_cmds=cat -+if test -n "$CONFIG_FILES"; then ++ if (!fx_addsy) ++ fixP->fx_done = TRUE; + -+_ACEOF ++ if (fixP->fx_pcrel) ++ { ++ if (fx_addsy != NULL ++ && S_IS_DEFINED(fx_addsy) ++ && S_GET_SEGMENT(fx_addsy) != this_segment) ++ value += md_pcrel_from_section(fixP, this_segment); + ++ switch (fixP->fx_r_type) ++ { ++ case BFD_RELOC_32: ++ fixP->fx_r_type = BFD_RELOC_32_PCREL; ++ break; ++ case BFD_RELOC_16: ++ fixP->fx_r_type = BFD_RELOC_16_PCREL; ++ break; ++ case BFD_RELOC_8: ++ fixP->fx_r_type = BFD_RELOC_8_PCREL; ++ break; ++ case BFD_RELOC_AVR32_SUB5: ++ fixP->fx_r_type = BFD_RELOC_AVR32_16N_PCREL; ++ break; ++ case BFD_RELOC_AVR32_16S: ++ fixP->fx_r_type = BFD_RELOC_AVR32_16B_PCREL; ++ break; ++ case BFD_RELOC_AVR32_14UW: ++ fixP->fx_r_type = BFD_RELOC_AVR32_14UW_PCREL; ++ break; ++ case BFD_RELOC_AVR32_10UW: ++ fixP->fx_r_type = BFD_RELOC_AVR32_10UW_PCREL; ++ break; ++ default: ++ /* Should have been taken care of already */ ++ break; ++ } ++ } + ++ if (fixP->fx_done || apply) ++ { ++ const struct avr32_ifield *ifield; ++ char *buf = fixP->fx_where + fixP->fx_frag->fr_literal; + -+ac_delim='%!_!# ' -+for ac_last_try in false false false false false :; do -+ cat >conf$$subs.sed <<_ACEOF -+SHELL!$SHELL$ac_delim -+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim -+PACKAGE_NAME!$PACKAGE_NAME$ac_delim -+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim -+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim -+PACKAGE_STRING!$PACKAGE_STRING$ac_delim -+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim -+exec_prefix!$exec_prefix$ac_delim -+prefix!$prefix$ac_delim -+program_transform_name!$program_transform_name$ac_delim -+bindir!$bindir$ac_delim -+sbindir!$sbindir$ac_delim -+libexecdir!$libexecdir$ac_delim -+datarootdir!$datarootdir$ac_delim -+datadir!$datadir$ac_delim -+sysconfdir!$sysconfdir$ac_delim -+sharedstatedir!$sharedstatedir$ac_delim -+localstatedir!$localstatedir$ac_delim -+includedir!$includedir$ac_delim -+oldincludedir!$oldincludedir$ac_delim -+docdir!$docdir$ac_delim -+infodir!$infodir$ac_delim -+htmldir!$htmldir$ac_delim -+dvidir!$dvidir$ac_delim -+pdfdir!$pdfdir$ac_delim -+psdir!$psdir$ac_delim -+libdir!$libdir$ac_delim -+localedir!$localedir$ac_delim -+mandir!$mandir$ac_delim -+DEFS!$DEFS$ac_delim -+ECHO_C!$ECHO_C$ac_delim -+ECHO_N!$ECHO_N$ac_delim -+ECHO_T!$ECHO_T$ac_delim -+LIBS!$LIBS$ac_delim -+build_alias!$build_alias$ac_delim -+host_alias!$host_alias$ac_delim -+target_alias!$target_alias$ac_delim -+build!$build$ac_delim -+build_cpu!$build_cpu$ac_delim -+build_vendor!$build_vendor$ac_delim -+build_os!$build_os$ac_delim -+host!$host$ac_delim -+host_cpu!$host_cpu$ac_delim -+host_vendor!$host_vendor$ac_delim -+host_os!$host_os$ac_delim -+target!$target$ac_delim -+target_cpu!$target_cpu$ac_delim -+target_vendor!$target_vendor$ac_delim -+target_os!$target_os$ac_delim -+CC!$CC$ac_delim -+CFLAGS!$CFLAGS$ac_delim -+LDFLAGS!$LDFLAGS$ac_delim -+CPPFLAGS!$CPPFLAGS$ac_delim -+ac_ct_CC!$ac_ct_CC$ac_delim -+EXEEXT!$EXEEXT$ac_delim -+OBJEXT!$OBJEXT$ac_delim -+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim -+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim -+INSTALL_DATA!$INSTALL_DATA$ac_delim -+CYGPATH_W!$CYGPATH_W$ac_delim -+PACKAGE!$PACKAGE$ac_delim -+VERSION!$VERSION$ac_delim -+ACLOCAL!$ACLOCAL$ac_delim -+AUTOCONF!$AUTOCONF$ac_delim -+AUTOMAKE!$AUTOMAKE$ac_delim -+AUTOHEADER!$AUTOHEADER$ac_delim -+MAKEINFO!$MAKEINFO$ac_delim -+install_sh!$install_sh$ac_delim -+STRIP!$STRIP$ac_delim -+INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim -+mkdir_p!$mkdir_p$ac_delim -+AWK!$AWK$ac_delim -+SET_MAKE!$SET_MAKE$ac_delim -+am__leading_dot!$am__leading_dot$ac_delim -+AMTAR!$AMTAR$ac_delim -+am__tar!$am__tar$ac_delim -+am__untar!$am__untar$ac_delim -+DEPDIR!$DEPDIR$ac_delim -+am__include!$am__include$ac_delim -+am__quote!$am__quote$ac_delim -+AMDEP_TRUE!$AMDEP_TRUE$ac_delim -+AMDEP_FALSE!$AMDEP_FALSE$ac_delim -+AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim -+CCDEPMODE!$CCDEPMODE$ac_delim -+am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim -+am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim -+LN_S!$LN_S$ac_delim -+RANLIB!$RANLIB$ac_delim -+LIBTOOL!$LIBTOOL$ac_delim -+WARN_CFLAGS!$WARN_CFLAGS$ac_delim -+NO_WERROR!$NO_WERROR$ac_delim -+GDBINIT!$GDBINIT$ac_delim -+CPP!$CPP$ac_delim -+GREP!$GREP$ac_delim -+EGREP!$EGREP$ac_delim -+cgen_cpu_prefix!$cgen_cpu_prefix$ac_delim -+extra_objects!$extra_objects$ac_delim -+_ACEOF ++ if (fixP->fx_done) ++ value += fx_offset; + -+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then -+ break -+ elif $ac_last_try; then -+ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} -+ { (exit 1); exit 1; }; } -+ else -+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi --fi # test -n "$CONFIG_FILES" -+done ++ switch (fixP->fx_r_type) ++ { ++ case BFD_RELOC_32: ++ case BFD_RELOC_16: ++ case BFD_RELOC_8: ++ case BFD_RELOC_AVR32_DIFF32: ++ case BFD_RELOC_AVR32_DIFF16: ++ case BFD_RELOC_AVR32_DIFF8: ++ md_number_to_chars(buf, value, fixP->fx_size); ++ break; ++ case BFD_RELOC_HI16: ++ value >>= 16; ++ case BFD_RELOC_LO16: ++ value &= 0xffff; ++ md_number_to_chars(buf + 2, value, 2); ++ break; ++ case BFD_RELOC_AVR32_16N_PCREL: ++ value = -value; ++ /* fall through */ ++ case BFD_RELOC_AVR32_22H_PCREL: ++ case BFD_RELOC_AVR32_18W_PCREL: ++ case BFD_RELOC_AVR32_16B_PCREL: ++ case BFD_RELOC_AVR32_11H_PCREL: ++ case BFD_RELOC_AVR32_9H_PCREL: ++ case BFD_RELOC_AVR32_9UW_PCREL: ++ case BFD_RELOC_AVR32_3U: ++ case BFD_RELOC_AVR32_4UH: ++ case BFD_RELOC_AVR32_6UW: ++ case BFD_RELOC_AVR32_6S: ++ case BFD_RELOC_AVR32_7UW: ++ case BFD_RELOC_AVR32_8S_EXT: ++ case BFD_RELOC_AVR32_8S: ++ case BFD_RELOC_AVR32_10UW: ++ case BFD_RELOC_AVR32_10SW: ++ case BFD_RELOC_AVR32_STHH_W: ++ case BFD_RELOC_AVR32_14UW: ++ case BFD_RELOC_AVR32_16S: ++ case BFD_RELOC_AVR32_16U: ++ case BFD_RELOC_AVR32_21S: ++ case BFD_RELOC_AVR32_SUB5: ++ case BFD_RELOC_AVR32_CPCALL: ++ case BFD_RELOC_AVR32_16_CP: ++ case BFD_RELOC_AVR32_9W_CP: ++ ifield = fixP->tc_fix_data.ifield; ++ pr_debug("insert field: %ld <= %ld <= %ld (align %u)\n", ++ fixP->tc_fix_data.min, value, fixP->tc_fix_data.max, ++ fixP->tc_fix_data.align); ++ if (value < fixP->tc_fix_data.min || value > fixP->tc_fix_data.max) ++ as_bad_where(fixP->fx_file, fixP->fx_line, ++ _("operand out of range (%ld not between %ld and %ld)"), ++ value, fixP->tc_fix_data.min, fixP->tc_fix_data.max); ++ if (value & ((1 << fixP->tc_fix_data.align) - 1)) ++ as_bad_where(fixP->fx_file, fixP->fx_line, ++ _("misaligned operand (required alignment: %d)"), ++ 1 << fixP->tc_fix_data.align); ++ ifield->insert(ifield, buf, value >> fixP->tc_fix_data.align); ++ break; ++ case BFD_RELOC_AVR32_ALIGN: ++ /* Nothing to do */ ++ fixP->fx_done = FALSE; ++ break; ++ default: ++ as_fatal("reloc type %s not handled\n", ++ bfd_get_reloc_code_name(fixP->fx_r_type)); ++ } ++ } + -+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -+if test -n "$ac_eof"; then -+ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` -+ ac_eof=`expr $ac_eof + 1` -+fi ++ fixP->fx_addsy = fx_addsy; ++ fixP->fx_subsy = fx_subsy; ++ fixP->fx_offset = fx_offset; + -+cat >>$CONFIG_STATUS <<_ACEOF -+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof -+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -+_ACEOF -+sed ' -+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -+s/^/s,@/; s/!/@,|#_!!_#|/ -+:n -+t n -+s/'"$ac_delim"'$/,g/; t -+s/$/\\/; p -+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -+' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -+CEOF$ac_eof -+_ACEOF ++ if (!fixP->fx_done) ++ { ++ if (!fixP->fx_addsy) ++ fixP->fx_addsy = abs_section_sym; + ++ symbol_mark_used_in_reloc(fixP->fx_addsy); ++ if (fixP->fx_subsy) ++ abort(); ++ } ++} + -+ac_delim='%!_!# ' -+for ac_last_try in false false false false false :; do -+ cat >conf$$subs.sed <<_ACEOF -+target_cpu_type!$target_cpu_type$ac_delim -+obj_format!$obj_format$ac_delim -+te_file!$te_file$ac_delim -+install_tooldir!$install_tooldir$ac_delim -+atof!$atof$ac_delim -+BFDLIB!$BFDLIB$ac_delim -+OPCODES_LIB!$OPCODES_LIB$ac_delim -+BFDVER_H!$BFDVER_H$ac_delim -+ALL_OBJ_DEPS!$ALL_OBJ_DEPS$ac_delim -+YACC!$YACC$ac_delim -+YFLAGS!$YFLAGS$ac_delim -+LEX!$LEX$ac_delim -+LEX_OUTPUT_ROOT!$LEX_OUTPUT_ROOT$ac_delim -+LEXLIB!$LEXLIB$ac_delim -+ALLOCA!$ALLOCA$ac_delim -+USE_NLS!$USE_NLS$ac_delim -+MSGFMT!$MSGFMT$ac_delim -+GMSGFMT!$GMSGFMT$ac_delim -+XGETTEXT!$XGETTEXT$ac_delim -+USE_INCLUDED_LIBINTL!$USE_INCLUDED_LIBINTL$ac_delim -+CATALOGS!$CATALOGS$ac_delim -+CATOBJEXT!$CATOBJEXT$ac_delim -+DATADIRNAME!$DATADIRNAME$ac_delim -+GMOFILES!$GMOFILES$ac_delim -+INSTOBJEXT!$INSTOBJEXT$ac_delim -+INTLDEPS!$INTLDEPS$ac_delim -+INTLLIBS!$INTLLIBS$ac_delim -+INTLOBJS!$INTLOBJS$ac_delim -+POFILES!$POFILES$ac_delim -+POSUB!$POSUB$ac_delim -+INCLUDE_LOCALE_H!$INCLUDE_LOCALE_H$ac_delim -+GT_NO!$GT_NO$ac_delim -+GT_YES!$GT_YES$ac_delim -+MKINSTALLDIRS!$MKINSTALLDIRS$ac_delim -+l!$l$ac_delim -+MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim -+MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim -+MAINT!$MAINT$ac_delim -+LIBM!$LIBM$ac_delim -+LIBOBJS!$LIBOBJS$ac_delim -+LTLIBOBJS!$LTLIBOBJS$ac_delim -+_ACEOF ++#if 0 ++void ++md_apply_fix3 (fixS *fixP, valueT *valP, segT seg) ++{ ++ const struct avr32_ifield *ifield; ++ offsetT value = *valP; ++ char *buf = fixP->fx_where + fixP->fx_frag->fr_literal; ++ bfd_boolean apply; + -+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 41; then -+ break -+ elif $ac_last_try; then -+ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} -+ { (exit 1); exit 1; }; } -+ else -+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! " -+ fi -+done - -+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -+if test -n "$ac_eof"; then -+ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` -+ ac_eof=`expr $ac_eof + 1` -+fi ++ pr_debug("%s:%u: apply_fix3: r_type=%d value=%lx offset=%lx\n", ++ fixP->fx_file, fixP->fx_line, fixP->fx_r_type, *valP, ++ fixP->fx_offset); + -+cat >>$CONFIG_STATUS <<_ACEOF -+cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof -+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end -+_ACEOF -+sed ' -+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -+s/^/s,@/; s/!/@,|#_!!_#|/ -+:n -+t n -+s/'"$ac_delim"'$/,g/; t -+s/$/\\/; p -+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -+' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -+:end -+s/|#_!!_#|//g -+CEOF$ac_eof - _ACEOF ++ if (fixP->fx_r_type >= BFD_RELOC_UNUSED) ++ { ++ as_bad_where(fixP->fx_file, fixP->fx_line, ++ _("Bad relocation type %d\n"), fixP->fx_r_type); ++ return; ++ } + ++ if (!fixP->fx_addsy && !fixP->fx_subsy) ++ fixP->fx_done = 1; + -+# VPATH may cause trouble with some makes, so we remove $(srcdir), -+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -+# trailing colons and then remove the whole line if VPATH becomes empty -+# (actually we leave an empty line to preserve line numbers). -+if test "x$srcdir" = x.; then -+ ac_vpsub='/^[ ]*VPATH[ ]*=/{ -+s/:*\$(srcdir):*/:/ -+s/:*\${srcdir}:*/:/ -+s/:*@srcdir@:*/:/ -+s/^\([^=]*=[ ]*\):*/\1/ -+s/:*$// -+s/^[^=]*=[ ]*$// -+}' -+fi ++ if (fixP->fx_pcrel) ++ { ++ if (fixP->fx_addsy != NULL ++ && S_IS_DEFINED(fixP->fx_addsy) ++ && S_GET_SEGMENT(fixP->fx_addsy) != seg) ++ value += md_pcrel_from_section(fixP, seg); + - cat >>$CONFIG_STATUS <<\_ACEOF --for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue -- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". -- case $ac_file in -- - | *:- | *:-:* ) # input from stdin -- cat >$tmp/stdin -- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; -- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; -- * ) ac_file_in=$ac_file.in ;; -+fi # test -n "$CONFIG_FILES" ++ switch (fixP->fx_r_type) ++ { ++ case BFD_RELOC_32: ++ fixP->fx_r_type = BFD_RELOC_32_PCREL; ++ break; ++ case BFD_RELOC_16: ++ case BFD_RELOC_8: ++ as_bad_where (fixP->fx_file, fixP->fx_line, ++ _("8- and 16-bit PC-relative relocations not supported")); ++ break; ++ case BFD_RELOC_AVR32_SUB5: ++ fixP->fx_r_type = BFD_RELOC_AVR32_PCREL_SUB5; ++ break; ++ case BFD_RELOC_AVR32_16S: ++ fixP->fx_r_type = BFD_RELOC_AVR32_16_PCREL; ++ break; ++ default: ++ /* Should have been taken care of already */ ++ break; ++ } ++ } + ++ if (fixP->fx_r_type == BFD_RELOC_32 ++ && fixP->fx_subsy) ++ { ++ fixP->fx_r_type = BFD_RELOC_AVR32_DIFF32; + -+for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS -+do -+ case $ac_tag in -+ :[FHLC]) ac_mode=$ac_tag; continue;; -+ esac -+ case $ac_mode$ac_tag in -+ :[FHL]*:*);; -+ :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 -+echo "$as_me: error: Invalid tag $ac_tag." >&2;} -+ { (exit 1); exit 1; }; };; -+ :[FH]-) ac_tag=-:-;; -+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; -+ esac -+ ac_save_IFS=$IFS -+ IFS=: -+ set x $ac_tag -+ IFS=$ac_save_IFS -+ shift -+ ac_file=$1 -+ shift ++ /* Offsets are only allowed if it's a result of adjusting a ++ local symbol into a section-relative offset. ++ tc_fix_adjustable() should prevent any adjustment if there ++ was an offset involved before. */ ++ if (fixP->fx_offset && !symbol_section_p(fixP->fx_addsy)) ++ as_bad_where(fixP->fx_file, fixP->fx_line, ++ _("cannot represent symbol difference with an offset")); + -+ case $ac_mode in -+ :L) ac_source=$1;; -+ :[FH]) -+ ac_file_inputs= -+ for ac_f -+ do -+ case $ac_f in -+ -) ac_f="$tmp/stdin";; -+ *) # Look for the file first in the build tree, then in the source tree -+ # (if the path is not absolute). The absolute path cannot be DOS-style, -+ # because $ac_f cannot contain `:'. -+ test -f "$ac_f" || -+ case $ac_f in -+ [\\/$]*) false;; -+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; -+ esac || -+ { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -+echo "$as_me: error: cannot find input file: $ac_f" >&2;} -+ { (exit 1); exit 1; }; };; -+ esac -+ ac_file_inputs="$ac_file_inputs $ac_f" -+ done ++ value = (S_GET_VALUE(fixP->fx_addsy) + fixP->fx_offset ++ - S_GET_VALUE(fixP->fx_subsy)); + -+ # Let's still pretend it is `configure' which instantiates (i.e., don't -+ # use $as_me), people would be surprised to read: -+ # /* config.h. Generated by config.status. */ -+ configure_input="Generated from "`IFS=: -+ echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." -+ if test x"$ac_file" != x-; then -+ configure_input="$ac_file. $configure_input" -+ { echo "$as_me:$LINENO: creating $ac_file" >&5 -+echo "$as_me: creating $ac_file" >&6;} -+ fi ++ /* The difference before any relaxing takes place is written ++ out, and the DIFF32 reloc identifies the address of the first ++ symbol (i.e. the on that's subtracted.) */ ++ *valP = value; ++ fixP->fx_offset -= value; ++ fixP->fx_subsy = NULL; + -+ case $ac_tag in -+ *:-:* | *:-) cat >"$tmp/stdin";; -+ esac -+ ;; - esac - -- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. -- ac_dir=`(dirname "$ac_file") 2>/dev/null || -+ ac_dir=`$as_dirname -- "$ac_file" || - $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ -- X"$ac_file" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || - echo X"$ac_file" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -- { if $as_mkdir_p; then -- mkdir -p "$ac_dir" -- else -- as_dir="$ac_dir" -+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)[^/].*/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` -+ { as_dir="$ac_dir" -+ case $as_dir in #( -+ -*) as_dir=./$as_dir;; -+ esac -+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= -- while test ! -d "$as_dir"; do -- as_dirs="$as_dir $as_dirs" -- as_dir=`(dirname "$as_dir") 2>/dev/null || -+ while :; do -+ case $as_dir in #( -+ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( -+ *) as_qdir=$as_dir;; -+ esac -+ as_dirs="'$as_qdir' $as_dirs" -+ as_dir=`$as_dirname -- "$as_dir" || - $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ -- X"$as_dir" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || - echo X"$as_dir" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)[^/].*/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` -+ test -d "$as_dir" && break - done -- test ! -n "$as_dirs" || mkdir $as_dirs -- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 --echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} -+ test -z "$as_dirs" || eval "mkdir $as_dirs" -+ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -+echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } -- - ac_builddir=. - --if test "$ac_dir" != .; then -+case "$ac_dir" in -+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -+*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` -- # A "../" for each directory in $ac_dir_suffix. -- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` --else -- ac_dir_suffix= ac_top_builddir= --fi -+ # A ".." for each directory in $ac_dir_suffix. -+ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` -+ case $ac_top_builddir_sub in -+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;; -+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; -+ esac ;; -+esac -+ac_abs_top_builddir=$ac_pwd -+ac_abs_builddir=$ac_pwd$ac_dir_suffix -+# for backward compatibility: -+ac_top_builddir=$ac_top_build_prefix - - case $srcdir in -- .) # No --srcdir option. We are building in place. -+ .) # We are building in place. - ac_srcdir=. -- if test -z "$ac_top_builddir"; then -- ac_top_srcdir=. -- else -- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` -- fi ;; -- [\\/]* | ?:[\\/]* ) # Absolute path. -+ ac_top_srcdir=$ac_top_builddir_sub -+ ac_abs_top_srcdir=$ac_pwd ;; -+ [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; -- ac_top_srcdir=$srcdir ;; -- *) # Relative path. -- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix -- ac_top_srcdir=$ac_top_builddir$srcdir ;; --esac -+ ac_top_srcdir=$srcdir -+ ac_abs_top_srcdir=$srcdir ;; -+ *) # Relative name. -+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix -+ ac_top_srcdir=$ac_top_build_prefix$srcdir -+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -+esac -+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - --# Do not use `cd foo && pwd` to compute absolute paths, because --# the directories may not exist. --case `pwd` in --.) ac_abs_builddir="$ac_dir";; --*) -- case "$ac_dir" in -- .) ac_abs_builddir=`pwd`;; -- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; -- *) ac_abs_builddir=`pwd`/"$ac_dir";; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_builddir=${ac_top_builddir}.;; --*) -- case ${ac_top_builddir}. in -- .) ac_abs_top_builddir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; -- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_srcdir=$ac_srcdir;; --*) -- case $ac_srcdir in -- .) ac_abs_srcdir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; -- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_srcdir=$ac_top_srcdir;; --*) -- case $ac_top_srcdir in -- .) ac_abs_top_srcdir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; -- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; -- esac;; --esac - -+ case $ac_mode in -+ :F) -+ # -+ # CONFIG_FILE -+ # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; -- *) ac_INSTALL=$ac_top_builddir$INSTALL ;; -+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac -+_ACEOF - -- if test x"$ac_file" != x-; then -- { echo "$as_me:$LINENO: creating $ac_file" >&5 --echo "$as_me: creating $ac_file" >&6;} -- rm -f "$ac_file" -- fi -- # Let's still pretend it is `configure' which instantiates (i.e., don't -- # use $as_me), people would be surprised to read: -- # /* config.h. Generated by config.status. */ -- if test x"$ac_file" = x-; then -- configure_input= -- else -- configure_input="$ac_file. " -- fi -- configure_input=$configure_input"Generated from `echo $ac_file_in | -- sed 's,.*/,,'` by configure." -- -- # First look for the input files in the build tree, otherwise in the -- # src tree. -- ac_file_inputs=`IFS=: -- for f in $ac_file_in; do -- case $f in -- -) echo $tmp/stdin ;; -- [\\/$]*) -- # Absolute (can't be DOS-style, as IFS=:) -- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 --echo "$as_me: error: cannot find input file: $f" >&2;} -- { (exit 1); exit 1; }; } -- echo "$f";; -- *) # Relative -- if test -f "$f"; then -- # Build tree -- echo "$f" -- elif test -f "$srcdir/$f"; then -- # Source tree -- echo "$srcdir/$f" -- else -- # /dev/null tree -- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 --echo "$as_me: error: cannot find input file: $f" >&2;} -- { (exit 1); exit 1; }; } -- fi;; -- esac -- done` || { (exit 1); exit 1; } -+cat >>$CONFIG_STATUS <<\_ACEOF -+# If the template does not know about datarootdir, expand it. -+# FIXME: This hack should be removed a few years after 2.60. -+ac_datarootdir_hack=; ac_datarootdir_seen= ++ md_number_to_chars(buf, value, fixP->fx_size); ++ } ++ ++ if (fixP->fx_done) ++ { ++ switch (fixP->fx_r_type) ++ { ++ case BFD_RELOC_8: ++ case BFD_RELOC_16: ++ case BFD_RELOC_32: ++ md_number_to_chars(buf, value, fixP->fx_size); ++ break; ++ case BFD_RELOC_HI16: ++ value >>= 16; ++ case BFD_RELOC_LO16: ++ value &= 0xffff; ++ *valP = value; ++ md_number_to_chars(buf + 2, value, 2); ++ break; ++ case BFD_RELOC_AVR32_PCREL_SUB5: ++ value = -value; ++ /* fall through */ ++ case BFD_RELOC_AVR32_9_PCREL: ++ case BFD_RELOC_AVR32_11_PCREL: ++ case BFD_RELOC_AVR32_16_PCREL: ++ case BFD_RELOC_AVR32_18_PCREL: ++ case BFD_RELOC_AVR32_22_PCREL: ++ case BFD_RELOC_AVR32_3U: ++ case BFD_RELOC_AVR32_4UH: ++ case BFD_RELOC_AVR32_6UW: ++ case BFD_RELOC_AVR32_6S: ++ case BFD_RELOC_AVR32_7UW: ++ case BFD_RELOC_AVR32_8S: ++ case BFD_RELOC_AVR32_10UW: ++ case BFD_RELOC_AVR32_10SW: ++ case BFD_RELOC_AVR32_14UW: ++ case BFD_RELOC_AVR32_16S: ++ case BFD_RELOC_AVR32_16U: ++ case BFD_RELOC_AVR32_21S: ++ case BFD_RELOC_AVR32_BRC1: ++ case BFD_RELOC_AVR32_SUB5: ++ case BFD_RELOC_AVR32_CPCALL: ++ case BFD_RELOC_AVR32_16_CP: ++ case BFD_RELOC_AVR32_9_CP: ++ ifield = fixP->tc_fix_data.ifield; ++ pr_debug("insert field: %ld <= %ld <= %ld (align %u)\n", ++ fixP->tc_fix_data.min, value, fixP->tc_fix_data.max, ++ fixP->tc_fix_data.align); ++ if (value < fixP->tc_fix_data.min || value > fixP->tc_fix_data.max) ++ as_bad_where(fixP->fx_file, fixP->fx_line, ++ _("operand out of range (%ld not between %ld and %ld)"), ++ value, fixP->tc_fix_data.min, fixP->tc_fix_data.max); ++ if (value & ((1 << fixP->tc_fix_data.align) - 1)) ++ as_bad_where(fixP->fx_file, fixP->fx_line, ++ _("misaligned operand (required alignment: %d)"), ++ 1 << fixP->tc_fix_data.align); ++ ifield->insert(ifield, buf, value >> fixP->tc_fix_data.align); ++ break; ++ case BFD_RELOC_AVR32_ALIGN: ++ /* Nothing to do */ ++ fixP->fx_done = FALSE; ++ break; ++ default: ++ as_fatal("reloc type %s not handled\n", ++ bfd_get_reloc_code_name(fixP->fx_r_type)); ++ } ++ } ++} ++#endif + -+case `sed -n '/datarootdir/ { -+ p -+ q ++arelent * ++tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, ++ fixS *fixp) ++{ ++ arelent *reloc; ++ bfd_reloc_code_real_type code; ++ ++ reloc = xmalloc (sizeof (arelent)); ++ ++ reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); ++ *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); ++ reloc->address = fixp->fx_frag->fr_address + fixp->fx_where; ++ reloc->addend = fixp->fx_offset; ++ code = fixp->fx_r_type; ++ ++ reloc->howto = bfd_reloc_type_lookup (stdoutput, code); ++ ++ if (reloc->howto == NULL) ++ { ++ as_bad_where (fixp->fx_file, fixp->fx_line, ++ _("cannot represent relocation %s in this object file format"), ++ bfd_get_reloc_code_name (code)); ++ return NULL; ++ } ++ ++ return reloc; +} -+/@datadir@/p -+/@docdir@/p -+/@infodir@/p -+/@localedir@/p -+/@mandir@/p -+' $ac_file_inputs` in -+*datarootdir*) ac_datarootdir_seen=yes;; -+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) -+ { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -+_ACEOF -+cat >>$CONFIG_STATUS <<_ACEOF -+ ac_datarootdir_hack=' -+ s&@datadir@&$datadir&g -+ s&@docdir@&$docdir&g -+ s&@infodir@&$infodir&g -+ s&@localedir@&$localedir&g -+ s&@mandir@&$mandir&g -+ s&\\\${datarootdir}&$datarootdir&g' ;; -+esac - _ACEOF + -+# Neutralize VPATH when `$srcdir' = `.'. -+# Shell code in configure.ac might set extrasub. -+# FIXME: do we really want to maintain this feature? - cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub - $extrasub -@@ -12108,248 +12679,130 @@ _ACEOF - cat >>$CONFIG_STATUS <<\_ACEOF - :t - /@[a-zA-Z_][a-zA-Z_0-9]*@/!b --s,@configure_input@,$configure_input,;t t --s,@srcdir@,$ac_srcdir,;t t --s,@abs_srcdir@,$ac_abs_srcdir,;t t --s,@top_srcdir@,$ac_top_srcdir,;t t --s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t --s,@builddir@,$ac_builddir,;t t --s,@abs_builddir@,$ac_abs_builddir,;t t --s,@top_builddir@,$ac_top_builddir,;t t --s,@abs_top_builddir@,$ac_abs_top_builddir,;t t --s,@INSTALL@,$ac_INSTALL,;t t --" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out -- rm -f $tmp/stdin -- if test x"$ac_file" != x-; then -- mv $tmp/out $ac_file -- else -- cat $tmp/out -- rm -f $tmp/out -- fi -- --done --_ACEOF --cat >>$CONFIG_STATUS <<\_ACEOF -- --# --# CONFIG_HEADER section. --# -- --# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where --# NAME is the cpp macro being defined and VALUE is the value it is being given. --# --# ac_d sets the value in "#define NAME VALUE" lines. --ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' --ac_dB='[ ].*$,\1#\2' --ac_dC=' ' --ac_dD=',;t' --# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". --ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' --ac_uB='$,\1#\2define\3' --ac_uC=' ' --ac_uD=',;t' -+s&@configure_input@&$configure_input&;t t -+s&@top_builddir@&$ac_top_builddir_sub&;t t -+s&@srcdir@&$ac_srcdir&;t t -+s&@abs_srcdir@&$ac_abs_srcdir&;t t -+s&@top_srcdir@&$ac_top_srcdir&;t t -+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -+s&@builddir@&$ac_builddir&;t t -+s&@abs_builddir@&$ac_abs_builddir&;t t -+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -+s&@INSTALL@&$ac_INSTALL&;t t -+$ac_datarootdir_hack -+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out ++bfd_boolean ++avr32_force_reloc(fixS *fixP) ++{ ++ if (linkrelax && fixP->fx_addsy ++ && !(S_GET_SEGMENT(fixP->fx_addsy)->flags & SEC_DEBUGGING) ++ && S_GET_SEGMENT(fixP->fx_addsy) != absolute_section) ++ { ++ pr_debug(stderr, "force reloc: addsy=%p, r_type=%d, sec=%s\n", ++ fixP->fx_addsy, fixP->fx_r_type, S_GET_SEGMENT(fixP->fx_addsy)->name); ++ return 1; ++ } + -+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && -+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && -+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && -+ { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' -+which seems to be undefined. Please make sure it is defined." >&5 -+echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -+which seems to be undefined. Please make sure it is defined." >&2;} - --for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue -- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". -+ rm -f "$tmp/stdin" - case $ac_file in -- - | *:- | *:-:* ) # input from stdin -- cat >$tmp/stdin -- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; -- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; -- * ) ac_file_in=$ac_file.in ;; -+ -) cat "$tmp/out"; rm -f "$tmp/out";; -+ *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; - esac -+ ;; -+ :H) -+ # -+ # CONFIG_HEADER -+ # -+_ACEOF ++ return generic_force_reloc(fixP); ++} + -+# Transform confdefs.h into a sed script `conftest.defines', that -+# substitutes the proper values into config.h.in to produce config.h. -+rm -f conftest.defines conftest.tail -+# First, append a space to every undef/define line, to ease matching. -+echo 's/$/ /' >conftest.defines -+# Then, protect against being on the right side of a sed subst, or in -+# an unquoted here document, in config.status. If some macros were -+# called several times there might be several #defines for the same -+# symbol, which is useless. But do not sort them, since the last -+# AC_DEFINE must be honored. -+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -+# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where -+# NAME is the cpp macro being defined, VALUE is the value it is being given. -+# PARAMS is the parameter list in the macro definition--in most cases, it's -+# just an empty string. -+ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' -+ac_dB='\\)[ (].*,\\1define\\2' -+ac_dC=' ' -+ac_dD=' ,' - -- test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 --echo "$as_me: creating $ac_file" >&6;} -- -- # First look for the input files in the build tree, otherwise in the -- # src tree. -- ac_file_inputs=`IFS=: -- for f in $ac_file_in; do -- case $f in -- -) echo $tmp/stdin ;; -- [\\/$]*) -- # Absolute (can't be DOS-style, as IFS=:) -- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 --echo "$as_me: error: cannot find input file: $f" >&2;} -- { (exit 1); exit 1; }; } -- # Do quote $f, to prevent DOS paths from being IFS'd. -- echo "$f";; -- *) # Relative -- if test -f "$f"; then -- # Build tree -- echo "$f" -- elif test -f "$srcdir/$f"; then -- # Source tree -- echo "$srcdir/$f" -- else -- # /dev/null tree -- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 --echo "$as_me: error: cannot find input file: $f" >&2;} -- { (exit 1); exit 1; }; } -- fi;; -- esac -- done` || { (exit 1); exit 1; } -- # Remove the trailing spaces. -- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in -- --_ACEOF -- --# Transform confdefs.h into two sed scripts, `conftest.defines' and --# `conftest.undefs', that substitutes the proper values into --# config.h.in to produce config.h. The first handles `#define' --# templates, and the second `#undef' templates. --# And first: Protect against being on the right side of a sed subst in --# config.status. Protect against being in an unquoted here document --# in config.status. --rm -f conftest.defines conftest.undefs --# Using a here document instead of a string reduces the quoting nightmare. --# Putting comments in sed scripts is not portable. --# --# `end' is used to avoid that the second main sed command (meant for --# 0-ary CPP macros) applies to n-ary macro definitions. --# See the Autoconf documentation for `clear'. --cat >confdef2sed.sed <<\_ACEOF --s/[\\&,]/\\&/g --s,[\\$`],\\&,g --t clear --: clear --s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp --t end --s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp --: end --_ACEOF --# If some macros were called several times there might be several times --# the same #defines, which is useless. Nevertheless, we may not want to --# sort them, since we want the *last* AC-DEFINE to be honored. --uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines --sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs --rm -f confdef2sed.sed -+uniq confdefs.h | -+ sed -n ' -+ t rset -+ :rset -+ s/^[ ]*#[ ]*define[ ][ ]*// -+ t ok -+ d -+ :ok -+ s/[\\&,]/\\&/g -+ s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p -+ s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p -+ ' >>conftest.defines - --# This sed command replaces #undef with comments. This is necessary, for -+# Remove the space that was appended to ease matching. -+# Then replace #undef with comments. This is necessary, for - # example, in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. --cat >>conftest.undefs <<\_ACEOF --s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, -+# (The regexp can be short, since the line contains either #define or #undef.) -+echo 's/ $// -+s,^[ #]*u.*,/* & */,' >>conftest.defines ++bfd_boolean ++avr32_fix_adjustable(fixS *fixP) ++{ ++ switch (fixP->fx_r_type) ++ { ++ /* GOT relocations can't have addends since BFD treats all ++ references to a given symbol the same. This means that we ++ must avoid section-relative references to local symbols when ++ dealing with these kinds of relocs */ ++ case BFD_RELOC_AVR32_GOT32: ++ case BFD_RELOC_AVR32_GOT16: ++ case BFD_RELOC_AVR32_GOT8: ++ case BFD_RELOC_AVR32_GOT21S: ++ case BFD_RELOC_AVR32_GOT18SW: ++ case BFD_RELOC_AVR32_GOT16S: ++ case BFD_RELOC_AVR32_LDA_GOT: ++ case BFD_RELOC_AVR32_GOTCALL: ++ pr_debug("fix not adjustable\n"); ++ return 0; ++ ++ default: ++ break; ++ } ++ ++ return 1; ++} ++ ++/* When we want the linker to be able to relax the code, we need to ++ output a reloc for every .align directive requesting an alignment ++ to a four byte boundary or larger. If we don't do this, the linker ++ can't guarantee that the alignment is actually maintained in the ++ linker output. ++ ++ TODO: Might as well insert proper NOPs while we're at it... */ ++void ++avr32_handle_align(fragS *frag) ++{ ++ if (linkrelax ++ && frag->fr_type == rs_align_code ++ && frag->fr_address + frag->fr_fix > 0 ++ && frag->fr_offset > 0) ++ { ++ /* The alignment order (fr_offset) is stored in the addend. */ ++ fix_new(frag, frag->fr_fix, 2, &abs_symbol, frag->fr_offset, ++ FALSE, BFD_RELOC_AVR32_ALIGN); ++ } ++} ++ ++/* Relax_align. Advance location counter to next address that has 'alignment' ++ lowest order bits all 0s, return size of adjustment made. */ ++relax_addressT ++avr32_relax_align(segT segment ATTRIBUTE_UNUSED, ++ fragS *fragP, ++ relax_addressT address) ++{ ++ relax_addressT mask; ++ relax_addressT new_address; ++ int alignment; ++ ++ alignment = fragP->fr_offset; ++ mask = ~((~0) << alignment); ++ new_address = (address + mask) & (~mask); ++ ++ return new_address - address; ++} ++ ++/* Turn a string in input_line_pointer into a floating point constant ++ of type type, and store the appropriate bytes in *litP. The number ++ of LITTLENUMS emitted is stored in *sizeP . An error message is ++ returned, or NULL on OK. */ ++ ++/* Equal to MAX_PRECISION in atof-ieee.c */ ++#define MAX_LITTLENUMS 6 ++ ++char * ++md_atof (type, litP, sizeP) ++char type; ++char * litP; ++int * sizeP; ++{ ++ int i; ++ int prec; ++ LITTLENUM_TYPE words [MAX_LITTLENUMS]; ++ char * t; ++ ++ switch (type) ++ { ++ case 'f': ++ case 'F': ++ case 's': ++ case 'S': ++ prec = 2; ++ break; ++ ++ case 'd': ++ case 'D': ++ case 'r': ++ case 'R': ++ prec = 4; ++ break; ++ ++ /* FIXME: Some targets allow other format chars for bigger sizes here. */ ++ ++ default: ++ * sizeP = 0; ++ return _("Bad call to md_atof()"); ++ } ++ ++ t = atof_ieee (input_line_pointer, type, words); ++ if (t) ++ input_line_pointer = t; ++ * sizeP = prec * sizeof (LITTLENUM_TYPE); ++ ++ for (i = 0; i < prec; i++) ++ { ++ md_number_to_chars (litP, (valueT) words[i], ++ sizeof (LITTLENUM_TYPE)); ++ litP += sizeof (LITTLENUM_TYPE); ++ } ++ ++ return 0; ++} ++ ++static char *avr32_end_of_match(char *cont, char *what) ++{ ++ int len = strlen (what); ++ ++ if (! is_part_of_name (cont[len]) ++ && strncasecmp (cont, what, len) == 0) ++ return cont + len; ++ ++ return NULL; ++} ++ ++int ++avr32_parse_name (char const *name, expressionS *exp, char *nextchar) ++{ ++ char *next = input_line_pointer; ++ char *next_end; ++ ++ pr_debug("parse_name: %s, nextchar=%c (%02x)\n", name, *nextchar, *nextchar); ++ ++ if (*nextchar == '(') ++ { ++ if (strcasecmp(name, "hi") == 0) ++ { ++ *next = *nextchar; ++ ++ expression(exp); ++ ++ if (exp->X_op == O_constant) ++ { ++ pr_debug(" -> constant hi(0x%08lx) -> 0x%04lx\n", ++ exp->X_add_number, exp->X_add_number >> 16); ++ exp->X_add_number = (exp->X_add_number >> 16) & 0xffff; ++ } ++ else ++ { ++ exp->X_md = exp->X_op; ++ exp->X_op = O_hi; ++ } ++ ++ return 1; ++ } ++ else if (strcasecmp(name, "lo") == 0) ++ { ++ *next = *nextchar; ++ ++ expression(exp); ++ ++ if (exp->X_op == O_constant) ++ exp->X_add_number &= 0xffff; ++ else ++ { ++ exp->X_md = exp->X_op; ++ exp->X_op = O_lo; ++ } ++ ++ return 1; ++ } ++ } ++ else if (*nextchar == '@') ++ { ++ exp->X_md = exp->X_op; ++ ++ if ((next_end = avr32_end_of_match (next + 1, "got"))) ++ exp->X_op = O_got; ++ else if ((next_end = avr32_end_of_match (next + 1, "tlsgd"))) ++ exp->X_op = O_tlsgd; ++ /* Add more as needed */ ++ else ++ { ++ char c; ++ input_line_pointer++; ++ c = get_symbol_end(); ++ as_bad (_("unknown relocation override `%s'"), next + 1); ++ *input_line_pointer = c; ++ input_line_pointer = next; ++ return 0; ++ } ++ ++ exp->X_op_symbol = NULL; ++ exp->X_add_symbol = symbol_find_or_make (name); ++ exp->X_add_number = 0; ++ ++ *input_line_pointer = *nextchar; ++ input_line_pointer = next_end; ++ *nextchar = *input_line_pointer; ++ *input_line_pointer = '\0'; ++ return 1; ++ } ++ else if (strcmp (name, "_GLOBAL_OFFSET_TABLE_") == 0) ++ { ++ if (!GOT_symbol) ++ GOT_symbol = symbol_find_or_make(name); + -+# Break up conftest.defines: -+ac_max_sed_lines=50 ++ exp->X_add_symbol = GOT_symbol; ++ exp->X_op = O_symbol; ++ exp->X_add_number = 0; ++ return 1; ++ } + -+# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" -+# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" -+# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" -+# et cetera. -+ac_in='$ac_file_inputs' -+ac_out='"$tmp/out1"' -+ac_nxt='"$tmp/out2"' ++ return 0; ++} + -+while : -+do -+ # Write a here document: -+ cat >>$CONFIG_STATUS <<_ACEOF -+ # First, check the format of the line: -+ cat >"\$tmp/defines.sed" <<\\CEOF -+/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def -+/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def -+b -+:def - _ACEOF -- --# Break up conftest.defines because some shells have a limit on the size --# of here documents, and old seds have small limits too (100 cmds). --echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS --echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS --echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS --echo ' :' >>$CONFIG_STATUS --rm -f conftest.tail --while grep . conftest.defines >/dev/null --do -- # Write a limited-size here document to $tmp/defines.sed. -- echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS -- # Speed up: don't consider the non `#define' lines. -- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS -- # Work around the forget-to-reset-the-flag bug. -- echo 't clr' >>$CONFIG_STATUS -- echo ': clr' >>$CONFIG_STATUS -- sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS -+ sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF -- sed -f $tmp/defines.sed $tmp/in >$tmp/out -- rm -f $tmp/in -- mv $tmp/out $tmp/in --' >>$CONFIG_STATUS -- sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail -+ sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS -+ ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in -+ sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail -+ grep . conftest.tail >/dev/null || break - rm -f conftest.defines - mv conftest.tail conftest.defines - done --rm -f conftest.defines --echo ' fi # grep' >>$CONFIG_STATUS --echo >>$CONFIG_STATUS -- --# Break up conftest.undefs because some shells have a limit on the size --# of here documents, and old seds have small limits too (100 cmds). --echo ' # Handle all the #undef templates' >>$CONFIG_STATUS --rm -f conftest.tail --while grep . conftest.undefs >/dev/null --do -- # Write a limited-size here document to $tmp/undefs.sed. -- echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS -- # Speed up: don't consider the non `#undef' -- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS -- # Work around the forget-to-reset-the-flag bug. -- echo 't clr' >>$CONFIG_STATUS -- echo ': clr' >>$CONFIG_STATUS -- sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS -- echo 'CEOF -- sed -f $tmp/undefs.sed $tmp/in >$tmp/out -- rm -f $tmp/in -- mv $tmp/out $tmp/in --' >>$CONFIG_STATUS -- sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail -- rm -f conftest.undefs -- mv conftest.tail conftest.undefs --done --rm -f conftest.undefs -+rm -f conftest.defines conftest.tail - -+echo "ac_result=$ac_in" >>$CONFIG_STATUS - cat >>$CONFIG_STATUS <<\_ACEOF -- # Let's still pretend it is `configure' which instantiates (i.e., don't -- # use $as_me), people would be surprised to read: -- # /* config.h. Generated by config.status. */ -- if test x"$ac_file" = x-; then -- echo "/* Generated by configure. */" >$tmp/config.h -- else -- echo "/* $ac_file. Generated by configure. */" >$tmp/config.h -- fi -- cat $tmp/in >>$tmp/config.h -- rm -f $tmp/in - if test x"$ac_file" != x-; then -- if diff $ac_file $tmp/config.h >/dev/null 2>&1; then -+ echo "/* $configure_input */" >"$tmp/config.h" -+ cat "$ac_result" >>"$tmp/config.h" -+ if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 - echo "$as_me: $ac_file is unchanged" >&6;} - else -- ac_dir=`(dirname "$ac_file") 2>/dev/null || --$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$ac_file" : 'X\(//\)[^/]' \| \ -- X"$ac_file" : 'X\(//\)$' \| \ -- X"$ac_file" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || --echo X"$ac_file" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -- { if $as_mkdir_p; then -- mkdir -p "$ac_dir" -- else -- as_dir="$ac_dir" -- as_dirs= -- while test ! -d "$as_dir"; do -- as_dirs="$as_dir $as_dirs" -- as_dir=`(dirname "$as_dir") 2>/dev/null || --$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$as_dir" : 'X\(//\)[^/]' \| \ -- X"$as_dir" : 'X\(//\)$' \| \ -- X"$as_dir" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || --echo X"$as_dir" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -- done -- test ! -n "$as_dirs" || mkdir $as_dirs -- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 --echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} -- { (exit 1); exit 1; }; }; } -- - rm -f $ac_file -- mv $tmp/config.h $ac_file -+ mv "$tmp/config.h" $ac_file - fi - else -- cat $tmp/config.h -- rm -f $tmp/config.h -+ echo "/* $configure_input */" -+ cat "$ac_result" - fi -+ rm -f "$tmp/out12" - # Compute $ac_file's index in $config_headers. - _am_stamp_count=1 - for _am_header in $config_headers :; do -@@ -12360,135 +12813,39 @@ for _am_header in $config_headers :; do - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac - done --echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || -+echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || - $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X$ac_file : 'X\(//\)[^/]' \| \ - X$ac_file : 'X\(//\)$' \| \ -- X$ac_file : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X$ac_file : 'X\(/\)' \| . 2>/dev/null || - echo X$ac_file | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'`/stamp-h$_am_stamp_count --done --_ACEOF --cat >>$CONFIG_STATUS <<\_ACEOF -- --# --# CONFIG_COMMANDS section. --# --for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue -- ac_dest=`echo "$ac_file" | sed 's,:.*,,'` -- ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_dir=`(dirname "$ac_dest") 2>/dev/null || --$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$ac_dest" : 'X\(//\)[^/]' \| \ -- X"$ac_dest" : 'X\(//\)$' \| \ -- X"$ac_dest" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || --echo X"$ac_dest" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -- { if $as_mkdir_p; then -- mkdir -p "$ac_dir" -- else -- as_dir="$ac_dir" -- as_dirs= -- while test ! -d "$as_dir"; do -- as_dirs="$as_dir $as_dirs" -- as_dir=`(dirname "$as_dir") 2>/dev/null || --$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$as_dir" : 'X\(//\)[^/]' \| \ -- X"$as_dir" : 'X\(//\)$' \| \ -- X"$as_dir" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || --echo X"$as_dir" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -- done -- test ! -n "$as_dirs" || mkdir $as_dirs -- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 --echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} -- { (exit 1); exit 1; }; }; } -- -- ac_builddir=. -- --if test "$ac_dir" != .; then -- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` -- # A "../" for each directory in $ac_dir_suffix. -- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` --else -- ac_dir_suffix= ac_top_builddir= --fi -- --case $srcdir in -- .) # No --srcdir option. We are building in place. -- ac_srcdir=. -- if test -z "$ac_top_builddir"; then -- ac_top_srcdir=. -- else -- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` -- fi ;; -- [\\/]* | ?:[\\/]* ) # Absolute path. -- ac_srcdir=$srcdir$ac_dir_suffix; -- ac_top_srcdir=$srcdir ;; -- *) # Relative path. -- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix -- ac_top_srcdir=$ac_top_builddir$srcdir ;; --esac -+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)[^/].*/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'`/stamp-h$_am_stamp_count -+ ;; - --# Do not use `cd foo && pwd` to compute absolute paths, because --# the directories may not exist. --case `pwd` in --.) ac_abs_builddir="$ac_dir";; --*) -- case "$ac_dir" in -- .) ac_abs_builddir=`pwd`;; -- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; -- *) ac_abs_builddir=`pwd`/"$ac_dir";; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_builddir=${ac_top_builddir}.;; --*) -- case ${ac_top_builddir}. in -- .) ac_abs_top_builddir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; -- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_srcdir=$ac_srcdir;; --*) -- case $ac_srcdir in -- .) ac_abs_srcdir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; -- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_srcdir=$ac_top_srcdir;; --*) -- case $ac_top_srcdir in -- .) ac_abs_top_srcdir=$ac_abs_builddir;; -- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; -- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; -- esac;; --esac -+ :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 -+echo "$as_me: executing $ac_file commands" >&6;} -+ ;; -+ esac - - -- { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 --echo "$as_me: executing $ac_dest commands" >&6;} -- case $ac_dest in -- depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do -+ case $ac_file$ac_mode in -+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. -@@ -12498,18 +12855,29 @@ echo "$as_me: executing $ac_dest command - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then -- dirpart=`(dirname "$mf") 2>/dev/null || -+ dirpart=`$as_dirname -- "$mf" || - $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ -- X"$mf" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$mf" : 'X\(/\)' \| . 2>/dev/null || - echo X"$mf" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)[^/].*/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` - else - continue - fi -@@ -12531,49 +12899,76 @@ echo X"$mf" | - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue -- fdir=`(dirname "$file") 2>/dev/null || -+ fdir=`$as_dirname -- "$file" || - $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ -- X"$file" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$file" : 'X\(/\)' \| . 2>/dev/null || - echo X"$file" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -- { if $as_mkdir_p; then -- mkdir -p $dirpart/$fdir -- else -- as_dir=$dirpart/$fdir -+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)[^/].*/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` -+ { as_dir=$dirpart/$fdir -+ case $as_dir in #( -+ -*) as_dir=./$as_dir;; -+ esac -+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= -- while test ! -d "$as_dir"; do -- as_dirs="$as_dir $as_dirs" -- as_dir=`(dirname "$as_dir") 2>/dev/null || -+ while :; do -+ case $as_dir in #( -+ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( -+ *) as_qdir=$as_dir;; -+ esac -+ as_dirs="'$as_qdir' $as_dirs" -+ as_dir=`$as_dirname -- "$as_dir" || - $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ -- X"$as_dir" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || - echo X"$as_dir" | -- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -- /^X\(\/\/\)[^/].*/{ s//\1/; q; } -- /^X\(\/\/\)$/{ s//\1/; q; } -- /^X\(\/\).*/{ s//\1/; q; } -- s/.*/./; q'` -+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)[^/].*/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\/\)$/{ -+ s//\1/ -+ q -+ } -+ /^X\(\/\).*/{ -+ s//\1/ -+ q -+ } -+ s/.*/./; q'` -+ test -d "$as_dir" && break - done -- test ! -n "$as_dirs" || mkdir $as_dirs -- fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 --echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} -+ test -z "$as_dirs" || eval "mkdir $as_dirs" -+ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -+echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } -- - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done - ;; -- default ) rm -f targ-cpu.c targ-cpu.h obj-format.h obj-format.c targ-env.h atof-targ.c itbl-cpu.h -+ "default":C) rm -f targ-cpu.c targ-cpu.h obj-format.h obj-format.c targ-env.h atof-targ.c itbl-cpu.h - echo '#include "tc-'"${target_cpu_type}"'.h"' > targ-cpu.h - echo '#include "obj-'"${obj_format}"'.h"' > obj-format.h - echo '#include "te-'"${te_file}"'.h"' > targ-env.h -@@ -12583,11 +12978,10 @@ done - fi - - sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;; ++static void ++s_rseg (int value ATTRIBUTE_UNUSED) ++{ ++ /* Syntax: RSEG segment_name [:type] [NOROOT|ROOT] [(align)] ++ * Defaults: ++ * - type: undocumented ("typically CODE or DATA") ++ * - ROOT ++ * - align: 1 for code, 0 for others ++ * ++ * TODO: NOROOT is ignored. If gas supports discardable segments, it should ++ * be implemented. ++ */ ++ char *name, *end; ++ int length, type, attr; ++ int align = 0; ++ ++ SKIP_WHITESPACE(); ++ ++ end = input_line_pointer; ++ while (0 == strchr ("\n\t;:( ", *end)) ++ end++; ++ if (end == input_line_pointer) ++ { ++ as_warn (_("missing name")); ++ ignore_rest_of_line(); ++ return; ++ } ++ ++ name = xmalloc (end - input_line_pointer + 1); ++ memcpy (name, input_line_pointer, end - input_line_pointer); ++ name[end - input_line_pointer] = '\0'; ++ input_line_pointer = end; ++ ++ SKIP_WHITESPACE(); ++ ++ type = SHT_NULL; ++ attr = 0; ++ ++ if (*input_line_pointer == ':') ++ { ++ /* Skip the colon */ ++ ++input_line_pointer; ++ SKIP_WHITESPACE(); ++ ++ /* Possible options at this point: ++ * - flag (ROOT or NOROOT) ++ * - a segment type ++ */ ++ end = input_line_pointer; ++ while (0 == strchr ("\n\t;:( ", *end)) ++ end++; ++ length = end - input_line_pointer; ++ if (((length == 4) && (0 == strncasecmp( input_line_pointer, "ROOT", 4))) || ++ ((length == 6) && (0 == strncasecmp( input_line_pointer, "NOROOT", 6)))) ++ { ++ /* Ignore ROOT/NOROOT */ ++ input_line_pointer = end; ++ } ++ else ++ { ++ /* Must be a segment type */ ++ switch (*input_line_pointer) ++ { ++ case 'C': ++ case 'c': ++ if ((length == 4) && ++ (0 == strncasecmp (input_line_pointer, "CODE", 4))) ++ { ++ attr |= SHF_ALLOC | SHF_EXECINSTR; ++ type = SHT_PROGBITS; ++ align = 1; ++ break; ++ } ++ if ((length == 5) && ++ (0 == strncasecmp (input_line_pointer, "CONST", 5))) ++ { ++ attr |= SHF_ALLOC; ++ type = SHT_PROGBITS; ++ break; ++ } ++ goto de_fault; + - esac --done --_ACEOF -+done # for ac_tag - --cat >>$CONFIG_STATUS <<\_ACEOF - - { (exit 0); exit 0; } - _ACEOF -diff -Nrup binutils-2.17/gas/configure.tgt binutils-2.17-atmel/gas/configure.tgt ++ case 'D': ++ case 'd': ++ if ((length == 4) && ++ (0 == strncasecmp (input_line_pointer, "DATA", 4))) ++ { ++ attr |= SHF_ALLOC | SHF_WRITE; ++ type = SHT_PROGBITS; ++ break; ++ } ++ goto de_fault; ++ ++ /* TODO: Add FAR*, HUGE*, IDATA and NEAR* if necessary */ ++ ++ case 'U': ++ case 'u': ++ if ((length == 7) && ++ (0 == strncasecmp (input_line_pointer, "UNTYPED", 7))) ++ break; ++ goto de_fault; ++ ++ /* TODO: Add XDATA and ZPAGE if necessary */ ++ ++ de_fault: ++ default: ++ as_warn (_("unrecognized segment type")); ++ } ++ ++ input_line_pointer = end; ++ SKIP_WHITESPACE(); ++ ++ if (*input_line_pointer == ':') ++ { ++ /* ROOT/NOROOT */ ++ ++input_line_pointer; ++ SKIP_WHITESPACE(); ++ ++ end = input_line_pointer; ++ while (0 == strchr ("\n\t;:( ", *end)) ++ end++; ++ length = end - input_line_pointer; ++ if (! ((length == 4) && ++ (0 == strncasecmp( input_line_pointer, "ROOT", 4))) && ++ ! ((length == 6) && ++ (0 == strncasecmp( input_line_pointer, "NOROOT", 6)))) ++ { ++ as_warn (_("unrecognized segment flag")); ++ } ++ ++ input_line_pointer = end; ++ SKIP_WHITESPACE(); ++ } ++ } ++ } ++ ++ if (*input_line_pointer == '(') ++ { ++ align = get_absolute_expression (); ++ } ++ ++ demand_empty_rest_of_line(); ++ ++ obj_elf_change_section (name, type, attr, 0, NULL, 0, 0); ++#ifdef AVR32_DEBUG ++ fprintf( stderr, "RSEG: Changed section to %s, type: 0x%x, attr: 0x%x\n", ++ name, type, attr ); ++ fprintf( stderr, "RSEG: Aligning to 2**%d\n", align ); ++#endif ++ ++ if (align > 15) ++ { ++ align = 15; ++ as_warn (_("alignment too large: %u assumed"), align); ++ } ++ ++ /* Hope not, that is */ ++ assert (now_seg != absolute_section); ++ ++ /* Only make a frag if we HAVE to... */ ++ if (align != 0 && !need_pass_2) ++ { ++ if (subseg_text_p (now_seg)) ++ frag_align_code (align, 0); ++ else ++ frag_align (align, 0, 0); ++ } ++ ++ record_alignment (now_seg, align - OCTETS_PER_BYTE_POWER); ++} ++ ++/* vim: syntax=c sw=2 ++ */ +diff -Nrup binutils-2.17/gas/config/tc-avr32.h binutils-2.17.atmel.1.3.0/gas/config/tc-avr32.h +--- binutils-2.17/gas/config/tc-avr32.h 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/config/tc-avr32.h 2007-03-26 10:20:14.000000000 +0200 +@@ -0,0 +1,313 @@ ++/* Assembler definitions for AVR32. ++ Copyright 2003-2006 Atmel Corporation. ++ ++ Written by Haavard Skinnemoen, Atmel Norway, ++ ++ This file is part of GAS, the GNU Assembler. ++ ++ GAS is free software; you can redistribute it and/or modify it ++ under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2, or (at your option) ++ any later version. ++ ++ GAS is distributed in the hope that it will be useful, but WITHOUT ++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ++ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ++ License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with GAS; see the file COPYING. If not, write to the Free ++ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ++ 02111-1307, USA. */ ++ ++#if 0 ++#define DEBUG ++#define DEBUG1 ++#define DEBUG2 ++#define DEBUG3 ++#define DEBUG4 ++#define DEBUG5 ++#endif ++ ++/* Are we trying to be compatible with the IAR assembler? (--iar) */ ++extern int avr32_iarcompat; ++ ++/* By convention, you should define this macro in the `.h' file. For ++ example, `tc-m68k.h' defines `TC_M68K'. You might have to use this ++ if it is necessary to add CPU specific code to the object format ++ file. */ ++#define TC_AVR32 ++ ++/* This macro is the BFD target name to use when creating the output ++ file. This will normally depend upon the `OBJ_FMT' macro. */ ++#define TARGET_FORMAT "elf32-avr32" ++ ++/* This macro is the BFD architecture to pass to `bfd_set_arch_mach'. */ ++#define TARGET_ARCH bfd_arch_avr32 ++ ++/* This macro is the BFD machine number to pass to ++ `bfd_set_arch_mach'. If it is not defined, GAS will use 0. */ ++#define TARGET_MACH 0 ++ ++/* UNDOCUMENTED: Allow //-style comments */ ++#define DOUBLESLASH_LINE_COMMENTS ++ ++/* You should define this macro to be non-zero if the target is big ++ endian, and zero if the target is little endian. */ ++#define TARGET_BYTES_BIG_ENDIAN 1 ++ ++/* FIXME: It seems that GAS only expects a one-byte opcode... ++ #define NOP_OPCODE 0xd703 */ ++ ++/* If you define this macro, GAS will warn about the use of ++ nonstandard escape sequences in a string. */ ++#undef ONLY_STANDARD_ESCAPES ++ ++#define DWARF2_FORMAT() dwarf2_format_32bit ++ ++/* Instructions are either 2 or 4 bytes long */ ++/* #define DWARF2_LINE_MIN_INSN_LENGTH 2 */ ++ ++/* GAS will call this function for any expression that can not be ++ recognized. When the function is called, `input_line_pointer' ++ will point to the start of the expression. */ ++#define md_operand(x) ++ ++#define md_parse_name(name, expr, mode, c) avr32_parse_name(name, expr, c) ++extern int avr32_parse_name(const char *, struct expressionS *, char *); ++ ++/* You may define this macro to generate a fixup for a data ++ allocation pseudo-op. */ ++#define TC_CONS_FIX_NEW(FRAG, OFF, LEN, EXP) \ ++ avr32_cons_fix_new(FRAG, OFF, LEN, EXP) ++void avr32_cons_fix_new (fragS *, int, int, expressionS *); ++ ++/* `extsym - .' expressions can be emitted using PC-relative relocs */ ++#define DIFF_EXPR_OK ++ ++/* This is used to construct expressions out of @gotoff, etc. The ++ relocation type is stored in X_md */ ++#define O_got O_md1 ++#define O_hi O_md2 ++#define O_lo O_md3 ++#define O_tlsgd O_md4 ++ ++/* You may define this macro to parse an expression used in a data ++ allocation pseudo-op such as `.word'. You can use this to ++ recognize relocation directives that may appear in such directives. */ ++/* #define TC_PARSE_CONS_EXPRESSION(EXPR,N) avr_parse_cons_expression (EXPR,N) ++ void avr_parse_cons_expression (expressionS *exp, int nbytes); */ ++ ++/* This should just call either `number_to_chars_bigendian' or ++ `number_to_chars_littleendian', whichever is appropriate. On ++ targets like the MIPS which support options to change the ++ endianness, which function to call is a runtime decision. On ++ other targets, `md_number_to_chars' can be a simple macro. */ ++#define md_number_to_chars number_to_chars_bigendian ++ ++/* `md_short_jump_size' ++ `md_long_jump_size' ++ `md_create_short_jump' ++ `md_create_long_jump' ++ If `WORKING_DOT_WORD' is defined, GAS will not do broken word ++ processing (*note Broken words::.). Otherwise, you should set ++ `md_short_jump_size' to the size of a short jump (a jump that is ++ just long enough to jump around a long jmp) and ++ `md_long_jump_size' to the size of a long jump (a jump that can go ++ anywhere in the function), You should define ++ `md_create_short_jump' to create a short jump around a long jump, ++ and define `md_create_long_jump' to create a long jump. */ ++#define WORKING_DOT_WORD ++ ++/* If you define this macro, it means that `tc_gen_reloc' may return ++ multiple relocation entries for a single fixup. In this case, the ++ return value of `tc_gen_reloc' is a pointer to a null terminated ++ array. */ ++#undef RELOC_EXPANSION_POSSIBLE ++ ++/* If you define this macro, GAS will not require pseudo-ops to start with a . ++ character. */ ++#define NO_PSEUDO_DOT (avr32_iarcompat) ++ ++/* The IAR assembler uses $ as the location counter. Unfortunately, we ++ can't make this dependent on avr32_iarcompat... */ ++#define DOLLAR_DOT ++ ++/* Values passed to md_apply_fix3 don't include the symbol value. */ ++#define MD_APPLY_SYM_VALUE(FIX) 0 ++ ++/* The number of bytes to put into a word in a listing. This affects ++ the way the bytes are clumped together in the listing. For ++ example, a value of 2 might print `1234 5678' where a value of 1 ++ would print `12 34 56 78'. The default value is 4. */ ++#define LISTING_WORD_SIZE 4 ++ ++/* extern const struct relax_type md_relax_table[]; ++#define TC_GENERIC_RELAX_TABLE md_relax_table */ ++ ++/* ++ An `.lcomm' directive with no explicit alignment parameter will use ++ this macro to set P2VAR to the alignment that a request for SIZE ++ bytes will have. The alignment is expressed as a power of two. If ++ no alignment should take place, the macro definition should do ++ nothing. Some targets define a `.bss' directive that is also ++ affected by this macro. The default definition will set P2VAR to ++ the truncated power of two of sizes up to eight bytes. ++ ++ We want doublewords to be word-aligned, so we're going to modify the ++ default definition a tiny bit. ++*/ ++#define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR) \ ++ do \ ++ { \ ++ if ((SIZE) >= 4) \ ++ (P2VAR) = 2; \ ++ else if ((SIZE) >= 2) \ ++ (P2VAR) = 1; \ ++ else \ ++ (P2VAR) = 0; \ ++ } \ ++ while (0) ++ ++/* When relaxing, we need to generate relocations for alignment ++ directives. */ ++#define HANDLE_ALIGN(frag) avr32_handle_align(frag) ++extern void avr32_handle_align(fragS *); ++ ++/* See internals doc for explanation. Oh wait... ++ Now, can you guess where "alignment" comes from? ;-) */ ++#define MAX_MEM_FOR_RS_ALIGN_CODE ((1 << alignment) - 1) ++ ++/* We need to stop gas from reducing certain expressions (e.g. GOT ++ references) */ ++#define tc_fix_adjustable(fix) avr32_fix_adjustable(fix) ++extern bfd_boolean avr32_fix_adjustable(struct fix *); ++ ++/* The linker needs to be passed a little more information when relaxing. */ ++#define TC_FORCE_RELOCATION(fix) avr32_force_reloc(fix) ++extern bfd_boolean avr32_force_reloc(struct fix *); ++ ++/* I'm tired of working around all the madness in fixup_segment(). ++ This hook will do basically the same things as the generic code, ++ and then it will "goto" right past it. */ ++#define TC_VALIDATE_FIX(FIX, SEG, SKIP) \ ++ do \ ++ { \ ++ avr32_process_fixup(FIX, SEG); \ ++ if (!(FIX)->fx_done) \ ++ ++seg_reloc_count; \ ++ goto SKIP; \ ++ } \ ++ while (0) ++extern void avr32_process_fixup(struct fix *fixP, segT this_segment); ++ ++/* We don't want the gas core to make any assumptions about our way of ++ doing linkrelaxing. */ ++#define TC_LINKRELAX_FIXUP(SEG) 0 ++ ++/* ... but we do want it to insert lots of padding. */ ++#define LINKER_RELAXING_SHRINKS_ONLY ++ ++/* Better do it ourselves, really... */ ++#define TC_RELAX_ALIGN(SEG, FRAG, ADDR) avr32_relax_align(SEG, FRAG, ADDR) ++extern relax_addressT ++avr32_relax_align(segT segment, fragS *fragP, relax_addressT address); ++ ++/* This is called by write_object_file() just before symbols are ++ attempted converted into section symbols. */ ++#define tc_frob_file_before_adjust() avr32_frob_file() ++extern void avr32_frob_file(void); ++ ++/* If you define this macro, GAS will call it at the end of each input ++ file. */ ++#define md_cleanup() avr32_cleanup() ++extern void avr32_cleanup(void); ++ ++/* There's an AVR32-specific hack in operand() which creates O_md ++ expressions when encountering HWRD or LWRD. We need to generate ++ proper relocs for them */ ++/* #define md_cgen_record_fixup_exp avr32_cgen_record_fixup_exp */ ++ ++/* I needed to add an extra hook in gas_cgen_finish_insn() for ++ conversion of O_md* operands because md_cgen_record_fixup_exp() ++ isn't called for relaxable insns */ ++/* #define md_cgen_convert_expr(exp, opinfo) avr32_cgen_convert_expr(exp, opinfo) ++ int avr32_cgen_convert_expr(expressionS *, int); */ ++ ++/* #define tc_gen_reloc gas_cgen_tc_gen_reloc */ ++ ++/* If you define this macro, it should return the position from which ++ the PC relative adjustment for a PC relative fixup should be ++ made. On many processors, the base of a PC relative instruction is ++ the next instruction, so this macro would return the length of an ++ instruction, plus the address of the PC relative fixup. The latter ++ can be calculated as fixp->fx_where + fixp->fx_frag->fr_address. */ ++extern long md_pcrel_from_section (struct fix *, segT); ++#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC) ++ ++#define LOCAL_LABEL(name) (name[0] == '.' && (name[1] == 'L')) ++#define LOCAL_LABELS_FB 1 ++ ++struct avr32_relaxer ++{ ++ int (*estimate_size)(fragS *, segT); ++ long (*relax_frag)(segT, fragS *, long); ++ void (*convert_frag)(bfd *, segT, fragS *); ++}; ++ ++/* AVR32 has quite complex instruction coding, which means we need ++ * lots of information in order to do the right thing during relaxing ++ * (basically, we need to be able to reconstruct a whole new opcode if ++ * necessary) */ ++#define TC_FRAG_TYPE struct avr32_frag_data ++ ++struct cpool; ++ ++struct avr32_frag_data ++{ ++ /* TODO: Maybe add an expression object here so that we can use ++ fix_new_exp() in md_convert_frag? We may have to decide ++ pcrel-ness in md_estimate_size_before_relax() as well...or we ++ might do it when parsing. Doing it while parsing may fail ++ because the sub_symbol is undefined then... */ ++ int pcrel; ++ int force_extended; ++ int reloc_info; ++ struct avr32_relaxer *relaxer; ++ expressionS exp; ++ ++ /* Points to associated constant pool, for use by LDA and CALL in ++ non-pic mode, and when relaxing the .cpool directive */ ++ struct cpool *pool; ++ unsigned int pool_entry; ++}; ++ ++/* We will have to initialize the fields explicitly when needed */ ++#define TC_FRAG_INIT(fragP) ++ ++#define md_estimate_size_before_relax(fragP, segT) \ ++ ((fragP)->tc_frag_data.relaxer->estimate_size(fragP, segT)) ++#define md_relax_frag(segment, fragP, stretch) \ ++ ((fragP)->tc_frag_data.relaxer->relax_frag(segment, fragP, stretch)) ++#define md_convert_frag(abfd, segment, fragP) \ ++ ((fragP)->tc_frag_data.relaxer->convert_frag(abfd, segment, fragP)) ++ ++#define TC_FIX_TYPE struct avr32_fix_data ++ ++struct avr32_fix_data ++{ ++ const struct avr32_ifield *ifield; ++ unsigned int align; ++ long min; ++ long max; ++}; ++ ++#define TC_INIT_FIX_DATA(fixP) \ ++ do \ ++ { \ ++ (fixP)->tc_fix_data.ifield = NULL; \ ++ (fixP)->tc_fix_data.align = 0; \ ++ (fixP)->tc_fix_data.min = 0; \ ++ (fixP)->tc_fix_data.max = 0; \ ++ } \ ++ while (0) +diff -Nrup binutils-2.17/gas/configure.tgt binutils-2.17.atmel.1.3.0/gas/configure.tgt --- binutils-2.17/gas/configure.tgt 2006-04-05 14:41:57.000000000 +0200 -+++ binutils-2.17-atmel/gas/configure.tgt 2007-02-12 15:37:09.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/configure.tgt 2007-03-26 10:20:16.000000000 +0200 @@ -33,6 +33,7 @@ case ${cpu} in am33_2.0) cpu_type=mn10300 endian=little ;; arm*be|arm*b) cpu_type=arm endian=big ;; @@ -57606,9 +46159,9 @@ diff -Nrup binutils-2.17/gas/configure.tgt binutils-2.17-atmel/gas/configure.tgt cris-*-linux-* | crisv32-*-linux-*) fmt=multi em=linux ;; cris-*-* | crisv32-*-*) fmt=multi ;; -diff -Nrup binutils-2.17/gas/doc/all.texi binutils-2.17-atmel/gas/doc/all.texi +diff -Nrup binutils-2.17/gas/doc/all.texi binutils-2.17.atmel.1.3.0/gas/doc/all.texi --- binutils-2.17/gas/doc/all.texi 2006-02-17 15:36:25.000000000 +0100 -+++ binutils-2.17-atmel/gas/doc/all.texi 2007-02-12 15:37:09.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/doc/all.texi 2007-03-26 10:19:41.000000000 +0200 @@ -29,6 +29,7 @@ @set ALPHA @set ARC @@ -57617,9 +46170,944 @@ diff -Nrup binutils-2.17/gas/doc/all.texi binutils-2.17-atmel/gas/doc/all.texi @set BFIN @set CRIS @set D10V -diff -Nrup binutils-2.17/gas/doc/as.texinfo binutils-2.17-atmel/gas/doc/as.texinfo +diff -Nrup binutils-2.17/gas/doc/as.info binutils-2.17.atmel.1.3.0/gas/doc/as.info +--- binutils-2.17/gas/doc/as.info 2006-06-23 20:19:50.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/doc/as.info 2007-03-26 10:35:18.000000000 +0200 +@@ -1,5 +1,7 @@ +-This is ../.././gas/doc/as.info, produced by makeinfo version 4.8 from +-../.././gas/doc/as.texinfo. ++This is ++/home/hcegtvedt/svnwork/tools/T0243-GNU_Toolchain/50-Source/binutils/trunk/gas/doc/as.info, ++produced by makeinfo version 4.8 from ++/home/hcegtvedt/svnwork/tools/T0243-GNU_Toolchain/50-Source/binutils/trunk/gas/doc/as.texinfo. + + START-INFO-DIR-ENTRY + * As: (as). The GNU assembler. +@@ -17890,463 +17892,463 @@ Index + +  + Tag Table: +-Node: Top778 +-Node: Overview1695 +-Node: Manual28187 +-Node: GNU Assembler29131 +-Node: Object Formats30302 +-Node: Command Line30754 +-Node: Input Files31841 +-Node: Object33822 +-Node: Errors34718 +-Node: Invoking35913 +-Node: a37862 +-Node: alternate39634 +-Node: D39806 +-Node: f40039 +-Node: I40547 +-Node: K41091 +-Node: L41394 +-Node: listing42231 +-Node: M43823 +-Node: MD48224 +-Node: o48650 +-Node: R49105 +-Node: statistics50135 +-Node: traditional-format50542 +-Node: v51015 +-Node: W51290 +-Node: Z52197 +-Node: Syntax52719 +-Node: Preprocessing53310 +-Node: Whitespace54873 +-Node: Comments55269 +-Node: Symbol Intro57422 +-Node: Statements58112 +-Node: Constants60028 +-Node: Characters60659 +-Node: Strings61161 +-Node: Chars63327 +-Node: Numbers64081 +-Node: Integers64621 +-Node: Bignums65277 +-Node: Flonums65633 +-Node: Sections67380 +-Node: Secs Background67758 +-Node: Ld Sections72797 +-Node: As Sections75181 +-Node: Sub-Sections76091 +-Node: bss79238 +-Node: Symbols80188 +-Node: Labels80836 +-Node: Setting Symbols81567 +-Node: Symbol Names82063 +-Node: Dot86428 +-Node: Symbol Attributes86875 +-Node: Symbol Value87612 +-Node: Symbol Type88657 +-Node: a.out Symbols89045 +-Node: Symbol Desc89307 +-Node: Symbol Other89602 +-Node: COFF Symbols89771 +-Node: SOM Symbols90444 +-Node: Expressions90886 +-Node: Empty Exprs91635 +-Node: Integer Exprs91982 +-Node: Arguments92377 +-Node: Operators93483 +-Node: Prefix Ops93818 +-Node: Infix Ops94146 +-Node: Pseudo Ops96536 +-Node: Abort101731 +-Node: ABORT102136 +-Node: Align102323 +-Node: Ascii104605 +-Node: Asciz104914 +-Node: Balign105159 +-Node: Byte107022 +-Node: Comm107260 +-Node: CFI directives108634 +-Node: LNS directives110986 +-Node: Data113063 +-Node: Def113390 +-Node: Desc113622 +-Node: Dim114122 +-Node: Double114379 +-Node: Eject114717 +-Node: Else114892 +-Node: Elseif115188 +-Node: End115478 +-Node: Endef115693 +-Node: Endfunc115870 +-Node: Endif116045 +-Node: Equ116306 +-Node: Equiv116815 +-Node: Eqv117371 +-Node: Err117735 +-Node: Error118046 +-Node: Exitm118491 +-Node: Extern118660 +-Node: Fail118921 +-Node: File119366 +-Node: Fill119843 +-Node: Float120807 +-Node: Func121149 +-Node: Global121739 +-Node: Hidden122489 +-Node: hword123068 +-Node: Ident123396 +-Node: If123970 +-Node: Incbin127029 +-Node: Include127724 +-Node: Int128275 +-Node: Internal128656 +-Node: Irp129304 +-Node: Irpc130201 +-Node: Lcomm131118 +-Node: Lflags131866 +-Node: Line132060 +-Node: Linkonce132979 +-Node: Ln134208 +-Node: MRI134369 +-Node: List134707 +-Node: Long135315 +-Node: Macro135501 +-Node: Altmacro140064 +-Node: Noaltmacro141394 +-Node: Nolist141562 +-Node: Octa141992 +-Node: Org142326 +-Node: P2align143609 +-Node: Previous145537 +-Node: PopSection146231 +-Node: Print146739 +-Node: Protected146968 +-Node: Psize147615 +-Node: Purgem148299 +-Node: PushSection148520 +-Node: Quad149077 +-Node: Rept149532 +-Node: Sbttl149945 +-Node: Scl150310 +-Node: Section150651 +-Node: Set155791 +-Node: Short156428 +-Node: Single156748 +-Node: Size157093 +-Node: Sleb128157765 +-Node: Skip158087 +-Node: Space158409 +-Node: Stab159048 +-Node: String161050 +-Node: Struct161476 +-Node: SubSection162199 +-Node: Symver162760 +-Node: Tag165151 +-Node: Text165531 +-Node: Title165850 +-Node: Type166229 +-Node: Uleb128167306 +-Node: Val167630 +-Node: Version167880 +-Node: VTableEntry168155 +-Node: VTableInherit168445 +-Node: Warning168891 +-Node: Weak169125 +-Node: Weakref169794 +-Node: Word170759 +-Node: Deprecated172605 +-Node: Machine Dependencies172840 +-Node: Alpha-Dependent175604 +-Node: Alpha Notes176018 +-Node: Alpha Options176299 +-Node: Alpha Syntax178497 +-Node: Alpha-Chars178966 +-Node: Alpha-Regs179197 +-Node: Alpha-Relocs179584 +-Node: Alpha Floating Point185842 +-Node: Alpha Directives186064 +-Node: Alpha Opcodes191587 +-Node: ARC-Dependent191882 +-Node: ARC Options192265 +-Node: ARC Syntax193334 +-Node: ARC-Chars193566 +-Node: ARC-Regs193698 +-Node: ARC Floating Point193822 +-Node: ARC Directives194133 +-Node: ARC Opcodes200104 +-Node: ARM-Dependent200330 +-Node: ARM Options200757 +-Node: ARM Syntax206551 +-Node: ARM-Chars206783 +-Node: ARM-Regs207307 +-Node: ARM Floating Point207492 +-Node: ARM Directives207691 +-Node: ARM Opcodes214055 +-Node: ARM Mapping Symbols216143 +-Node: BFIN-Dependent216922 +-Node: BFIN Syntax217176 +-Node: BFIN Directives222873 +-Node: CRIS-Dependent223280 +-Node: CRIS-Opts223626 +-Ref: march-option225244 +-Node: CRIS-Expand227061 +-Node: CRIS-Symbols228244 +-Node: CRIS-Syntax229413 +-Node: CRIS-Chars229749 +-Node: CRIS-Pic230300 +-Ref: crispic230496 +-Node: CRIS-Regs234036 +-Node: CRIS-Pseudos234453 +-Ref: crisnous235229 +-Node: D10V-Dependent236511 +-Node: D10V-Opts236862 +-Node: D10V-Syntax237825 +-Node: D10V-Size238354 +-Node: D10V-Subs239327 +-Node: D10V-Chars240362 +-Node: D10V-Regs241966 +-Node: D10V-Addressing243011 +-Node: D10V-Word243697 +-Node: D10V-Float244212 +-Node: D10V-Opcodes244523 +-Node: D30V-Dependent244916 +-Node: D30V-Opts245269 +-Node: D30V-Syntax245944 +-Node: D30V-Size246476 +-Node: D30V-Subs247447 +-Node: D30V-Chars248482 +-Node: D30V-Guarded250780 +-Node: D30V-Regs251460 +-Node: D30V-Addressing252599 +-Node: D30V-Float253267 +-Node: D30V-Opcodes253578 +-Node: H8/300-Dependent253971 +-Node: H8/300 Options254381 +-Node: H8/300 Syntax254590 +-Node: H8/300-Chars254889 +-Node: H8/300-Regs255186 +-Node: H8/300-Addressing256103 +-Node: H8/300 Floating Point257142 +-Node: H8/300 Directives257467 +-Node: H8/300 Opcodes258593 +-Node: HPPA-Dependent266913 +-Node: HPPA Notes267346 +-Node: HPPA Options268102 +-Node: HPPA Syntax268295 +-Node: HPPA Floating Point269563 +-Node: HPPA Directives269767 +-Node: HPPA Opcodes278451 +-Node: ESA/390-Dependent278708 +-Node: ESA/390 Notes279168 +-Node: ESA/390 Options279959 +-Node: ESA/390 Syntax280169 +-Node: ESA/390 Floating Point282342 +-Node: ESA/390 Directives282621 +-Node: ESA/390 Opcodes285910 +-Node: i386-Dependent286172 +-Node: i386-Options287240 +-Node: i386-Syntax288430 +-Node: i386-Mnemonics290844 +-Node: i386-Regs293309 +-Node: i386-Prefixes295354 +-Node: i386-Memory298114 +-Node: i386-Jumps301051 +-Node: i386-Float302172 +-Node: i386-SIMD304001 +-Node: i386-16bit305110 +-Node: i386-Bugs307148 +-Node: i386-Arch307902 +-Node: i386-Notes310083 +-Node: i860-Dependent310941 +-Node: Notes-i860311337 +-Node: Options-i860312242 +-Node: Directives-i860313605 +-Node: Opcodes for i860314674 +-Node: i960-Dependent316841 +-Node: Options-i960317244 +-Node: Floating Point-i960321128 +-Node: Directives-i960321396 +-Node: Opcodes for i960323430 +-Node: callj-i960324047 +-Node: Compare-and-branch-i960324536 +-Node: IA-64-Dependent326440 +-Node: IA-64 Options326741 +-Node: IA-64 Syntax329901 +-Node: IA-64-Chars330264 +-Node: IA-64-Regs330494 +-Node: IA-64-Bits331420 +-Node: IA-64 Opcodes331929 +-Node: IP2K-Dependent332201 +-Node: IP2K-Opts332429 +-Node: M32C-Dependent332909 +-Node: M32C-Opts333433 +-Node: M32C-Modifiers333717 +-Node: M32R-Dependent335504 +-Node: M32R-Opts335825 +-Node: M32R-Directives339991 +-Node: M32R-Warnings343966 +-Node: M68K-Dependent346972 +-Node: M68K-Opts347439 +-Node: M68K-Syntax354818 +-Node: M68K-Moto-Syntax356657 +-Node: M68K-Float359246 +-Node: M68K-Directives359766 +-Node: M68K-opcodes361092 +-Node: M68K-Branch361318 +-Node: M68K-Chars365516 +-Node: M68HC11-Dependent365929 +-Node: M68HC11-Opts366460 +-Node: M68HC11-Syntax370276 +-Node: M68HC11-Modifiers372490 +-Node: M68HC11-Directives374318 +-Node: M68HC11-Float375694 +-Node: M68HC11-opcodes376222 +-Node: M68HC11-Branch376404 +-Node: MIPS-Dependent378851 +-Node: MIPS Opts379941 +-Node: MIPS Object387268 +-Node: MIPS Stabs388834 +-Node: MIPS symbol sizes389556 +-Node: MIPS ISA391225 +-Node: MIPS autoextend392374 +-Node: MIPS insn393104 +-Node: MIPS option stack393601 +-Node: MIPS ASE instruction generation overrides394375 +-Node: MMIX-Dependent395592 +-Node: MMIX-Opts395972 +-Node: MMIX-Expand399576 +-Node: MMIX-Syntax400891 +-Ref: mmixsite401248 +-Node: MMIX-Chars402089 +-Node: MMIX-Symbols402743 +-Node: MMIX-Regs404811 +-Node: MMIX-Pseudos405836 +-Ref: MMIX-loc405977 +-Ref: MMIX-local407057 +-Ref: MMIX-is407589 +-Ref: MMIX-greg407860 +-Ref: GREG-base408779 +-Ref: MMIX-byte410096 +-Ref: MMIX-constants410567 +-Ref: MMIX-prefix411213 +-Ref: MMIX-spec411587 +-Node: MMIX-mmixal411921 +-Node: MSP430-Dependent415418 +-Node: MSP430 Options415884 +-Node: MSP430 Syntax416170 +-Node: MSP430-Macros416486 +-Node: MSP430-Chars417217 +-Node: MSP430-Regs417530 +-Node: MSP430-Ext418090 +-Node: MSP430 Floating Point419911 +-Node: MSP430 Directives420135 +-Node: MSP430 Opcodes420926 +-Node: MSP430 Profiling Capability421321 +-Node: PDP-11-Dependent423650 +-Node: PDP-11-Options424039 +-Node: PDP-11-Pseudos429110 +-Node: PDP-11-Syntax429455 +-Node: PDP-11-Mnemonics430206 +-Node: PDP-11-Synthetic430508 +-Node: PJ-Dependent430726 +-Node: PJ Options430951 +-Node: PPC-Dependent431228 +-Node: PowerPC-Opts431515 +-Node: PowerPC-Pseudo433590 +-Node: SH-Dependent434189 +-Node: SH Options434601 +-Node: SH Syntax435529 +-Node: SH-Chars435802 +-Node: SH-Regs436096 +-Node: SH-Addressing436710 +-Node: SH Floating Point437619 +-Node: SH Directives438713 +-Node: SH Opcodes439083 +-Node: SH64-Dependent443405 +-Node: SH64 Options443768 +-Node: SH64 Syntax445485 +-Node: SH64-Chars445768 +-Node: SH64-Regs446068 +-Node: SH64-Addressing447164 +-Node: SH64 Directives448347 +-Node: SH64 Opcodes449457 +-Node: Sparc-Dependent450173 +-Node: Sparc-Opts450558 +-Node: Sparc-Aligned-Data452815 +-Node: Sparc-Float453670 +-Node: Sparc-Directives453871 +-Node: TIC54X-Dependent455831 +-Node: TIC54X-Opts456557 +-Node: TIC54X-Block457600 +-Node: TIC54X-Env457960 +-Node: TIC54X-Constants458308 +-Node: TIC54X-Subsyms458710 +-Node: TIC54X-Locals460619 +-Node: TIC54X-Builtins461363 +-Node: TIC54X-Ext463834 +-Node: TIC54X-Directives464405 +-Node: TIC54X-Macros475307 +-Node: TIC54X-MMRegs477417 +-Node: Z80-Dependent477633 +-Node: Z80 Options478021 +-Node: Z80 Syntax479444 +-Node: Z80-Chars480116 +-Node: Z80-Regs480649 +-Node: Z80-Case481001 +-Node: Z80 Floating Point481446 +-Node: Z80 Directives481640 +-Node: Z80 Opcodes483265 +-Node: Z8000-Dependent484607 +-Node: Z8000 Options485568 +-Node: Z8000 Syntax485785 +-Node: Z8000-Chars486075 +-Node: Z8000-Regs486308 +-Node: Z8000-Addressing487098 +-Node: Z8000 Directives488215 +-Node: Z8000 Opcodes489824 +-Node: Vax-Dependent499766 +-Node: VAX-Opts500283 +-Node: VAX-float504018 +-Node: VAX-directives504650 +-Node: VAX-opcodes505511 +-Node: VAX-branch505900 +-Node: VAX-operands508407 +-Node: VAX-no509170 +-Node: V850-Dependent509407 +-Node: V850 Options509805 +-Node: V850 Syntax512194 +-Node: V850-Chars512434 +-Node: V850-Regs512599 +-Node: V850 Floating Point514167 +-Node: V850 Directives514373 +-Node: V850 Opcodes515516 +-Node: Xtensa-Dependent521408 +-Node: Xtensa Options522137 +-Node: Xtensa Syntax524908 +-Node: Xtensa Opcodes526797 +-Node: Xtensa Registers528591 +-Node: Xtensa Optimizations529224 +-Node: Density Instructions529676 +-Node: Xtensa Automatic Alignment530778 +-Node: Xtensa Relaxation533524 +-Node: Xtensa Branch Relaxation534432 +-Node: Xtensa Call Relaxation535804 +-Node: Xtensa Immediate Relaxation537590 +-Node: Xtensa Directives540164 +-Node: Schedule Directive541872 +-Node: Longcalls Directive542212 +-Node: Transform Directive542756 +-Node: Literal Directive543498 +-Node: Literal Position Directive545283 +-Node: Literal Prefix Directive546982 +-Node: Absolute Literals Directive549145 +-Node: Reporting Bugs550452 +-Node: Bug Criteria551176 +-Node: Bug Reporting551941 +-Node: Acknowledgements558574 +-Ref: Acknowledgements-Footnote-1563472 +-Node: GNU Free Documentation License563498 +-Node: Index583225 ++Node: Top912 ++Node: Overview1829 ++Node: Manual28321 ++Node: GNU Assembler29265 ++Node: Object Formats30436 ++Node: Command Line30888 ++Node: Input Files31975 ++Node: Object33956 ++Node: Errors34852 ++Node: Invoking36047 ++Node: a37996 ++Node: alternate39768 ++Node: D39940 ++Node: f40173 ++Node: I40681 ++Node: K41225 ++Node: L41528 ++Node: listing42365 ++Node: M43957 ++Node: MD48358 ++Node: o48784 ++Node: R49239 ++Node: statistics50269 ++Node: traditional-format50676 ++Node: v51149 ++Node: W51424 ++Node: Z52331 ++Node: Syntax52853 ++Node: Preprocessing53444 ++Node: Whitespace55007 ++Node: Comments55403 ++Node: Symbol Intro57556 ++Node: Statements58246 ++Node: Constants60162 ++Node: Characters60793 ++Node: Strings61295 ++Node: Chars63461 ++Node: Numbers64215 ++Node: Integers64755 ++Node: Bignums65411 ++Node: Flonums65767 ++Node: Sections67514 ++Node: Secs Background67892 ++Node: Ld Sections72931 ++Node: As Sections75315 ++Node: Sub-Sections76225 ++Node: bss79372 ++Node: Symbols80322 ++Node: Labels80970 ++Node: Setting Symbols81701 ++Node: Symbol Names82197 ++Node: Dot86562 ++Node: Symbol Attributes87009 ++Node: Symbol Value87746 ++Node: Symbol Type88791 ++Node: a.out Symbols89179 ++Node: Symbol Desc89441 ++Node: Symbol Other89736 ++Node: COFF Symbols89905 ++Node: SOM Symbols90578 ++Node: Expressions91020 ++Node: Empty Exprs91769 ++Node: Integer Exprs92116 ++Node: Arguments92511 ++Node: Operators93617 ++Node: Prefix Ops93952 ++Node: Infix Ops94280 ++Node: Pseudo Ops96670 ++Node: Abort101865 ++Node: ABORT102270 ++Node: Align102457 ++Node: Ascii104739 ++Node: Asciz105048 ++Node: Balign105293 ++Node: Byte107156 ++Node: Comm107394 ++Node: CFI directives108768 ++Node: LNS directives111120 ++Node: Data113197 ++Node: Def113524 ++Node: Desc113756 ++Node: Dim114256 ++Node: Double114513 ++Node: Eject114851 ++Node: Else115026 ++Node: Elseif115322 ++Node: End115612 ++Node: Endef115827 ++Node: Endfunc116004 ++Node: Endif116179 ++Node: Equ116440 ++Node: Equiv116949 ++Node: Eqv117505 ++Node: Err117869 ++Node: Error118180 ++Node: Exitm118625 ++Node: Extern118794 ++Node: Fail119055 ++Node: File119500 ++Node: Fill119977 ++Node: Float120941 ++Node: Func121283 ++Node: Global121873 ++Node: Hidden122623 ++Node: hword123202 ++Node: Ident123530 ++Node: If124104 ++Node: Incbin127163 ++Node: Include127858 ++Node: Int128409 ++Node: Internal128790 ++Node: Irp129438 ++Node: Irpc130335 ++Node: Lcomm131252 ++Node: Lflags132000 ++Node: Line132194 ++Node: Linkonce133113 ++Node: Ln134342 ++Node: MRI134503 ++Node: List134841 ++Node: Long135449 ++Node: Macro135635 ++Node: Altmacro140198 ++Node: Noaltmacro141528 ++Node: Nolist141696 ++Node: Octa142126 ++Node: Org142460 ++Node: P2align143743 ++Node: Previous145671 ++Node: PopSection146365 ++Node: Print146873 ++Node: Protected147102 ++Node: Psize147749 ++Node: Purgem148433 ++Node: PushSection148654 ++Node: Quad149211 ++Node: Rept149666 ++Node: Sbttl150079 ++Node: Scl150444 ++Node: Section150785 ++Node: Set155925 ++Node: Short156562 ++Node: Single156882 ++Node: Size157227 ++Node: Sleb128157899 ++Node: Skip158221 ++Node: Space158543 ++Node: Stab159182 ++Node: String161184 ++Node: Struct161610 ++Node: SubSection162333 ++Node: Symver162894 ++Node: Tag165285 ++Node: Text165665 ++Node: Title165984 ++Node: Type166363 ++Node: Uleb128167440 ++Node: Val167764 ++Node: Version168014 ++Node: VTableEntry168289 ++Node: VTableInherit168579 ++Node: Warning169025 ++Node: Weak169259 ++Node: Weakref169928 ++Node: Word170893 ++Node: Deprecated172739 ++Node: Machine Dependencies172974 ++Node: Alpha-Dependent175738 ++Node: Alpha Notes176152 ++Node: Alpha Options176433 ++Node: Alpha Syntax178631 ++Node: Alpha-Chars179100 ++Node: Alpha-Regs179331 ++Node: Alpha-Relocs179718 ++Node: Alpha Floating Point185976 ++Node: Alpha Directives186198 ++Node: Alpha Opcodes191721 ++Node: ARC-Dependent192016 ++Node: ARC Options192399 ++Node: ARC Syntax193468 ++Node: ARC-Chars193700 ++Node: ARC-Regs193832 ++Node: ARC Floating Point193956 ++Node: ARC Directives194267 ++Node: ARC Opcodes200238 ++Node: ARM-Dependent200464 ++Node: ARM Options200891 ++Node: ARM Syntax206685 ++Node: ARM-Chars206917 ++Node: ARM-Regs207441 ++Node: ARM Floating Point207626 ++Node: ARM Directives207825 ++Node: ARM Opcodes214189 ++Node: ARM Mapping Symbols216277 ++Node: BFIN-Dependent217056 ++Node: BFIN Syntax217310 ++Node: BFIN Directives223007 ++Node: CRIS-Dependent223414 ++Node: CRIS-Opts223760 ++Ref: march-option225378 ++Node: CRIS-Expand227195 ++Node: CRIS-Symbols228378 ++Node: CRIS-Syntax229547 ++Node: CRIS-Chars229883 ++Node: CRIS-Pic230434 ++Ref: crispic230630 ++Node: CRIS-Regs234170 ++Node: CRIS-Pseudos234587 ++Ref: crisnous235363 ++Node: D10V-Dependent236645 ++Node: D10V-Opts236996 ++Node: D10V-Syntax237959 ++Node: D10V-Size238488 ++Node: D10V-Subs239461 ++Node: D10V-Chars240496 ++Node: D10V-Regs242100 ++Node: D10V-Addressing243145 ++Node: D10V-Word243831 ++Node: D10V-Float244346 ++Node: D10V-Opcodes244657 ++Node: D30V-Dependent245050 ++Node: D30V-Opts245403 ++Node: D30V-Syntax246078 ++Node: D30V-Size246610 ++Node: D30V-Subs247581 ++Node: D30V-Chars248616 ++Node: D30V-Guarded250914 ++Node: D30V-Regs251594 ++Node: D30V-Addressing252733 ++Node: D30V-Float253401 ++Node: D30V-Opcodes253712 ++Node: H8/300-Dependent254105 ++Node: H8/300 Options254515 ++Node: H8/300 Syntax254724 ++Node: H8/300-Chars255023 ++Node: H8/300-Regs255320 ++Node: H8/300-Addressing256237 ++Node: H8/300 Floating Point257276 ++Node: H8/300 Directives257601 ++Node: H8/300 Opcodes258727 ++Node: HPPA-Dependent267047 ++Node: HPPA Notes267480 ++Node: HPPA Options268236 ++Node: HPPA Syntax268429 ++Node: HPPA Floating Point269697 ++Node: HPPA Directives269901 ++Node: HPPA Opcodes278585 ++Node: ESA/390-Dependent278842 ++Node: ESA/390 Notes279302 ++Node: ESA/390 Options280093 ++Node: ESA/390 Syntax280303 ++Node: ESA/390 Floating Point282476 ++Node: ESA/390 Directives282755 ++Node: ESA/390 Opcodes286044 ++Node: i386-Dependent286306 ++Node: i386-Options287374 ++Node: i386-Syntax288564 ++Node: i386-Mnemonics290978 ++Node: i386-Regs293443 ++Node: i386-Prefixes295488 ++Node: i386-Memory298248 ++Node: i386-Jumps301185 ++Node: i386-Float302306 ++Node: i386-SIMD304135 ++Node: i386-16bit305244 ++Node: i386-Bugs307282 ++Node: i386-Arch308036 ++Node: i386-Notes310217 ++Node: i860-Dependent311075 ++Node: Notes-i860311471 ++Node: Options-i860312376 ++Node: Directives-i860313739 ++Node: Opcodes for i860314808 ++Node: i960-Dependent316975 ++Node: Options-i960317378 ++Node: Floating Point-i960321262 ++Node: Directives-i960321530 ++Node: Opcodes for i960323564 ++Node: callj-i960324181 ++Node: Compare-and-branch-i960324670 ++Node: IA-64-Dependent326574 ++Node: IA-64 Options326875 ++Node: IA-64 Syntax330035 ++Node: IA-64-Chars330398 ++Node: IA-64-Regs330628 ++Node: IA-64-Bits331554 ++Node: IA-64 Opcodes332063 ++Node: IP2K-Dependent332335 ++Node: IP2K-Opts332563 ++Node: M32C-Dependent333043 ++Node: M32C-Opts333567 ++Node: M32C-Modifiers333851 ++Node: M32R-Dependent335638 ++Node: M32R-Opts335959 ++Node: M32R-Directives340125 ++Node: M32R-Warnings344100 ++Node: M68K-Dependent347106 ++Node: M68K-Opts347573 ++Node: M68K-Syntax354952 ++Node: M68K-Moto-Syntax356791 ++Node: M68K-Float359380 ++Node: M68K-Directives359900 ++Node: M68K-opcodes361226 ++Node: M68K-Branch361452 ++Node: M68K-Chars365650 ++Node: M68HC11-Dependent366063 ++Node: M68HC11-Opts366594 ++Node: M68HC11-Syntax370410 ++Node: M68HC11-Modifiers372624 ++Node: M68HC11-Directives374452 ++Node: M68HC11-Float375828 ++Node: M68HC11-opcodes376356 ++Node: M68HC11-Branch376538 ++Node: MIPS-Dependent378985 ++Node: MIPS Opts380075 ++Node: MIPS Object387402 ++Node: MIPS Stabs388968 ++Node: MIPS symbol sizes389690 ++Node: MIPS ISA391359 ++Node: MIPS autoextend392508 ++Node: MIPS insn393238 ++Node: MIPS option stack393735 ++Node: MIPS ASE instruction generation overrides394509 ++Node: MMIX-Dependent395726 ++Node: MMIX-Opts396106 ++Node: MMIX-Expand399710 ++Node: MMIX-Syntax401025 ++Ref: mmixsite401382 ++Node: MMIX-Chars402223 ++Node: MMIX-Symbols402877 ++Node: MMIX-Regs404945 ++Node: MMIX-Pseudos405970 ++Ref: MMIX-loc406111 ++Ref: MMIX-local407191 ++Ref: MMIX-is407723 ++Ref: MMIX-greg407994 ++Ref: GREG-base408913 ++Ref: MMIX-byte410230 ++Ref: MMIX-constants410701 ++Ref: MMIX-prefix411347 ++Ref: MMIX-spec411721 ++Node: MMIX-mmixal412055 ++Node: MSP430-Dependent415552 ++Node: MSP430 Options416018 ++Node: MSP430 Syntax416304 ++Node: MSP430-Macros416620 ++Node: MSP430-Chars417351 ++Node: MSP430-Regs417664 ++Node: MSP430-Ext418224 ++Node: MSP430 Floating Point420045 ++Node: MSP430 Directives420269 ++Node: MSP430 Opcodes421060 ++Node: MSP430 Profiling Capability421455 ++Node: PDP-11-Dependent423784 ++Node: PDP-11-Options424173 ++Node: PDP-11-Pseudos429244 ++Node: PDP-11-Syntax429589 ++Node: PDP-11-Mnemonics430340 ++Node: PDP-11-Synthetic430642 ++Node: PJ-Dependent430860 ++Node: PJ Options431085 ++Node: PPC-Dependent431362 ++Node: PowerPC-Opts431649 ++Node: PowerPC-Pseudo433724 ++Node: SH-Dependent434323 ++Node: SH Options434735 ++Node: SH Syntax435663 ++Node: SH-Chars435936 ++Node: SH-Regs436230 ++Node: SH-Addressing436844 ++Node: SH Floating Point437753 ++Node: SH Directives438847 ++Node: SH Opcodes439217 ++Node: SH64-Dependent443539 ++Node: SH64 Options443902 ++Node: SH64 Syntax445619 ++Node: SH64-Chars445902 ++Node: SH64-Regs446202 ++Node: SH64-Addressing447298 ++Node: SH64 Directives448481 ++Node: SH64 Opcodes449591 ++Node: Sparc-Dependent450307 ++Node: Sparc-Opts450692 ++Node: Sparc-Aligned-Data452949 ++Node: Sparc-Float453804 ++Node: Sparc-Directives454005 ++Node: TIC54X-Dependent455965 ++Node: TIC54X-Opts456691 ++Node: TIC54X-Block457734 ++Node: TIC54X-Env458094 ++Node: TIC54X-Constants458442 ++Node: TIC54X-Subsyms458844 ++Node: TIC54X-Locals460753 ++Node: TIC54X-Builtins461497 ++Node: TIC54X-Ext463968 ++Node: TIC54X-Directives464539 ++Node: TIC54X-Macros475441 ++Node: TIC54X-MMRegs477551 ++Node: Z80-Dependent477767 ++Node: Z80 Options478155 ++Node: Z80 Syntax479578 ++Node: Z80-Chars480250 ++Node: Z80-Regs480783 ++Node: Z80-Case481135 ++Node: Z80 Floating Point481580 ++Node: Z80 Directives481774 ++Node: Z80 Opcodes483399 ++Node: Z8000-Dependent484741 ++Node: Z8000 Options485702 ++Node: Z8000 Syntax485919 ++Node: Z8000-Chars486209 ++Node: Z8000-Regs486442 ++Node: Z8000-Addressing487232 ++Node: Z8000 Directives488349 ++Node: Z8000 Opcodes489958 ++Node: Vax-Dependent499900 ++Node: VAX-Opts500417 ++Node: VAX-float504152 ++Node: VAX-directives504784 ++Node: VAX-opcodes505645 ++Node: VAX-branch506034 ++Node: VAX-operands508541 ++Node: VAX-no509304 ++Node: V850-Dependent509541 ++Node: V850 Options509939 ++Node: V850 Syntax512328 ++Node: V850-Chars512568 ++Node: V850-Regs512733 ++Node: V850 Floating Point514301 ++Node: V850 Directives514507 ++Node: V850 Opcodes515650 ++Node: Xtensa-Dependent521542 ++Node: Xtensa Options522271 ++Node: Xtensa Syntax525042 ++Node: Xtensa Opcodes526931 ++Node: Xtensa Registers528725 ++Node: Xtensa Optimizations529358 ++Node: Density Instructions529810 ++Node: Xtensa Automatic Alignment530912 ++Node: Xtensa Relaxation533658 ++Node: Xtensa Branch Relaxation534566 ++Node: Xtensa Call Relaxation535938 ++Node: Xtensa Immediate Relaxation537724 ++Node: Xtensa Directives540298 ++Node: Schedule Directive542006 ++Node: Longcalls Directive542346 ++Node: Transform Directive542890 ++Node: Literal Directive543632 ++Node: Literal Position Directive545417 ++Node: Literal Prefix Directive547116 ++Node: Absolute Literals Directive549279 ++Node: Reporting Bugs550586 ++Node: Bug Criteria551310 ++Node: Bug Reporting552075 ++Node: Acknowledgements558708 ++Ref: Acknowledgements-Footnote-1563606 ++Node: GNU Free Documentation License563632 ++Node: Index583359 +  + End Tag Table +diff -Nrup binutils-2.17/gas/doc/as.texinfo binutils-2.17.atmel.1.3.0/gas/doc/as.texinfo --- binutils-2.17/gas/doc/as.texinfo 2006-04-17 17:16:27.000000000 +0200 -+++ binutils-2.17-atmel/gas/doc/as.texinfo 2007-02-12 15:37:09.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/doc/as.texinfo 2007-03-26 10:19:41.000000000 +0200 @@ -6182,6 +6182,9 @@ subject, see the hardware manufacturer's @ifset ARM * ARM-Dependent:: ARM Dependent Features @@ -57641,10 +47129,10 @@ diff -Nrup binutils-2.17/gas/doc/as.texinfo binutils-2.17-atmel/gas/doc/as.texin @ifset BFIN @include c-bfin.texi @end ifset -diff -Nrup binutils-2.17/gas/doc/c-avr32.texi binutils-2.17-atmel/gas/doc/c-avr32.texi +diff -Nrup binutils-2.17/gas/doc/c-avr32.texi binutils-2.17.atmel.1.3.0/gas/doc/c-avr32.texi --- binutils-2.17/gas/doc/c-avr32.texi 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/doc/c-avr32.texi 2006-09-25 10:30:13.000000000 +0200 -@@ -0,0 +1,247 @@ ++++ binutils-2.17.atmel.1.3.0/gas/doc/c-avr32.texi 2007-09-28 10:30:46.000000000 +0200 +@@ -0,0 +1,254 @@ +@c Copyright 2005, 2006 +@c Atmel Corporation +@c This is part of the GAS manual. @@ -57694,6 +47182,13 @@ diff -Nrup binutils-2.17/gas/doc/c-avr32.texi binutils-2.17-atmel/gas/doc/c-avr3 +as linker-relaxable. It will also ensure that all PC-relative operands +that may change during linker relaxation get appropriate relocations. + ++@cindex @code{--direct-data-refs} command line option, AVR32 ++@item --direct-data-refs ++This option allows direct references (i.e. mov or sub) to the ++data section. This is default not allowed because the actual distance may ++change after the optimization passes are complete and the address and ++size of all sections are considered known. ++ +@end table + + @@ -57892,9 +47387,9 @@ diff -Nrup binutils-2.17/gas/doc/c-avr32.texi binutils-2.17-atmel/gas/doc/c-avr3 +deleting any superfluous constant pool- and GOT-entries. + +@end table -diff -Nrup binutils-2.17/gas/doc/Makefile.am binutils-2.17-atmel/gas/doc/Makefile.am +diff -Nrup binutils-2.17/gas/doc/Makefile.am binutils-2.17.atmel.1.3.0/gas/doc/Makefile.am --- binutils-2.17/gas/doc/Makefile.am 2006-06-03 06:45:50.000000000 +0200 -+++ binutils-2.17-atmel/gas/doc/Makefile.am 2007-02-12 15:37:09.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/doc/Makefile.am 2007-03-26 10:19:41.000000000 +0200 @@ -29,6 +29,7 @@ CPU_DOCS = \ c-alpha.texi \ c-arc.texi \ @@ -57903,82 +47398,9 @@ diff -Nrup binutils-2.17/gas/doc/Makefile.am binutils-2.17-atmel/gas/doc/Makefil c-bfin.texi \ c-d10v.texi \ c-cris.texi \ -diff -Nrup binutils-2.17/gas/doc/Makefile.in binutils-2.17-atmel/gas/doc/Makefile.in ---- binutils-2.17/gas/doc/Makefile.in 2006-06-03 06:45:50.000000000 +0200 -+++ binutils-2.17-atmel/gas/doc/Makefile.in 2007-02-20 16:07:30.000000000 +0100 -@@ -97,6 +97,7 @@ EXEEXT = @EXEEXT@ - GDBINIT = @GDBINIT@ - GMOFILES = @GMOFILES@ - GMSGFMT = @GMSGFMT@ -+GREP = @GREP@ - GT_NO = @GT_NO@ - GT_YES = @GT_YES@ - INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ -@@ -146,9 +147,8 @@ VERSION = @VERSION@ - WARN_CFLAGS = @WARN_CFLAGS@ - XGETTEXT = @XGETTEXT@ - YACC = @YACC@ -+YFLAGS = @YFLAGS@ - ac_ct_CC = @ac_ct_CC@ --ac_ct_RANLIB = @ac_ct_RANLIB@ --ac_ct_STRIP = @ac_ct_STRIP@ - am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ - am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ - am__include = @am__include@ -@@ -167,6 +167,7 @@ cgen_cpu_prefix = @cgen_cpu_prefix@ - datadir = @datadir@ - datarootdir = @datarootdir@ - docdir = @docdir@ -+dvidir = @dvidir@ - exec_prefix = @exec_prefix@ - extra_objects = @extra_objects@ - host = @host@ -@@ -182,13 +183,16 @@ install_tooldir = @install_tooldir@ - l = @l@ - libdir = @libdir@ - libexecdir = @libexecdir@ -+localedir = @localedir@ - localstatedir = @localstatedir@ - mandir = @mandir@ - mkdir_p = @mkdir_p@ - obj_format = @obj_format@ - oldincludedir = @oldincludedir@ -+pdfdir = @pdfdir@ - prefix = @prefix@ - program_transform_name = @program_transform_name@ -+psdir = @psdir@ - sbindir = @sbindir@ - sharedstatedir = @sharedstatedir@ - sysconfdir = @sysconfdir@ -@@ -218,6 +222,7 @@ CPU_DOCS = \ - c-alpha.texi \ - c-arc.texi \ - c-arm.texi \ -+ c-avr32.texi \ - c-bfin.texi \ - c-d10v.texi \ - c-cris.texi \ -@@ -384,10 +389,13 @@ dist-info: $(INFO_DEPS) - $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ - esac; \ - if test -f $$base; then d=.; else d=$(srcdir); fi; \ -- for file in $$d/$$base*; do \ -- relfile=`expr "$$file" : "$$d/\(.*\)"`; \ -- test -f $(distdir)/$$relfile || \ -- cp -p $$file $(distdir)/$$relfile; \ -+ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ -+ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ -+ if test -f $$file; then \ -+ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ -+ test -f $(distdir)/$$relfile || \ -+ cp -p $$file $(distdir)/$$relfile; \ -+ else :; fi; \ - done; \ - done - -diff -Nrup binutils-2.17/gas/Makefile.am binutils-2.17-atmel/gas/Makefile.am +diff -Nrup binutils-2.17/gas/Makefile.am binutils-2.17.atmel.1.3.0/gas/Makefile.am --- binutils-2.17/gas/Makefile.am 2006-04-06 23:49:30.000000000 +0200 -+++ binutils-2.17-atmel/gas/Makefile.am 2007-02-12 15:37:09.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/Makefile.am 2007-03-26 10:20:16.000000000 +0200 @@ -45,6 +45,7 @@ CPU_TYPES = \ arc \ arm \ @@ -58037,117 +47459,9 @@ diff -Nrup binutils-2.17/gas/Makefile.am binutils-2.17-atmel/gas/Makefile.am DEP_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h DEP_cris_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \ -diff -Nrup binutils-2.17/gas/Makefile.in binutils-2.17-atmel/gas/Makefile.in ---- binutils-2.17/gas/Makefile.in 2006-04-17 17:59:40.000000000 +0200 -+++ binutils-2.17-atmel/gas/Makefile.in 2007-02-20 16:07:31.000000000 +0100 -@@ -143,6 +143,7 @@ EXEEXT = @EXEEXT@ - GDBINIT = @GDBINIT@ - GMOFILES = @GMOFILES@ - GMSGFMT = @GMSGFMT@ -+GREP = @GREP@ - GT_NO = @GT_NO@ - GT_YES = @GT_YES@ - INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ -@@ -192,9 +193,8 @@ VERSION = @VERSION@ - WARN_CFLAGS = @WARN_CFLAGS@ - XGETTEXT = @XGETTEXT@ - YACC = `if [ -f ../bison/bison ] ; then echo ../bison/bison -y -L../bison/bison ; else echo @YACC@ ; fi` -+YFLAGS = @YFLAGS@ - ac_ct_CC = @ac_ct_CC@ --ac_ct_RANLIB = @ac_ct_RANLIB@ --ac_ct_STRIP = @ac_ct_STRIP@ - am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ - am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ - am__include = @am__include@ -@@ -213,6 +213,7 @@ cgen_cpu_prefix = @cgen_cpu_prefix@ - datadir = @datadir@ - datarootdir = @datarootdir@ - docdir = @docdir@ -+dvidir = @dvidir@ - exec_prefix = @exec_prefix@ - extra_objects = @extra_objects@ - host = @host@ -@@ -228,13 +229,16 @@ install_tooldir = @install_tooldir@ - l = @l@ - libdir = @libdir@ - libexecdir = @libexecdir@ -+localedir = @localedir@ - localstatedir = @localstatedir@ - mandir = @mandir@ - mkdir_p = @mkdir_p@ - obj_format = @obj_format@ - oldincludedir = @oldincludedir@ -+pdfdir = @pdfdir@ - prefix = @prefix@ - program_transform_name = @program_transform_name@ -+psdir = @psdir@ - sbindir = @sbindir@ - sharedstatedir = @sharedstatedir@ - sysconfdir = @sysconfdir@ -@@ -276,6 +280,7 @@ CPU_TYPES = \ - arc \ - arm \ - avr \ -+ avr32 \ - bfin \ - cris \ - crx \ -@@ -458,6 +463,7 @@ TARGET_CPU_CFILES = \ - config/tc-arc.c \ - config/tc-arm.c \ - config/tc-avr.c \ -+ config/tc-avr32.c \ - config/tc-bfin.c \ - config/tc-cris.c \ - config/tc-crx.c \ -@@ -509,6 +515,7 @@ TARGET_CPU_HFILES = \ - config/tc-arc.h \ - config/tc-arm.h \ - config/tc-avr.h \ -+ config/tc-avr32.h \ - config/tc-bfin.h \ - config/tc-cris.h \ - config/tc-crx.h \ -@@ -798,6 +805,12 @@ DEPTC_avr_elf = $(INCDIR)/symcat.h $(src - dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \ - $(INCDIR)/opcode/avr.h - -+DEPTC_avr32_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \ -+ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ -+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr32.h \ -+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \ -+ $(srcdir)/../opcodes/avr32-opc.h $(srcdir)/../opcodes/avr32-asm.h -+ - DEPTC_bfin_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \ - $(srcdir)/config/tc-bfin.h $(INCDIR)/coff/internal.h \ - $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h struc-symbol.h \ -@@ -1491,6 +1504,12 @@ DEPOBJ_bfin_elf = $(INCDIR)/symcat.h $(s - dwarf2dbg.h $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \ - struc-symbol.h $(INCDIR)/aout/aout64.h - -+DEPOBJ_avr32_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \ -+ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ -+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr32.h \ -+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \ -+ struc-symbol.h dwarf2dbg.h -+ - DEPOBJ_cris_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \ - $(srcdir)/config/tc-cris.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h -@@ -2066,6 +2085,10 @@ DEP_bfin_elf = $(srcdir)/config/obj-elf. - $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h \ - dwarf2dbg.h - -+DEP_avr32_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \ -+ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ -+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr32.h -+ - DEP_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \ - $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h - -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/aliases.d binutils-2.17-atmel/gas/testsuite/gas/avr32/aliases.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/aliases.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/aliases.d --- binutils-2.17/gas/testsuite/gas/avr32/aliases.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/aliases.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/aliases.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,19 @@ +#as: +#objdump: -dr @@ -58168,9 +47482,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/aliases.d binutils-2.17-atmel/g + c: b8 80 [ \t]+st\.b r12\[0x0\],r0 + e: b8 00 [ \t]+st\.h r12\[0x0\],r0 + 10: 99 00 [ \t]+st\.w r12\[0x0\],r0 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/aliases.s binutils-2.17-atmel/gas/testsuite/gas/avr32/aliases.s +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/aliases.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/aliases.s --- binutils-2.17/gas/testsuite/gas/avr32/aliases.s 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/aliases.s 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/aliases.s 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,14 @@ + .text + .global ld_nodisp @@ -58186,9 +47500,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/aliases.s binutils-2.17-atmel/g + st.b r12, r0 + st.h r12, r0 + st.w r12, r0 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/allinsn.d binutils-2.17-atmel/gas/testsuite/gas/avr32/allinsn.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/allinsn.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/allinsn.d --- binutils-2.17/gas/testsuite/gas/avr32/allinsn.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/allinsn.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/allinsn.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,2900 @@ +#as: +#objdump: -dr @@ -61090,18 +50404,18 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/allinsn.d binutils-2.17-atmel/g + *[0-9a-f]*: ff df d3 e0 bfins pc,pc,0x1f,0x0 + *[0-9a-f]*: ef d8 d1 f0 bfins r7,r8,0xf,0x10 + *[0-9a-f]*: f1 d7 d2 0f bfins r8,r7,0x10,0xf -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/allinsn.exp binutils-2.17-atmel/gas/testsuite/gas/avr32/allinsn.exp +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/allinsn.exp binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/allinsn.exp --- binutils-2.17/gas/testsuite/gas/avr32/allinsn.exp 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/allinsn.exp 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/allinsn.exp 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,5 @@ +# AVR32 assembler testsuite. -*- Tcl -*- + +if [istarget avr32-*-*] { + run_dump_test "allinsn" +} -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/allinsn.s binutils-2.17-atmel/gas/testsuite/gas/avr32/allinsn.s +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/allinsn.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/allinsn.s --- binutils-2.17/gas/testsuite/gas/avr32/allinsn.s 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/allinsn.s 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/allinsn.s 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,3242 @@ + .data +foodata: .word 42 @@ -64345,9 +53659,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/allinsn.s binutils-2.17-atmel/g + bfins pc,pc,31,0 + bfins r7,r8,15,16 + bfins r8,r7,16,15 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/avr32.exp binutils-2.17-atmel/gas/testsuite/gas/avr32/avr32.exp +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/avr32.exp binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/avr32.exp --- binutils-2.17/gas/testsuite/gas/avr32/avr32.exp 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/avr32.exp 2006-10-03 17:19:02.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/avr32.exp 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,23 @@ +# AVR32 assembler testsuite. -*- Tcl -*- + @@ -64372,9 +53686,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/avr32.exp binutils-2.17-atmel/g + run_dump_test "symdiff" + run_dump_test "symdiff_linkrelax" +} -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call_nopic.d binutils-2.17-atmel/gas/testsuite/gas/avr32/call_nopic.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call_nopic.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call_nopic.d --- binutils-2.17/gas/testsuite/gas/avr32/call_nopic.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/call_nopic.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call_nopic.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,36 @@ +#source: call.s +#as: @@ -64412,9 +53726,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call_nopic.d binutils-2.17-atme + +00000000 : + 0: e2 c0 00 00 sub r0,r1,0 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call_nopic_linkrelax.d binutils-2.17-atmel/gas/testsuite/gas/avr32/call_nopic_linkrelax.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call_nopic_linkrelax.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call_nopic_linkrelax.d --- binutils-2.17/gas/testsuite/gas/avr32/call_nopic_linkrelax.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/call_nopic_linkrelax.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call_nopic_linkrelax.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,43 @@ +#source: call.s +#as: --linkrelax @@ -64459,9 +53773,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call_nopic_linkrelax.d binutils + +00000000 : + 0: e2 c0 00 00 sub r0,r1,0 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call_pic.d binutils-2.17-atmel/gas/testsuite/gas/avr32/call_pic.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call_pic.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call_pic.d --- binutils-2.17/gas/testsuite/gas/avr32/call_pic.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/call_pic.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call_pic.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,36 @@ +#source: call.s +#as: --pic @@ -64499,9 +53813,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call_pic.d binutils-2.17-atmel/ + +00000000 : + 0: e2 c0 00 00 sub r0,r1,0 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call_pic_linkrelax.d binutils-2.17-atmel/gas/testsuite/gas/avr32/call_pic_linkrelax.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call_pic_linkrelax.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call_pic_linkrelax.d --- binutils-2.17/gas/testsuite/gas/avr32/call_pic_linkrelax.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/call_pic_linkrelax.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call_pic_linkrelax.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,47 @@ +#source: call.s +#as: --pic --linkrelax @@ -64550,9 +53864,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call_pic_linkrelax.d binutils-2 + +00000000 : + 0: e2 c0 00 00 sub r0,r1,0 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call.s binutils-2.17-atmel/gas/testsuite/gas/avr32/call.s +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call.s --- binutils-2.17/gas/testsuite/gas/avr32/call.s 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/call.s 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/call.s 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,30 @@ + + .text @@ -64584,9 +53898,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/call.s binutils-2.17-atmel/gas/ + .section .text.init,"ax",@progbits +different_section: + sub r0, r1, 0 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/dwarf2.d binutils-2.17-atmel/gas/testsuite/gas/avr32/dwarf2.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/dwarf2.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/dwarf2.d --- binutils-2.17/gas/testsuite/gas/avr32/dwarf2.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/dwarf2.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/dwarf2.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,42 @@ +#readelf: -wl +#name: dwarf2 @@ -64630,9 +53944,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/dwarf2.d binutils-2.17-atmel/ga + Special opcode .*: advance Address by 10 to 0xe and Line by 1 to 112 + Advance PC by 530 to 220 + Extended opcode 1: End of Sequence -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/dwarf2.s binutils-2.17-atmel/gas/testsuite/gas/avr32/dwarf2.s +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/dwarf2.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/dwarf2.s --- binutils-2.17/gas/testsuite/gas/avr32/dwarf2.s 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/dwarf2.s 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/dwarf2.s 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,67 @@ +# Source file used to test DWARF2 information for AVR32. + @@ -64701,9 +54015,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/dwarf2.s binutils-2.17-atmel/ga + .uleb128 0, 0 + + .byte 0 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/fpinsn.d binutils-2.17-atmel/gas/testsuite/gas/avr32/fpinsn.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/fpinsn.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/fpinsn.d --- binutils-2.17/gas/testsuite/gas/avr32/fpinsn.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/fpinsn.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/fpinsn.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,271 @@ +#as: +#objdump: -dr @@ -64976,9 +54290,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/fpinsn.d binutils-2.17-atmel/ga + *[0-9a-f]*: e1 a8 00 f0 cop cp0,cr0,cr15,cr0,0x10 + *[0-9a-f]*: e1 a8 08 70 cop cp0,cr8,cr7,cr0,0x10 + *[0-9a-f]*: e1 a8 06 80 cop cp0,cr6,cr8,cr0,0x10 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/fpinsn.s binutils-2.17-atmel/gas/testsuite/gas/avr32/fpinsn.s +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/fpinsn.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/fpinsn.s --- binutils-2.17/gas/testsuite/gas/avr32/fpinsn.s 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/fpinsn.s 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/fpinsn.s 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,266 @@ + + .text @@ -65246,9 +54560,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/fpinsn.s binutils-2.17-atmel/ga + fcastd.s fr0, fr15 + fcastd.s fr8, fr7 + fcastd.s fr6, fr8 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/hwrd-lwrd.d binutils-2.17-atmel/gas/testsuite/gas/avr32/hwrd-lwrd.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/hwrd-lwrd.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/hwrd-lwrd.d --- binutils-2.17/gas/testsuite/gas/avr32/hwrd-lwrd.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/hwrd-lwrd.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/hwrd-lwrd.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,47 @@ +#as: +#objdump: -dr @@ -65297,9 +54611,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/hwrd-lwrd.d binutils-2.17-atmel + 58: R_AVR32_LO16 \.text\+0x60 + 5c: e0 10 00 00 andl r0,0x0 + 5c: R_AVR32_LO16 extsym1 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/hwrd-lwrd.s binutils-2.17-atmel/gas/testsuite/gas/avr32/hwrd-lwrd.s +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/hwrd-lwrd.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/hwrd-lwrd.s --- binutils-2.17/gas/testsuite/gas/avr32/hwrd-lwrd.s 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/hwrd-lwrd.s 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/hwrd-lwrd.s 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,39 @@ + + .equ sym1, 0x12345678 @@ -65340,9 +54654,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/hwrd-lwrd.s binutils-2.17-atmel + andl r0, lo(extsym1) + +sym2: -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/jmptable.d binutils-2.17-atmel/gas/testsuite/gas/avr32/jmptable.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/jmptable.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/jmptable.d --- binutils-2.17/gas/testsuite/gas/avr32/jmptable.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/jmptable.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/jmptable.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,20 @@ +#source: jmptable.s +#as: @@ -65364,9 +54678,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/jmptable.d binutils-2.17-atmel/ + 12: d7 03 nop + 14: d7 03 nop + 16: d7 03 nop -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/jmptable_linkrelax.d binutils-2.17-atmel/gas/testsuite/gas/avr32/jmptable_linkrelax.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/jmptable_linkrelax.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/jmptable_linkrelax.d --- binutils-2.17/gas/testsuite/gas/avr32/jmptable_linkrelax.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/jmptable_linkrelax.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/jmptable_linkrelax.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,25 @@ +#source: jmptable.s +#as: --linkrelax @@ -65393,9 +54707,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/jmptable_linkrelax.d binutils-2 + 12: d7 03 nop + 14: d7 03 nop + 16: d7 03 nop -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/jmptable.s binutils-2.17-atmel/gas/testsuite/gas/avr32/jmptable.s +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/jmptable.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/jmptable.s --- binutils-2.17/gas/testsuite/gas/avr32/jmptable.s 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/jmptable.s 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/jmptable.s 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,14 @@ + + .text @@ -65411,9 +54725,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/jmptable.s binutils-2.17-atmel/ +1: nop +2: nop +3: nop -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda_nopic.d binutils-2.17-atmel/gas/testsuite/gas/avr32/lda_nopic.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda_nopic.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda_nopic.d --- binutils-2.17/gas/testsuite/gas/avr32/lda_nopic.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/lda_nopic.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda_nopic.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,32 @@ +#source: lda.s +#as: @@ -65447,9 +54761,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda_nopic.d binutils-2.17-atmel + ... +0001001c : + 1001c: fe ce 00 00 sub lr,pc,0 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda_nopic_linkrelax.d binutils-2.17-atmel/gas/testsuite/gas/avr32/lda_nopic_linkrelax.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda_nopic_linkrelax.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda_nopic_linkrelax.d --- binutils-2.17/gas/testsuite/gas/avr32/lda_nopic_linkrelax.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/lda_nopic_linkrelax.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda_nopic_linkrelax.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,41 @@ +#source: lda.s +#as: --linkrelax @@ -65492,9 +54806,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda_nopic_linkrelax.d binutils- + \.\.\. +00010020 : + 10020: fe ce 00 00 sub lr,pc,0 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda_pic.d binutils-2.17-atmel/gas/testsuite/gas/avr32/lda_pic.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda_pic.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda_pic.d --- binutils-2.17/gas/testsuite/gas/avr32/lda_pic.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/lda_pic.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda_pic.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,32 @@ +#source: lda.s +#as: --pic @@ -65528,9 +54842,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda_pic.d binutils-2.17-atmel/g + ... +00010014 : + 10014: fe ce 00 00 sub lr,pc,0 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda_pic_linkrelax.d binutils-2.17-atmel/gas/testsuite/gas/avr32/lda_pic_linkrelax.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda_pic_linkrelax.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda_pic_linkrelax.d --- binutils-2.17/gas/testsuite/gas/avr32/lda_pic_linkrelax.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/lda_pic_linkrelax.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda_pic_linkrelax.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,40 @@ +#source: lda.s +#as: --pic --linkrelax @@ -65572,9 +54886,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda_pic_linkrelax.d binutils-2. + ... +0001002c : + 1002c: fe ce 00 00 sub lr,pc,0 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda.s binutils-2.17-atmel/gas/testsuite/gas/avr32/lda.s +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda.s --- binutils-2.17/gas/testsuite/gas/avr32/lda.s 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/lda.s 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/lda.s 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,30 @@ + + .text @@ -65606,9 +54920,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/lda.s binutils-2.17-atmel/gas/t + .data +different_section: + .long 0x12345678 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pcrel.d binutils-2.17-atmel/gas/testsuite/gas/avr32/pcrel.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pcrel.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pcrel.d --- binutils-2.17/gas/testsuite/gas/avr32/pcrel.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/pcrel.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pcrel.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,64 @@ +#as: +#objdump: -dr @@ -65674,9 +54988,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pcrel.d binutils-2.17-atmel/gas + e: d7 03 nop + 10: e0 a0 .. .. rcall [0-9a-f]+ <.*> + 10: R_AVR32_22H_PCREL \.text\+0xc -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pcrel.s binutils-2.17-atmel/gas/testsuite/gas/avr32/pcrel.s +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pcrel.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pcrel.s --- binutils-2.17/gas/testsuite/gas/avr32/pcrel.s 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/pcrel.s 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pcrel.s 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,57 @@ + + .text @@ -65735,9 +55049,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pcrel.s binutils-2.17-atmel/gas + rcall test_rcall2 + nop + rcall test_rcall2 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pico.d binutils-2.17-atmel/gas/testsuite/gas/avr32/pico.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pico.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pico.d --- binutils-2.17/gas/testsuite/gas/avr32/pico.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/pico.d 2007-01-29 12:21:57.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pico.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,149 @@ +#as: +#objdump: -dr @@ -65888,9 +55202,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pico.d binutils-2.17-atmel/gas/ + *[0-9a-f]*: ed a0 33 01 stcm\.w cp1,--r0,cr8 + *[0-9a-f]*: ed a7 33 80 stcm\.w cp1,--r7,cr15 + *[0-9a-f]*: ed a8 33 7f stcm\.w cp1,--r8,cr8-cr14 -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pico.s binutils-2.17-atmel/gas/testsuite/gas/avr32/pico.s +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pico.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pico.s --- binutils-2.17/gas/testsuite/gas/avr32/pico.s 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/pico.s 2007-01-29 12:21:57.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pico.s 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,144 @@ + + .text @@ -66036,9 +55350,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pico.s binutils-2.17-atmel/gas/ + picostm.w --r0, coeff1_a + picostm.w --r7, config + picostm.w --r8, coeff1_a-vmu2_out -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pic_reloc.d binutils-2.17-atmel/gas/testsuite/gas/avr32/pic_reloc.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pic_reloc.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pic_reloc.d --- binutils-2.17/gas/testsuite/gas/avr32/pic_reloc.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/pic_reloc.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pic_reloc.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,27 @@ +#as: +#objdump: -dr @@ -66067,9 +55381,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pic_reloc.d binutils-2.17-atmel + 18: R_AVR32_GOT16S \.L4 + 1c: ec f0 00 00 ld.w r0,r6\[0\] + 1c: R_AVR32_GOT16S ldw_got -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pic_reloc.s binutils-2.17-atmel/gas/testsuite/gas/avr32/pic_reloc.s +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pic_reloc.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pic_reloc.s --- binutils-2.17/gas/testsuite/gas/avr32/pic_reloc.s 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/pic_reloc.s 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/pic_reloc.s 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,18 @@ + + .text @@ -66089,9 +55403,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/pic_reloc.s binutils-2.17-atmel + ld.w r0,r6[.L4@got] + ld.w r0,r6[ldw_got@got] +.L4: -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/symdiff.d binutils-2.17-atmel/gas/testsuite/gas/avr32/symdiff.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/symdiff.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/symdiff.d --- binutils-2.17/gas/testsuite/gas/avr32/symdiff.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/symdiff.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/symdiff.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,24 @@ +#source: symdiff.s +#as: @@ -66117,9 +55431,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/symdiff.d binutils-2.17-atmel/g + a: d7 03 nop + c: d7 03 nop + e: d7 03 nop -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/symdiff_linkrelax.d binutils-2.17-atmel/gas/testsuite/gas/avr32/symdiff_linkrelax.d +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/symdiff_linkrelax.d binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/symdiff_linkrelax.d --- binutils-2.17/gas/testsuite/gas/avr32/symdiff_linkrelax.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/symdiff_linkrelax.d 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/symdiff_linkrelax.d 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,28 @@ +#source: symdiff.s +#as: --linkrelax @@ -66149,9 +55463,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/symdiff_linkrelax.d binutils-2. + a: d7 03 nop + c: d7 03 nop + e: d7 03 nop -diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/symdiff.s binutils-2.17-atmel/gas/testsuite/gas/avr32/symdiff.s +diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/symdiff.s binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/symdiff.s --- binutils-2.17/gas/testsuite/gas/avr32/symdiff.s 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/gas/testsuite/gas/avr32/symdiff.s 2006-08-04 14:51:13.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/gas/testsuite/gas/avr32/symdiff.s 2007-03-26 10:19:48.000000000 +0200 @@ -0,0 +1,19 @@ + + .text @@ -66172,9 +55486,9 @@ diff -Nrup binutils-2.17/gas/testsuite/gas/avr32/symdiff.s binutils-2.17-atmel/g +.L1: nop + nop +.L2: nop -diff -Nrup binutils-2.17/gas/write.c binutils-2.17-atmel/gas/write.c +diff -Nrup binutils-2.17/gas/write.c binutils-2.17.atmel.1.3.0/gas/write.c --- binutils-2.17/gas/write.c 2006-05-10 15:43:37.000000000 +0200 -+++ binutils-2.17-atmel/gas/write.c 2007-02-12 15:37:09.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/gas/write.c 2007-03-26 10:20:16.000000000 +0200 @@ -126,7 +126,9 @@ static fixS *fix_new_internal (fragS *, offsetT offset, int pcrel, RELOC_ENUM r_type); @@ -66228,9 +55542,9 @@ diff -Nrup binutils-2.17/gas/write.c binutils-2.17-atmel/gas/write.c if (fragP->fr_subtype != 0) { -diff -Nrup binutils-2.17/include/dis-asm.h binutils-2.17-atmel/include/dis-asm.h +diff -Nrup binutils-2.17/include/dis-asm.h binutils-2.17.atmel.1.3.0/include/dis-asm.h --- binutils-2.17/include/dis-asm.h 2006-02-17 15:36:26.000000000 +0100 -+++ binutils-2.17-atmel/include/dis-asm.h 2007-02-12 15:37:09.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/include/dis-asm.h 2007-03-26 10:20:18.000000000 +0200 @@ -223,6 +223,7 @@ extern int print_insn_big_arm (bfd_vma, extern int print_insn_little_arm (bfd_vma, disassemble_info *); extern int print_insn_sparc (bfd_vma, disassemble_info *); @@ -66249,9 +55563,9 @@ diff -Nrup binutils-2.17/include/dis-asm.h binutils-2.17-atmel/include/dis-asm.h extern int get_arm_regname_num_options (void); extern int set_arm_regname_option (int); extern int get_arm_regnames (int, const char **, const char **, const char *const **); -diff -Nrup binutils-2.17/include/elf/avr32.h binutils-2.17-atmel/include/elf/avr32.h +diff -Nrup binutils-2.17/include/elf/avr32.h binutils-2.17.atmel.1.3.0/include/elf/avr32.h --- binutils-2.17/include/elf/avr32.h 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/include/elf/avr32.h 2006-08-04 14:50:43.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/include/elf/avr32.h 2007-03-26 10:20:17.000000000 +0200 @@ -0,0 +1,95 @@ +/* AVR32 ELF support for BFD. + Copyright 2003-2006 Atmel Corporation. @@ -66348,9 +55662,9 @@ diff -Nrup binutils-2.17/include/elf/avr32.h binutils-2.17-atmel/include/elf/avr + +/* The total size in bytes of the Global Offset Table */ +#define DT_AVR32_GOTSZ 0x70000001 -diff -Nrup binutils-2.17/include/elf/common.h binutils-2.17-atmel/include/elf/common.h +diff -Nrup binutils-2.17/include/elf/common.h binutils-2.17.atmel.1.3.0/include/elf/common.h --- binutils-2.17/include/elf/common.h 2006-02-17 15:36:26.000000000 +0100 -+++ binutils-2.17-atmel/include/elf/common.h 2007-02-12 15:37:09.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/include/elf/common.h 2007-03-26 10:20:17.000000000 +0200 @@ -256,6 +256,9 @@ /* V850 backend magic number. Written in the absense of an ABI. */ #define EM_CYGNUS_V850 0x9080 @@ -66361,9 +55675,20 @@ diff -Nrup binutils-2.17/include/elf/common.h binutils-2.17-atmel/include/elf/co /* old S/390 backend magic number. Written in the absence of an ABI. */ #define EM_S390_OLD 0xa390 -diff -Nrup binutils-2.17/ld/config.in binutils-2.17-atmel/ld/config.in +diff -Nrup binutils-2.17/ld/configdoc.texi binutils-2.17.atmel.1.3.0/ld/configdoc.texi +--- binutils-2.17/ld/configdoc.texi 2006-05-10 15:43:46.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/ld/configdoc.texi 2007-09-28 10:30:45.000000000 +0200 +@@ -6,6 +6,7 @@ + @set H8300 + @set I960 + @set ARM ++@set AVR32 + @set HPPA + @set MMIX + @set MSP430 +diff -Nrup binutils-2.17/ld/config.in binutils-2.17.atmel.1.3.0/ld/config.in --- binutils-2.17/ld/config.in 2006-04-16 20:20:30.000000000 +0200 -+++ binutils-2.17-atmel/ld/config.in 2007-02-20 16:07:39.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/config.in 2007-03-26 10:32:23.000000000 +0200 @@ -187,7 +187,7 @@ /* If using the C implementation of alloca, define if you know the @@ -66384,9 +55709,9 @@ diff -Nrup binutils-2.17/ld/config.in binutils-2.17-atmel/ld/config.in -/* Define to `unsigned' if does not define. */ +/* Define to `unsigned int' if does not define. */ #undef size_t -diff -Nrup binutils-2.17/ld/configure binutils-2.17-atmel/ld/configure +diff -Nrup binutils-2.17/ld/configure binutils-2.17.atmel.1.3.0/ld/configure --- binutils-2.17/ld/configure 2006-04-11 12:36:26.000000000 +0200 -+++ binutils-2.17-atmel/ld/configure 2007-02-20 16:07:37.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/configure 2007-03-26 10:32:22.000000000 +0200 @@ -1,25 +1,54 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. @@ -78885,38 +68210,281 @@ diff -Nrup binutils-2.17/ld/configure binutils-2.17-atmel/ld/configure - default ) sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;; + "default":C) sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;; + - esac --done --_ACEOF -+done # for ac_tag - --cat >>$CONFIG_STATUS <<\_ACEOF - - { (exit 0); exit 0; } - _ACEOF -diff -Nrup binutils-2.17/ld/configure.tgt binutils-2.17-atmel/ld/configure.tgt ---- binutils-2.17/ld/configure.tgt 2006-04-05 14:41:57.000000000 +0200 -+++ binutils-2.17-atmel/ld/configure.tgt 2007-02-12 15:37:09.000000000 +0100 -@@ -81,8 +81,10 @@ xscale-*-coff) targ_emul=armcoff ;; - xscale-*-elf) targ_emul=armelf - ;; - avr-*-*) targ_emul=avr2 -- targ_extra_emuls="avr1 avr3 avr4 avr5" -- ;; -+ targ_extra_emuls="avr1 avr3 avr4 avr5" ;; -+avr32-*-none) targ_emul=avr32elf_ap7000 -+ targ_extra_emuls="avr32elf_uc3a0512" ;; -+avr32-*-linux*) targ_emul=avr32linux ;; - bfin-*-elf) targ_emul=elf32bfin; targ_extra_emuls="elf32bfinfd" ;; - bfin-*-uclinux*) targ_emul=elf32bfin; targ_extra_emuls="elf32bfinfd" ;; - cr16c-*-elf*) targ_emul=elf32cr16c -diff -Nrup binutils-2.17/ld/emulparams/avr32elf_ap7000.sh binutils-2.17-atmel/ld/emulparams/avr32elf_ap7000.sh ---- binutils-2.17/ld/emulparams/avr32elf_ap7000.sh 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/ld/emulparams/avr32elf_ap7000.sh 2006-11-10 15:11:19.000000000 +0100 -@@ -0,0 +1,34 @@ -+MACHINE=ap + esac +-done +-_ACEOF ++done # for ac_tag + +-cat >>$CONFIG_STATUS <<\_ACEOF + + { (exit 0); exit 0; } + _ACEOF +diff -Nrup binutils-2.17/ld/configure.tgt binutils-2.17.atmel.1.3.0/ld/configure.tgt +--- binutils-2.17/ld/configure.tgt 2006-04-05 14:41:57.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/ld/configure.tgt 2007-05-31 17:03:35.000000000 +0200 +@@ -81,8 +81,10 @@ xscale-*-coff) targ_emul=armcoff ;; + xscale-*-elf) targ_emul=armelf + ;; + avr-*-*) targ_emul=avr2 +- targ_extra_emuls="avr1 avr3 avr4 avr5" +- ;; ++ targ_extra_emuls="avr1 avr3 avr4 avr5" ;; ++avr32-*-none) targ_emul=avr32elf_ap7000 ++ targ_extra_emuls="avr32elf_uc3a0128 avr32elf_uc3a0256 avr32elf_uc3a0512 avr32elf_uc3a1128 avr32elf_uc3a1256 avr32elf_uc3a1512 avr32elf_uc3b064 avr32elf_uc3b0128 avr32elf_uc3b0256 avr32elf_uc3b164 avr32elf_uc3b1128 avr32elf_uc3b1256" ;; ++avr32-*-linux*) targ_emul=avr32linux ;; + bfin-*-elf) targ_emul=elf32bfin; targ_extra_emuls="elf32bfinfd" ;; + bfin-*-uclinux*) targ_emul=elf32bfin; targ_extra_emuls="elf32bfinfd" ;; + cr16c-*-elf*) targ_emul=elf32cr16c +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_ap7000.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_ap7000.sh +--- binutils-2.17/ld/emulparams/avr32elf_ap7000.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_ap7000.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,35 @@ ++MACHINE=ap ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0xa0000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH ++ . = . & 0x9fffffff;" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai) : ORIGIN = 0x00000000, LENGTH = 0x4000000 ++ SRAM (rwxa) : ORIGIN = 0x24000000, LENGTH = 0x8000 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="SRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(SRAM) + LENGTH(SRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf.sh +--- binutils-2.17/ld/emulparams/avr32elf.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,25 @@ ++MACHINE= ++SCRIPT_NAME=elf ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++TEXT_START_ADDR=0xa0000000 ++ARCH=avr32 ++MAXPAGESIZE=0x4 ++ENTRY=_start ++EMBEDDED=yes ++NOP=0xd703d703 ++INITIAL_READONLY_SECTIONS=".reset : AT(0x0) { *(.reset) } ++ . = . & 0x9fffffff;" ++DATA_START_SYMBOLS="__data_init_start__ = .; ++ __data_init_end__ = .; ++ __data_start__ = .;" ++ ++OTHER_BSS_SYMBOLS='__bss_start__ = .;' ++OTHER_BSS_END_SYMBOLS="_bss_end__ = . ; __bss_end__ = . ; __end__ = . ; ++ . = ALIGN(16); ++ __heap_start__ = .; ++ __heap_end__ = 0x82000000;" ++ ++STACK_ADDR=0x82000000 ++ +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3a0128.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a0128.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3a0128.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a0128.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,40 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x20000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x8000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" ++ +\ No newline at end of file +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3a0256.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a0256.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3a0256.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a0256.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x40000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x10000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3a0512.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a0512.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3a0512.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a0512.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x80000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x10000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3a1128.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a1128.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3a1128.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a1128.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x20000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x8000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3a1256.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a1256.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3a1256.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a1256.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ ++MACHINE=uc +SCRIPT_NAME=elf_xip +TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf +OUTPUT_FORMAT="elf32-avr32" +ARCH=avr32 +MAXPAGESIZE=4096 @@ -78925,64 +68493,84 @@ diff -Nrup binutils-2.17/ld/emulparams/avr32elf_ap7000.sh binutils-2.17-atmel/ld +NO_SMALL_DATA=yes +NOP=0xd703d703 + -+TEXT_START_ADDR=0xa0000000 ++TEXT_START_ADDR=0x80000000 +DATA_SEGMENT_ALIGN=8 +BSS_ALIGNMENT=8 + -+INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH -+ . = . & 0x1fffffff;" ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" + +MEMORY="MEMORY + { -+ FLASH (rxai) : ORIGIN = 0x00000000, LENGTH = 0x4000000 -+ SRAM (rwxa) : ORIGIN = 0x24000000, LENGTH = 0x8000 ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x40000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x10000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 + }" +RO_LMA_REGION="FLASH" +RO_VMA_REGION="FLASH" +RW_LMA_REGION="FLASH" -+RW_VMA_REGION="SRAM" ++RW_VMA_REGION="INTRAM" + +STACK_SIZE=0x1000 -+STACK_ADDR="ORIGIN(SRAM) + LENGTH(SRAM) - ${STACK_SIZE}" ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" + +DATA_SEGMENT_END="__heap_start__ = ALIGN(8); + . = ${STACK_ADDR}; + __heap_end__ = .;" -diff -Nrup binutils-2.17/ld/emulparams/avr32elf.sh binutils-2.17-atmel/ld/emulparams/avr32elf.sh ---- binutils-2.17/ld/emulparams/avr32elf.sh 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/ld/emulparams/avr32elf.sh 2006-08-04 14:51:23.000000000 +0200 -@@ -0,0 +1,24 @@ -+MACHINE= -+SCRIPT_NAME=elf ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3a1512.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a1512.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3a1512.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3a1512.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip +TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf +OUTPUT_FORMAT="elf32-avr32" -+TEXT_START_ADDR=0xa0000000 +ARCH=avr32 -+MAXPAGESIZE=0x4 ++MAXPAGESIZE=4096 +ENTRY=_start +EMBEDDED=yes ++NO_SMALL_DATA=yes +NOP=0xd703d703 -+INITIAL_READONLY_SECTIONS=".reset : AT(0x0) { *(.reset) } -+ . = . & 0x1fffffff;" -+DATA_START_SYMBOLS="__data_init_start__ = .; -+ __data_init_end__ = .; -+ __data_start__ = .;" + -+OTHER_BSS_SYMBOLS='__bss_start__ = .;' -+OTHER_BSS_END_SYMBOLS="_bss_end__ = . ; __bss_end__ = . ; __end__ = . ; -+ . = ALIGN(16); -+ __heap_start__ = .; -+ __heap_end__ = 0x82000000;" ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 + -+STACK_ADDR=0x82000000 ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" + -diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3a0512.sh binutils-2.17-atmel/ld/emulparams/avr32elf_uc3a0512.sh ---- binutils-2.17/ld/emulparams/avr32elf_uc3a0512.sh 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/ld/emulparams/avr32elf_uc3a0512.sh 2006-11-10 15:11:19.000000000 +0100 -@@ -0,0 +1,34 @@ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x80000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x10000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3b0128.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b0128.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3b0128.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b0128.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ +MACHINE=uc +SCRIPT_NAME=elf_xip +TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf +OUTPUT_FORMAT="elf32-avr32" +ARCH=avr32 +MAXPAGESIZE=4096 @@ -78995,13 +68583,231 @@ diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3a0512.sh binutils-2.17-atmel/ +DATA_SEGMENT_ALIGN=8 +BSS_ALIGNMENT=8 + -+INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH -+ . = . & 0x1fffffff;" ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x20000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x8000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3b0256.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b0256.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3b0256.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b0256.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,40 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x40000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x8000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" ++ +\ No newline at end of file +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3b064.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b064.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3b064.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b064.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x10000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x4000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3b1128.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b1128.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3b1128.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b1128.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x20000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x8000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3b1256.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b1256.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3b1256.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b1256.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,39 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" ++ ++MEMORY="MEMORY ++ { ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x40000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x8000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 ++ }" ++RO_LMA_REGION="FLASH" ++RO_VMA_REGION="FLASH" ++RW_LMA_REGION="FLASH" ++RW_VMA_REGION="INTRAM" ++ ++STACK_SIZE=0x1000 ++STACK_ADDR="ORIGIN(INTRAM) + LENGTH(INTRAM) - ${STACK_SIZE}" ++ ++DATA_SEGMENT_END="__heap_start__ = ALIGN(8); ++ . = ${STACK_ADDR}; ++ __heap_end__ = .;" ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" +diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3b164.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b164.sh +--- binutils-2.17/ld/emulparams/avr32elf_uc3b164.sh 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32elf_uc3b164.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,40 @@ ++MACHINE=uc ++SCRIPT_NAME=elf_xip ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf ++OUTPUT_FORMAT="elf32-avr32" ++ARCH=avr32 ++MAXPAGESIZE=4096 ++ENTRY=_start ++EMBEDDED=yes ++NO_SMALL_DATA=yes ++NOP=0xd703d703 ++ ++TEXT_START_ADDR=0x80000000 ++DATA_SEGMENT_ALIGN=8 ++BSS_ALIGNMENT=8 ++ ++INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" + +MEMORY="MEMORY + { -+ FLASH (rxai) : ORIGIN = 0x80000000, LENGTH = 0x80000 -+ INTRAM (rwxa) : ORIGIN = 0x00000000, LENGTH = 0x10000 ++ FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x10000 ++ INTRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 0x4000 ++ USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x200 ++ FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 0x200 + }" +RO_LMA_REGION="FLASH" +RO_VMA_REGION="FLASH" @@ -79014,13 +68820,19 @@ diff -Nrup binutils-2.17/ld/emulparams/avr32elf_uc3a0512.sh binutils-2.17-atmel/ +DATA_SEGMENT_END="__heap_start__ = ALIGN(8); + . = ${STACK_ADDR}; + __heap_end__ = .;" -diff -Nrup binutils-2.17/ld/emulparams/avr32linux.sh binutils-2.17-atmel/ld/emulparams/avr32linux.sh ++ ++OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE ++ .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" ++ +\ No newline at end of file +diff -Nrup binutils-2.17/ld/emulparams/avr32linux.sh binutils-2.17.atmel.1.3.0/ld/emulparams/avr32linux.sh --- binutils-2.17/ld/emulparams/avr32linux.sh 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/ld/emulparams/avr32linux.sh 2006-08-04 14:51:23.000000000 +0200 -@@ -0,0 +1,13 @@ ++++ binutils-2.17.atmel.1.3.0/ld/emulparams/avr32linux.sh 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,14 @@ +ARCH=avr32 +SCRIPT_NAME=elf +TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE=avr32elf +OUTPUT_FORMAT="elf32-avr32" +GENERATE_SHLIB_SCRIPT=yes +MAXPAGESIZE=0x1000 @@ -79031,36 +68843,20743 @@ diff -Nrup binutils-2.17/ld/emulparams/avr32linux.sh binutils-2.17-atmel/ld/emul +# essential for uClinux. We don't use those .s* sections on AVR32 +# anyway, so it shouldn't hurt for regular Linux either... +NO_SMALL_DATA=yes -diff -Nrup binutils-2.17/ld/Makefile.am binutils-2.17-atmel/ld/Makefile.am +diff -Nrup binutils-2.17/ld/emultempl/avr32elf.em binutils-2.17.atmel.1.3.0/ld/emultempl/avr32elf.em +--- binutils-2.17/ld/emultempl/avr32elf.em 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/emultempl/avr32elf.em 2007-09-28 10:30:44.000000000 +0200 +@@ -0,0 +1,72 @@ ++# This shell script emits a C file. -*- C -*- ++# Copyright (C) 2007 Atmel Corporation ++# ++# This file is part of GLD, the Gnu Linker. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# 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. ++# ++ ++# This file is sourced from elf32.em, and defines extra avr32-elf ++# specific routines. ++# ++ ++cat >> e${EMULATION_NAME}.c <LMA_REGION: Output Section LMA. (line 6) + * automatic data imports: WIN32. (line 170) ++* AVR32 options: AVR32. (line 6) + * back end: BFD. (line 6) + * BASE (MRI): MRI. (line 54) + * BE8: ARM. (line 23) +@@ -6611,81 +6642,161 @@ Index + +  + Tag Table: +-Node: Top347 +-Node: Overview1109 +-Node: Invocation2223 +-Node: Options2631 +-Node: Environment77286 +-Node: Scripts79046 +-Node: Basic Script Concepts80780 +-Node: Script Format83487 +-Node: Simple Example84350 +-Node: Simple Commands87446 +-Node: Entry Point87897 +-Node: File Commands88656 +-Node: Format Commands92522 +-Node: Miscellaneous Commands94488 +-Node: Assignments96718 +-Node: Simple Assignments97209 +-Node: PROVIDE98945 +-Node: PROVIDE_HIDDEN100150 +-Node: Source Code Reference100394 +-Node: SECTIONS103974 +-Node: Output Section Description105865 +-Node: Output Section Name106918 +-Node: Output Section Address107794 +-Node: Input Section109443 +-Node: Input Section Basics110244 +-Node: Input Section Wildcards112596 +-Node: Input Section Common117329 +-Node: Input Section Keep118811 +-Node: Input Section Example119301 +-Node: Output Section Data120269 +-Node: Output Section Keywords123046 +-Node: Output Section Discarding126615 +-Node: Output Section Attributes127571 +-Node: Output Section Type128575 +-Node: Output Section LMA129729 +-Node: Forced Output Alignment132000 +-Node: Forced Input Alignment132268 +-Node: Output Section Region132653 +-Node: Output Section Phdr133083 +-Node: Output Section Fill133747 +-Node: Overlay Description134889 +-Node: MEMORY139137 +-Node: PHDRS143337 +-Node: VERSION148376 +-Node: Expressions156167 +-Node: Constants157045 +-Node: Symbols157606 +-Node: Orphan Sections158344 +-Node: Location Counter159107 +-Node: Operators163411 +-Node: Evaluation164333 +-Node: Expression Section165697 +-Node: Builtin Functions167186 +-Node: Implicit Linker Scripts174678 +-Node: Machine Dependent175453 +-Node: H8/300176314 +-Node: i960177939 +-Node: ARM179624 +-Node: HPPA ELF32182540 +-Node: MMIX184163 +-Node: MSP430185380 +-Node: PowerPC ELF32186428 +-Node: PowerPC64 ELF64188719 +-Node: TI COFF193133 +-Node: WIN32193665 +-Node: Xtensa211739 +-Node: BFD214861 +-Node: BFD outline216316 +-Node: BFD information loss217602 +-Node: Canonical format220119 +-Node: Reporting Bugs224476 +-Node: Bug Criteria225170 +-Node: Bug Reporting225869 +-Node: MRI232894 +-Node: GNU Free Documentation License237537 +-Node: Index257251 ++<<<<<<< .mine ++Node: Top487 ++Node: Overview1249 ++Node: Invocation2363 ++Node: Options2771 ++Node: Environment77426 ++Node: Scripts79186 ++Node: Basic Script Concepts80920 ++Node: Script Format83627 ++Node: Simple Example84490 ++Node: Simple Commands87586 ++Node: Entry Point88037 ++Node: File Commands88796 ++Node: Format Commands92662 ++Node: Miscellaneous Commands94628 ++Node: Assignments96858 ++Node: Simple Assignments97349 ++Node: PROVIDE99085 ++Node: PROVIDE_HIDDEN100290 ++Node: Source Code Reference100534 ++Node: SECTIONS104114 ++Node: Output Section Description106005 ++Node: Output Section Name107058 ++Node: Output Section Address107934 ++Node: Input Section109583 ++Node: Input Section Basics110384 ++Node: Input Section Wildcards112736 ++Node: Input Section Common117469 ++Node: Input Section Keep118951 ++Node: Input Section Example119441 ++Node: Output Section Data120409 ++Node: Output Section Keywords123186 ++Node: Output Section Discarding126755 ++Node: Output Section Attributes127711 ++Node: Output Section Type128715 ++Node: Output Section LMA129869 ++Node: Forced Output Alignment132140 ++Node: Forced Input Alignment132408 ++Node: Output Section Region132793 ++Node: Output Section Phdr133223 ++Node: Output Section Fill133887 ++Node: Overlay Description135029 ++Node: MEMORY139277 ++Node: PHDRS143477 ++Node: VERSION148516 ++Node: Expressions156307 ++Node: Constants157185 ++Node: Symbols157746 ++Node: Orphan Sections158484 ++Node: Location Counter159247 ++Node: Operators163551 ++Node: Evaluation164473 ++Node: Expression Section165837 ++Node: Builtin Functions167326 ++Node: Implicit Linker Scripts174818 ++Node: Machine Dependent175593 ++Node: H8/300176454 ++Node: i960178079 ++Node: ARM179764 ++Node: HPPA ELF32182680 ++Node: MMIX184303 ++Node: MSP430185520 ++Node: PowerPC ELF32186568 ++Node: PowerPC64 ELF64188859 ++Node: TI COFF193273 ++Node: WIN32193805 ++Node: Xtensa211879 ++Node: BFD215001 ++Node: BFD outline216456 ++Node: BFD information loss217742 ++Node: Canonical format220259 ++Node: Reporting Bugs224616 ++Node: Bug Criteria225310 ++Node: Bug Reporting226009 ++Node: MRI233034 ++Node: GNU Free Documentation License237677 ++Node: Index257391 ++======= ++Node: Top331 ++Node: Overview1093 ++Node: Invocation2207 ++Node: Options2615 ++Node: Environment77270 ++Node: Scripts79030 ++Node: Basic Script Concepts80764 ++Node: Script Format83471 ++Node: Simple Example84334 ++Node: Simple Commands87430 ++Node: Entry Point87881 ++Node: File Commands88640 ++Node: Format Commands92506 ++Node: Miscellaneous Commands94472 ++Node: Assignments96702 ++Node: Simple Assignments97193 ++Node: PROVIDE98929 ++Node: PROVIDE_HIDDEN100134 ++Node: Source Code Reference100378 ++Node: SECTIONS103958 ++Node: Output Section Description105849 ++Node: Output Section Name106902 ++Node: Output Section Address107778 ++Node: Input Section109427 ++Node: Input Section Basics110228 ++Node: Input Section Wildcards112580 ++Node: Input Section Common117313 ++Node: Input Section Keep118795 ++Node: Input Section Example119285 ++Node: Output Section Data120253 ++Node: Output Section Keywords123030 ++Node: Output Section Discarding126599 ++Node: Output Section Attributes127555 ++Node: Output Section Type128559 ++Node: Output Section LMA129713 ++Node: Forced Output Alignment131984 ++Node: Forced Input Alignment132252 ++Node: Output Section Region132637 ++Node: Output Section Phdr133067 ++Node: Output Section Fill133731 ++Node: Overlay Description134873 ++Node: MEMORY139121 ++Node: PHDRS143321 ++Node: VERSION148360 ++Node: Expressions156151 ++Node: Constants157029 ++Node: Symbols157590 ++Node: Orphan Sections158328 ++Node: Location Counter159091 ++Node: Operators163395 ++Node: Evaluation164317 ++Node: Expression Section165681 ++Node: Builtin Functions167170 ++Node: Implicit Linker Scripts174662 ++Node: Machine Dependent175437 ++Node: H8/300176357 ++Node: i960177982 ++Node: ARM179667 ++Node: AVR32182578 ++Node: HPPA ELF32183526 ++Node: MMIX185151 ++Node: MSP430186368 ++Node: PowerPC ELF32187416 ++Node: PowerPC64 ELF64189707 ++Node: TI COFF194121 ++Node: WIN32194655 ++Node: Xtensa212729 ++Node: BFD215851 ++Node: BFD outline217306 ++Node: BFD information loss218592 ++Node: Canonical format221109 ++Node: Reporting Bugs225466 ++Node: Bug Criteria226160 ++Node: Bug Reporting226859 ++Node: MRI233884 ++Node: GNU Free Documentation License238527 ++Node: Index258241 ++>>>>>>> .r31496 +  + End Tag Table +diff -Nrup binutils-2.17/ld/ld.info.mine binutils-2.17.atmel.1.3.0/ld/ld.info.mine +--- binutils-2.17/ld/ld.info.mine 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/ld.info.mine 2007-09-28 10:30:44.000000000 +0200 +@@ -0,0 +1,6693 @@ ++This is ++/home/hcegtvedt/svnwork/tools/T0243-GNU_Toolchain/50-Source/binutils/trunk/ld/ld.info, ++produced by makeinfo version 4.8 from ++/home/hcegtvedt/svnwork/tools/T0243-GNU_Toolchain/50-Source/binutils/trunk/ld/ld.texinfo. ++ ++START-INFO-DIR-ENTRY ++* Ld: (ld). The GNU linker. ++END-INFO-DIR-ENTRY ++ ++ This file documents the GNU linker LD version 2.17. ++ ++ Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, ++2002, 2003, 2004 Free Software Foundation, Inc. ++ ++ ++File: ld.info, Node: Top, Next: Overview, Up: (dir) ++ ++Using ld ++******** ++ ++This file documents the GNU linker ld version 2.17. ++ ++ This document is distributed under the terms of the GNU Free ++Documentation License. A copy of the license is included in the ++section entitled "GNU Free Documentation License". ++ ++* Menu: ++ ++* Overview:: Overview ++* Invocation:: Invocation ++* Scripts:: Linker Scripts ++ ++* Machine Dependent:: Machine Dependent Features ++ ++* BFD:: BFD ++ ++* Reporting Bugs:: Reporting Bugs ++* MRI:: MRI Compatible Script Files ++* GNU Free Documentation License:: GNU Free Documentation License ++* Index:: Index ++ ++ ++File: ld.info, Node: Overview, Next: Invocation, Prev: Top, Up: Top ++ ++1 Overview ++********** ++ ++`ld' combines a number of object and archive files, relocates their ++data and ties up symbol references. Usually the last step in compiling ++a program is to run `ld'. ++ ++ `ld' accepts Linker Command Language files written in a superset of ++AT&T's Link Editor Command Language syntax, to provide explicit and ++total control over the linking process. ++ ++ This version of `ld' uses the general purpose BFD libraries to ++operate on object files. This allows `ld' to read, combine, and write ++object files in many different formats--for example, COFF or `a.out'. ++Different formats may be linked together to produce any available kind ++of object file. *Note BFD::, for more information. ++ ++ Aside from its flexibility, the GNU linker is more helpful than other ++linkers in providing diagnostic information. Many linkers abandon ++execution immediately upon encountering an error; whenever possible, ++`ld' continues executing, allowing you to identify other errors (or, in ++some cases, to get an output file in spite of the error). ++ ++ ++File: ld.info, Node: Invocation, Next: Scripts, Prev: Overview, Up: Top ++ ++2 Invocation ++************ ++ ++The GNU linker `ld' is meant to cover a broad range of situations, and ++to be as compatible as possible with other linkers. As a result, you ++have many choices to control its behavior. ++ ++* Menu: ++ ++* Options:: Command Line Options ++* Environment:: Environment Variables ++ ++ ++File: ld.info, Node: Options, Next: Environment, Up: Invocation ++ ++2.1 Command Line Options ++======================== ++ ++ The linker supports a plethora of command-line options, but in actual ++practice few of them are used in any particular context. For instance, ++a frequent use of `ld' is to link standard Unix object files on a ++standard, supported Unix system. On such a system, to link a file ++`hello.o': ++ ++ ld -o OUTPUT /lib/crt0.o hello.o -lc ++ ++ This tells `ld' to produce a file called OUTPUT as the result of ++linking the file `/lib/crt0.o' with `hello.o' and the library `libc.a', ++which will come from the standard search directories. (See the ++discussion of the `-l' option below.) ++ ++ Some of the command-line options to `ld' may be specified at any ++point in the command line. However, options which refer to files, such ++as `-l' or `-T', cause the file to be read at the point at which the ++option appears in the command line, relative to the object files and ++other file options. Repeating non-file options with a different ++argument will either have no further effect, or override prior ++occurrences (those further to the left on the command line) of that ++option. Options which may be meaningfully specified more than once are ++noted in the descriptions below. ++ ++ Non-option arguments are object files or archives which are to be ++linked together. They may follow, precede, or be mixed in with ++command-line options, except that an object file argument may not be ++placed between an option and its argument. ++ ++ Usually the linker is invoked with at least one object file, but you ++can specify other forms of binary input files using `-l', `-R', and the ++script command language. If _no_ binary input files at all are ++specified, the linker does not produce any output, and issues the ++message `No input files'. ++ ++ If the linker cannot recognize the format of an object file, it will ++assume that it is a linker script. A script specified in this way ++augments the main linker script used for the link (either the default ++linker script or the one specified by using `-T'). This feature ++permits the linker to link against a file which appears to be an object ++or an archive, but actually merely defines some symbol values, or uses ++`INPUT' or `GROUP' to load other objects. Note that specifying a ++script in this way merely augments the main linker script; use the `-T' ++option to replace the default linker script entirely. *Note Scripts::. ++ ++ For options whose names are a single letter, option arguments must ++either follow the option letter without intervening whitespace, or be ++given as separate arguments immediately following the option that ++requires them. ++ ++ For options whose names are multiple letters, either one dash or two ++can precede the option name; for example, `-trace-symbol' and ++`--trace-symbol' are equivalent. Note--there is one exception to this ++rule. Multiple letter options that start with a lower case 'o' can ++only be preceeded by two dashes. This is to reduce confusion with the ++`-o' option. So for example `-omagic' sets the output file name to ++`magic' whereas `--omagic' sets the NMAGIC flag on the output. ++ ++ Arguments to multiple-letter options must either be separated from ++the option name by an equals sign, or be given as separate arguments ++immediately following the option that requires them. For example, ++`--trace-symbol foo' and `--trace-symbol=foo' are equivalent. Unique ++abbreviations of the names of multiple-letter options are accepted. ++ ++ Note--if the linker is being invoked indirectly, via a compiler ++driver (e.g. `gcc') then all the linker command line options should be ++prefixed by `-Wl,' (or whatever is appropriate for the particular ++compiler driver) like this: ++ ++ gcc -Wl,--startgroup foo.o bar.o -Wl,--endgroup ++ ++ This is important, because otherwise the compiler driver program may ++silently drop the linker options, resulting in a bad link. ++ ++ Here is a table of the generic command line switches accepted by the ++GNU linker: ++ ++`@FILE' ++ Read command-line options from FILE. The options read are ++ inserted in place of the original @FILE option. If FILE does not ++ exist, or cannot be read, then the option will be treated ++ literally, and not removed. ++ ++ Options in FILE are separated by whitespace. A whitespace ++ character may be included in an option by surrounding the entire ++ option in either single or double quotes. Any character ++ (including a backslash) may be included by prefixing the character ++ to be included with a backslash. The FILE may itself contain ++ additional @FILE options; any such options will be processed ++ recursively. ++ ++`-aKEYWORD' ++ This option is supported for HP/UX compatibility. The KEYWORD ++ argument must be one of the strings `archive', `shared', or ++ `default'. `-aarchive' is functionally equivalent to `-Bstatic', ++ and the other two keywords are functionally equivalent to ++ `-Bdynamic'. This option may be used any number of times. ++ ++`-AARCHITECTURE' ++`--architecture=ARCHITECTURE' ++ In the current release of `ld', this option is useful only for the ++ Intel 960 family of architectures. In that `ld' configuration, the ++ ARCHITECTURE argument identifies the particular architecture in ++ the 960 family, enabling some safeguards and modifying the ++ archive-library search path. *Note `ld' and the Intel 960 family: ++ i960, for details. ++ ++ Future releases of `ld' may support similar functionality for ++ other architecture families. ++ ++`-b INPUT-FORMAT' ++`--format=INPUT-FORMAT' ++ `ld' may be configured to support more than one kind of object ++ file. If your `ld' is configured this way, you can use the `-b' ++ option to specify the binary format for input object files that ++ follow this option on the command line. Even when `ld' is ++ configured to support alternative object formats, you don't ++ usually need to specify this, as `ld' should be configured to ++ expect as a default input format the most usual format on each ++ machine. INPUT-FORMAT is a text string, the name of a particular ++ format supported by the BFD libraries. (You can list the ++ available binary formats with `objdump -i'.) *Note BFD::. ++ ++ You may want to use this option if you are linking files with an ++ unusual binary format. You can also use `-b' to switch formats ++ explicitly (when linking object files of different formats), by ++ including `-b INPUT-FORMAT' before each group of object files in a ++ particular format. ++ ++ The default format is taken from the environment variable ++ `GNUTARGET'. *Note Environment::. You can also define the input ++ format from a script, using the command `TARGET'; see *Note Format ++ Commands::. ++ ++`-c MRI-COMMANDFILE' ++`--mri-script=MRI-COMMANDFILE' ++ For compatibility with linkers produced by MRI, `ld' accepts script ++ files written in an alternate, restricted command language, ++ described in *Note MRI Compatible Script Files: MRI. Introduce ++ MRI script files with the option `-c'; use the `-T' option to run ++ linker scripts written in the general-purpose `ld' scripting ++ language. If MRI-CMDFILE does not exist, `ld' looks for it in the ++ directories specified by any `-L' options. ++ ++`-d' ++`-dc' ++`-dp' ++ These three options are equivalent; multiple forms are supported ++ for compatibility with other linkers. They assign space to common ++ symbols even if a relocatable output file is specified (with ++ `-r'). The script command `FORCE_COMMON_ALLOCATION' has the same ++ effect. *Note Miscellaneous Commands::. ++ ++`-e ENTRY' ++`--entry=ENTRY' ++ Use ENTRY as the explicit symbol for beginning execution of your ++ program, rather than the default entry point. If there is no ++ symbol named ENTRY, the linker will try to parse ENTRY as a number, ++ and use that as the entry address (the number will be interpreted ++ in base 10; you may use a leading `0x' for base 16, or a leading ++ `0' for base 8). *Note Entry Point::, for a discussion of defaults ++ and other ways of specifying the entry point. ++ ++`--exclude-libs LIB,LIB,...' ++ Specifies a list of archive libraries from which symbols should ++ not be automatically exported. The library names may be delimited ++ by commas or colons. Specifying `--exclude-libs ALL' excludes ++ symbols in all archive libraries from automatic export. This ++ option is available only for the i386 PE targeted port of the ++ linker and for ELF targeted ports. For i386 PE, symbols ++ explicitly listed in a .def file are still exported, regardless of ++ this option. For ELF targeted ports, symbols affected by this ++ option will be treated as hidden. ++ ++`-E' ++`--export-dynamic' ++ When creating a dynamically linked executable, add all symbols to ++ the dynamic symbol table. The dynamic symbol table is the set of ++ symbols which are visible from dynamic objects at run time. ++ ++ If you do not use this option, the dynamic symbol table will ++ normally contain only those symbols which are referenced by some ++ dynamic object mentioned in the link. ++ ++ If you use `dlopen' to load a dynamic object which needs to refer ++ back to the symbols defined by the program, rather than some other ++ dynamic object, then you will probably need to use this option when ++ linking the program itself. ++ ++ You can also use the version script to control what symbols should ++ be added to the dynamic symbol table if the output format supports ++ it. See the description of `--version-script' in *Note VERSION::. ++ ++`-EB' ++ Link big-endian objects. This affects the default output format. ++ ++`-EL' ++ Link little-endian objects. This affects the default output ++ format. ++ ++`-f' ++`--auxiliary NAME' ++ When creating an ELF shared object, set the internal DT_AUXILIARY ++ field to the specified name. This tells the dynamic linker that ++ the symbol table of the shared object should be used as an ++ auxiliary filter on the symbol table of the shared object NAME. ++ ++ If you later link a program against this filter object, then, when ++ you run the program, the dynamic linker will see the DT_AUXILIARY ++ field. If the dynamic linker resolves any symbols from the filter ++ object, it will first check whether there is a definition in the ++ shared object NAME. If there is one, it will be used instead of ++ the definition in the filter object. The shared object NAME need ++ not exist. Thus the shared object NAME may be used to provide an ++ alternative implementation of certain functions, perhaps for ++ debugging or for machine specific performance. ++ ++ This option may be specified more than once. The DT_AUXILIARY ++ entries will be created in the order in which they appear on the ++ command line. ++ ++`-F NAME' ++`--filter NAME' ++ When creating an ELF shared object, set the internal DT_FILTER ++ field to the specified name. This tells the dynamic linker that ++ the symbol table of the shared object which is being created ++ should be used as a filter on the symbol table of the shared ++ object NAME. ++ ++ If you later link a program against this filter object, then, when ++ you run the program, the dynamic linker will see the DT_FILTER ++ field. The dynamic linker will resolve symbols according to the ++ symbol table of the filter object as usual, but it will actually ++ link to the definitions found in the shared object NAME. Thus the ++ filter object can be used to select a subset of the symbols ++ provided by the object NAME. ++ ++ Some older linkers used the `-F' option throughout a compilation ++ toolchain for specifying object-file format for both input and ++ output object files. The GNU linker uses other mechanisms for ++ this purpose: the `-b', `--format', `--oformat' options, the ++ `TARGET' command in linker scripts, and the `GNUTARGET' ++ environment variable. The GNU linker will ignore the `-F' option ++ when not creating an ELF shared object. ++ ++`-fini NAME' ++ When creating an ELF executable or shared object, call NAME when ++ the executable or shared object is unloaded, by setting DT_FINI to ++ the address of the function. By default, the linker uses `_fini' ++ as the function to call. ++ ++`-g' ++ Ignored. Provided for compatibility with other tools. ++ ++`-GVALUE' ++`--gpsize=VALUE' ++ Set the maximum size of objects to be optimized using the GP ++ register to SIZE. This is only meaningful for object file formats ++ such as MIPS ECOFF which supports putting large and small objects ++ into different sections. This is ignored for other object file ++ formats. ++ ++`-hNAME' ++`-soname=NAME' ++ When creating an ELF shared object, set the internal DT_SONAME ++ field to the specified name. When an executable is linked with a ++ shared object which has a DT_SONAME field, then when the ++ executable is run the dynamic linker will attempt to load the ++ shared object specified by the DT_SONAME field rather than the ++ using the file name given to the linker. ++ ++`-i' ++ Perform an incremental link (same as option `-r'). ++ ++`-init NAME' ++ When creating an ELF executable or shared object, call NAME when ++ the executable or shared object is loaded, by setting DT_INIT to ++ the address of the function. By default, the linker uses `_init' ++ as the function to call. ++ ++`-lARCHIVE' ++`--library=ARCHIVE' ++ Add archive file ARCHIVE to the list of files to link. This ++ option may be used any number of times. `ld' will search its ++ path-list for occurrences of `libARCHIVE.a' for every ARCHIVE ++ specified. ++ ++ On systems which support shared libraries, `ld' may also search for ++ libraries with extensions other than `.a'. Specifically, on ELF ++ and SunOS systems, `ld' will search a directory for a library with ++ an extension of `.so' before searching for one with an extension of ++ `.a'. By convention, a `.so' extension indicates a shared library. ++ ++ The linker will search an archive only once, at the location where ++ it is specified on the command line. If the archive defines a ++ symbol which was undefined in some object which appeared before ++ the archive on the command line, the linker will include the ++ appropriate file(s) from the archive. However, an undefined ++ symbol in an object appearing later on the command line will not ++ cause the linker to search the archive again. ++ ++ See the `-(' option for a way to force the linker to search ++ archives multiple times. ++ ++ You may list the same archive multiple times on the command line. ++ ++ This type of archive searching is standard for Unix linkers. ++ However, if you are using `ld' on AIX, note that it is different ++ from the behaviour of the AIX linker. ++ ++`-LSEARCHDIR' ++`--library-path=SEARCHDIR' ++ Add path SEARCHDIR to the list of paths that `ld' will search for ++ archive libraries and `ld' control scripts. You may use this ++ option any number of times. The directories are searched in the ++ order in which they are specified on the command line. ++ Directories specified on the command line are searched before the ++ default directories. All `-L' options apply to all `-l' options, ++ regardless of the order in which the options appear. ++ ++ If SEARCHDIR begins with `=', then the `=' will be replaced by the ++ "sysroot prefix", a path specified when the linker is configured. ++ ++ The default set of paths searched (without being specified with ++ `-L') depends on which emulation mode `ld' is using, and in some ++ cases also on how it was configured. *Note Environment::. ++ ++ The paths can also be specified in a link script with the ++ `SEARCH_DIR' command. Directories specified this way are searched ++ at the point in which the linker script appears in the command ++ line. ++ ++`-mEMULATION' ++ Emulate the EMULATION linker. You can list the available ++ emulations with the `--verbose' or `-V' options. ++ ++ If the `-m' option is not used, the emulation is taken from the ++ `LDEMULATION' environment variable, if that is defined. ++ ++ Otherwise, the default emulation depends upon how the linker was ++ configured. ++ ++`-M' ++`--print-map' ++ Print a link map to the standard output. A link map provides ++ information about the link, including the following: ++ ++ * Where object files are mapped into memory. ++ ++ * How common symbols are allocated. ++ ++ * All archive members included in the link, with a mention of ++ the symbol which caused the archive member to be brought in. ++ ++ * The values assigned to symbols. ++ ++ Note - symbols whose values are computed by an expression ++ which involves a reference to a previous value of the same ++ symbol may not have correct result displayed in the link map. ++ This is because the linker discards intermediate results and ++ only retains the final value of an expression. Under such ++ circumstances the linker will display the final value ++ enclosed by square brackets. Thus for example a linker ++ script containing: ++ ++ foo = 1 ++ foo = foo * 4 ++ foo = foo + 8 ++ ++ will produce the following output in the link map if the `-M' ++ option is used: ++ ++ 0x00000001 foo = 0x1 ++ [0x0000000c] foo = (foo * 0x4) ++ [0x0000000c] foo = (foo + 0x8) ++ ++ See *Note Expressions:: for more information about ++ expressions in linker scripts. ++ ++`-n' ++`--nmagic' ++ Turn off page alignment of sections, and mark the output as ++ `NMAGIC' if possible. ++ ++`-N' ++`--omagic' ++ Set the text and data sections to be readable and writable. Also, ++ do not page-align the data segment, and disable linking against ++ shared libraries. If the output format supports Unix style magic ++ numbers, mark the output as `OMAGIC'. Note: Although a writable ++ text section is allowed for PE-COFF targets, it does not conform ++ to the format specification published by Microsoft. ++ ++`--no-omagic' ++ This option negates most of the effects of the `-N' option. It ++ sets the text section to be read-only, and forces the data segment ++ to be page-aligned. Note - this option does not enable linking ++ against shared libraries. Use `-Bdynamic' for this. ++ ++`-o OUTPUT' ++`--output=OUTPUT' ++ Use OUTPUT as the name for the program produced by `ld'; if this ++ option is not specified, the name `a.out' is used by default. The ++ script command `OUTPUT' can also specify the output file name. ++ ++`-O LEVEL' ++ If LEVEL is a numeric values greater than zero `ld' optimizes the ++ output. This might take significantly longer and therefore ++ probably should only be enabled for the final binary. ++ ++`-q' ++`--emit-relocs' ++ Leave relocation sections and contents in fully linked ++ exececutables. Post link analysis and optimization tools may need ++ this information in order to perform correct modifications of ++ executables. This results in larger executables. ++ ++ This option is currently only supported on ELF platforms. ++ ++`--force-dynamic' ++ Force the output file to have dynamic sections. This option is ++ specific to VxWorks targets. ++ ++`-r' ++`--relocatable' ++ Generate relocatable output--i.e., generate an output file that ++ can in turn serve as input to `ld'. This is often called "partial ++ linking". As a side effect, in environments that support standard ++ Unix magic numbers, this option also sets the output file's magic ++ number to `OMAGIC'. If this option is not specified, an absolute ++ file is produced. When linking C++ programs, this option _will ++ not_ resolve references to constructors; to do that, use `-Ur'. ++ ++ When an input file does not have the same format as the output ++ file, partial linking is only supported if that input file does ++ not contain any relocations. Different output formats can have ++ further restrictions; for example some `a.out'-based formats do ++ not support partial linking with input files in other formats at ++ all. ++ ++ This option does the same thing as `-i'. ++ ++`-R FILENAME' ++`--just-symbols=FILENAME' ++ Read symbol names and their addresses from FILENAME, but do not ++ relocate it or include it in the output. This allows your output ++ file to refer symbolically to absolute locations of memory defined ++ in other programs. You may use this option more than once. ++ ++ For compatibility with other ELF linkers, if the `-R' option is ++ followed by a directory name, rather than a file name, it is ++ treated as the `-rpath' option. ++ ++`-s' ++`--strip-all' ++ Omit all symbol information from the output file. ++ ++`-S' ++`--strip-debug' ++ Omit debugger symbol information (but not all symbols) from the ++ output file. ++ ++`-t' ++`--trace' ++ Print the names of the input files as `ld' processes them. ++ ++`-T SCRIPTFILE' ++`--script=SCRIPTFILE' ++ Use SCRIPTFILE as the linker script. This script replaces `ld''s ++ default linker script (rather than adding to it), so COMMANDFILE ++ must specify everything necessary to describe the output file. ++ *Note Scripts::. If SCRIPTFILE does not exist in the current ++ directory, `ld' looks for it in the directories specified by any ++ preceding `-L' options. Multiple `-T' options accumulate. ++ ++`-u SYMBOL' ++`--undefined=SYMBOL' ++ Force SYMBOL to be entered in the output file as an undefined ++ symbol. Doing this may, for example, trigger linking of additional ++ modules from standard libraries. `-u' may be repeated with ++ different option arguments to enter additional undefined symbols. ++ This option is equivalent to the `EXTERN' linker script command. ++ ++`-Ur' ++ For anything other than C++ programs, this option is equivalent to ++ `-r': it generates relocatable output--i.e., an output file that ++ can in turn serve as input to `ld'. When linking C++ programs, ++ `-Ur' _does_ resolve references to constructors, unlike `-r'. It ++ does not work to use `-Ur' on files that were themselves linked ++ with `-Ur'; once the constructor table has been built, it cannot ++ be added to. Use `-Ur' only for the last partial link, and `-r' ++ for the others. ++ ++`--unique[=SECTION]' ++ Creates a separate output section for every input section matching ++ SECTION, or if the optional wildcard SECTION argument is missing, ++ for every orphan input section. An orphan section is one not ++ specifically mentioned in a linker script. You may use this option ++ multiple times on the command line; It prevents the normal ++ merging of input sections with the same name, overriding output ++ section assignments in a linker script. ++ ++`-v' ++`--version' ++`-V' ++ Display the version number for `ld'. The `-V' option also lists ++ the supported emulations. ++ ++`-x' ++`--discard-all' ++ Delete all local symbols. ++ ++`-X' ++`--discard-locals' ++ Delete all temporary local symbols. For most targets, this is all ++ local symbols whose names begin with `L'. ++ ++`-y SYMBOL' ++`--trace-symbol=SYMBOL' ++ Print the name of each linked file in which SYMBOL appears. This ++ option may be given any number of times. On many systems it is ++ necessary to prepend an underscore. ++ ++ This option is useful when you have an undefined symbol in your ++ link but don't know where the reference is coming from. ++ ++`-Y PATH' ++ Add PATH to the default library search path. This option exists ++ for Solaris compatibility. ++ ++`-z KEYWORD' ++ The recognized keywords are: ++ `combreloc' ++ Combines multiple reloc sections and sorts them to make ++ dynamic symbol lookup caching possible. ++ ++ `defs' ++ Disallows undefined symbols in object files. Undefined ++ symbols in shared libraries are still allowed. ++ ++ `execstack' ++ Marks the object as requiring executable stack. ++ ++ `initfirst' ++ This option is only meaningful when building a shared object. ++ It marks the object so that its runtime initialization will ++ occur before the runtime initialization of any other objects ++ brought into the process at the same time. Similarly the ++ runtime finalization of the object will occur after the ++ runtime finalization of any other objects. ++ ++ `interpose' ++ Marks the object that its symbol table interposes before all ++ symbols but the primary executable. ++ ++ `loadfltr' ++ Marks the object that its filters be processed immediately at ++ runtime. ++ ++ `muldefs' ++ Allows multiple definitions. ++ ++ `nocombreloc' ++ Disables multiple reloc sections combining. ++ ++ `nocopyreloc' ++ Disables production of copy relocs. ++ ++ `nodefaultlib' ++ Marks the object that the search for dependencies of this ++ object will ignore any default library search paths. ++ ++ `nodelete' ++ Marks the object shouldn't be unloaded at runtime. ++ ++ `nodlopen' ++ Marks the object not available to `dlopen'. ++ ++ `nodump' ++ Marks the object can not be dumped by `dldump'. ++ ++ `noexecstack' ++ Marks the object as not requiring executable stack. ++ ++ `norelro' ++ Don't create an ELF `PT_GNU_RELRO' segment header in the ++ object. ++ ++ `now' ++ When generating an executable or shared library, mark it to ++ tell the dynamic linker to resolve all symbols when the ++ program is started, or when the shared library is linked to ++ using dlopen, instead of deferring function call resolution ++ to the point when the function is first called. ++ ++ `origin' ++ Marks the object may contain $ORIGIN. ++ ++ `relro' ++ Create an ELF `PT_GNU_RELRO' segment header in the object. ++ ++ ++ Other keywords are ignored for Solaris compatibility. ++ ++`-( ARCHIVES -)' ++`--start-group ARCHIVES --end-group' ++ The ARCHIVES should be a list of archive files. They may be ++ either explicit file names, or `-l' options. ++ ++ The specified archives are searched repeatedly until no new ++ undefined references are created. Normally, an archive is ++ searched only once in the order that it is specified on the ++ command line. If a symbol in that archive is needed to resolve an ++ undefined symbol referred to by an object in an archive that ++ appears later on the command line, the linker would not be able to ++ resolve that reference. By grouping the archives, they all be ++ searched repeatedly until all possible references are resolved. ++ ++ Using this option has a significant performance cost. It is best ++ to use it only when there are unavoidable circular references ++ between two or more archives. ++ ++`--accept-unknown-input-arch' ++`--no-accept-unknown-input-arch' ++ Tells the linker to accept input files whose architecture cannot be ++ recognised. The assumption is that the user knows what they are ++ doing and deliberately wants to link in these unknown input files. ++ This was the default behaviour of the linker, before release ++ 2.14. The default behaviour from release 2.14 onwards is to ++ reject such input files, and so the `--accept-unknown-input-arch' ++ option has been added to restore the old behaviour. ++ ++`--as-needed' ++`--no-as-needed' ++ This option affects ELF DT_NEEDED tags for dynamic libraries ++ mentioned on the command line after the `--as-needed' option. ++ Normally, the linker will add a DT_NEEDED tag for each dynamic ++ library mentioned on the command line, regardless of whether the ++ library is actually needed. `--as-needed' causes DT_NEEDED tags ++ to only be emitted for libraries that satisfy some symbol ++ reference from regular objects which is undefined at the point ++ that the library was linked. `--no-as-needed' restores the ++ default behaviour. ++ ++`--add-needed' ++`--no-add-needed' ++ This option affects the treatment of dynamic libraries from ELF ++ DT_NEEDED tags in dynamic libraries mentioned on the command line ++ after the `--no-add-needed' option. Normally, the linker will add ++ a DT_NEEDED tag for each dynamic library from DT_NEEDED tags. ++ `--no-add-needed' causes DT_NEEDED tags will never be emitted for ++ those libraries from DT_NEEDED tags. `--add-needed' restores the ++ default behaviour. ++ ++`-assert KEYWORD' ++ This option is ignored for SunOS compatibility. ++ ++`-Bdynamic' ++`-dy' ++`-call_shared' ++ Link against dynamic libraries. This is only meaningful on ++ platforms for which shared libraries are supported. This option ++ is normally the default on such platforms. The different variants ++ of this option are for compatibility with various systems. You ++ may use this option multiple times on the command line: it affects ++ library searching for `-l' options which follow it. ++ ++`-Bgroup' ++ Set the `DF_1_GROUP' flag in the `DT_FLAGS_1' entry in the dynamic ++ section. This causes the runtime linker to handle lookups in this ++ object and its dependencies to be performed only inside the group. ++ `--unresolved-symbols=report-all' is implied. This option is only ++ meaningful on ELF platforms which support shared libraries. ++ ++`-Bstatic' ++`-dn' ++`-non_shared' ++`-static' ++ Do not link against shared libraries. This is only meaningful on ++ platforms for which shared libraries are supported. The different ++ variants of this option are for compatibility with various ++ systems. You may use this option multiple times on the command ++ line: it affects library searching for `-l' options which follow ++ it. This option also implies `--unresolved-symbols=report-all'. ++ This option can be used with `-shared'. Doing so means that a ++ shared library is being created but that all of the library's ++ external references must be resolved by pulling in entries from ++ static libraries. ++ ++`-Bsymbolic' ++ When creating a shared library, bind references to global symbols ++ to the definition within the shared library, if any. Normally, it ++ is possible for a program linked against a shared library to ++ override the definition within the shared library. This option is ++ only meaningful on ELF platforms which support shared libraries. ++ ++`--check-sections' ++`--no-check-sections' ++ Asks the linker _not_ to check section addresses after they have ++ been assigned to see if there are any overlaps. Normally the ++ linker will perform this check, and if it finds any overlaps it ++ will produce suitable error messages. The linker does know about, ++ and does make allowances for sections in overlays. The default ++ behaviour can be restored by using the command line switch ++ `--check-sections'. ++ ++`--cref' ++ Output a cross reference table. If a linker map file is being ++ generated, the cross reference table is printed to the map file. ++ Otherwise, it is printed on the standard output. ++ ++ The format of the table is intentionally simple, so that it may be ++ easily processed by a script if necessary. The symbols are ++ printed out, sorted by name. For each symbol, a list of file ++ names is given. If the symbol is defined, the first file listed ++ is the location of the definition. The remaining files contain ++ references to the symbol. ++ ++`--no-define-common' ++ This option inhibits the assignment of addresses to common symbols. ++ The script command `INHIBIT_COMMON_ALLOCATION' has the same effect. ++ *Note Miscellaneous Commands::. ++ ++ The `--no-define-common' option allows decoupling the decision to ++ assign addresses to Common symbols from the choice of the output ++ file type; otherwise a non-Relocatable output type forces ++ assigning addresses to Common symbols. Using `--no-define-common' ++ allows Common symbols that are referenced from a shared library to ++ be assigned addresses only in the main program. This eliminates ++ the unused duplicate space in the shared library, and also ++ prevents any possible confusion over resolving to the wrong ++ duplicate when there are many dynamic modules with specialized ++ search paths for runtime symbol resolution. ++ ++`--defsym SYMBOL=EXPRESSION' ++ Create a global symbol in the output file, containing the absolute ++ address given by EXPRESSION. You may use this option as many ++ times as necessary to define multiple symbols in the command line. ++ A limited form of arithmetic is supported for the EXPRESSION in ++ this context: you may give a hexadecimal constant or the name of ++ an existing symbol, or use `+' and `-' to add or subtract ++ hexadecimal constants or symbols. If you need more elaborate ++ expressions, consider using the linker command language from a ++ script (*note Assignment: Symbol Definitions: Assignments.). ++ _Note:_ there should be no white space between SYMBOL, the equals ++ sign ("<=>"), and EXPRESSION. ++ ++`--demangle[=STYLE]' ++`--no-demangle' ++ These options control whether to demangle symbol names in error ++ messages and other output. When the linker is told to demangle, ++ it tries to present symbol names in a readable fashion: it strips ++ leading underscores if they are used by the object file format, ++ and converts C++ mangled symbol names into user readable names. ++ Different compilers have different mangling styles. The optional ++ demangling style argument can be used to choose an appropriate ++ demangling style for your compiler. The linker will demangle by ++ default unless the environment variable `COLLECT_NO_DEMANGLE' is ++ set. These options may be used to override the default. ++ ++`--dynamic-linker FILE' ++ Set the name of the dynamic linker. This is only meaningful when ++ generating dynamically linked ELF executables. The default dynamic ++ linker is normally correct; don't use this unless you know what ++ you are doing. ++ ++`--fatal-warnings' ++ Treat all warnings as errors. ++ ++`--force-exe-suffix' ++ Make sure that an output file has a .exe suffix. ++ ++ If a successfully built fully linked output file does not have a ++ `.exe' or `.dll' suffix, this option forces the linker to copy the ++ output file to one of the same name with a `.exe' suffix. This ++ option is useful when using unmodified Unix makefiles on a ++ Microsoft Windows host, since some versions of Windows won't run ++ an image unless it ends in a `.exe' suffix. ++ ++`--no-gc-sections' ++`--gc-sections' ++ Enable garbage collection of unused input sections. It is ignored ++ on targets that do not support this option. This option is not ++ compatible with `-r'. The default behaviour (of not performing ++ this garbage collection) can be restored by specifying ++ `--no-gc-sections' on the command line. ++ ++`--help' ++ Print a summary of the command-line options on the standard output ++ and exit. ++ ++`--target-help' ++ Print a summary of all target specific options on the standard ++ output and exit. ++ ++`-Map MAPFILE' ++ Print a link map to the file MAPFILE. See the description of the ++ `-M' option, above. ++ ++`--no-keep-memory' ++ `ld' normally optimizes for speed over memory usage by caching the ++ symbol tables of input files in memory. This option tells `ld' to ++ instead optimize for memory usage, by rereading the symbol tables ++ as necessary. This may be required if `ld' runs out of memory ++ space while linking a large executable. ++ ++`--no-undefined' ++`-z defs' ++ Report unresolved symbol references from regular object files. ++ This is done even if the linker is creating a non-symbolic shared ++ library. The switch `--[no-]allow-shlib-undefined' controls the ++ behaviour for reporting unresolved references found in shared ++ libraries being linked in. ++ ++`--allow-multiple-definition' ++`-z muldefs' ++ Normally when a symbol is defined multiple times, the linker will ++ report a fatal error. These options allow multiple definitions and ++ the first definition will be used. ++ ++`--allow-shlib-undefined' ++`--no-allow-shlib-undefined' ++ Allows (the default) or disallows undefined symbols in shared ++ libraries. This switch is similar to `--no-undefined' except that ++ it determines the behaviour when the undefined symbols are in a ++ shared library rather than a regular object file. It does not ++ affect how undefined symbols in regular object files are handled. ++ ++ The reason that `--allow-shlib-undefined' is the default is that ++ the shared library being specified at link time may not be the ++ same as the one that is available at load time, so the symbols ++ might actually be resolvable at load time. Plus there are some ++ systems, (eg BeOS) where undefined symbols in shared libraries is ++ normal. (The kernel patches them at load time to select which ++ function is most appropriate for the current architecture. This ++ is used for example to dynamically select an appropriate memset ++ function). Apparently it is also normal for HPPA shared libraries ++ to have undefined symbols. ++ ++`--no-undefined-version' ++ Normally when a symbol has an undefined version, the linker will ++ ignore it. This option disallows symbols with undefined version ++ and a fatal error will be issued instead. ++ ++`--default-symver' ++ Create and use a default symbol version (the soname) for ++ unversioned exported symbols. ++ ++`--default-imported-symver' ++ Create and use a default symbol version (the soname) for ++ unversioned imported symbols. ++ ++`--no-warn-mismatch' ++ Normally `ld' will give an error if you try to link together input ++ files that are mismatched for some reason, perhaps because they ++ have been compiled for different processors or for different ++ endiannesses. This option tells `ld' that it should silently ++ permit such possible errors. This option should only be used with ++ care, in cases when you have taken some special action that ++ ensures that the linker errors are inappropriate. ++ ++`--no-whole-archive' ++ Turn off the effect of the `--whole-archive' option for subsequent ++ archive files. ++ ++`--noinhibit-exec' ++ Retain the executable output file whenever it is still usable. ++ Normally, the linker will not produce an output file if it ++ encounters errors during the link process; it exits without ++ writing an output file when it issues any error whatsoever. ++ ++`-nostdlib' ++ Only search library directories explicitly specified on the ++ command line. Library directories specified in linker scripts ++ (including linker scripts specified on the command line) are ++ ignored. ++ ++`--oformat OUTPUT-FORMAT' ++ `ld' may be configured to support more than one kind of object ++ file. If your `ld' is configured this way, you can use the ++ `--oformat' option to specify the binary format for the output ++ object file. Even when `ld' is configured to support alternative ++ object formats, you don't usually need to specify this, as `ld' ++ should be configured to produce as a default output format the most ++ usual format on each machine. OUTPUT-FORMAT is a text string, the ++ name of a particular format supported by the BFD libraries. (You ++ can list the available binary formats with `objdump -i'.) The ++ script command `OUTPUT_FORMAT' can also specify the output format, ++ but this option overrides it. *Note BFD::. ++ ++`-pie' ++`--pic-executable' ++ Create a position independent executable. This is currently only ++ supported on ELF platforms. Position independent executables are ++ similar to shared libraries in that they are relocated by the ++ dynamic linker to the virtual address the OS chooses for them ++ (which can vary between invocations). Like normal dynamically ++ linked executables they can be executed and symbols defined in the ++ executable cannot be overridden by shared libraries. ++ ++`-qmagic' ++ This option is ignored for Linux compatibility. ++ ++`-Qy' ++ This option is ignored for SVR4 compatibility. ++ ++`--relax' ++ An option with machine dependent effects. This option is only ++ supported on a few targets. *Note `ld' and the H8/300: H8/300. ++ *Note `ld' and the Intel 960 family: i960. *Note `ld' and Xtensa ++ Processors: Xtensa. *Note `ld' and PowerPC 32-bit ELF Support: ++ PowerPC ELF32. ++ ++ On some platforms, the `--relax' option performs global ++ optimizations that become possible when the linker resolves ++ addressing in the program, such as relaxing address modes and ++ synthesizing new instructions in the output object file. ++ ++ On some platforms these link time global optimizations may make ++ symbolic debugging of the resulting executable impossible. This ++ is known to be the case for the Matsushita MN10200 and MN10300 ++ family of processors. ++ ++ On platforms where this is not supported, `--relax' is accepted, ++ but ignored. ++ ++`--retain-symbols-file FILENAME' ++ Retain _only_ the symbols listed in the file FILENAME, discarding ++ all others. FILENAME is simply a flat file, with one symbol name ++ per line. This option is especially useful in environments (such ++ as VxWorks) where a large global symbol table is accumulated ++ gradually, to conserve run-time memory. ++ ++ `--retain-symbols-file' does _not_ discard undefined symbols, or ++ symbols needed for relocations. ++ ++ You may only specify `--retain-symbols-file' once in the command ++ line. It overrides `-s' and `-S'. ++ ++`-rpath DIR' ++ Add a directory to the runtime library search path. This is used ++ when linking an ELF executable with shared objects. All `-rpath' ++ arguments are concatenated and passed to the runtime linker, which ++ uses them to locate shared objects at runtime. The `-rpath' ++ option is also used when locating shared objects which are needed ++ by shared objects explicitly included in the link; see the ++ description of the `-rpath-link' option. If `-rpath' is not used ++ when linking an ELF executable, the contents of the environment ++ variable `LD_RUN_PATH' will be used if it is defined. ++ ++ The `-rpath' option may also be used on SunOS. By default, on ++ SunOS, the linker will form a runtime search patch out of all the ++ `-L' options it is given. If a `-rpath' option is used, the ++ runtime search path will be formed exclusively using the `-rpath' ++ options, ignoring the `-L' options. This can be useful when using ++ gcc, which adds many `-L' options which may be on NFS mounted ++ filesystems. ++ ++ For compatibility with other ELF linkers, if the `-R' option is ++ followed by a directory name, rather than a file name, it is ++ treated as the `-rpath' option. ++ ++`-rpath-link DIR' ++ When using ELF or SunOS, one shared library may require another. ++ This happens when an `ld -shared' link includes a shared library ++ as one of the input files. ++ ++ When the linker encounters such a dependency when doing a ++ non-shared, non-relocatable link, it will automatically try to ++ locate the required shared library and include it in the link, if ++ it is not included explicitly. In such a case, the `-rpath-link' ++ option specifies the first set of directories to search. The ++ `-rpath-link' option may specify a sequence of directory names ++ either by specifying a list of names separated by colons, or by ++ appearing multiple times. ++ ++ This option should be used with caution as it overrides the search ++ path that may have been hard compiled into a shared library. In ++ such a case it is possible to use unintentionally a different ++ search path than the runtime linker would do. ++ ++ The linker uses the following search paths to locate required ++ shared libraries. ++ 1. Any directories specified by `-rpath-link' options. ++ ++ 2. Any directories specified by `-rpath' options. The difference ++ between `-rpath' and `-rpath-link' is that directories ++ specified by `-rpath' options are included in the executable ++ and used at runtime, whereas the `-rpath-link' option is only ++ effective at link time. It is for the native linker only. ++ ++ 3. On an ELF system, if the `-rpath' and `rpath-link' options ++ were not used, search the contents of the environment variable ++ `LD_RUN_PATH'. It is for the native linker only. ++ ++ 4. On SunOS, if the `-rpath' option was not used, search any ++ directories specified using `-L' options. ++ ++ 5. For a native linker, the contents of the environment variable ++ `LD_LIBRARY_PATH'. ++ ++ 6. For a native ELF linker, the directories in `DT_RUNPATH' or ++ `DT_RPATH' of a shared library are searched for shared ++ libraries needed by it. The `DT_RPATH' entries are ignored if ++ `DT_RUNPATH' entries exist. ++ ++ 7. The default directories, normally `/lib' and `/usr/lib'. ++ ++ 8. For a native linker on an ELF system, if the file ++ `/etc/ld.so.conf' exists, the list of directories found in ++ that file. ++ ++ If the required shared library is not found, the linker will issue ++ a warning and continue with the link. ++ ++`-shared' ++`-Bshareable' ++ Create a shared library. This is currently only supported on ELF, ++ XCOFF and SunOS platforms. On SunOS, the linker will ++ automatically create a shared library if the `-e' option is not ++ used and there are undefined symbols in the link. ++ ++`--sort-common' ++ This option tells `ld' to sort the common symbols by size when it ++ places them in the appropriate output sections. First come all ++ the one byte symbols, then all the two byte, then all the four ++ byte, and then everything else. This is to prevent gaps between ++ symbols due to alignment constraints. ++ ++`--sort-section name' ++ This option will apply `SORT_BY_NAME' to all wildcard section ++ patterns in the linker script. ++ ++`--sort-section alignment' ++ This option will apply `SORT_BY_ALIGNMENT' to all wildcard section ++ patterns in the linker script. ++ ++`--split-by-file [SIZE]' ++ Similar to `--split-by-reloc' but creates a new output section for ++ each input file when SIZE is reached. SIZE defaults to a size of ++ 1 if not given. ++ ++`--split-by-reloc [COUNT]' ++ Tries to creates extra sections in the output file so that no ++ single output section in the file contains more than COUNT ++ relocations. This is useful when generating huge relocatable ++ files for downloading into certain real time kernels with the COFF ++ object file format; since COFF cannot represent more than 65535 ++ relocations in a single section. Note that this will fail to work ++ with object file formats which do not support arbitrary sections. ++ The linker will not split up individual input sections for ++ redistribution, so if a single input section contains more than ++ COUNT relocations one output section will contain that many ++ relocations. COUNT defaults to a value of 32768. ++ ++`--stats' ++ Compute and display statistics about the operation of the linker, ++ such as execution time and memory usage. ++ ++`--sysroot=DIRECTORY' ++ Use DIRECTORY as the location of the sysroot, overriding the ++ configure-time default. This option is only supported by linkers ++ that were configured using `--with-sysroot'. ++ ++`--traditional-format' ++ For some targets, the output of `ld' is different in some ways from ++ the output of some existing linker. This switch requests `ld' to ++ use the traditional format instead. ++ ++ For example, on SunOS, `ld' combines duplicate entries in the ++ symbol string table. This can reduce the size of an output file ++ with full debugging information by over 30 percent. ++ Unfortunately, the SunOS `dbx' program can not read the resulting ++ program (`gdb' has no trouble). The `--traditional-format' switch ++ tells `ld' to not combine duplicate entries. ++ ++`--section-start SECTIONNAME=ORG' ++ Locate a section in the output file at the absolute address given ++ by ORG. You may use this option as many times as necessary to ++ locate multiple sections in the command line. ORG must be a ++ single hexadecimal integer; for compatibility with other linkers, ++ you may omit the leading `0x' usually associated with hexadecimal ++ values. _Note:_ there should be no white space between ++ SECTIONNAME, the equals sign ("<=>"), and ORG. ++ ++`-Tbss ORG' ++`-Tdata ORG' ++`-Ttext ORG' ++ Same as -section-start, with `.bss', `.data' or `.text' as the ++ SECTIONNAME. ++ ++`--unresolved-symbols=METHOD' ++ Determine how to handle unresolved symbols. There are four ++ possible values for `method': ++ ++ `ignore-all' ++ Do not report any unresolved symbols. ++ ++ `report-all' ++ Report all unresolved symbols. This is the default. ++ ++ `ignore-in-object-files' ++ Report unresolved symbols that are contained in shared ++ libraries, but ignore them if they come from regular object ++ files. ++ ++ `ignore-in-shared-libs' ++ Report unresolved symbols that come from regular object ++ files, but ignore them if they come from shared libraries. ++ This can be useful when creating a dynamic binary and it is ++ known that all the shared libraries that it should be ++ referencing are included on the linker's command line. ++ ++ The behaviour for shared libraries on their own can also be ++ controlled by the `--[no-]allow-shlib-undefined' option. ++ ++ Normally the linker will generate an error message for each ++ reported unresolved symbol but the option ++ `--warn-unresolved-symbols' can change this to a warning. ++ ++`--dll-verbose' ++`--verbose' ++ Display the version number for `ld' and list the linker emulations ++ supported. Display which input files can and cannot be opened. ++ Display the linker script being used by the linker. ++ ++`--version-script=VERSION-SCRIPTFILE' ++ Specify the name of a version script to the linker. This is ++ typically used when creating shared libraries to specify ++ additional information about the version hierarchy for the library ++ being created. This option is only meaningful on ELF platforms ++ which support shared libraries. *Note VERSION::. ++ ++`--warn-common' ++ Warn when a common symbol is combined with another common symbol ++ or with a symbol definition. Unix linkers allow this somewhat ++ sloppy practise, but linkers on some other operating systems do ++ not. This option allows you to find potential problems from ++ combining global symbols. Unfortunately, some C libraries use ++ this practise, so you may get some warnings about symbols in the ++ libraries as well as in your programs. ++ ++ There are three kinds of global symbols, illustrated here by C ++ examples: ++ ++ `int i = 1;' ++ A definition, which goes in the initialized data section of ++ the output file. ++ ++ `extern int i;' ++ An undefined reference, which does not allocate space. There ++ must be either a definition or a common symbol for the ++ variable somewhere. ++ ++ `int i;' ++ A common symbol. If there are only (one or more) common ++ symbols for a variable, it goes in the uninitialized data ++ area of the output file. The linker merges multiple common ++ symbols for the same variable into a single symbol. If they ++ are of different sizes, it picks the largest size. The ++ linker turns a common symbol into a declaration, if there is ++ a definition of the same variable. ++ ++ The `--warn-common' option can produce five kinds of warnings. ++ Each warning consists of a pair of lines: the first describes the ++ symbol just encountered, and the second describes the previous ++ symbol encountered with the same name. One or both of the two ++ symbols will be a common symbol. ++ ++ 1. Turning a common symbol into a reference, because there is ++ already a definition for the symbol. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overridden by definition ++ FILE(SECTION): warning: defined here ++ ++ 2. Turning a common symbol into a reference, because a later ++ definition for the symbol is encountered. This is the same ++ as the previous case, except that the symbols are encountered ++ in a different order. ++ FILE(SECTION): warning: definition of `SYMBOL' ++ overriding common ++ FILE(SECTION): warning: common is here ++ ++ 3. Merging a common symbol with a previous same-sized common ++ symbol. ++ FILE(SECTION): warning: multiple common ++ of `SYMBOL' ++ FILE(SECTION): warning: previous common is here ++ ++ 4. Merging a common symbol with a previous larger common symbol. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overridden by larger common ++ FILE(SECTION): warning: larger common is here ++ ++ 5. Merging a common symbol with a previous smaller common ++ symbol. This is the same as the previous case, except that ++ the symbols are encountered in a different order. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overriding smaller common ++ FILE(SECTION): warning: smaller common is here ++ ++`--warn-constructors' ++ Warn if any global constructors are used. This is only useful for ++ a few object file formats. For formats like COFF or ELF, the ++ linker can not detect the use of global constructors. ++ ++`--warn-multiple-gp' ++ Warn if multiple global pointer values are required in the output ++ file. This is only meaningful for certain processors, such as the ++ Alpha. Specifically, some processors put large-valued constants ++ in a special section. A special register (the global pointer) ++ points into the middle of this section, so that constants can be ++ loaded efficiently via a base-register relative addressing mode. ++ Since the offset in base-register relative mode is fixed and ++ relatively small (e.g., 16 bits), this limits the maximum size of ++ the constant pool. Thus, in large programs, it is often necessary ++ to use multiple global pointer values in order to be able to ++ address all possible constants. This option causes a warning to ++ be issued whenever this case occurs. ++ ++`--warn-once' ++ Only warn once for each undefined symbol, rather than once per ++ module which refers to it. ++ ++`--warn-section-align' ++ Warn if the address of an output section is changed because of ++ alignment. Typically, the alignment will be set by an input ++ section. The address will only be changed if it not explicitly ++ specified; that is, if the `SECTIONS' command does not specify a ++ start address for the section (*note SECTIONS::). ++ ++`--warn-shared-textrel' ++ Warn if the linker adds a DT_TEXTREL to a shared object. ++ ++`--warn-unresolved-symbols' ++ If the linker is going to report an unresolved symbol (see the ++ option `--unresolved-symbols') it will normally generate an error. ++ This option makes it generate a warning instead. ++ ++`--error-unresolved-symbols' ++ This restores the linker's default behaviour of generating errors ++ when it is reporting unresolved symbols. ++ ++`--whole-archive' ++ For each archive mentioned on the command line after the ++ `--whole-archive' option, include every object file in the archive ++ in the link, rather than searching the archive for the required ++ object files. This is normally used to turn an archive file into ++ a shared library, forcing every object to be included in the ++ resulting shared library. This option may be used more than once. ++ ++ Two notes when using this option from gcc: First, gcc doesn't know ++ about this option, so you have to use `-Wl,-whole-archive'. ++ Second, don't forget to use `-Wl,-no-whole-archive' after your ++ list of archives, because gcc will add its own list of archives to ++ your link and you may not want this flag to affect those as well. ++ ++`--wrap SYMBOL' ++ Use a wrapper function for SYMBOL. Any undefined reference to ++ SYMBOL will be resolved to `__wrap_SYMBOL'. Any undefined ++ reference to `__real_SYMBOL' will be resolved to SYMBOL. ++ ++ This can be used to provide a wrapper for a system function. The ++ wrapper function should be called `__wrap_SYMBOL'. If it wishes ++ to call the system function, it should call `__real_SYMBOL'. ++ ++ Here is a trivial example: ++ ++ void * ++ __wrap_malloc (size_t c) ++ { ++ printf ("malloc called with %zu\n", c); ++ return __real_malloc (c); ++ } ++ ++ If you link other code with this file using `--wrap malloc', then ++ all calls to `malloc' will call the function `__wrap_malloc' ++ instead. The call to `__real_malloc' in `__wrap_malloc' will call ++ the real `malloc' function. ++ ++ You may wish to provide a `__real_malloc' function as well, so that ++ links without the `--wrap' option will succeed. If you do this, ++ you should not put the definition of `__real_malloc' in the same ++ file as `__wrap_malloc'; if you do, the assembler may resolve the ++ call before the linker has a chance to wrap it to `malloc'. ++ ++`--eh-frame-hdr' ++ Request creation of `.eh_frame_hdr' section and ELF ++ `PT_GNU_EH_FRAME' segment header. ++ ++`--enable-new-dtags' ++`--disable-new-dtags' ++ This linker can create the new dynamic tags in ELF. But the older ++ ELF systems may not understand them. If you specify ++ `--enable-new-dtags', the dynamic tags will be created as needed. ++ If you specify `--disable-new-dtags', no new dynamic tags will be ++ created. By default, the new dynamic tags are not created. Note ++ that those options are only available for ELF systems. ++ ++`--hash-size=NUMBER' ++ Set the default size of the linker's hash tables to a prime number ++ close to NUMBER. Increasing this value can reduce the length of ++ time it takes the linker to perform its tasks, at the expense of ++ increasing the linker's memory requirements. Similarly reducing ++ this value can reduce the memory requirements at the expense of ++ speed. ++ ++`--reduce-memory-overheads' ++ This option reduces memory requirements at ld runtime, at the ++ expense of linking speed. This was introduced to select the old ++ O(n^2) algorithm for link map file generation, rather than the new ++ O(n) algorithm which uses about 40% more memory for symbol storage. ++ ++ Another effect of the switch is to set the default hash table size ++ to 1021, which again saves memory at the cost of lengthening the ++ linker's run time. This is not done however if the `--hash-size' ++ switch has been used. ++ ++ The `--reduce-memory-overheads' switch may be also be used to ++ enable other tradeoffs in future versions of the linker. ++ ++ ++2.1.1 Options Specific to i386 PE Targets ++----------------------------------------- ++ ++The i386 PE linker supports the `-shared' option, which causes the ++output to be a dynamically linked library (DLL) instead of a normal ++executable. You should name the output `*.dll' when you use this ++option. In addition, the linker fully supports the standard `*.def' ++files, which may be specified on the linker command line like an object ++file (in fact, it should precede archives it exports symbols from, to ++ensure that they get linked in, just like a normal object file). ++ ++ In addition to the options common to all targets, the i386 PE linker ++support additional command line options that are specific to the i386 ++PE target. Options that take values may be separated from their values ++by either a space or an equals sign. ++ ++`--add-stdcall-alias' ++ If given, symbols with a stdcall suffix (@NN) will be exported ++ as-is and also with the suffix stripped. [This option is specific ++ to the i386 PE targeted port of the linker] ++ ++`--base-file FILE' ++ Use FILE as the name of a file in which to save the base addresses ++ of all the relocations needed for generating DLLs with `dlltool'. ++ [This is an i386 PE specific option] ++ ++`--dll' ++ Create a DLL instead of a regular executable. You may also use ++ `-shared' or specify a `LIBRARY' in a given `.def' file. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--enable-stdcall-fixup' ++`--disable-stdcall-fixup' ++ If the link finds a symbol that it cannot resolve, it will attempt ++ to do "fuzzy linking" by looking for another defined symbol that ++ differs only in the format of the symbol name (cdecl vs stdcall) ++ and will resolve that symbol by linking to the match. For ++ example, the undefined symbol `_foo' might be linked to the ++ function `_foo@12', or the undefined symbol `_bar@16' might be ++ linked to the function `_bar'. When the linker does this, it ++ prints a warning, since it normally should have failed to link, ++ but sometimes import libraries generated from third-party dlls may ++ need this feature to be usable. If you specify ++ `--enable-stdcall-fixup', this feature is fully enabled and ++ warnings are not printed. If you specify ++ `--disable-stdcall-fixup', this feature is disabled and such ++ mismatches are considered to be errors. [This option is specific ++ to the i386 PE targeted port of the linker] ++ ++`--export-all-symbols' ++ If given, all global symbols in the objects used to build a DLL ++ will be exported by the DLL. Note that this is the default if ++ there otherwise wouldn't be any exported symbols. When symbols are ++ explicitly exported via DEF files or implicitly exported via ++ function attributes, the default is to not export anything else ++ unless this option is given. Note that the symbols `DllMain@12', ++ `DllEntryPoint@0', `DllMainCRTStartup@12', and `impure_ptr' will ++ not be automatically exported. Also, symbols imported from other ++ DLLs will not be re-exported, nor will symbols specifying the ++ DLL's internal layout such as those beginning with `_head_' or ++ ending with `_iname'. In addition, no symbols from `libgcc', ++ `libstd++', `libmingw32', or `crtX.o' will be exported. Symbols ++ whose names begin with `__rtti_' or `__builtin_' will not be ++ exported, to help with C++ DLLs. Finally, there is an extensive ++ list of cygwin-private symbols that are not exported (obviously, ++ this applies on when building DLLs for cygwin targets). These ++ cygwin-excludes are: `_cygwin_dll_entry@12', ++ `_cygwin_crt0_common@8', `_cygwin_noncygwin_dll_entry@12', ++ `_fmode', `_impure_ptr', `cygwin_attach_dll', `cygwin_premain0', ++ `cygwin_premain1', `cygwin_premain2', `cygwin_premain3', and ++ `environ'. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--exclude-symbols SYMBOL,SYMBOL,...' ++ Specifies a list of symbols which should not be automatically ++ exported. The symbol names may be delimited by commas or colons. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--file-alignment' ++ Specify the file alignment. Sections in the file will always ++ begin at file offsets which are multiples of this number. This ++ defaults to 512. [This option is specific to the i386 PE targeted ++ port of the linker] ++ ++`--heap RESERVE' ++`--heap RESERVE,COMMIT' ++ Specify the amount of memory to reserve (and optionally commit) to ++ be used as heap for this program. The default is 1Mb reserved, 4K ++ committed. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--image-base VALUE' ++ Use VALUE as the base address of your program or dll. This is the ++ lowest memory location that will be used when your program or dll ++ is loaded. To reduce the need to relocate and improve performance ++ of your dlls, each should have a unique base address and not ++ overlap any other dlls. The default is 0x400000 for executables, ++ and 0x10000000 for dlls. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--kill-at' ++ If given, the stdcall suffixes (@NN) will be stripped from symbols ++ before they are exported. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--large-address-aware' ++ If given, the appropriate bit in the "Charateristics" field of the ++ COFF header is set to indicate that this executable supports ++ virtual addresses greater than 2 gigabytes. This should be used ++ in conjuction with the /3GB or /USERVA=VALUE megabytes switch in ++ the "[operating systems]" section of the BOOT.INI. Otherwise, ++ this bit has no effect. [This option is specific to PE targeted ++ ports of the linker] ++ ++`--major-image-version VALUE' ++ Sets the major number of the "image version". Defaults to 1. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--major-os-version VALUE' ++ Sets the major number of the "os version". Defaults to 4. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--major-subsystem-version VALUE' ++ Sets the major number of the "subsystem version". Defaults to 4. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--minor-image-version VALUE' ++ Sets the minor number of the "image version". Defaults to 0. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--minor-os-version VALUE' ++ Sets the minor number of the "os version". Defaults to 0. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--minor-subsystem-version VALUE' ++ Sets the minor number of the "subsystem version". Defaults to 0. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--output-def FILE' ++ The linker will create the file FILE which will contain a DEF file ++ corresponding to the DLL the linker is generating. This DEF file ++ (which should be called `*.def') may be used to create an import ++ library with `dlltool' or may be used as a reference to ++ automatically or implicitly exported symbols. [This option is ++ specific to the i386 PE targeted port of the linker] ++ ++`--out-implib FILE' ++ The linker will create the file FILE which will contain an import ++ lib corresponding to the DLL the linker is generating. This import ++ lib (which should be called `*.dll.a' or `*.a' may be used to link ++ clients against the generated DLL; this behaviour makes it ++ possible to skip a separate `dlltool' import library creation step. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--enable-auto-image-base' ++ Automatically choose the image base for DLLs, unless one is ++ specified using the `--image-base' argument. By using a hash ++ generated from the dllname to create unique image bases for each ++ DLL, in-memory collisions and relocations which can delay program ++ execution are avoided. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--disable-auto-image-base' ++ Do not automatically generate a unique image base. If there is no ++ user-specified image base (`--image-base') then use the platform ++ default. [This option is specific to the i386 PE targeted port of ++ the linker] ++ ++`--dll-search-prefix STRING' ++ When linking dynamically to a dll without an import library, ++ search for `.dll' in preference to ++ `lib.dll'. This behaviour allows easy distinction ++ between DLLs built for the various "subplatforms": native, cygwin, ++ uwin, pw, etc. For instance, cygwin DLLs typically use ++ `--dll-search-prefix=cyg'. [This option is specific to the i386 ++ PE targeted port of the linker] ++ ++`--enable-auto-import' ++ Do sophisticated linking of `_symbol' to `__imp__symbol' for DATA ++ imports from DLLs, and create the necessary thunking symbols when ++ building the import libraries with those DATA exports. Note: Use ++ of the 'auto-import' extension will cause the text section of the ++ image file to be made writable. This does not conform to the ++ PE-COFF format specification published by Microsoft. ++ ++ Using 'auto-import' generally will 'just work' - but sometimes you ++ may see this message: ++ ++ "variable '' can't be auto-imported. Please read the ++ documentation for ld's `--enable-auto-import' for details." ++ ++ This message occurs when some (sub)expression accesses an address ++ ultimately given by the sum of two constants (Win32 import tables ++ only allow one). Instances where this may occur include accesses ++ to member fields of struct variables imported from a DLL, as well ++ as using a constant index into an array variable imported from a ++ DLL. Any multiword variable (arrays, structs, long long, etc) may ++ trigger this error condition. However, regardless of the exact ++ data type of the offending exported variable, ld will always ++ detect it, issue the warning, and exit. ++ ++ There are several ways to address this difficulty, regardless of ++ the data type of the exported variable: ++ ++ One way is to use -enable-runtime-pseudo-reloc switch. This leaves ++ the task of adjusting references in your client code for runtime ++ environment, so this method works only when runtime environment ++ supports this feature. ++ ++ A second solution is to force one of the 'constants' to be a ++ variable - that is, unknown and un-optimizable at compile time. ++ For arrays, there are two possibilities: a) make the indexee (the ++ array's address) a variable, or b) make the 'constant' index a ++ variable. Thus: ++ ++ extern type extern_array[]; ++ extern_array[1] --> ++ { volatile type *t=extern_array; t[1] } ++ ++ or ++ ++ extern type extern_array[]; ++ extern_array[1] --> ++ { volatile int t=1; extern_array[t] } ++ ++ For structs (and most other multiword data types) the only option ++ is to make the struct itself (or the long long, or the ...) ++ variable: ++ ++ extern struct s extern_struct; ++ extern_struct.field --> ++ { volatile struct s *t=&extern_struct; t->field } ++ ++ or ++ ++ extern long long extern_ll; ++ extern_ll --> ++ { volatile long long * local_ll=&extern_ll; *local_ll } ++ ++ A third method of dealing with this difficulty is to abandon ++ 'auto-import' for the offending symbol and mark it with ++ `__declspec(dllimport)'. However, in practise that requires using ++ compile-time #defines to indicate whether you are building a DLL, ++ building client code that will link to the DLL, or merely ++ building/linking to a static library. In making the choice ++ between the various methods of resolving the 'direct address with ++ constant offset' problem, you should consider typical real-world ++ usage: ++ ++ Original: ++ --foo.h ++ extern int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ printf("%d\n",arr[1]); ++ } ++ ++ Solution 1: ++ --foo.h ++ extern int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ /* This workaround is for win32 and cygwin; do not "optimize" */ ++ volatile int *parr = arr; ++ printf("%d\n",parr[1]); ++ } ++ ++ Solution 2: ++ --foo.h ++ /* Note: auto-export is assumed (no __declspec(dllexport)) */ ++ #if (defined(_WIN32) || defined(__CYGWIN__)) && \ ++ !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC)) ++ #define FOO_IMPORT __declspec(dllimport) ++ #else ++ #define FOO_IMPORT ++ #endif ++ extern FOO_IMPORT int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ printf("%d\n",arr[1]); ++ } ++ ++ A fourth way to avoid this problem is to re-code your library to ++ use a functional interface rather than a data interface for the ++ offending variables (e.g. set_foo() and get_foo() accessor ++ functions). [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--disable-auto-import' ++ Do not attempt to do sophisticated linking of `_symbol' to ++ `__imp__symbol' for DATA imports from DLLs. [This option is ++ specific to the i386 PE targeted port of the linker] ++ ++`--enable-runtime-pseudo-reloc' ++ If your code contains expressions described in -enable-auto-import ++ section, that is, DATA imports from DLL with non-zero offset, this ++ switch will create a vector of 'runtime pseudo relocations' which ++ can be used by runtime environment to adjust references to such ++ data in your client code. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--disable-runtime-pseudo-reloc' ++ Do not create pseudo relocations for non-zero offset DATA imports ++ from DLLs. This is the default. [This option is specific to the ++ i386 PE targeted port of the linker] ++ ++`--enable-extra-pe-debug' ++ Show additional debug info related to auto-import symbol thunking. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--section-alignment' ++ Sets the section alignment. Sections in memory will always begin ++ at addresses which are a multiple of this number. Defaults to ++ 0x1000. [This option is specific to the i386 PE targeted port of ++ the linker] ++ ++`--stack RESERVE' ++`--stack RESERVE,COMMIT' ++ Specify the amount of memory to reserve (and optionally commit) to ++ be used as stack for this program. The default is 2Mb reserved, 4K ++ committed. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--subsystem WHICH' ++`--subsystem WHICH:MAJOR' ++`--subsystem WHICH:MAJOR.MINOR' ++ Specifies the subsystem under which your program will execute. The ++ legal values for WHICH are `native', `windows', `console', ++ `posix', and `xbox'. You may optionally set the subsystem version ++ also. Numeric values are also accepted for WHICH. [This option ++ is specific to the i386 PE targeted port of the linker] ++ ++ ++ ++File: ld.info, Node: Environment, Prev: Options, Up: Invocation ++ ++2.2 Environment Variables ++========================= ++ ++You can change the behaviour of `ld' with the environment variables ++`GNUTARGET', `LDEMULATION' and `COLLECT_NO_DEMANGLE'. ++ ++ `GNUTARGET' determines the input-file object format if you don't use ++`-b' (or its synonym `--format'). Its value should be one of the BFD ++names for an input format (*note BFD::). If there is no `GNUTARGET' in ++the environment, `ld' uses the natural format of the target. If ++`GNUTARGET' is set to `default' then BFD attempts to discover the input ++format by examining binary input files; this method often succeeds, but ++there are potential ambiguities, since there is no method of ensuring ++that the magic number used to specify object-file formats is unique. ++However, the configuration procedure for BFD on each system places the ++conventional format for that system first in the search-list, so ++ambiguities are resolved in favor of convention. ++ ++ `LDEMULATION' determines the default emulation if you don't use the ++`-m' option. The emulation can affect various aspects of linker ++behaviour, particularly the default linker script. You can list the ++available emulations with the `--verbose' or `-V' options. If the `-m' ++option is not used, and the `LDEMULATION' environment variable is not ++defined, the default emulation depends upon how the linker was ++configured. ++ ++ Normally, the linker will default to demangling symbols. However, if ++`COLLECT_NO_DEMANGLE' is set in the environment, then it will default ++to not demangling symbols. This environment variable is used in a ++similar fashion by the `gcc' linker wrapper program. The default may ++be overridden by the `--demangle' and `--no-demangle' options. ++ ++ ++File: ld.info, Node: Scripts, Next: Machine Dependent, Prev: Invocation, Up: Top ++ ++3 Linker Scripts ++**************** ++ ++Every link is controlled by a "linker script". This script is written ++in the linker command language. ++ ++ The main purpose of the linker script is to describe how the ++sections in the input files should be mapped into the output file, and ++to control the memory layout of the output file. Most linker scripts ++do nothing more than this. However, when necessary, the linker script ++can also direct the linker to perform many other operations, using the ++commands described below. ++ ++ The linker always uses a linker script. If you do not supply one ++yourself, the linker will use a default script that is compiled into the ++linker executable. You can use the `--verbose' command line option to ++display the default linker script. Certain command line options, such ++as `-r' or `-N', will affect the default linker script. ++ ++ You may supply your own linker script by using the `-T' command line ++option. When you do this, your linker script will replace the default ++linker script. ++ ++ You may also use linker scripts implicitly by naming them as input ++files to the linker, as though they were files to be linked. *Note ++Implicit Linker Scripts::. ++ ++* Menu: ++ ++* Basic Script Concepts:: Basic Linker Script Concepts ++* Script Format:: Linker Script Format ++* Simple Example:: Simple Linker Script Example ++* Simple Commands:: Simple Linker Script Commands ++* Assignments:: Assigning Values to Symbols ++* SECTIONS:: SECTIONS Command ++* MEMORY:: MEMORY Command ++* PHDRS:: PHDRS Command ++* VERSION:: VERSION Command ++* Expressions:: Expressions in Linker Scripts ++* Implicit Linker Scripts:: Implicit Linker Scripts ++ ++ ++File: ld.info, Node: Basic Script Concepts, Next: Script Format, Up: Scripts ++ ++3.1 Basic Linker Script Concepts ++================================ ++ ++We need to define some basic concepts and vocabulary in order to ++describe the linker script language. ++ ++ The linker combines input files into a single output file. The ++output file and each input file are in a special data format known as an ++"object file format". Each file is called an "object file". The ++output file is often called an "executable", but for our purposes we ++will also call it an object file. Each object file has, among other ++things, a list of "sections". We sometimes refer to a section in an ++input file as an "input section"; similarly, a section in the output ++file is an "output section". ++ ++ Each section in an object file has a name and a size. Most sections ++also have an associated block of data, known as the "section contents". ++A section may be marked as "loadable", which mean that the contents ++should be loaded into memory when the output file is run. A section ++with no contents may be "allocatable", which means that an area in ++memory should be set aside, but nothing in particular should be loaded ++there (in some cases this memory must be zeroed out). A section which ++is neither loadable nor allocatable typically contains some sort of ++debugging information. ++ ++ Every loadable or allocatable output section has two addresses. The ++first is the "VMA", or virtual memory address. This is the address the ++section will have when the output file is run. The second is the ++"LMA", or load memory address. This is the address at which the ++section will be loaded. In most cases the two addresses will be the ++same. An example of when they might be different is when a data section ++is loaded into ROM, and then copied into RAM when the program starts up ++(this technique is often used to initialize global variables in a ROM ++based system). In this case the ROM address would be the LMA, and the ++RAM address would be the VMA. ++ ++ You can see the sections in an object file by using the `objdump' ++program with the `-h' option. ++ ++ Every object file also has a list of "symbols", known as the "symbol ++table". A symbol may be defined or undefined. Each symbol has a name, ++and each defined symbol has an address, among other information. If ++you compile a C or C++ program into an object file, you will get a ++defined symbol for every defined function and global or static ++variable. Every undefined function or global variable which is ++referenced in the input file will become an undefined symbol. ++ ++ You can see the symbols in an object file by using the `nm' program, ++or by using the `objdump' program with the `-t' option. ++ ++ ++File: ld.info, Node: Script Format, Next: Simple Example, Prev: Basic Script Concepts, Up: Scripts ++ ++3.2 Linker Script Format ++======================== ++ ++Linker scripts are text files. ++ ++ You write a linker script as a series of commands. Each command is ++either a keyword, possibly followed by arguments, or an assignment to a ++symbol. You may separate commands using semicolons. Whitespace is ++generally ignored. ++ ++ Strings such as file or format names can normally be entered ++directly. If the file name contains a character such as a comma which ++would otherwise serve to separate file names, you may put the file name ++in double quotes. There is no way to use a double quote character in a ++file name. ++ ++ You may include comments in linker scripts just as in C, delimited by ++`/*' and `*/'. As in C, comments are syntactically equivalent to ++whitespace. ++ ++ ++File: ld.info, Node: Simple Example, Next: Simple Commands, Prev: Script Format, Up: Scripts ++ ++3.3 Simple Linker Script Example ++================================ ++ ++Many linker scripts are fairly simple. ++ ++ The simplest possible linker script has just one command: ++`SECTIONS'. You use the `SECTIONS' command to describe the memory ++layout of the output file. ++ ++ The `SECTIONS' command is a powerful command. Here we will describe ++a simple use of it. Let's assume your program consists only of code, ++initialized data, and uninitialized data. These will be in the ++`.text', `.data', and `.bss' sections, respectively. Let's assume ++further that these are the only sections which appear in your input ++files. ++ ++ For this example, let's say that the code should be loaded at address ++0x10000, and that the data should start at address 0x8000000. Here is a ++linker script which will do that: ++ SECTIONS ++ { ++ . = 0x10000; ++ .text : { *(.text) } ++ . = 0x8000000; ++ .data : { *(.data) } ++ .bss : { *(.bss) } ++ } ++ ++ You write the `SECTIONS' command as the keyword `SECTIONS', followed ++by a series of symbol assignments and output section descriptions ++enclosed in curly braces. ++ ++ The first line inside the `SECTIONS' command of the above example ++sets the value of the special symbol `.', which is the location ++counter. If you do not specify the address of an output section in some ++other way (other ways are described later), the address is set from the ++current value of the location counter. The location counter is then ++incremented by the size of the output section. At the start of the ++`SECTIONS' command, the location counter has the value `0'. ++ ++ The second line defines an output section, `.text'. The colon is ++required syntax which may be ignored for now. Within the curly braces ++after the output section name, you list the names of the input sections ++which should be placed into this output section. The `*' is a wildcard ++which matches any file name. The expression `*(.text)' means all ++`.text' input sections in all input files. ++ ++ Since the location counter is `0x10000' when the output section ++`.text' is defined, the linker will set the address of the `.text' ++section in the output file to be `0x10000'. ++ ++ The remaining lines define the `.data' and `.bss' sections in the ++output file. The linker will place the `.data' output section at ++address `0x8000000'. After the linker places the `.data' output ++section, the value of the location counter will be `0x8000000' plus the ++size of the `.data' output section. The effect is that the linker will ++place the `.bss' output section immediately after the `.data' output ++section in memory. ++ ++ The linker will ensure that each output section has the required ++alignment, by increasing the location counter if necessary. In this ++example, the specified addresses for the `.text' and `.data' sections ++will probably satisfy any alignment constraints, but the linker may ++have to create a small gap between the `.data' and `.bss' sections. ++ ++ That's it! That's a simple and complete linker script. ++ ++ ++File: ld.info, Node: Simple Commands, Next: Assignments, Prev: Simple Example, Up: Scripts ++ ++3.4 Simple Linker Script Commands ++================================= ++ ++In this section we describe the simple linker script commands. ++ ++* Menu: ++ ++* Entry Point:: Setting the entry point ++* File Commands:: Commands dealing with files ++ ++* Format Commands:: Commands dealing with object file formats ++ ++* Miscellaneous Commands:: Other linker script commands ++ ++ ++File: ld.info, Node: Entry Point, Next: File Commands, Up: Simple Commands ++ ++3.4.1 Setting the Entry Point ++----------------------------- ++ ++The first instruction to execute in a program is called the "entry ++point". You can use the `ENTRY' linker script command to set the entry ++point. The argument is a symbol name: ++ ENTRY(SYMBOL) ++ ++ There are several ways to set the entry point. The linker will set ++the entry point by trying each of the following methods in order, and ++stopping when one of them succeeds: ++ * the `-e' ENTRY command-line option; ++ ++ * the `ENTRY(SYMBOL)' command in a linker script; ++ ++ * the value of the symbol `start', if defined; ++ ++ * the address of the first byte of the `.text' section, if present; ++ ++ * The address `0'. ++ ++ ++File: ld.info, Node: File Commands, Next: Format Commands, Prev: Entry Point, Up: Simple Commands ++ ++3.4.2 Commands Dealing with Files ++--------------------------------- ++ ++Several linker script commands deal with files. ++ ++`INCLUDE FILENAME' ++ Include the linker script FILENAME at this point. The file will ++ be searched for in the current directory, and in any directory ++ specified with the `-L' option. You can nest calls to `INCLUDE' ++ up to 10 levels deep. ++ ++`INPUT(FILE, FILE, ...)' ++`INPUT(FILE FILE ...)' ++ The `INPUT' command directs the linker to include the named files ++ in the link, as though they were named on the command line. ++ ++ For example, if you always want to include `subr.o' any time you do ++ a link, but you can't be bothered to put it on every link command ++ line, then you can put `INPUT (subr.o)' in your linker script. ++ ++ In fact, if you like, you can list all of your input files in the ++ linker script, and then invoke the linker with nothing but a `-T' ++ option. ++ ++ In case a "sysroot prefix" is configured, and the filename starts ++ with the `/' character, and the script being processed was located ++ inside the "sysroot prefix", the filename will be looked for in ++ the "sysroot prefix". Otherwise, the linker will try to open the ++ file in the current directory. If it is not found, the linker ++ will search through the archive library search path. See the ++ description of `-L' in *Note Command Line Options: Options. ++ ++ If you use `INPUT (-lFILE)', `ld' will transform the name to ++ `libFILE.a', as with the command line argument `-l'. ++ ++ When you use the `INPUT' command in an implicit linker script, the ++ files will be included in the link at the point at which the linker ++ script file is included. This can affect archive searching. ++ ++`GROUP(FILE, FILE, ...)' ++`GROUP(FILE FILE ...)' ++ The `GROUP' command is like `INPUT', except that the named files ++ should all be archives, and they are searched repeatedly until no ++ new undefined references are created. See the description of `-(' ++ in *Note Command Line Options: Options. ++ ++`AS_NEEDED(FILE, FILE, ...)' ++`AS_NEEDED(FILE FILE ...)' ++ This construct can appear only inside of the `INPUT' or `GROUP' ++ commands, among other filenames. The files listed will be handled ++ as if they appear directly in the `INPUT' or `GROUP' commands, ++ with the exception of ELF shared libraries, that will be added only ++ when they are actually needed. This construct essentially enables ++ `--as-needed' option for all the files listed inside of it and ++ restores previous `--as-needed' resp. `--no-as-needed' setting ++ afterwards. ++ ++`OUTPUT(FILENAME)' ++ The `OUTPUT' command names the output file. Using ++ `OUTPUT(FILENAME)' in the linker script is exactly like using `-o ++ FILENAME' on the command line (*note Command Line Options: ++ Options.). If both are used, the command line option takes ++ precedence. ++ ++ You can use the `OUTPUT' command to define a default name for the ++ output file other than the usual default of `a.out'. ++ ++`SEARCH_DIR(PATH)' ++ The `SEARCH_DIR' command adds PATH to the list of paths where `ld' ++ looks for archive libraries. Using `SEARCH_DIR(PATH)' is exactly ++ like using `-L PATH' on the command line (*note Command Line ++ Options: Options.). If both are used, then the linker will search ++ both paths. Paths specified using the command line option are ++ searched first. ++ ++`STARTUP(FILENAME)' ++ The `STARTUP' command is just like the `INPUT' command, except ++ that FILENAME will become the first input file to be linked, as ++ though it were specified first on the command line. This may be ++ useful when using a system in which the entry point is always the ++ start of the first file. ++ ++ ++File: ld.info, Node: Format Commands, Next: Miscellaneous Commands, Prev: File Commands, Up: Simple Commands ++ ++3.4.3 Commands Dealing with Object File Formats ++----------------------------------------------- ++ ++A couple of linker script commands deal with object file formats. ++ ++`OUTPUT_FORMAT(BFDNAME)' ++`OUTPUT_FORMAT(DEFAULT, BIG, LITTLE)' ++ The `OUTPUT_FORMAT' command names the BFD format to use for the ++ output file (*note BFD::). Using `OUTPUT_FORMAT(BFDNAME)' is ++ exactly like using `--oformat BFDNAME' on the command line (*note ++ Command Line Options: Options.). If both are used, the command ++ line option takes precedence. ++ ++ You can use `OUTPUT_FORMAT' with three arguments to use different ++ formats based on the `-EB' and `-EL' command line options. This ++ permits the linker script to set the output format based on the ++ desired endianness. ++ ++ If neither `-EB' nor `-EL' are used, then the output format will ++ be the first argument, DEFAULT. If `-EB' is used, the output ++ format will be the second argument, BIG. If `-EL' is used, the ++ output format will be the third argument, LITTLE. ++ ++ For example, the default linker script for the MIPS ELF target ++ uses this command: ++ OUTPUT_FORMAT(elf32-bigmips, elf32-bigmips, elf32-littlemips) ++ This says that the default format for the output file is ++ `elf32-bigmips', but if the user uses the `-EL' command line ++ option, the output file will be created in the `elf32-littlemips' ++ format. ++ ++`TARGET(BFDNAME)' ++ The `TARGET' command names the BFD format to use when reading input ++ files. It affects subsequent `INPUT' and `GROUP' commands. This ++ command is like using `-b BFDNAME' on the command line (*note ++ Command Line Options: Options.). If the `TARGET' command is used ++ but `OUTPUT_FORMAT' is not, then the last `TARGET' command is also ++ used to set the format for the output file. *Note BFD::. ++ ++ ++File: ld.info, Node: Miscellaneous Commands, Prev: Format Commands, Up: Simple Commands ++ ++3.4.4 Other Linker Script Commands ++---------------------------------- ++ ++There are a few other linker scripts commands. ++ ++`ASSERT(EXP, MESSAGE)' ++ Ensure that EXP is non-zero. If it is zero, then exit the linker ++ with an error code, and print MESSAGE. ++ ++`EXTERN(SYMBOL SYMBOL ...)' ++ Force SYMBOL to be entered in the output file as an undefined ++ symbol. Doing this may, for example, trigger linking of additional ++ modules from standard libraries. You may list several SYMBOLs for ++ each `EXTERN', and you may use `EXTERN' multiple times. This ++ command has the same effect as the `-u' command-line option. ++ ++`FORCE_COMMON_ALLOCATION' ++ This command has the same effect as the `-d' command-line option: ++ to make `ld' assign space to common symbols even if a relocatable ++ output file is specified (`-r'). ++ ++`INHIBIT_COMMON_ALLOCATION' ++ This command has the same effect as the `--no-define-common' ++ command-line option: to make `ld' omit the assignment of addresses ++ to common symbols even for a non-relocatable output file. ++ ++`NOCROSSREFS(SECTION SECTION ...)' ++ This command may be used to tell `ld' to issue an error about any ++ references among certain output sections. ++ ++ In certain types of programs, particularly on embedded systems when ++ using overlays, when one section is loaded into memory, another ++ section will not be. Any direct references between the two ++ sections would be errors. For example, it would be an error if ++ code in one section called a function defined in the other section. ++ ++ The `NOCROSSREFS' command takes a list of output section names. If ++ `ld' detects any cross references between the sections, it reports ++ an error and returns a non-zero exit status. Note that the ++ `NOCROSSREFS' command uses output section names, not input section ++ names. ++ ++`OUTPUT_ARCH(BFDARCH)' ++ Specify a particular output machine architecture. The argument is ++ one of the names used by the BFD library (*note BFD::). You can ++ see the architecture of an object file by using the `objdump' ++ program with the `-f' option. ++ ++ ++File: ld.info, Node: Assignments, Next: SECTIONS, Prev: Simple Commands, Up: Scripts ++ ++3.5 Assigning Values to Symbols ++=============================== ++ ++You may assign a value to a symbol in a linker script. This will define ++the symbol and place it into the symbol table with a global scope. ++ ++* Menu: ++ ++* Simple Assignments:: Simple Assignments ++* PROVIDE:: PROVIDE ++* PROVIDE_HIDDEN:: PROVIDE_HIDDEN ++* Source Code Reference:: How to use a linker script defined symbol in source code ++ ++ ++File: ld.info, Node: Simple Assignments, Next: PROVIDE, Up: Assignments ++ ++3.5.1 Simple Assignments ++------------------------ ++ ++You may assign to a symbol using any of the C assignment operators: ++ ++`SYMBOL = EXPRESSION ;' ++`SYMBOL += EXPRESSION ;' ++`SYMBOL -= EXPRESSION ;' ++`SYMBOL *= EXPRESSION ;' ++`SYMBOL /= EXPRESSION ;' ++`SYMBOL <<= EXPRESSION ;' ++`SYMBOL >>= EXPRESSION ;' ++`SYMBOL &= EXPRESSION ;' ++`SYMBOL |= EXPRESSION ;' ++ ++ The first case will define SYMBOL to the value of EXPRESSION. In ++the other cases, SYMBOL must already be defined, and the value will be ++adjusted accordingly. ++ ++ The special symbol name `.' indicates the location counter. You may ++only use this within a `SECTIONS' command. *Note Location Counter::. ++ ++ The semicolon after EXPRESSION is required. ++ ++ Expressions are defined below; see *Note Expressions::. ++ ++ You may write symbol assignments as commands in their own right, or ++as statements within a `SECTIONS' command, or as part of an output ++section description in a `SECTIONS' command. ++ ++ The section of the symbol will be set from the section of the ++expression; for more information, see *Note Expression Section::. ++ ++ Here is an example showing the three different places that symbol ++assignments may be used: ++ ++ floating_point = 0; ++ SECTIONS ++ { ++ .text : ++ { ++ *(.text) ++ _etext = .; ++ } ++ _bdata = (. + 3) & ~ 3; ++ .data : { *(.data) } ++ } ++ In this example, the symbol `floating_point' will be defined as ++zero. The symbol `_etext' will be defined as the address following the ++last `.text' input section. The symbol `_bdata' will be defined as the ++address following the `.text' output section aligned upward to a 4 byte ++boundary. ++ ++ ++File: ld.info, Node: PROVIDE, Next: PROVIDE_HIDDEN, Prev: Simple Assignments, Up: Assignments ++ ++3.5.2 PROVIDE ++------------- ++ ++In some cases, it is desirable for a linker script to define a symbol ++only if it is referenced and is not defined by any object included in ++the link. For example, traditional linkers defined the symbol `etext'. ++However, ANSI C requires that the user be able to use `etext' as a ++function name without encountering an error. The `PROVIDE' keyword may ++be used to define a symbol, such as `etext', only if it is referenced ++but not defined. The syntax is `PROVIDE(SYMBOL = EXPRESSION)'. ++ ++ Here is an example of using `PROVIDE' to define `etext': ++ SECTIONS ++ { ++ .text : ++ { ++ *(.text) ++ _etext = .; ++ PROVIDE(etext = .); ++ } ++ } ++ ++ In this example, if the program defines `_etext' (with a leading ++underscore), the linker will give a multiple definition error. If, on ++the other hand, the program defines `etext' (with no leading ++underscore), the linker will silently use the definition in the program. ++If the program references `etext' but does not define it, the linker ++will use the definition in the linker script. ++ ++ ++File: ld.info, Node: PROVIDE_HIDDEN, Next: Source Code Reference, Prev: PROVIDE, Up: Assignments ++ ++3.5.3 PROVIDE_HIDDEN ++-------------------- ++ ++Similar to `PROVIDE'. For ELF targeted ports, the symbol will be ++hidden and won't be exported. ++ ++ ++File: ld.info, Node: Source Code Reference, Prev: PROVIDE_HIDDEN, Up: Assignments ++ ++3.5.4 Source Code Reference ++--------------------------- ++ ++Accessing a linker script defined variable from source code is not ++intuitive. In particular a linker script symbol is not equivalent to a ++variable declaration in a high level language, it is instead a symbol ++that does not have a value. ++ ++ Before going further, it is important to note that compilers often ++transform names in the source code into different names when they are ++stored in the symbol table. For example, Fortran compilers commonly ++prepend or append an underscore, and C++ performs extensive `name ++mangling'. Therefore there might be a discrepancy between the name of ++a variable as it is used in source code and the name of the same ++variable as it is defined in a linker script. For example in C a ++linker script variable might be referred to as: ++ ++ extern int foo; ++ ++ But in the linker script it might be defined as: ++ ++ _foo = 1000; ++ ++ In the remaining examples however it is assumed that no name ++transformation has taken place. ++ ++ When a symbol is declared in a high level language such as C, two ++things happen. The first is that the compiler reserves enough space in ++the program's memory to hold the _value_ of the symbol. The second is ++that the compiler creates an entry in the program's symbol table which ++holds the symbol's _address_. ie the symbol table contains the address ++of the block of memory holding the symbol's value. So for example the ++following C declaration, at file scope: ++ ++ int foo = 1000; ++ ++ creates a entry called `foo' in the symbol table. This entry holds ++the address of an `int' sized block of memory where the number 1000 is ++initially stored. ++ ++ When a program references a symbol the compiler generates code that ++first accesses the symbol table to find the address of the symbol's ++memory block and then code to read the value from that memory block. ++So: ++ ++ foo = 1; ++ ++ looks up the symbol `foo' in the symbol table, gets the address ++associated with this symbol and then writes the value 1 into that ++address. Whereas: ++ ++ int * a = & foo; ++ ++ looks up the symbol `foo' in the symbol table, gets it address and ++then copies this address into the block of memory associated with the ++variable `a'. ++ ++ Linker scripts symbol declarations, by contrast, create an entry in ++the symbol table but do not assign any memory to them. Thus they are ++an address without a value. So for example the linker script ++definition: ++ ++ foo = 1000; ++ ++ creates an entry in the symbol table called `foo' which holds the ++address of memory location 1000, but nothing special is stored at ++address 1000. This means that you cannot access the _value_ of a ++linker script defined symbol - it has no value - all you can do is ++access the _address_ of a linker script defined symbol. ++ ++ Hence when you are using a linker script defined symbol in source ++code you should always take the address of the symbol, and never ++attempt to use its value. For example suppose you want to copy the ++contents of a section of memory called .ROM into a section called ++.FLASH and the linker script contains these declarations: ++ ++ start_of_ROM = .ROM; ++ end_of_ROM = .ROM + sizeof (.ROM) - 1; ++ start_of_FLASH = .FLASH; ++ ++ Then the C source code to perform the copy would be: ++ ++ extern char start_of_ROM, end_of_ROM, start_of_FLASH; ++ ++ memcpy (& start_of_FLASH, & start_of_ROM, & end_of_ROM - & start_of_ROM); ++ ++ Note the use of the `&' operators. These are correct. ++ ++ ++File: ld.info, Node: SECTIONS, Next: MEMORY, Prev: Assignments, Up: Scripts ++ ++3.6 SECTIONS Command ++==================== ++ ++The `SECTIONS' command tells the linker how to map input sections into ++output sections, and how to place the output sections in memory. ++ ++ The format of the `SECTIONS' command is: ++ SECTIONS ++ { ++ SECTIONS-COMMAND ++ SECTIONS-COMMAND ++ ... ++ } ++ ++ Each SECTIONS-COMMAND may of be one of the following: ++ ++ * an `ENTRY' command (*note Entry command: Entry Point.) ++ ++ * a symbol assignment (*note Assignments::) ++ ++ * an output section description ++ ++ * an overlay description ++ ++ The `ENTRY' command and symbol assignments are permitted inside the ++`SECTIONS' command for convenience in using the location counter in ++those commands. This can also make the linker script easier to ++understand because you can use those commands at meaningful points in ++the layout of the output file. ++ ++ Output section descriptions and overlay descriptions are described ++below. ++ ++ If you do not use a `SECTIONS' command in your linker script, the ++linker will place each input section into an identically named output ++section in the order that the sections are first encountered in the ++input files. If all input sections are present in the first file, for ++example, the order of sections in the output file will match the order ++in the first input file. The first section will be at address zero. ++ ++* Menu: ++ ++* Output Section Description:: Output section description ++* Output Section Name:: Output section name ++* Output Section Address:: Output section address ++* Input Section:: Input section description ++* Output Section Data:: Output section data ++* Output Section Keywords:: Output section keywords ++* Output Section Discarding:: Output section discarding ++* Output Section Attributes:: Output section attributes ++* Overlay Description:: Overlay description ++ ++ ++File: ld.info, Node: Output Section Description, Next: Output Section Name, Up: SECTIONS ++ ++3.6.1 Output Section Description ++-------------------------------- ++ ++The full description of an output section looks like this: ++ SECTION [ADDRESS] [(TYPE)] : ++ [AT(LMA)] [ALIGN(SECTION_ALIGN)] [SUBALIGN(SUBSECTION_ALIGN)] ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [>REGION] [AT>LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP] ++ ++ Most output sections do not use most of the optional section ++attributes. ++ ++ The whitespace around SECTION is required, so that the section name ++is unambiguous. The colon and the curly braces are also required. The ++line breaks and other white space are optional. ++ ++ Each OUTPUT-SECTION-COMMAND may be one of the following: ++ ++ * a symbol assignment (*note Assignments::) ++ ++ * an input section description (*note Input Section::) ++ ++ * data values to include directly (*note Output Section Data::) ++ ++ * a special output section keyword (*note Output Section Keywords::) ++ ++ ++File: ld.info, Node: Output Section Name, Next: Output Section Address, Prev: Output Section Description, Up: SECTIONS ++ ++3.6.2 Output Section Name ++------------------------- ++ ++The name of the output section is SECTION. SECTION must meet the ++constraints of your output format. In formats which only support a ++limited number of sections, such as `a.out', the name must be one of ++the names supported by the format (`a.out', for example, allows only ++`.text', `.data' or `.bss'). If the output format supports any number ++of sections, but with numbers and not names (as is the case for Oasys), ++the name should be supplied as a quoted numeric string. A section name ++may consist of any sequence of characters, but a name which contains ++any unusual characters such as commas must be quoted. ++ ++ The output section name `/DISCARD/' is special; *Note Output Section ++Discarding::. ++ ++ ++File: ld.info, Node: Output Section Address, Next: Input Section, Prev: Output Section Name, Up: SECTIONS ++ ++3.6.3 Output Section Address ++---------------------------- ++ ++The ADDRESS is an expression for the VMA (the virtual memory address) ++of the output section. If you do not provide ADDRESS, the linker will ++set it based on REGION if present, or otherwise based on the current ++value of the location counter. ++ ++ If you provide ADDRESS, the address of the output section will be ++set to precisely that. If you provide neither ADDRESS nor REGION, then ++the address of the output section will be set to the current value of ++the location counter aligned to the alignment requirements of the ++output section. The alignment requirement of the output section is the ++strictest alignment of any input section contained within the output ++section. ++ ++ For example, ++ .text . : { *(.text) } ++ and ++ .text : { *(.text) } ++ are subtly different. The first will set the address of the `.text' ++output section to the current value of the location counter. The ++second will set it to the current value of the location counter aligned ++to the strictest alignment of a `.text' input section. ++ ++ The ADDRESS may be an arbitrary expression; *Note Expressions::. ++For example, if you want to align the section on a 0x10 byte boundary, ++so that the lowest four bits of the section address are zero, you could ++do something like this: ++ .text ALIGN(0x10) : { *(.text) } ++ This works because `ALIGN' returns the current location counter ++aligned upward to the specified value. ++ ++ Specifying ADDRESS for a section will change the value of the ++location counter. ++ ++ ++File: ld.info, Node: Input Section, Next: Output Section Data, Prev: Output Section Address, Up: SECTIONS ++ ++3.6.4 Input Section Description ++------------------------------- ++ ++The most common output section command is an input section description. ++ ++ The input section description is the most basic linker script ++operation. You use output sections to tell the linker how to lay out ++your program in memory. You use input section descriptions to tell the ++linker how to map the input files into your memory layout. ++ ++* Menu: ++ ++* Input Section Basics:: Input section basics ++* Input Section Wildcards:: Input section wildcard patterns ++* Input Section Common:: Input section for common symbols ++* Input Section Keep:: Input section and garbage collection ++* Input Section Example:: Input section example ++ ++ ++File: ld.info, Node: Input Section Basics, Next: Input Section Wildcards, Up: Input Section ++ ++3.6.4.1 Input Section Basics ++............................ ++ ++An input section description consists of a file name optionally followed ++by a list of section names in parentheses. ++ ++ The file name and the section name may be wildcard patterns, which we ++describe further below (*note Input Section Wildcards::). ++ ++ The most common input section description is to include all input ++sections with a particular name in the output section. For example, to ++include all input `.text' sections, you would write: ++ *(.text) ++ Here the `*' is a wildcard which matches any file name. To exclude ++a list of files from matching the file name wildcard, EXCLUDE_FILE may ++be used to match all files except the ones specified in the ++EXCLUDE_FILE list. For example: ++ (*(EXCLUDE_FILE (*crtend.o *otherfile.o) .ctors)) ++ will cause all .ctors sections from all files except `crtend.o' and ++`otherfile.o' to be included. ++ ++ There are two ways to include more than one section: ++ *(.text .rdata) ++ *(.text) *(.rdata) ++ The difference between these is the order in which the `.text' and ++`.rdata' input sections will appear in the output section. In the ++first example, they will be intermingled, appearing in the same order as ++they are found in the linker input. In the second example, all `.text' ++input sections will appear first, followed by all `.rdata' input ++sections. ++ ++ You can specify a file name to include sections from a particular ++file. You would do this if one or more of your files contain special ++data that needs to be at a particular location in memory. For example: ++ data.o(.data) ++ ++ If you use a file name without a list of sections, then all sections ++in the input file will be included in the output section. This is not ++commonly done, but it may by useful on occasion. For example: ++ data.o ++ ++ When you use a file name which does not contain any wild card ++characters, the linker will first see if you also specified the file ++name on the linker command line or in an `INPUT' command. If you did ++not, the linker will attempt to open the file as an input file, as ++though it appeared on the command line. Note that this differs from an ++`INPUT' command, because the linker will not search for the file in the ++archive search path. ++ ++ ++File: ld.info, Node: Input Section Wildcards, Next: Input Section Common, Prev: Input Section Basics, Up: Input Section ++ ++3.6.4.2 Input Section Wildcard Patterns ++....................................... ++ ++In an input section description, either the file name or the section ++name or both may be wildcard patterns. ++ ++ The file name of `*' seen in many examples is a simple wildcard ++pattern for the file name. ++ ++ The wildcard patterns are like those used by the Unix shell. ++ ++`*' ++ matches any number of characters ++ ++`?' ++ matches any single character ++ ++`[CHARS]' ++ matches a single instance of any of the CHARS; the `-' character ++ may be used to specify a range of characters, as in `[a-z]' to ++ match any lower case letter ++ ++`\' ++ quotes the following character ++ ++ When a file name is matched with a wildcard, the wildcard characters ++will not match a `/' character (used to separate directory names on ++Unix). A pattern consisting of a single `*' character is an exception; ++it will always match any file name, whether it contains a `/' or not. ++In a section name, the wildcard characters will match a `/' character. ++ ++ File name wildcard patterns only match files which are explicitly ++specified on the command line or in an `INPUT' command. The linker ++does not search directories to expand wildcards. ++ ++ If a file name matches more than one wildcard pattern, or if a file ++name appears explicitly and is also matched by a wildcard pattern, the ++linker will use the first match in the linker script. For example, this ++sequence of input section descriptions is probably in error, because the ++`data.o' rule will not be used: ++ .data : { *(.data) } ++ .data1 : { data.o(.data) } ++ ++ Normally, the linker will place files and sections matched by ++wildcards in the order in which they are seen during the link. You can ++change this by using the `SORT_BY_NAME' keyword, which appears before a ++wildcard pattern in parentheses (e.g., `SORT_BY_NAME(.text*)'). When ++the `SORT_BY_NAME' keyword is used, the linker will sort the files or ++sections into ascending order by name before placing them in the output ++file. ++ ++ `SORT_BY_ALIGNMENT' is very similar to `SORT_BY_NAME'. The ++difference is `SORT_BY_ALIGNMENT' will sort sections into ascending ++order by alignment before placing them in the output file. ++ ++ `SORT' is an alias for `SORT_BY_NAME'. ++ ++ When there are nested section sorting commands in linker script, ++there can be at most 1 level of nesting for section sorting commands. ++ ++ 1. `SORT_BY_NAME' (`SORT_BY_ALIGNMENT' (wildcard section pattern)). ++ It will sort the input sections by name first, then by alignment ++ if 2 sections have the same name. ++ ++ 2. `SORT_BY_ALIGNMENT' (`SORT_BY_NAME' (wildcard section pattern)). ++ It will sort the input sections by alignment first, then by name ++ if 2 sections have the same alignment. ++ ++ 3. `SORT_BY_NAME' (`SORT_BY_NAME' (wildcard section pattern)) is ++ treated the same as `SORT_BY_NAME' (wildcard section pattern). ++ ++ 4. `SORT_BY_ALIGNMENT' (`SORT_BY_ALIGNMENT' (wildcard section ++ pattern)) is treated the same as `SORT_BY_ALIGNMENT' (wildcard ++ section pattern). ++ ++ 5. All other nested section sorting commands are invalid. ++ ++ When both command line section sorting option and linker script ++section sorting command are used, section sorting command always takes ++precedence over the command line option. ++ ++ If the section sorting command in linker script isn't nested, the ++command line option will make the section sorting command to be treated ++as nested sorting command. ++ ++ 1. `SORT_BY_NAME' (wildcard section pattern ) with `--sort-sections ++ alignment' is equivalent to `SORT_BY_NAME' (`SORT_BY_ALIGNMENT' ++ (wildcard section pattern)). ++ ++ 2. `SORT_BY_ALIGNMENT' (wildcard section pattern) with ++ `--sort-section name' is equivalent to `SORT_BY_ALIGNMENT' ++ (`SORT_BY_NAME' (wildcard section pattern)). ++ ++ If the section sorting command in linker script is nested, the ++command line option will be ignored. ++ ++ If you ever get confused about where input sections are going, use ++the `-M' linker option to generate a map file. The map file shows ++precisely how input sections are mapped to output sections. ++ ++ This example shows how wildcard patterns might be used to partition ++files. This linker script directs the linker to place all `.text' ++sections in `.text' and all `.bss' sections in `.bss'. The linker will ++place the `.data' section from all files beginning with an upper case ++character in `.DATA'; for all other files, the linker will place the ++`.data' section in `.data'. ++ SECTIONS { ++ .text : { *(.text) } ++ .DATA : { [A-Z]*(.data) } ++ .data : { *(.data) } ++ .bss : { *(.bss) } ++ } ++ ++ ++File: ld.info, Node: Input Section Common, Next: Input Section Keep, Prev: Input Section Wildcards, Up: Input Section ++ ++3.6.4.3 Input Section for Common Symbols ++........................................ ++ ++A special notation is needed for common symbols, because in many object ++file formats common symbols do not have a particular input section. The ++linker treats common symbols as though they are in an input section ++named `COMMON'. ++ ++ You may use file names with the `COMMON' section just as with any ++other input sections. You can use this to place common symbols from a ++particular input file in one section while common symbols from other ++input files are placed in another section. ++ ++ In most cases, common symbols in input files will be placed in the ++`.bss' section in the output file. For example: ++ .bss { *(.bss) *(COMMON) } ++ ++ Some object file formats have more than one type of common symbol. ++For example, the MIPS ELF object file format distinguishes standard ++common symbols and small common symbols. In this case, the linker will ++use a different special section name for other types of common symbols. ++In the case of MIPS ELF, the linker uses `COMMON' for standard common ++symbols and `.scommon' for small common symbols. This permits you to ++map the different types of common symbols into memory at different ++locations. ++ ++ You will sometimes see `[COMMON]' in old linker scripts. This ++notation is now considered obsolete. It is equivalent to `*(COMMON)'. ++ ++ ++File: ld.info, Node: Input Section Keep, Next: Input Section Example, Prev: Input Section Common, Up: Input Section ++ ++3.6.4.4 Input Section and Garbage Collection ++............................................ ++ ++When link-time garbage collection is in use (`--gc-sections'), it is ++often useful to mark sections that should not be eliminated. This is ++accomplished by surrounding an input section's wildcard entry with ++`KEEP()', as in `KEEP(*(.init))' or `KEEP(SORT_BY_NAME(*)(.ctors))'. ++ ++ ++File: ld.info, Node: Input Section Example, Prev: Input Section Keep, Up: Input Section ++ ++3.6.4.5 Input Section Example ++............................. ++ ++The following example is a complete linker script. It tells the linker ++to read all of the sections from file `all.o' and place them at the ++start of output section `outputa' which starts at location `0x10000'. ++All of section `.input1' from file `foo.o' follows immediately, in the ++same output section. All of section `.input2' from `foo.o' goes into ++output section `outputb', followed by section `.input1' from `foo1.o'. ++All of the remaining `.input1' and `.input2' sections from any files ++are written to output section `outputc'. ++ ++ SECTIONS { ++ outputa 0x10000 : ++ { ++ all.o ++ foo.o (.input1) ++ } ++ outputb : ++ { ++ foo.o (.input2) ++ foo1.o (.input1) ++ } ++ outputc : ++ { ++ *(.input1) ++ *(.input2) ++ } ++ } ++ ++ ++File: ld.info, Node: Output Section Data, Next: Output Section Keywords, Prev: Input Section, Up: SECTIONS ++ ++3.6.5 Output Section Data ++------------------------- ++ ++You can include explicit bytes of data in an output section by using ++`BYTE', `SHORT', `LONG', `QUAD', or `SQUAD' as an output section ++command. Each keyword is followed by an expression in parentheses ++providing the value to store (*note Expressions::). The value of the ++expression is stored at the current value of the location counter. ++ ++ The `BYTE', `SHORT', `LONG', and `QUAD' commands store one, two, ++four, and eight bytes (respectively). After storing the bytes, the ++location counter is incremented by the number of bytes stored. ++ ++ For example, this will store the byte 1 followed by the four byte ++value of the symbol `addr': ++ BYTE(1) ++ LONG(addr) ++ ++ When using a 64 bit host or target, `QUAD' and `SQUAD' are the same; ++they both store an 8 byte, or 64 bit, value. When both host and target ++are 32 bits, an expression is computed as 32 bits. In this case `QUAD' ++stores a 32 bit value zero extended to 64 bits, and `SQUAD' stores a 32 ++bit value sign extended to 64 bits. ++ ++ If the object file format of the output file has an explicit ++endianness, which is the normal case, the value will be stored in that ++endianness. When the object file format does not have an explicit ++endianness, as is true of, for example, S-records, the value will be ++stored in the endianness of the first input object file. ++ ++ Note--these commands only work inside a section description and not ++between them, so the following will produce an error from the linker: ++ SECTIONS { .text : { *(.text) } LONG(1) .data : { *(.data) } } ++ whereas this will work: ++ SECTIONS { .text : { *(.text) ; LONG(1) } .data : { *(.data) } } ++ ++ You may use the `FILL' command to set the fill pattern for the ++current section. It is followed by an expression in parentheses. Any ++otherwise unspecified regions of memory within the section (for example, ++gaps left due to the required alignment of input sections) are filled ++with the value of the expression, repeated as necessary. A `FILL' ++statement covers memory locations after the point at which it occurs in ++the section definition; by including more than one `FILL' statement, ++you can have different fill patterns in different parts of an output ++section. ++ ++ This example shows how to fill unspecified regions of memory with the ++value `0x90': ++ FILL(0x90909090) ++ ++ The `FILL' command is similar to the `=FILLEXP' output section ++attribute, but it only affects the part of the section following the ++`FILL' command, rather than the entire section. If both are used, the ++`FILL' command takes precedence. *Note Output Section Fill::, for ++details on the fill expression. ++ ++ ++File: ld.info, Node: Output Section Keywords, Next: Output Section Discarding, Prev: Output Section Data, Up: SECTIONS ++ ++3.6.6 Output Section Keywords ++----------------------------- ++ ++There are a couple of keywords which can appear as output section ++commands. ++ ++`CREATE_OBJECT_SYMBOLS' ++ The command tells the linker to create a symbol for each input ++ file. The name of each symbol will be the name of the ++ corresponding input file. The section of each symbol will be the ++ output section in which the `CREATE_OBJECT_SYMBOLS' command ++ appears. ++ ++ This is conventional for the a.out object file format. It is not ++ normally used for any other object file format. ++ ++`CONSTRUCTORS' ++ When linking using the a.out object file format, the linker uses an ++ unusual set construct to support C++ global constructors and ++ destructors. When linking object file formats which do not support ++ arbitrary sections, such as ECOFF and XCOFF, the linker will ++ automatically recognize C++ global constructors and destructors by ++ name. For these object file formats, the `CONSTRUCTORS' command ++ tells the linker to place constructor information in the output ++ section where the `CONSTRUCTORS' command appears. The ++ `CONSTRUCTORS' command is ignored for other object file formats. ++ ++ The symbol `__CTOR_LIST__' marks the start of the global ++ constructors, and the symbol `__CTOR_END__' marks the end. ++ Similarly, `__DTOR_LIST__' and `__DTOR_END__' mark the start and ++ end of the global destructors. The first word in the list is the ++ number of entries, followed by the address of each constructor or ++ destructor, followed by a zero word. The compiler must arrange to ++ actually run the code. For these object file formats GNU C++ ++ normally calls constructors from a subroutine `__main'; a call to ++ `__main' is automatically inserted into the startup code for ++ `main'. GNU C++ normally runs destructors either by using ++ `atexit', or directly from the function `exit'. ++ ++ For object file formats such as `COFF' or `ELF' which support ++ arbitrary section names, GNU C++ will normally arrange to put the ++ addresses of global constructors and destructors into the `.ctors' ++ and `.dtors' sections. Placing the following sequence into your ++ linker script will build the sort of table which the GNU C++ ++ runtime code expects to see. ++ ++ __CTOR_LIST__ = .; ++ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) ++ *(.ctors) ++ LONG(0) ++ __CTOR_END__ = .; ++ __DTOR_LIST__ = .; ++ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) ++ *(.dtors) ++ LONG(0) ++ __DTOR_END__ = .; ++ ++ If you are using the GNU C++ support for initialization priority, ++ which provides some control over the order in which global ++ constructors are run, you must sort the constructors at link time ++ to ensure that they are executed in the correct order. When using ++ the `CONSTRUCTORS' command, use `SORT_BY_NAME(CONSTRUCTORS)' ++ instead. When using the `.ctors' and `.dtors' sections, use ++ `*(SORT_BY_NAME(.ctors))' and `*(SORT_BY_NAME(.dtors))' instead of ++ just `*(.ctors)' and `*(.dtors)'. ++ ++ Normally the compiler and linker will handle these issues ++ automatically, and you will not need to concern yourself with ++ them. However, you may need to consider this if you are using C++ ++ and writing your own linker scripts. ++ ++ ++ ++File: ld.info, Node: Output Section Discarding, Next: Output Section Attributes, Prev: Output Section Keywords, Up: SECTIONS ++ ++3.6.7 Output Section Discarding ++------------------------------- ++ ++The linker will not create output section which do not have any ++contents. This is for convenience when referring to input sections that ++may or may not be present in any of the input files. For example: ++ .foo { *(.foo) } ++ will only create a `.foo' section in the output file if there is a ++`.foo' section in at least one input file. ++ ++ If you use anything other than an input section description as an ++output section command, such as a symbol assignment, then the output ++section will always be created, even if there are no matching input ++sections. ++ ++ The special output section name `/DISCARD/' may be used to discard ++input sections. Any input sections which are assigned to an output ++section named `/DISCARD/' are not included in the output file. ++ ++ ++File: ld.info, Node: Output Section Attributes, Next: Overlay Description, Prev: Output Section Discarding, Up: SECTIONS ++ ++3.6.8 Output Section Attributes ++------------------------------- ++ ++We showed above that the full description of an output section looked ++like this: ++ SECTION [ADDRESS] [(TYPE)] : ++ [AT(LMA)] [ALIGN(SECTION_ALIGN)] [SUBALIGN(SUBSECTION_ALIGN)] ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [>REGION] [AT>LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP] ++We've already described SECTION, ADDRESS, and ++OUTPUT-SECTION-COMMAND. In this section we will describe the remaining ++section attributes. ++ ++* Menu: ++ ++* Output Section Type:: Output section type ++* Output Section LMA:: Output section LMA ++* Forced Output Alignment:: Forced Output Alignment ++* Forced Input Alignment:: Forced Input Alignment ++* Output Section Region:: Output section region ++* Output Section Phdr:: Output section phdr ++* Output Section Fill:: Output section fill ++ ++ ++File: ld.info, Node: Output Section Type, Next: Output Section LMA, Up: Output Section Attributes ++ ++3.6.8.1 Output Section Type ++........................... ++ ++Each output section may have a type. The type is a keyword in ++parentheses. The following types are defined: ++ ++`NOLOAD' ++ The section should be marked as not loadable, so that it will not ++ be loaded into memory when the program is run. ++ ++`DSECT' ++`COPY' ++`INFO' ++`OVERLAY' ++ These type names are supported for backward compatibility, and are ++ rarely used. They all have the same effect: the section should be ++ marked as not allocatable, so that no memory is allocated for the ++ section when the program is run. ++ ++ The linker normally sets the attributes of an output section based on ++the input sections which map into it. You can override this by using ++the section type. For example, in the script sample below, the `ROM' ++section is addressed at memory location `0' and does not need to be ++loaded when the program is run. The contents of the `ROM' section will ++appear in the linker output file as usual. ++ SECTIONS { ++ ROM 0 (NOLOAD) : { ... } ++ ... ++ } ++ ++ ++File: ld.info, Node: Output Section LMA, Next: Forced Output Alignment, Prev: Output Section Type, Up: Output Section Attributes ++ ++3.6.8.2 Output Section LMA ++.......................... ++ ++Every section has a virtual address (VMA) and a load address (LMA); see ++*Note Basic Script Concepts::. The address expression which may appear ++in an output section description sets the VMA (*note Output Section ++Address::). ++ ++ The linker will normally set the LMA equal to the VMA. You can ++change that by using the `AT' keyword. The expression LMA that follows ++the `AT' keyword specifies the load address of the section. ++ ++ Alternatively, with `AT>LMA_REGION' expression, you may specify a ++memory region for the section's load address. *Note MEMORY::. Note ++that if the section has not had a VMA assigned to it then the linker ++will use the LMA_REGION as the VMA region as well. *Note Output ++Section Region::. ++ ++ This feature is designed to make it easy to build a ROM image. For ++example, the following linker script creates three output sections: one ++called `.text', which starts at `0x1000', one called `.mdata', which is ++loaded at the end of the `.text' section even though its VMA is ++`0x2000', and one called `.bss' to hold uninitialized data at address ++`0x3000'. The symbol `_data' is defined with the value `0x2000', which ++shows that the location counter holds the VMA value, not the LMA value. ++ ++ SECTIONS ++ { ++ .text 0x1000 : { *(.text) _etext = . ; } ++ .mdata 0x2000 : ++ AT ( ADDR (.text) + SIZEOF (.text) ) ++ { _data = . ; *(.data); _edata = . ; } ++ .bss 0x3000 : ++ { _bstart = . ; *(.bss) *(COMMON) ; _bend = . ;} ++ } ++ ++ The run-time initialization code for use with a program generated ++with this linker script would include something like the following, to ++copy the initialized data from the ROM image to its runtime address. ++Notice how this code takes advantage of the symbols defined by the ++linker script. ++ ++ extern char _etext, _data, _edata, _bstart, _bend; ++ char *src = &_etext; ++ char *dst = &_data; ++ ++ /* ROM has data at end of text; copy it. */ ++ while (dst < &_edata) { ++ *dst++ = *src++; ++ } ++ ++ /* Zero bss */ ++ for (dst = &_bstart; dst< &_bend; dst++) ++ *dst = 0; ++ ++ ++File: ld.info, Node: Forced Output Alignment, Next: Forced Input Alignment, Prev: Output Section LMA, Up: Output Section Attributes ++ ++3.6.8.3 Forced Output Alignment ++............................... ++ ++You can increase an output section's alignment by using ALIGN. ++ ++ ++File: ld.info, Node: Forced Input Alignment, Next: Output Section Region, Prev: Forced Output Alignment, Up: Output Section Attributes ++ ++3.6.8.4 Forced Input Alignment ++.............................. ++ ++You can force input section alignment within an output section by using ++SUBALIGN. The value specified overrides any alignment given by input ++sections, whether larger or smaller. ++ ++ ++File: ld.info, Node: Output Section Region, Next: Output Section Phdr, Prev: Forced Input Alignment, Up: Output Section Attributes ++ ++3.6.8.5 Output Section Region ++............................. ++ ++You can assign a section to a previously defined region of memory by ++using `>REGION'. *Note MEMORY::. ++ ++ Here is a simple example: ++ MEMORY { rom : ORIGIN = 0x1000, LENGTH = 0x1000 } ++ SECTIONS { ROM : { *(.text) } >rom } ++ ++ ++File: ld.info, Node: Output Section Phdr, Next: Output Section Fill, Prev: Output Section Region, Up: Output Section Attributes ++ ++3.6.8.6 Output Section Phdr ++........................... ++ ++You can assign a section to a previously defined program segment by ++using `:PHDR'. *Note PHDRS::. If a section is assigned to one or more ++segments, then all subsequent allocated sections will be assigned to ++those segments as well, unless they use an explicitly `:PHDR' modifier. ++You can use `:NONE' to tell the linker to not put the section in any ++segment at all. ++ ++ Here is a simple example: ++ PHDRS { text PT_LOAD ; } ++ SECTIONS { .text : { *(.text) } :text } ++ ++ ++File: ld.info, Node: Output Section Fill, Prev: Output Section Phdr, Up: Output Section Attributes ++ ++3.6.8.7 Output Section Fill ++........................... ++ ++You can set the fill pattern for an entire section by using `=FILLEXP'. ++FILLEXP is an expression (*note Expressions::). Any otherwise ++unspecified regions of memory within the output section (for example, ++gaps left due to the required alignment of input sections) will be ++filled with the value, repeated as necessary. If the fill expression ++is a simple hex number, ie. a string of hex digit starting with `0x' ++and without a trailing `k' or `M', then an arbitrarily long sequence of ++hex digits can be used to specify the fill pattern; Leading zeros ++become part of the pattern too. For all other cases, including extra ++parentheses or a unary `+', the fill pattern is the four least ++significant bytes of the value of the expression. In all cases, the ++number is big-endian. ++ ++ You can also change the fill value with a `FILL' command in the ++output section commands; (*note Output Section Data::). ++ ++ Here is a simple example: ++ SECTIONS { .text : { *(.text) } =0x90909090 } ++ ++ ++File: ld.info, Node: Overlay Description, Prev: Output Section Attributes, Up: SECTIONS ++ ++3.6.9 Overlay Description ++------------------------- ++ ++An overlay description provides an easy way to describe sections which ++are to be loaded as part of a single memory image but are to be run at ++the same memory address. At run time, some sort of overlay manager will ++copy the overlaid sections in and out of the runtime memory address as ++required, perhaps by simply manipulating addressing bits. This approach ++can be useful, for example, when a certain region of memory is faster ++than another. ++ ++ Overlays are described using the `OVERLAY' command. The `OVERLAY' ++command is used within a `SECTIONS' command, like an output section ++description. The full syntax of the `OVERLAY' command is as follows: ++ OVERLAY [START] : [NOCROSSREFS] [AT ( LDADDR )] ++ { ++ SECNAME1 ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [:PHDR...] [=FILL] ++ SECNAME2 ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [:PHDR...] [=FILL] ++ ... ++ } [>REGION] [:PHDR...] [=FILL] ++ ++ Everything is optional except `OVERLAY' (a keyword), and each ++section must have a name (SECNAME1 and SECNAME2 above). The section ++definitions within the `OVERLAY' construct are identical to those ++within the general `SECTIONS' contruct (*note SECTIONS::), except that ++no addresses and no memory regions may be defined for sections within ++an `OVERLAY'. ++ ++ The sections are all defined with the same starting address. The ++load addresses of the sections are arranged such that they are ++consecutive in memory starting at the load address used for the ++`OVERLAY' as a whole (as with normal section definitions, the load ++address is optional, and defaults to the start address; the start ++address is also optional, and defaults to the current value of the ++location counter). ++ ++ If the `NOCROSSREFS' keyword is used, and there any references among ++the sections, the linker will report an error. Since the sections all ++run at the same address, it normally does not make sense for one ++section to refer directly to another. *Note NOCROSSREFS: Miscellaneous ++Commands. ++ ++ For each section within the `OVERLAY', the linker automatically ++defines two symbols. The symbol `__load_start_SECNAME' is defined as ++the starting load address of the section. The symbol ++`__load_stop_SECNAME' is defined as the final load address of the ++section. Any characters within SECNAME which are not legal within C ++identifiers are removed. C (or assembler) code may use these symbols ++to move the overlaid sections around as necessary. ++ ++ At the end of the overlay, the value of the location counter is set ++to the start address of the overlay plus the size of the largest ++section. ++ ++ Here is an example. Remember that this would appear inside a ++`SECTIONS' construct. ++ OVERLAY 0x1000 : AT (0x4000) ++ { ++ .text0 { o1/*.o(.text) } ++ .text1 { o2/*.o(.text) } ++ } ++This will define both `.text0' and `.text1' to start at address ++0x1000. `.text0' will be loaded at address 0x4000, and `.text1' will ++be loaded immediately after `.text0'. The following symbols will be ++defined: `__load_start_text0', `__load_stop_text0', ++`__load_start_text1', `__load_stop_text1'. ++ ++ C code to copy overlay `.text1' into the overlay area might look ++like the following. ++ ++ extern char __load_start_text1, __load_stop_text1; ++ memcpy ((char *) 0x1000, &__load_start_text1, ++ &__load_stop_text1 - &__load_start_text1); ++ ++ Note that the `OVERLAY' command is just syntactic sugar, since ++everything it does can be done using the more basic commands. The above ++example could have been written identically as follows. ++ ++ .text0 0x1000 : AT (0x4000) { o1/*.o(.text) } ++ __load_start_text0 = LOADADDR (.text0); ++ __load_stop_text0 = LOADADDR (.text0) + SIZEOF (.text0); ++ .text1 0x1000 : AT (0x4000 + SIZEOF (.text0)) { o2/*.o(.text) } ++ __load_start_text1 = LOADADDR (.text1); ++ __load_stop_text1 = LOADADDR (.text1) + SIZEOF (.text1); ++ . = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1)); ++ ++ ++File: ld.info, Node: MEMORY, Next: PHDRS, Prev: SECTIONS, Up: Scripts ++ ++3.7 MEMORY Command ++================== ++ ++The linker's default configuration permits allocation of all available ++memory. You can override this by using the `MEMORY' command. ++ ++ The `MEMORY' command describes the location and size of blocks of ++memory in the target. You can use it to describe which memory regions ++may be used by the linker, and which memory regions it must avoid. You ++can then assign sections to particular memory regions. The linker will ++set section addresses based on the memory regions, and will warn about ++regions that become too full. The linker will not shuffle sections ++around to fit into the available regions. ++ ++ A linker script may contain at most one use of the `MEMORY' command. ++However, you can define as many blocks of memory within it as you ++wish. The syntax is: ++ MEMORY ++ { ++ NAME [(ATTR)] : ORIGIN = ORIGIN, LENGTH = LEN ++ ... ++ } ++ ++ The NAME is a name used in the linker script to refer to the region. ++The region name has no meaning outside of the linker script. Region ++names are stored in a separate name space, and will not conflict with ++symbol names, file names, or section names. Each memory region must ++have a distinct name. ++ ++ The ATTR string is an optional list of attributes that specify ++whether to use a particular memory region for an input section which is ++not explicitly mapped in the linker script. As described in *Note ++SECTIONS::, if you do not specify an output section for some input ++section, the linker will create an output section with the same name as ++the input section. If you define region attributes, the linker will use ++them to select the memory region for the output section that it creates. ++ ++ The ATTR string must consist only of the following characters: ++`R' ++ Read-only section ++ ++`W' ++ Read/write section ++ ++`X' ++ Executable section ++ ++`A' ++ Allocatable section ++ ++`I' ++ Initialized section ++ ++`L' ++ Same as `I' ++ ++`!' ++ Invert the sense of any of the preceding attributes ++ ++ If a unmapped section matches any of the listed attributes other than ++`!', it will be placed in the memory region. The `!' attribute ++reverses this test, so that an unmapped section will be placed in the ++memory region only if it does not match any of the listed attributes. ++ ++ The ORIGIN is an numerical expression for the start address of the ++memory region. The expression must evaluate to a constant and it ++cannot involve any symbols. The keyword `ORIGIN' may be abbreviated to ++`org' or `o' (but not, for example, `ORG'). ++ ++ The LEN is an expression for the size in bytes of the memory region. ++As with the ORIGIN expression, the expression must be numerical only ++and must evaluate to a constant. The keyword `LENGTH' may be ++abbreviated to `len' or `l'. ++ ++ In the following example, we specify that there are two memory ++regions available for allocation: one starting at `0' for 256 kilobytes, ++and the other starting at `0x40000000' for four megabytes. The linker ++will place into the `rom' memory region every section which is not ++explicitly mapped into a memory region, and is either read-only or ++executable. The linker will place other sections which are not ++explicitly mapped into a memory region into the `ram' memory region. ++ ++ MEMORY ++ { ++ rom (rx) : ORIGIN = 0, LENGTH = 256K ++ ram (!rx) : org = 0x40000000, l = 4M ++ } ++ ++ Once you define a memory region, you can direct the linker to place ++specific output sections into that memory region by using the `>REGION' ++output section attribute. For example, if you have a memory region ++named `mem', you would use `>mem' in the output section definition. ++*Note Output Section Region::. If no address was specified for the ++output section, the linker will set the address to the next available ++address within the memory region. If the combined output sections ++directed to a memory region are too large for the region, the linker ++will issue an error message. ++ ++ It is possible to access the origin and length of a memory in an ++expression via the `ORIGIN(MEMORY)' and `LENGTH(MEMORY)' functions: ++ ++ _fstack = ORIGIN(ram) + LENGTH(ram) - 4; ++ ++ ++File: ld.info, Node: PHDRS, Next: VERSION, Prev: MEMORY, Up: Scripts ++ ++3.8 PHDRS Command ++================= ++ ++The ELF object file format uses "program headers", also knows as ++"segments". The program headers describe how the program should be ++loaded into memory. You can print them out by using the `objdump' ++program with the `-p' option. ++ ++ When you run an ELF program on a native ELF system, the system loader ++reads the program headers in order to figure out how to load the ++program. This will only work if the program headers are set correctly. ++This manual does not describe the details of how the system loader ++interprets program headers; for more information, see the ELF ABI. ++ ++ The linker will create reasonable program headers by default. ++However, in some cases, you may need to specify the program headers more ++precisely. You may use the `PHDRS' command for this purpose. When the ++linker sees the `PHDRS' command in the linker script, it will not ++create any program headers other than the ones specified. ++ ++ The linker only pays attention to the `PHDRS' command when ++generating an ELF output file. In other cases, the linker will simply ++ignore `PHDRS'. ++ ++ This is the syntax of the `PHDRS' command. The words `PHDRS', ++`FILEHDR', `AT', and `FLAGS' are keywords. ++ ++ PHDRS ++ { ++ NAME TYPE [ FILEHDR ] [ PHDRS ] [ AT ( ADDRESS ) ] ++ [ FLAGS ( FLAGS ) ] ; ++ } ++ ++ The NAME is used only for reference in the `SECTIONS' command of the ++linker script. It is not put into the output file. Program header ++names are stored in a separate name space, and will not conflict with ++symbol names, file names, or section names. Each program header must ++have a distinct name. ++ ++ Certain program header types describe segments of memory which the ++system loader will load from the file. In the linker script, you ++specify the contents of these segments by placing allocatable output ++sections in the segments. You use the `:PHDR' output section attribute ++to place a section in a particular segment. *Note Output Section ++Phdr::. ++ ++ It is normal to put certain sections in more than one segment. This ++merely implies that one segment of memory contains another. You may ++repeat `:PHDR', using it once for each segment which should contain the ++section. ++ ++ If you place a section in one or more segments using `:PHDR', then ++the linker will place all subsequent allocatable sections which do not ++specify `:PHDR' in the same segments. This is for convenience, since ++generally a whole set of contiguous sections will be placed in a single ++segment. You can use `:NONE' to override the default segment and tell ++the linker to not put the section in any segment at all. ++ ++ You may use the `FILEHDR' and `PHDRS' keywords appear after the ++program header type to further describe the contents of the segment. ++The `FILEHDR' keyword means that the segment should include the ELF ++file header. The `PHDRS' keyword means that the segment should include ++the ELF program headers themselves. ++ ++ The TYPE may be one of the following. The numbers indicate the ++value of the keyword. ++ ++`PT_NULL' (0) ++ Indicates an unused program header. ++ ++`PT_LOAD' (1) ++ Indicates that this program header describes a segment to be ++ loaded from the file. ++ ++`PT_DYNAMIC' (2) ++ Indicates a segment where dynamic linking information can be found. ++ ++`PT_INTERP' (3) ++ Indicates a segment where the name of the program interpreter may ++ be found. ++ ++`PT_NOTE' (4) ++ Indicates a segment holding note information. ++ ++`PT_SHLIB' (5) ++ A reserved program header type, defined but not specified by the ++ ELF ABI. ++ ++`PT_PHDR' (6) ++ Indicates a segment where the program headers may be found. ++ ++EXPRESSION ++ An expression giving the numeric type of the program header. This ++ may be used for types not defined above. ++ ++ You can specify that a segment should be loaded at a particular ++address in memory by using an `AT' expression. This is identical to the ++`AT' command used as an output section attribute (*note Output Section ++LMA::). The `AT' command for a program header overrides the output ++section attribute. ++ ++ The linker will normally set the segment flags based on the sections ++which comprise the segment. You may use the `FLAGS' keyword to ++explicitly specify the segment flags. The value of FLAGS must be an ++integer. It is used to set the `p_flags' field of the program header. ++ ++ Here is an example of `PHDRS'. This shows a typical set of program ++headers used on a native ELF system. ++ ++ PHDRS ++ { ++ headers PT_PHDR PHDRS ; ++ interp PT_INTERP ; ++ text PT_LOAD FILEHDR PHDRS ; ++ data PT_LOAD ; ++ dynamic PT_DYNAMIC ; ++ } ++ ++ SECTIONS ++ { ++ . = SIZEOF_HEADERS; ++ .interp : { *(.interp) } :text :interp ++ .text : { *(.text) } :text ++ .rodata : { *(.rodata) } /* defaults to :text */ ++ ... ++ . = . + 0x1000; /* move to a new page in memory */ ++ .data : { *(.data) } :data ++ .dynamic : { *(.dynamic) } :data :dynamic ++ ... ++ } ++ ++ ++File: ld.info, Node: VERSION, Next: Expressions, Prev: PHDRS, Up: Scripts ++ ++3.9 VERSION Command ++=================== ++ ++The linker supports symbol versions when using ELF. Symbol versions are ++only useful when using shared libraries. The dynamic linker can use ++symbol versions to select a specific version of a function when it runs ++a program that may have been linked against an earlier version of the ++shared library. ++ ++ You can include a version script directly in the main linker script, ++or you can supply the version script as an implicit linker script. You ++can also use the `--version-script' linker option. ++ ++ The syntax of the `VERSION' command is simply ++ VERSION { version-script-commands } ++ ++ The format of the version script commands is identical to that used ++by Sun's linker in Solaris 2.5. The version script defines a tree of ++version nodes. You specify the node names and interdependencies in the ++version script. You can specify which symbols are bound to which ++version nodes, and you can reduce a specified set of symbols to local ++scope so that they are not globally visible outside of the shared ++library. ++ ++ The easiest way to demonstrate the version script language is with a ++few examples. ++ ++ VERS_1.1 { ++ global: ++ foo1; ++ local: ++ old*; ++ original*; ++ new*; ++ }; ++ ++ VERS_1.2 { ++ foo2; ++ } VERS_1.1; ++ ++ VERS_2.0 { ++ bar1; bar2; ++ extern "C++" { ++ ns::*; ++ "int f(int, double)"; ++ } ++ } VERS_1.2; ++ ++ This example version script defines three version nodes. The first ++version node defined is `VERS_1.1'; it has no other dependencies. The ++script binds the symbol `foo1' to `VERS_1.1'. It reduces a number of ++symbols to local scope so that they are not visible outside of the ++shared library; this is done using wildcard patterns, so that any ++symbol whose name begins with `old', `original', or `new' is matched. ++The wildcard patterns available are the same as those used in the shell ++when matching filenames (also known as "globbing"). However, if you ++specify the symbol name inside double quotes, then the name is treated ++as literal, rather than as a glob pattern. ++ ++ Next, the version script defines node `VERS_1.2'. This node depends ++upon `VERS_1.1'. The script binds the symbol `foo2' to the version ++node `VERS_1.2'. ++ ++ Finally, the version script defines node `VERS_2.0'. This node ++depends upon `VERS_1.2'. The scripts binds the symbols `bar1' and ++`bar2' are bound to the version node `VERS_2.0'. ++ ++ When the linker finds a symbol defined in a library which is not ++specifically bound to a version node, it will effectively bind it to an ++unspecified base version of the library. You can bind all otherwise ++unspecified symbols to a given version node by using `global: *;' ++somewhere in the version script. ++ ++ The names of the version nodes have no specific meaning other than ++what they might suggest to the person reading them. The `2.0' version ++could just as well have appeared in between `1.1' and `1.2'. However, ++this would be a confusing way to write a version script. ++ ++ Node name can be omited, provided it is the only version node in the ++version script. Such version script doesn't assign any versions to ++symbols, only selects which symbols will be globally visible out and ++which won't. ++ ++ { global: foo; bar; local: *; }; ++ ++ When you link an application against a shared library that has ++versioned symbols, the application itself knows which version of each ++symbol it requires, and it also knows which version nodes it needs from ++each shared library it is linked against. Thus at runtime, the dynamic ++loader can make a quick check to make sure that the libraries you have ++linked against do in fact supply all of the version nodes that the ++application will need to resolve all of the dynamic symbols. In this ++way it is possible for the dynamic linker to know with certainty that ++all external symbols that it needs will be resolvable without having to ++search for each symbol reference. ++ ++ The symbol versioning is in effect a much more sophisticated way of ++doing minor version checking that SunOS does. The fundamental problem ++that is being addressed here is that typically references to external ++functions are bound on an as-needed basis, and are not all bound when ++the application starts up. If a shared library is out of date, a ++required interface may be missing; when the application tries to use ++that interface, it may suddenly and unexpectedly fail. With symbol ++versioning, the user will get a warning when they start their program if ++the libraries being used with the application are too old. ++ ++ There are several GNU extensions to Sun's versioning approach. The ++first of these is the ability to bind a symbol to a version node in the ++source file where the symbol is defined instead of in the versioning ++script. This was done mainly to reduce the burden on the library ++maintainer. You can do this by putting something like: ++ __asm__(".symver original_foo,foo@VERS_1.1"); ++ in the C source file. This renames the function `original_foo' to ++be an alias for `foo' bound to the version node `VERS_1.1'. The ++`local:' directive can be used to prevent the symbol `original_foo' ++from being exported. A `.symver' directive takes precedence over a ++version script. ++ ++ The second GNU extension is to allow multiple versions of the same ++function to appear in a given shared library. In this way you can make ++an incompatible change to an interface without increasing the major ++version number of the shared library, while still allowing applications ++linked against the old interface to continue to function. ++ ++ To do this, you must use multiple `.symver' directives in the source ++file. Here is an example: ++ ++ __asm__(".symver original_foo,foo@"); ++ __asm__(".symver old_foo,foo@VERS_1.1"); ++ __asm__(".symver old_foo1,foo@VERS_1.2"); ++ __asm__(".symver new_foo,foo@@VERS_2.0"); ++ ++ In this example, `foo@' represents the symbol `foo' bound to the ++unspecified base version of the symbol. The source file that contains ++this example would define 4 C functions: `original_foo', `old_foo', ++`old_foo1', and `new_foo'. ++ ++ When you have multiple definitions of a given symbol, there needs to ++be some way to specify a default version to which external references to ++this symbol will be bound. You can do this with the `foo@@VERS_2.0' ++type of `.symver' directive. You can only declare one version of a ++symbol as the default in this manner; otherwise you would effectively ++have multiple definitions of the same symbol. ++ ++ If you wish to bind a reference to a specific version of the symbol ++within the shared library, you can use the aliases of convenience ++(i.e., `old_foo'), or you can use the `.symver' directive to ++specifically bind to an external version of the function in question. ++ ++ You can also specify the language in the version script: ++ ++ VERSION extern "lang" { version-script-commands } ++ ++ The supported `lang's are `C', `C++', and `Java'. The linker will ++iterate over the list of symbols at the link time and demangle them ++according to `lang' before matching them to the patterns specified in ++`version-script-commands'. ++ ++ Demangled names may contains spaces and other special characters. As ++described above, you can use a glob pattern to match demangled names, ++or you can use a double-quoted string to match the string exactly. In ++the latter case, be aware that minor differences (such as differing ++whitespace) between the version script and the demangler output will ++cause a mismatch. As the exact string generated by the demangler might ++change in the future, even if the mangled name does not, you should ++check that all of your version directives are behaving as you expect ++when you upgrade. ++ ++ ++File: ld.info, Node: Expressions, Next: Implicit Linker Scripts, Prev: VERSION, Up: Scripts ++ ++3.10 Expressions in Linker Scripts ++================================== ++ ++The syntax for expressions in the linker script language is identical to ++that of C expressions. All expressions are evaluated as integers. All ++expressions are evaluated in the same size, which is 32 bits if both the ++host and target are 32 bits, and is otherwise 64 bits. ++ ++ You can use and set symbol values in expressions. ++ ++ The linker defines several special purpose builtin functions for use ++in expressions. ++ ++* Menu: ++ ++* Constants:: Constants ++* Symbols:: Symbol Names ++* Orphan Sections:: Orphan Sections ++* Location Counter:: The Location Counter ++* Operators:: Operators ++* Evaluation:: Evaluation ++* Expression Section:: The Section of an Expression ++* Builtin Functions:: Builtin Functions ++ ++ ++File: ld.info, Node: Constants, Next: Symbols, Up: Expressions ++ ++3.10.1 Constants ++---------------- ++ ++All constants are integers. ++ ++ As in C, the linker considers an integer beginning with `0' to be ++octal, and an integer beginning with `0x' or `0X' to be hexadecimal. ++The linker considers other integers to be decimal. ++ ++ In addition, you can use the suffixes `K' and `M' to scale a ++constant by `1024' or `1024*1024' respectively. For example, the ++following all refer to the same quantity: ++ _fourk_1 = 4K; ++ _fourk_2 = 4096; ++ _fourk_3 = 0x1000; ++ ++ ++File: ld.info, Node: Symbols, Next: Orphan Sections, Prev: Constants, Up: Expressions ++ ++3.10.2 Symbol Names ++------------------- ++ ++Unless quoted, symbol names start with a letter, underscore, or period ++and may include letters, digits, underscores, periods, and hyphens. ++Unquoted symbol names must not conflict with any keywords. You can ++specify a symbol which contains odd characters or has the same name as a ++keyword by surrounding the symbol name in double quotes: ++ "SECTION" = 9; ++ "with a space" = "also with a space" + 10; ++ ++ Since symbols can contain many non-alphabetic characters, it is ++safest to delimit symbols with spaces. For example, `A-B' is one ++symbol, whereas `A - B' is an expression involving subtraction. ++ ++ ++File: ld.info, Node: Orphan Sections, Next: Location Counter, Prev: Symbols, Up: Expressions ++ ++3.10.3 Orphan Sections ++---------------------- ++ ++Orphan sections are sections present in the input files which are not ++explicitly placed into the output file by the linker script. The ++linker will still copy these sections into the output file, but it has ++to guess as to where they should be placed. The linker uses a simple ++heuristic to do this. It attempts to place orphan sections after ++non-orphan sections of the same attribute, such as code vs data, ++loadable vs non-loadable, etc. If there is not enough room to do this ++then it places at the end of the file. ++ ++ For ELF targets, the attribute of the section includes section type ++as well as section flag. ++ ++ ++File: ld.info, Node: Location Counter, Next: Operators, Prev: Orphan Sections, Up: Expressions ++ ++3.10.4 The Location Counter ++--------------------------- ++ ++The special linker variable "dot" `.' always contains the current ++output location counter. Since the `.' always refers to a location in ++an output section, it may only appear in an expression within a ++`SECTIONS' command. The `.' symbol may appear anywhere that an ++ordinary symbol is allowed in an expression. ++ ++ Assigning a value to `.' will cause the location counter to be ++moved. This may be used to create holes in the output section. The ++location counter may never be moved backwards. ++ ++ SECTIONS ++ { ++ output : ++ { ++ file1(.text) ++ . = . + 1000; ++ file2(.text) ++ . += 1000; ++ file3(.text) ++ } = 0x12345678; ++ } ++ In the previous example, the `.text' section from `file1' is located ++at the beginning of the output section `output'. It is followed by a ++1000 byte gap. Then the `.text' section from `file2' appears, also ++with a 1000 byte gap following before the `.text' section from `file3'. ++The notation `= 0x12345678' specifies what data to write in the gaps ++(*note Output Section Fill::). ++ ++ Note: `.' actually refers to the byte offset from the start of the ++current containing object. Normally this is the `SECTIONS' statement, ++whose start address is 0, hence `.' can be used as an absolute address. ++If `.' is used inside a section description however, it refers to the ++byte offset from the start of that section, not an absolute address. ++Thus in a script like this: ++ ++ SECTIONS ++ { ++ . = 0x100 ++ .text: { ++ *(.text) ++ . = 0x200 ++ } ++ . = 0x500 ++ .data: { ++ *(.data) ++ . += 0x600 ++ } ++ } ++ ++ The `.text' section will be assigned a starting address of 0x100 and ++a size of exactly 0x200 bytes, even if there is not enough data in the ++`.text' input sections to fill this area. (If there is too much data, ++an error will be produced because this would be an attempt to move `.' ++backwards). The `.data' section will start at 0x500 and it will have ++an extra 0x600 bytes worth of space after the end of the values from ++the `.data' input sections and before the end of the `.data' output ++section itself. ++ ++ Setting symbols to the value of the location counter outside of an ++output section statement can result in unexpected values if the linker ++needs to place orphan sections. For example, given the following: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ start_of_data = . ; ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ If the linker needs to place some input section, e.g. `.rodata', not ++mentioned in the script, it might choose to place that section between ++`.text' and `.data'. You might think the linker should place `.rodata' ++on the blank line in the above script, but blank lines are of no ++particular significance to the linker. As well, the linker doesn't ++associate the above symbol names with their sections. Instead, it ++assumes that all assignments or other statements belong to the previous ++output section, except for the special case of an assignment to `.'. ++I.e., the linker will place the orphan `.rodata' section as if the ++script was written as follows: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ start_of_data = . ; ++ .rodata: { *(.rodata) } ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ This may or may not be the script author's intention for the value of ++`start_of_data'. One way to influence the orphan section placement is ++to assign the location counter to itself, as the linker assumes that an ++assignment to `.' is setting the start address of a following output ++section and thus should be grouped with that section. So you could ++write: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ . = . ; ++ start_of_data = . ; ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ Now, the orphan `.rodata' section will be placed between ++`end_of_text' and `start_of_data'. ++ ++ ++File: ld.info, Node: Operators, Next: Evaluation, Prev: Location Counter, Up: Expressions ++ ++3.10.5 Operators ++---------------- ++ ++The linker recognizes the standard C set of arithmetic operators, with ++the standard bindings and precedence levels: ++ precedence associativity Operators Notes ++ (highest) ++ 1 left ! - ~ (1) ++ 2 left * / % ++ 3 left + - ++ 4 left >> << ++ 5 left == != > < <= >= ++ 6 left & ++ 7 left | ++ 8 left && ++ 9 left || ++ 10 right ? : ++ 11 right &= += -= *= /= (2) ++ (lowest) ++ Notes: (1) Prefix operators (2) *Note Assignments::. ++ ++ ++File: ld.info, Node: Evaluation, Next: Expression Section, Prev: Operators, Up: Expressions ++ ++3.10.6 Evaluation ++----------------- ++ ++The linker evaluates expressions lazily. It only computes the value of ++an expression when absolutely necessary. ++ ++ The linker needs some information, such as the value of the start ++address of the first section, and the origins and lengths of memory ++regions, in order to do any linking at all. These values are computed ++as soon as possible when the linker reads in the linker script. ++ ++ However, other values (such as symbol values) are not known or needed ++until after storage allocation. Such values are evaluated later, when ++other information (such as the sizes of output sections) is available ++for use in the symbol assignment expression. ++ ++ The sizes of sections cannot be known until after allocation, so ++assignments dependent upon these are not performed until after ++allocation. ++ ++ Some expressions, such as those depending upon the location counter ++`.', must be evaluated during section allocation. ++ ++ If the result of an expression is required, but the value is not ++available, then an error results. For example, a script like the ++following ++ SECTIONS ++ { ++ .text 9+this_isnt_constant : ++ { *(.text) } ++ } ++will cause the error message `non constant expression for initial ++address'. ++ ++ ++File: ld.info, Node: Expression Section, Next: Builtin Functions, Prev: Evaluation, Up: Expressions ++ ++3.10.7 The Section of an Expression ++----------------------------------- ++ ++When the linker evaluates an expression, the result is either absolute ++or relative to some section. A relative expression is expressed as a ++fixed offset from the base of a section. ++ ++ The position of the expression within the linker script determines ++whether it is absolute or relative. An expression which appears within ++an output section definition is relative to the base of the output ++section. An expression which appears elsewhere will be absolute. ++ ++ A symbol set to a relative expression will be relocatable if you ++request relocatable output using the `-r' option. That means that a ++further link operation may change the value of the symbol. The symbol's ++section will be the section of the relative expression. ++ ++ A symbol set to an absolute expression will retain the same value ++through any further link operation. The symbol will be absolute, and ++will not have any particular associated section. ++ ++ You can use the builtin function `ABSOLUTE' to force an expression ++to be absolute when it would otherwise be relative. For example, to ++create an absolute symbol set to the address of the end of the output ++section `.data': ++ SECTIONS ++ { ++ .data : { *(.data) _edata = ABSOLUTE(.); } ++ } ++ If `ABSOLUTE' were not used, `_edata' would be relative to the ++`.data' section. ++ ++ ++File: ld.info, Node: Builtin Functions, Prev: Expression Section, Up: Expressions ++ ++3.10.8 Builtin Functions ++------------------------ ++ ++The linker script language includes a number of builtin functions for ++use in linker script expressions. ++ ++`ABSOLUTE(EXP)' ++ Return the absolute (non-relocatable, as opposed to non-negative) ++ value of the expression EXP. Primarily useful to assign an ++ absolute value to a symbol within a section definition, where ++ symbol values are normally section relative. *Note Expression ++ Section::. ++ ++`ADDR(SECTION)' ++ Return the absolute address (the VMA) of the named SECTION. Your ++ script must previously have defined the location of that section. ++ In the following example, `symbol_1' and `symbol_2' are assigned ++ identical values: ++ SECTIONS { ... ++ .output1 : ++ { ++ start_of_output_1 = ABSOLUTE(.); ++ ... ++ } ++ .output : ++ { ++ symbol_1 = ADDR(.output1); ++ symbol_2 = start_of_output_1; ++ } ++ ... } ++ ++`ALIGN(ALIGN)' ++`ALIGN(EXP,ALIGN)' ++ Return the location counter (`.') or arbitrary expression aligned ++ to the next ALIGN boundary. The single operand `ALIGN' doesn't ++ change the value of the location counter--it just does arithmetic ++ on it. The two operand `ALIGN' allows an arbitrary expression to ++ be aligned upwards (`ALIGN(ALIGN)' is equivalent to `ALIGN(., ++ ALIGN)'). ++ ++ Here is an example which aligns the output `.data' section to the ++ next `0x2000' byte boundary after the preceding section and sets a ++ variable within the section to the next `0x8000' boundary after the ++ input sections: ++ SECTIONS { ... ++ .data ALIGN(0x2000): { ++ *(.data) ++ variable = ALIGN(0x8000); ++ } ++ ... } ++ The first use of `ALIGN' in this example specifies the ++ location of a section because it is used as the optional ADDRESS ++ attribute of a section definition (*note Output Section ++ Address::). The second use of `ALIGN' is used to defines the ++ value of a symbol. ++ ++ The builtin function `NEXT' is closely related to `ALIGN'. ++ ++`BLOCK(EXP)' ++ This is a synonym for `ALIGN', for compatibility with older linker ++ scripts. It is most often seen when setting the address of an ++ output section. ++ ++`DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE)' ++ This is equivalent to either ++ (ALIGN(MAXPAGESIZE) + (. & (MAXPAGESIZE - 1))) ++ or ++ (ALIGN(MAXPAGESIZE) + (. & (MAXPAGESIZE - COMMONPAGESIZE))) ++ depending on whether the latter uses fewer COMMONPAGESIZE sized ++ pages for the data segment (area between the result of this ++ expression and `DATA_SEGMENT_END') than the former or not. If the ++ latter form is used, it means COMMONPAGESIZE bytes of runtime ++ memory will be saved at the expense of up to COMMONPAGESIZE wasted ++ bytes in the on-disk file. ++ ++ This expression can only be used directly in `SECTIONS' commands, ++ not in any output section descriptions and only once in the linker ++ script. COMMONPAGESIZE should be less or equal to MAXPAGESIZE and ++ should be the system page size the object wants to be optimized ++ for (while still working on system page sizes up to MAXPAGESIZE). ++ ++ Example: ++ . = DATA_SEGMENT_ALIGN(0x10000, 0x2000); ++ ++`DATA_SEGMENT_END(EXP)' ++ This defines the end of data segment for `DATA_SEGMENT_ALIGN' ++ evaluation purposes. ++ ++ . = DATA_SEGMENT_END(.); ++ ++`DATA_SEGMENT_RELRO_END(OFFSET, EXP)' ++ This defines the end of the `PT_GNU_RELRO' segment when `-z relro' ++ option is used. Second argument is returned. When `-z relro' ++ option is not present, `DATA_SEGMENT_RELRO_END' does nothing, ++ otherwise `DATA_SEGMENT_ALIGN' is padded so that EXP + OFFSET is ++ aligned to the most commonly used page boundary for particular ++ target. If present in the linker script, it must always come in ++ between `DATA_SEGMENT_ALIGN' and `DATA_SEGMENT_END'. ++ ++ . = DATA_SEGMENT_RELRO_END(24, .); ++ ++`DEFINED(SYMBOL)' ++ Return 1 if SYMBOL is in the linker global symbol table and is ++ defined before the statement using DEFINED in the script, otherwise ++ return 0. You can use this function to provide default values for ++ symbols. For example, the following script fragment shows how to ++ set a global symbol `begin' to the first location in the `.text' ++ section--but if a symbol called `begin' already existed, its value ++ is preserved: ++ ++ SECTIONS { ... ++ .text : { ++ begin = DEFINED(begin) ? begin : . ; ++ ... ++ } ++ ... ++ } ++ ++`LENGTH(MEMORY)' ++ Return the length of the memory region named MEMORY. ++ ++`LOADADDR(SECTION)' ++ Return the absolute LMA of the named SECTION. This is normally ++ the same as `ADDR', but it may be different if the `AT' attribute ++ is used in the output section definition (*note Output Section ++ LMA::). ++ ++`MAX(EXP1, EXP2)' ++ Returns the maximum of EXP1 and EXP2. ++ ++`MIN(EXP1, EXP2)' ++ Returns the minimum of EXP1 and EXP2. ++ ++`NEXT(EXP)' ++ Return the next unallocated address that is a multiple of EXP. ++ This function is closely related to `ALIGN(EXP)'; unless you use ++ the `MEMORY' command to define discontinuous memory for the output ++ file, the two functions are equivalent. ++ ++`ORIGIN(MEMORY)' ++ Return the origin of the memory region named MEMORY. ++ ++`SEGMENT_START(SEGMENT, DEFAULT)' ++ Return the base address of the named SEGMENT. If an explicit ++ value has been given for this segment (with a command-line `-T' ++ option) that value will be returned; otherwise the value will be ++ DEFAULT. At present, the `-T' command-line option can only be ++ used to set the base address for the "text", "data", and "bss" ++ sections, but you use `SEGMENT_START' with any segment name. ++ ++`SIZEOF(SECTION)' ++ Return the size in bytes of the named SECTION, if that section has ++ been allocated. If the section has not been allocated when this is ++ evaluated, the linker will report an error. In the following ++ example, `symbol_1' and `symbol_2' are assigned identical values: ++ SECTIONS{ ... ++ .output { ++ .start = . ; ++ ... ++ .end = . ; ++ } ++ symbol_1 = .end - .start ; ++ symbol_2 = SIZEOF(.output); ++ ... } ++ ++`SIZEOF_HEADERS' ++`sizeof_headers' ++ Return the size in bytes of the output file's headers. This is ++ information which appears at the start of the output file. You ++ can use this number when setting the start address of the first ++ section, if you choose, to facilitate paging. ++ ++ When producing an ELF output file, if the linker script uses the ++ `SIZEOF_HEADERS' builtin function, the linker must compute the ++ number of program headers before it has determined all the section ++ addresses and sizes. If the linker later discovers that it needs ++ additional program headers, it will report an error `not enough ++ room for program headers'. To avoid this error, you must avoid ++ using the `SIZEOF_HEADERS' function, or you must rework your linker ++ script to avoid forcing the linker to use additional program ++ headers, or you must define the program headers yourself using the ++ `PHDRS' command (*note PHDRS::). ++ ++ ++File: ld.info, Node: Implicit Linker Scripts, Prev: Expressions, Up: Scripts ++ ++3.11 Implicit Linker Scripts ++============================ ++ ++If you specify a linker input file which the linker can not recognize as ++an object file or an archive file, it will try to read the file as a ++linker script. If the file can not be parsed as a linker script, the ++linker will report an error. ++ ++ An implicit linker script will not replace the default linker script. ++ ++ Typically an implicit linker script would contain only symbol ++assignments, or the `INPUT', `GROUP', or `VERSION' commands. ++ ++ Any input files read because of an implicit linker script will be ++read at the position in the command line where the implicit linker ++script was read. This can affect archive searching. ++ ++ ++File: ld.info, Node: Machine Dependent, Next: BFD, Prev: Scripts, Up: Top ++ ++4 Machine Dependent Features ++**************************** ++ ++`ld' has additional features on some platforms; the following sections ++describe them. Machines where `ld' has no additional functionality are ++not listed. ++ ++* Menu: ++ ++ ++* H8/300:: `ld' and the H8/300 ++ ++* i960:: `ld' and the Intel 960 family ++ ++* ARM:: `ld' and the ARM family ++ ++* HPPA ELF32:: `ld' and HPPA 32-bit ELF ++ ++* MMIX:: `ld' and MMIX ++ ++* MSP430:: `ld' and MSP430 ++ ++* PowerPC ELF32:: `ld' and PowerPC 32-bit ELF Support ++ ++* PowerPC64 ELF64:: `ld' and PowerPC64 64-bit ELF Support ++ ++* TI COFF:: `ld' and TI COFF ++ ++* WIN32:: `ld' and WIN32 (cygwin/mingw) ++ ++* Xtensa:: `ld' and Xtensa Processors ++ ++ ++File: ld.info, Node: H8/300, Next: i960, Up: Machine Dependent ++ ++4.1 `ld' and the H8/300 ++======================= ++ ++For the H8/300, `ld' can perform these global optimizations when you ++specify the `--relax' command-line option. ++ ++_relaxing address modes_ ++ `ld' finds all `jsr' and `jmp' instructions whose targets are ++ within eight bits, and turns them into eight-bit program-counter ++ relative `bsr' and `bra' instructions, respectively. ++ ++_synthesizing instructions_ ++ `ld' finds all `mov.b' instructions which use the sixteen-bit ++ absolute address form, but refer to the top page of memory, and ++ changes them to use the eight-bit address form. (That is: the ++ linker turns `mov.b `@'AA:16' into `mov.b `@'AA:8' whenever the ++ address AA is in the top page of memory). ++ ++_bit manipulation instructions_ ++ `ld' finds all bit manipulation instructions like `band, bclr, ++ biand, bild, bior, bist, bixor, bld, bnot, bor, bset, bst, btst, ++ bxor' which use 32 bit and 16 bit absolute address form, but refer ++ to the top page of memory, and changes them to use the 8 bit ++ address form. (That is: the linker turns `bset #xx:3,`@'AA:32' ++ into `bset #xx:3,`@'AA:8' whenever the address AA is in the top ++ page of memory). ++ ++_system control instructions_ ++ `ld' finds all `ldc.w, stc.w' instrcutions which use the 32 bit ++ absolute address form, but refer to the top page of memory, and ++ changes them to use 16 bit address form. (That is: the linker ++ turns `ldc.w `@'AA:32,ccr' into `ldc.w `@'AA:16,ccr' whenever the ++ address AA is in the top page of memory). ++ ++ ++File: ld.info, Node: i960, Next: ARM, Prev: H8/300, Up: Machine Dependent ++ ++4.2 `ld' and the Intel 960 Family ++================================= ++ ++You can use the `-AARCHITECTURE' command line option to specify one of ++the two-letter names identifying members of the 960 family; the option ++specifies the desired output target, and warns of any incompatible ++instructions in the input files. It also modifies the linker's search ++strategy for archive libraries, to support the use of libraries ++specific to each particular architecture, by including in the search ++loop names suffixed with the string identifying the architecture. ++ ++ For example, if your `ld' command line included `-ACA' as well as ++`-ltry', the linker would look (in its built-in search paths, and in ++any paths you specify with `-L') for a library with the names ++ ++ try ++ libtry.a ++ tryca ++ libtryca.a ++ ++The first two possibilities would be considered in any event; the last ++two are due to the use of `-ACA'. ++ ++ You can meaningfully use `-A' more than once on a command line, since ++the 960 architecture family allows combination of target architectures; ++each use will add another pair of name variants to search for when `-l' ++specifies a library. ++ ++ `ld' supports the `--relax' option for the i960 family. If you ++specify `--relax', `ld' finds all `balx' and `calx' instructions whose ++targets are within 24 bits, and turns them into 24-bit program-counter ++relative `bal' and `cal' instructions, respectively. `ld' also turns ++`cal' instructions into `bal' instructions when it determines that the ++target subroutine is a leaf routine (that is, the target subroutine does ++not itself call any subroutines). ++ ++ ++File: ld.info, Node: ARM, Next: HPPA ELF32, Prev: i960, Up: Machine Dependent ++ ++4.3 `ld' and the ARM family ++=========================== ++ ++For the ARM, `ld' will generate code stubs to allow functions calls ++betweem ARM and Thumb code. These stubs only work with code that has ++been compiled and assembled with the `-mthumb-interwork' command line ++option. If it is necessary to link with old ARM object files or ++libraries, which have not been compiled with the -mthumb-interwork ++option then the `--support-old-code' command line switch should be ++given to the linker. This will make it generate larger stub functions ++which will work with non-interworking aware ARM code. Note, however, ++the linker does not support generating stubs for function calls to ++non-interworking aware Thumb code. ++ ++ The `--thumb-entry' switch is a duplicate of the generic `--entry' ++switch, in that it sets the program's starting address. But it also ++sets the bottom bit of the address, so that it can be branched to using ++a BX instruction, and the program will start executing in Thumb mode ++straight away. ++ ++ The `--be8' switch instructs `ld' to generate BE8 format ++executables. This option is only valid when linking big-endian objects. ++The resulting image will contain big-endian data and little-endian code. ++ ++ The `R_ARM_TARGET1' relocation is typically used for entries in the ++`.init_array' section. It is interpreted as either `R_ARM_REL32' or ++`R_ARM_ABS32', depending on the target. The `--target1-rel' and ++`--target1-abs' switches override the default. ++ ++ The `--target2=type' switch overrides the default definition of the ++`R_ARM_TARGET2' relocation. Valid values for `type', their meanings, ++and target defaults are as follows: ++`rel' ++ `R_ARM_REL32' (arm*-*-elf, arm*-*-eabi) ++ ++`abs' ++ `R_ARM_ABS32' (arm*-*-symbianelf) ++ ++`got-rel' ++ `R_ARM_GOT_PREL' (arm*-*-linux, arm*-*-*bsd) ++ ++ The `R_ARM_V4BX' relocation (defined by the ARM AAELF specification) ++enables objects compiled for the ARMv4 architecture to be ++interworking-safe when linked with other objects compiled for ARMv4t, ++but also allows pure ARMv4 binaries to be built from the same ARMv4 ++objects. ++ ++ In the latter case, the switch `--fix-v4bx' must be passed to the ++linker, which causes v4t `BX rM' instructions to be rewritten as `MOV ++PC,rM', since v4 processors do not have a `BX' instruction. ++ ++ In the former case, the switch should not be used, and `R_ARM_V4BX' ++relocations are ignored. ++ ++ The `--use-blx' switch enables the linker to use ARM/Thumb BLX ++instructions (available on ARMv5t and above) in various situations. ++Currently it is used to perform calls via the PLT from Thumb code using ++BLX rather than using BX and a mode-switching stub before each PLT ++entry. This should lead to such calls executing slightly faster. ++ ++ This option is enabled implicitly for SymbianOS, so there is no need ++to specify it if you are using that target. ++ ++ ++File: ld.info, Node: HPPA ELF32, Next: MMIX, Prev: ARM, Up: Machine Dependent ++ ++4.4 `ld' and HPPA 32-bit ELF Support ++==================================== ++ ++When generating a shared library, `ld' will by default generate import ++stubs suitable for use with a single sub-space application. The ++`--multi-subspace' switch causes `ld' to generate export stubs, and ++different (larger) import stubs suitable for use with multiple ++sub-spaces. ++ ++ Long branch stubs and import/export stubs are placed by `ld' in stub ++sections located between groups of input sections. `--stub-group-size' ++specifies the maximum size of a group of input sections handled by one ++stub section. Since branch offsets are signed, a stub section may ++serve two groups of input sections, one group before the stub section, ++and one group after it. However, when using conditional branches that ++require stubs, it may be better (for branch prediction) that stub ++sections only serve one group of input sections. A negative value for ++`N' chooses this scheme, ensuring that branches to stubs always use a ++negative offset. Two special values of `N' are recognized, `1' and ++`-1'. These both instruct `ld' to automatically size input section ++groups for the branch types detected, with the same behaviour regarding ++stub placement as other positive or negative values of `N' respectively. ++ ++ Note that `--stub-group-size' does not split input sections. A ++single input section larger than the group size specified will of course ++create a larger group (of one section). If input sections are too ++large, it may not be possible for a branch to reach its stub. ++ ++ ++File: ld.info, Node: MMIX, Next: MSP430, Prev: HPPA ELF32, Up: Machine Dependent ++ ++4.5 `ld' and MMIX ++================= ++ ++For MMIX, there is a choice of generating `ELF' object files or `mmo' ++object files when linking. The simulator `mmix' understands the `mmo' ++format. The binutils `objcopy' utility can translate between the two ++formats. ++ ++ There is one special section, the `.MMIX.reg_contents' section. ++Contents in this section is assumed to correspond to that of global ++registers, and symbols referring to it are translated to special ++symbols, equal to registers. In a final link, the start address of the ++`.MMIX.reg_contents' section corresponds to the first allocated global ++register multiplied by 8. Register `$255' is not included in this ++section; it is always set to the program entry, which is at the symbol ++`Main' for `mmo' files. ++ ++ Symbols with the prefix `__.MMIX.start.', for example ++`__.MMIX.start..text' and `__.MMIX.start..data' are special; there must ++be only one each, even if they are local. The default linker script ++uses these to set the default start address of a section. ++ ++ Initial and trailing multiples of zero-valued 32-bit words in a ++section, are left out from an mmo file. ++ ++ ++File: ld.info, Node: MSP430, Next: PowerPC ELF32, Prev: MMIX, Up: Machine Dependent ++ ++4.6 `ld' and MSP430 ++=================== ++ ++For the MSP430 it is possible to select the MPU architecture. The flag ++`-m [mpu type]' will select an appropriate linker script for selected ++MPU type. (To get a list of known MPUs just pass `-m help' option to ++the linker). ++ ++ The linker will recognize some extra sections which are MSP430 ++specific: ++ ++``.vectors'' ++ Defines a portion of ROM where interrupt vectors located. ++ ++``.bootloader'' ++ Defines the bootloader portion of the ROM (if applicable). Any ++ code in this section will be uploaded to the MPU. ++ ++``.infomem'' ++ Defines an information memory section (if applicable). Any code in ++ this section will be uploaded to the MPU. ++ ++``.infomemnobits'' ++ This is the same as the `.infomem' section except that any code in ++ this section will not be uploaded to the MPU. ++ ++``.noinit'' ++ Denotes a portion of RAM located above `.bss' section. ++ ++ The last two sections are used by gcc. ++ ++ ++File: ld.info, Node: PowerPC ELF32, Next: PowerPC64 ELF64, Prev: MSP430, Up: Machine Dependent ++ ++4.7 `ld' and PowerPC 32-bit ELF Support ++======================================= ++ ++Branches on PowerPC processors are limited to a signed 26-bit ++displacement, which may result in `ld' giving `relocation truncated to ++fit' errors with very large programs. `--relax' enables the generation ++of trampolines that can access the entire 32-bit address space. These ++trampolines are inserted at section boundaries, so may not themselves ++be reachable if an input section exceeds 33M in size. ++ ++`--bss-plt' ++ Current PowerPC GCC accepts a `-msecure-plt' option that generates ++ code capable of using a newer PLT and GOT layout that has the ++ security advantage of no executable section ever needing to be ++ writable and no writable section ever being executable. PowerPC ++ `ld' will generate this layout, including stubs to access the PLT, ++ if all input files (including startup and static libraries) were ++ compiled with `-msecure-plt'. `--bss-plt' forces the old BSS PLT ++ (and GOT layout) which can give slightly better performance. ++ ++`--sdata-got' ++ The new secure PLT and GOT are placed differently relative to other ++ sections compared to older BSS PLT and GOT placement. The ++ location of `.plt' must change because the new secure PLT is an ++ initialized section while the old PLT is uninitialized. The ++ reason for the `.got' change is more subtle: The new placement ++ allows `.got' to be read-only in applications linked with `-z ++ relro -z now'. However, this placement means that `.sdata' cannot ++ always be used in shared libraries, because the PowerPC ABI ++ accesses `.sdata' in shared libraries from the GOT pointer. ++ `--sdata-got' forces the old GOT placement. PowerPC GCC doesn't ++ use `.sdata' in shared libraries, so this option is really only ++ useful for other compilers that may do so. ++ ++`--emit-stub-syms' ++ This option causes `ld' to label linker stubs with a local symbol ++ that encodes the stub type and destination. ++ ++`--no-tls-optimize' ++ PowerPC `ld' normally performs some optimization of code sequences ++ used to access Thread-Local Storage. Use this option to disable ++ the optimization. ++ ++ ++File: ld.info, Node: PowerPC64 ELF64, Next: TI COFF, Prev: PowerPC ELF32, Up: Machine Dependent ++ ++4.8 `ld' and PowerPC64 64-bit ELF Support ++========================================= ++ ++`--stub-group-size' ++ Long branch stubs, PLT call stubs and TOC adjusting stubs are ++ placed by `ld' in stub sections located between groups of input ++ sections. `--stub-group-size' specifies the maximum size of a ++ group of input sections handled by one stub section. Since branch ++ offsets are signed, a stub section may serve two groups of input ++ sections, one group before the stub section, and one group after ++ it. However, when using conditional branches that require stubs, ++ it may be better (for branch prediction) that stub sections only ++ serve one group of input sections. A negative value for `N' ++ chooses this scheme, ensuring that branches to stubs always use a ++ negative offset. Two special values of `N' are recognized, `1' ++ and `-1'. These both instruct `ld' to automatically size input ++ section groups for the branch types detected, with the same ++ behaviour regarding stub placement as other positive or negative ++ values of `N' respectively. ++ ++ Note that `--stub-group-size' does not split input sections. A ++ single input section larger than the group size specified will of ++ course create a larger group (of one section). If input sections ++ are too large, it may not be possible for a branch to reach its ++ stub. ++ ++`--emit-stub-syms' ++ This option causes `ld' to label linker stubs with a local symbol ++ that encodes the stub type and destination. ++ ++`--dotsyms, --no-dotsyms' ++ These two options control how `ld' interprets version patterns in ++ a version script. Older PowerPC64 compilers emitted both a ++ function descriptor symbol with the same name as the function, and ++ a code entry symbol with the name prefixed by a dot (`.'). To ++ properly version a function `foo', the version script thus needs ++ to control both `foo' and `.foo'. The option `--dotsyms', on by ++ default, automatically adds the required dot-prefixed patterns. ++ Use `--no-dotsyms' to disable this feature. ++ ++`--no-tls-optimize' ++ PowerPC64 `ld' normally performs some optimization of code ++ sequences used to access Thread-Local Storage. Use this option to ++ disable the optimization. ++ ++`--no-opd-optimize' ++ PowerPC64 `ld' normally removes `.opd' section entries ++ corresponding to deleted link-once functions, or functions removed ++ by the action of `--gc-sections' or linker scrip `/DISCARD/'. Use ++ this option to disable `.opd' optimization. ++ ++`--non-overlapping-opd' ++ Some PowerPC64 compilers have an option to generate compressed ++ `.opd' entries spaced 16 bytes apart, overlapping the third word, ++ the static chain pointer (unused in C) with the first word of the ++ next entry. This option expands such entries to the full 24 bytes. ++ ++`--no-toc-optimize' ++ PowerPC64 `ld' normally removes unused `.toc' section entries. ++ Such entries are detected by examining relocations that reference ++ the TOC in code sections. A reloc in a deleted code section marks ++ a TOC word as unneeded, while a reloc in a kept code section marks ++ a TOC word as needed. Since the TOC may reference itself, TOC ++ relocs are also examined. TOC words marked as both needed and ++ unneeded will of course be kept. TOC words without any referencing ++ reloc are assumed to be part of a multi-word entry, and are kept or ++ discarded as per the nearest marked preceding word. This works ++ reliably for compiler generated code, but may be incorrect if ++ assembly code is used to insert TOC entries. Use this option to ++ disable the optimization. ++ ++`--no-multi-toc' ++ By default, PowerPC64 GCC generates code for a TOC model where TOC ++ entries are accessed with a 16-bit offset from r2. This limits the ++ total TOC size to 64K. PowerPC64 `ld' extends this limit by ++ grouping code sections such that each group uses less than 64K for ++ its TOC entries, then inserts r2 adjusting stubs between ++ inter-group calls. `ld' does not split apart input sections, so ++ cannot help if a single input file has a `.toc' section that ++ exceeds 64K, most likely from linking multiple files with `ld -r'. ++ Use this option to turn off this feature. ++ ++ ++File: ld.info, Node: TI COFF, Next: WIN32, Prev: PowerPC64 ELF64, Up: Machine Dependent ++ ++4.9 `ld''s Support for Various TI COFF Versions ++=============================================== ++ ++The `--format' switch allows selection of one of the various TI COFF ++versions. The latest of this writing is 2; versions 0 and 1 are also ++supported. The TI COFF versions also vary in header byte-order format; ++`ld' will read any version or byte order, but the output header format ++depends on the default specified by the specific target. ++ ++ ++File: ld.info, Node: WIN32, Next: Xtensa, Prev: TI COFF, Up: Machine Dependent ++ ++4.10 `ld' and WIN32 (cygwin/mingw) ++================================== ++ ++This section describes some of the win32 specific `ld' issues. See ++*Note Command Line Options: Options. for detailed decription of the ++command line options mentioned here. ++ ++_import libraries_ ++ The standard Windows linker creates and uses so-called import ++ libraries, which contains information for linking to dll's. They ++ are regular static archives and are handled as any other static ++ archive. The cygwin and mingw ports of `ld' have specific support ++ for creating such libraries provided with the `--out-implib' ++ command line option. ++ ++_exporting DLL symbols_ ++ The cygwin/mingw `ld' has several ways to export symbols for dll's. ++ ++ _using auto-export functionality_ ++ By default `ld' exports symbols with the auto-export ++ functionality, which is controlled by the following command ++ line options: ++ ++ * -export-all-symbols [This is the default] ++ ++ * -exclude-symbols ++ ++ * -exclude-libs ++ ++ If, however, `--export-all-symbols' is not given explicitly ++ on the command line, then the default auto-export behavior ++ will be _disabled_ if either of the following are true: ++ ++ * A DEF file is used. ++ ++ * Any symbol in any object file was marked with the ++ __declspec(dllexport) attribute. ++ ++ _using a DEF file_ ++ Another way of exporting symbols is using a DEF file. A DEF ++ file is an ASCII file containing definitions of symbols which ++ should be exported when a dll is created. Usually it is ++ named `.def' and is added as any other object file ++ to the linker's command line. The file's name must end in ++ `.def' or `.DEF'. ++ ++ gcc -o .def ++ ++ Using a DEF file turns off the normal auto-export behavior, ++ unless the `--export-all-symbols' option is also used. ++ ++ Here is an example of a DEF file for a shared library called ++ `xyz.dll': ++ ++ LIBRARY "xyz.dll" BASE=0x20000000 ++ ++ EXPORTS ++ foo ++ bar ++ _bar = bar ++ another_foo = abc.dll.afoo ++ var1 DATA ++ ++ This example defines a DLL with a non-default base address ++ and five symbols in the export table. The third exported ++ symbol `_bar' is an alias for the second. The fourth symbol, ++ `another_foo' is resolved by "forwarding" to another module ++ and treating it as an alias for `afoo' exported from the DLL ++ `abc.dll'. The final symbol `var1' is declared to be a data ++ object. ++ ++ The optional `LIBRARY ' command indicates the _internal_ ++ name of the output DLL. If `' does not include a suffix, ++ the default library suffix, `.DLL' is appended. ++ ++ When the .DEF file is used to build an application. rather ++ than a library, the `NAME ' command shoud be used ++ instead of `LIBRARY'. If `' does not include a suffix, ++ the default executable suffix, `.EXE' is appended. ++ ++ With either `LIBRARY ' or `NAME ' the optional ++ specification `BASE = ' may be used to specify a ++ non-default base address for the image. ++ ++ If neither `LIBRARY ' nor `NAME ' is specified, ++ or they specify an empty string, the internal name is the ++ same as the filename specified on the command line. ++ ++ The complete specification of an export symbol is: ++ ++ EXPORTS ++ ( ( ( [ = ] ) ++ | ( = . )) ++ [ @ ] [NONAME] [DATA] [CONSTANT] [PRIVATE] ) * ++ ++ Declares `' as an exported symbol from the DLL, or ++ declares `' as an exported alias for `'; or ++ declares `' as a "forward" alias for the symbol ++ `' in the DLL `'. Optionally, ++ the symbol may be exported by the specified ordinal ++ `' alias. ++ ++ The optional keywords that follow the declaration indicate: ++ ++ `NONAME': Do not put the symbol name in the DLL's export ++ table. It will still be exported by its ordinal alias ++ (either the value specified by the .def specification or, ++ otherwise, the value assigned by the linker). The symbol ++ name, however, does remain visible in the import library (if ++ any), unless `PRIVATE' is also specified. ++ ++ `DATA': The symbol is a variable or object, rather than a ++ function. The import lib will export only an indirect ++ reference to `foo' as the symbol `_imp__foo' (ie, `foo' must ++ be resolved as `*_imp__foo'). ++ ++ `CONSTANT': Like `DATA', but put the undecorated `foo' as ++ well as `_imp__foo' into the import library. Both refer to the ++ read-only import address table's pointer to the variable, not ++ to the variable itself. This can be dangerous. If the user ++ code fails to add the `dllimport' attribute and also fails to ++ explicitly add the extra indirection that the use of the ++ attribute enforces, the application will behave unexpectedly. ++ ++ `PRIVATE': Put the symbol in the DLL's export table, but do ++ not put it into the static import library used to resolve ++ imports at link time. The symbol can still be imported using ++ the `LoadLibrary/GetProcAddress' API at runtime or by by ++ using the GNU ld extension of linking directly to the DLL ++ without an import library. ++ ++ See ld/deffilep.y in the binutils sources for the full ++ specification of other DEF file statements ++ ++ While linking a shared dll, `ld' is able to create a DEF file ++ with the `--output-def ' command line option. ++ ++ _Using decorations_ ++ Another way of marking symbols for export is to modify the ++ source code itself, so that when building the DLL each symbol ++ to be exported is declared as: ++ ++ __declspec(dllexport) int a_variable ++ __declspec(dllexport) void a_function(int with_args) ++ ++ All such symbols will be exported from the DLL. If, however, ++ any of the object files in the DLL contain symbols decorated ++ in this way, then the normal auto-export behavior is ++ disabled, unless the `--export-all-symbols' option is also ++ used. ++ ++ Note that object files that wish to access these symbols must ++ _not_ decorate them with dllexport. Instead, they should use ++ dllimport, instead: ++ ++ __declspec(dllimport) int a_variable ++ __declspec(dllimport) void a_function(int with_args) ++ ++ This complicates the structure of library header files, ++ because when included by the library itself the header must ++ declare the variables and functions as dllexport, but when ++ included by client code the header must declare them as ++ dllimport. There are a number of idioms that are typically ++ used to do this; often client code can omit the __declspec() ++ declaration completely. See `--enable-auto-import' and ++ `automatic data imports' for more imformation. ++ ++_automatic data imports_ ++ The standard Windows dll format supports data imports from dlls ++ only by adding special decorations (dllimport/dllexport), which ++ let the compiler produce specific assembler instructions to deal ++ with this issue. This increases the effort necessary to port ++ existing Un*x code to these platforms, especially for large c++ ++ libraries and applications. The auto-import feature, which was ++ initially provided by Paul Sokolovsky, allows one to omit the ++ decorations to archieve a behavior that conforms to that on ++ POSIX/Un*x platforms. This feature is enabled with the ++ `--enable-auto-import' command-line option, although it is enabled ++ by default on cygwin/mingw. The `--enable-auto-import' option ++ itself now serves mainly to suppress any warnings that are ++ ordinarily emitted when linked objects trigger the feature's use. ++ ++ auto-import of variables does not always work flawlessly without ++ additional assistance. Sometimes, you will see this message ++ ++ "variable '' can't be auto-imported. Please read the ++ documentation for ld's `--enable-auto-import' for details." ++ ++ The `--enable-auto-import' documentation explains why this error ++ occurs, and several methods that can be used to overcome this ++ difficulty. One of these methods is the _runtime pseudo-relocs_ ++ feature, described below. ++ ++ For complex variables imported from DLLs (such as structs or ++ classes), object files typically contain a base address for the ++ variable and an offset (_addend_) within the variable-to specify a ++ particular field or public member, for instance. Unfortunately, ++ the runtime loader used in win32 environments is incapable of ++ fixing these references at runtime without the additional ++ information supplied by dllimport/dllexport decorations. The ++ standard auto-import feature described above is unable to resolve ++ these references. ++ ++ The `--enable-runtime-pseudo-relocs' switch allows these ++ references to be resolved without error, while leaving the task of ++ adjusting the references themselves (with their non-zero addends) ++ to specialized code provided by the runtime environment. Recent ++ versions of the cygwin and mingw environments and compilers ++ provide this runtime support; older versions do not. However, the ++ support is only necessary on the developer's platform; the ++ compiled result will run without error on an older system. ++ ++ `--enable-runtime-pseudo-relocs' is not the default; it must be ++ explicitly enabled as needed. ++ ++_direct linking to a dll_ ++ The cygwin/mingw ports of `ld' support the direct linking, ++ including data symbols, to a dll without the usage of any import ++ libraries. This is much faster and uses much less memory than ++ does the traditional import library method, expecially when ++ linking large libraries or applications. When `ld' creates an ++ import lib, each function or variable exported from the dll is ++ stored in its own bfd, even though a single bfd could contain many ++ exports. The overhead involved in storing, loading, and ++ processing so many bfd's is quite large, and explains the ++ tremendous time, memory, and storage needed to link against ++ particularly large or complex libraries when using import libs. ++ ++ Linking directly to a dll uses no extra command-line switches ++ other than `-L' and `-l', because `ld' already searches for a ++ number of names to match each library. All that is needed from ++ the developer's perspective is an understanding of this search, in ++ order to force ld to select the dll instead of an import library. ++ ++ For instance, when ld is called with the argument `-lxxx' it will ++ attempt to find, in the first directory of its search path, ++ ++ libxxx.dll.a ++ xxx.dll.a ++ libxxx.a ++ cygxxx.dll (*) ++ libxxx.dll ++ xxx.dll ++ ++ before moving on to the next directory in the search path. ++ ++ (*) Actually, this is not `cygxxx.dll' but in fact is ++ `xxx.dll', where `' is set by the `ld' option ++ `--dll-search-prefix='. In the case of cygwin, the ++ standard gcc spec file includes `--dll-search-prefix=cyg', so in ++ effect we actually search for `cygxxx.dll'. ++ ++ Other win32-based unix environments, such as mingw or pw32, may ++ use other `'es, although at present only cygwin makes use ++ of this feature. It was originally intended to help avoid name ++ conflicts among dll's built for the various win32/un*x ++ environments, so that (for example) two versions of a zlib dll ++ could coexist on the same machine. ++ ++ The generic cygwin/mingw path layout uses a `bin' directory for ++ applications and dll's and a `lib' directory for the import ++ libraries (using cygwin nomenclature): ++ ++ bin/ ++ cygxxx.dll ++ lib/ ++ libxxx.dll.a (in case of dll's) ++ libxxx.a (in case of static archive) ++ ++ Linking directly to a dll without using the import library can be ++ done two ways: ++ ++ 1. Use the dll directly by adding the `bin' path to the link line ++ gcc -Wl,-verbose -o a.exe -L../bin/ -lxxx ++ ++ However, as the dll's often have version numbers appended to their ++ names (`cygncurses-5.dll') this will often fail, unless one ++ specifies `-L../bin -lncurses-5' to include the version. Import ++ libs are generally not versioned, and do not have this difficulty. ++ ++ 2. Create a symbolic link from the dll to a file in the `lib' ++ directory according to the above mentioned search pattern. This ++ should be used to avoid unwanted changes in the tools needed for ++ making the app/dll. ++ ++ ln -s bin/cygxxx.dll lib/[cyg|lib|]xxx.dll[.a] ++ ++ Then you can link without any make environment changes. ++ ++ gcc -Wl,-verbose -o a.exe -L../lib/ -lxxx ++ ++ This technique also avoids the version number problems, because ++ the following is perfectly legal ++ ++ bin/ ++ cygxxx-5.dll ++ lib/ ++ libxxx.dll.a -> ../bin/cygxxx-5.dll ++ ++ Linking directly to a dll without using an import lib will work ++ even when auto-import features are exercised, and even when ++ `--enable-runtime-pseudo-relocs' is used. ++ ++ Given the improvements in speed and memory usage, one might ++ justifiably wonder why import libraries are used at all. There ++ are two reasons: ++ ++ 1. Until recently, the link-directly-to-dll functionality did _not_ ++ work with auto-imported data. ++ ++ 2. Sometimes it is necessary to include pure static objects within ++ the import library (which otherwise contains only bfd's for ++ indirection symbols that point to the exports of a dll). Again, ++ the import lib for the cygwin kernel makes use of this ability, ++ and it is not possible to do this without an import lib. ++ ++ So, import libs are not going away. But the ability to replace ++ true import libs with a simple symbolic link to (or a copy of) a ++ dll, in most cases, is a useful addition to the suite of tools ++ binutils makes available to the win32 developer. Given the ++ massive improvements in memory requirements during linking, storage ++ requirements, and linking speed, we expect that many developers ++ will soon begin to use this feature whenever possible. ++ ++_symbol aliasing_ ++ ++ _adding additional names_ ++ Sometimes, it is useful to export symbols with additional ++ names. A symbol `foo' will be exported as `foo', but it can ++ also be exported as `_foo' by using special directives in the ++ DEF file when creating the dll. This will affect also the ++ optional created import library. Consider the following DEF ++ file: ++ ++ LIBRARY "xyz.dll" BASE=0x61000000 ++ ++ EXPORTS ++ foo ++ _foo = foo ++ ++ The line `_foo = foo' maps the symbol `foo' to `_foo'. ++ ++ Another method for creating a symbol alias is to create it in ++ the source code using the "weak" attribute: ++ ++ void foo () { /* Do something. */; } ++ void _foo () __attribute__ ((weak, alias ("foo"))); ++ ++ See the gcc manual for more information about attributes and ++ weak symbols. ++ ++ _renaming symbols_ ++ Sometimes it is useful to rename exports. For instance, the ++ cygwin kernel does this regularly. A symbol `_foo' can be ++ exported as `foo' but not as `_foo' by using special ++ directives in the DEF file. (This will also affect the import ++ library, if it is created). In the following example: ++ ++ LIBRARY "xyz.dll" BASE=0x61000000 ++ ++ EXPORTS ++ _foo = foo ++ ++ The line `_foo = foo' maps the exported symbol `foo' to ++ `_foo'. ++ ++ Note: using a DEF file disables the default auto-export behavior, ++ unless the `--export-all-symbols' command line option is used. ++ If, however, you are trying to rename symbols, then you should list ++ _all_ desired exports in the DEF file, including the symbols that ++ are not being renamed, and do _not_ use the `--export-all-symbols' ++ option. If you list only the renamed symbols in the DEF file, and ++ use `--export-all-symbols' to handle the other symbols, then the ++ both the new names _and_ the original names for the renamed ++ symbols will be exported. In effect, you'd be aliasing those ++ symbols, not renaming them, which is probably not what you wanted. ++ ++_weak externals_ ++ The Windows object format, PE, specifies a form of weak symbols ++ called weak externals. When a weak symbol is linked and the ++ symbol is not defined, the weak symbol becomes an alias for some ++ other symbol. There are three variants of weak externals: ++ * Definition is searched for in objects and libraries, ++ historically called lazy externals. ++ ++ * Definition is searched for only in other objects, not in ++ libraries. This form is not presently implemented. ++ ++ * No search; the symbol is an alias. This form is not presently ++ implemented. ++ As a GNU extension, weak symbols that do not specify an alternate ++ symbol are supported. If the symbol is undefined when linking, ++ the symbol uses a default value. ++ ++ ++File: ld.info, Node: Xtensa, Prev: WIN32, Up: Machine Dependent ++ ++4.11 `ld' and Xtensa Processors ++=============================== ++ ++The default `ld' behavior for Xtensa processors is to interpret ++`SECTIONS' commands so that lists of explicitly named sections in a ++specification with a wildcard file will be interleaved when necessary to ++keep literal pools within the range of PC-relative load offsets. For ++example, with the command: ++ ++ SECTIONS ++ { ++ .text : { ++ *(.literal .text) ++ } ++ } ++ ++`ld' may interleave some of the `.literal' and `.text' sections from ++different object files to ensure that the literal pools are within the ++range of PC-relative load offsets. A valid interleaving might place ++the `.literal' sections from an initial group of files followed by the ++`.text' sections of that group of files. Then, the `.literal' sections ++from the rest of the files and the `.text' sections from the rest of ++the files would follow. ++ ++ Relaxation is enabled by default for the Xtensa version of `ld' and ++provides two important link-time optimizations. The first optimization ++is to combine identical literal values to reduce code size. A redundant ++literal will be removed and all the `L32R' instructions that use it ++will be changed to reference an identical literal, as long as the ++location of the replacement literal is within the offset range of all ++the `L32R' instructions. The second optimization is to remove ++unnecessary overhead from assembler-generated "longcall" sequences of ++`L32R'/`CALLXN' when the target functions are within range of direct ++`CALLN' instructions. ++ ++ For each of these cases where an indirect call sequence can be ++optimized to a direct call, the linker will change the `CALLXN' ++instruction to a `CALLN' instruction, remove the `L32R' instruction, ++and remove the literal referenced by the `L32R' instruction if it is ++not used for anything else. Removing the `L32R' instruction always ++reduces code size but can potentially hurt performance by changing the ++alignment of subsequent branch targets. By default, the linker will ++always preserve alignments, either by switching some instructions ++between 24-bit encodings and the equivalent density instructions or by ++inserting a no-op in place of the `L32R' instruction that was removed. ++If code size is more important than performance, the `--size-opt' ++option can be used to prevent the linker from widening density ++instructions or inserting no-ops, except in a few cases where no-ops ++are required for correctness. ++ ++ The following Xtensa-specific command-line options can be used to ++control the linker: ++ ++`--no-relax' ++ Since the Xtensa version of `ld' enables the `--relax' option by ++ default, the `--no-relax' option is provided to disable relaxation. ++ ++`--size-opt' ++ When optimizing indirect calls to direct calls, optimize for code ++ size more than performance. With this option, the linker will not ++ insert no-ops or widen density instructions to preserve branch ++ target alignment. There may still be some cases where no-ops are ++ required to preserve the correctness of the code. ++ ++ ++File: ld.info, Node: BFD, Next: Reporting Bugs, Prev: Machine Dependent, Up: Top ++ ++5 BFD ++***** ++ ++The linker accesses object and archive files using the BFD libraries. ++These libraries allow the linker to use the same routines to operate on ++object files whatever the object file format. A different object file ++format can be supported simply by creating a new BFD back end and adding ++it to the library. To conserve runtime memory, however, the linker and ++associated tools are usually configured to support only a subset of the ++object file formats available. You can use `objdump -i' (*note ++objdump: (binutils.info)objdump.) to list all the formats available for ++your configuration. ++ ++ As with most implementations, BFD is a compromise between several ++conflicting requirements. The major factor influencing BFD design was ++efficiency: any time used converting between formats is time which ++would not have been spent had BFD not been involved. This is partly ++offset by abstraction payback; since BFD simplifies applications and ++back ends, more time and care may be spent optimizing algorithms for a ++greater speed. ++ ++ One minor artifact of the BFD solution which you should bear in mind ++is the potential for information loss. There are two places where ++useful information can be lost using the BFD mechanism: during ++conversion and during output. *Note BFD information loss::. ++ ++* Menu: ++ ++* BFD outline:: How it works: an outline of BFD ++ ++ ++File: ld.info, Node: BFD outline, Up: BFD ++ ++5.1 How It Works: An Outline of BFD ++=================================== ++ ++When an object file is opened, BFD subroutines automatically determine ++the format of the input object file. They then build a descriptor in ++memory with pointers to routines that will be used to access elements of ++the object file's data structures. ++ ++ As different information from the object files is required, BFD ++reads from different sections of the file and processes them. For ++example, a very common operation for the linker is processing symbol ++tables. Each BFD back end provides a routine for converting between ++the object file's representation of symbols and an internal canonical ++format. When the linker asks for the symbol table of an object file, it ++calls through a memory pointer to the routine from the relevant BFD ++back end which reads and converts the table into a canonical form. The ++linker then operates upon the canonical form. When the link is finished ++and the linker writes the output file's symbol table, another BFD back ++end routine is called to take the newly created symbol table and ++convert it into the chosen output format. ++ ++* Menu: ++ ++* BFD information loss:: Information Loss ++* Canonical format:: The BFD canonical object-file format ++ ++ ++File: ld.info, Node: BFD information loss, Next: Canonical format, Up: BFD outline ++ ++5.1.1 Information Loss ++---------------------- ++ ++_Information can be lost during output._ The output formats supported ++by BFD do not provide identical facilities, and information which can ++be described in one form has nowhere to go in another format. One ++example of this is alignment information in `b.out'. There is nowhere ++in an `a.out' format file to store alignment information on the ++contained data, so when a file is linked from `b.out' and an `a.out' ++image is produced, alignment information will not propagate to the ++output file. (The linker will still use the alignment information ++internally, so the link is performed correctly). ++ ++ Another example is COFF section names. COFF files may contain an ++unlimited number of sections, each one with a textual section name. If ++the target of the link is a format which does not have many sections ++(e.g., `a.out') or has sections without names (e.g., the Oasys format), ++the link cannot be done simply. You can circumvent this problem by ++describing the desired input-to-output section mapping with the linker ++command language. ++ ++ _Information can be lost during canonicalization._ The BFD internal ++canonical form of the external formats is not exhaustive; there are ++structures in input formats for which there is no direct representation ++internally. This means that the BFD back ends cannot maintain all ++possible data richness through the transformation between external to ++internal and back to external formats. ++ ++ This limitation is only a problem when an application reads one ++format and writes another. Each BFD back end is responsible for ++maintaining as much data as possible, and the internal BFD canonical ++form has structures which are opaque to the BFD core, and exported only ++to the back ends. When a file is read in one format, the canonical form ++is generated for BFD and the application. At the same time, the back ++end saves away any information which may otherwise be lost. If the data ++is then written back in the same format, the back end routine will be ++able to use the canonical form provided by the BFD core as well as the ++information it prepared earlier. Since there is a great deal of ++commonality between back ends, there is no information lost when ++linking or copying big endian COFF to little endian COFF, or `a.out' to ++`b.out'. When a mixture of formats is linked, the information is only ++lost from the files whose format differs from the destination. ++ ++ ++File: ld.info, Node: Canonical format, Prev: BFD information loss, Up: BFD outline ++ ++5.1.2 The BFD canonical object-file format ++------------------------------------------ ++ ++The greatest potential for loss of information occurs when there is the ++least overlap between the information provided by the source format, ++that stored by the canonical format, and that needed by the destination ++format. A brief description of the canonical form may help you ++understand which kinds of data you can count on preserving across ++conversions. ++ ++_files_ ++ Information stored on a per-file basis includes target machine ++ architecture, particular implementation format type, a demand ++ pageable bit, and a write protected bit. Information like Unix ++ magic numbers is not stored here--only the magic numbers' meaning, ++ so a `ZMAGIC' file would have both the demand pageable bit and the ++ write protected text bit set. The byte order of the target is ++ stored on a per-file basis, so that big- and little-endian object ++ files may be used with one another. ++ ++_sections_ ++ Each section in the input file contains the name of the section, ++ the section's original address in the object file, size and ++ alignment information, various flags, and pointers into other BFD ++ data structures. ++ ++_symbols_ ++ Each symbol contains a pointer to the information for the object ++ file which originally defined it, its name, its value, and various ++ flag bits. When a BFD back end reads in a symbol table, it ++ relocates all symbols to make them relative to the base of the ++ section where they were defined. Doing this ensures that each ++ symbol points to its containing section. Each symbol also has a ++ varying amount of hidden private data for the BFD back end. Since ++ the symbol points to the original file, the private data format ++ for that symbol is accessible. `ld' can operate on a collection ++ of symbols of wildly different formats without problems. ++ ++ Normal global and simple local symbols are maintained on output, ++ so an output file (no matter its format) will retain symbols ++ pointing to functions and to global, static, and common variables. ++ Some symbol information is not worth retaining; in `a.out', type ++ information is stored in the symbol table as long symbol names. ++ This information would be useless to most COFF debuggers; the ++ linker has command line switches to allow users to throw it away. ++ ++ There is one word of type information within the symbol, so if the ++ format supports symbol type information within symbols (for ++ example, COFF, IEEE, Oasys) and the type is simple enough to fit ++ within one word (nearly everything but aggregates), the ++ information will be preserved. ++ ++_relocation level_ ++ Each canonical BFD relocation record contains a pointer to the ++ symbol to relocate to, the offset of the data to relocate, the ++ section the data is in, and a pointer to a relocation type ++ descriptor. Relocation is performed by passing messages through ++ the relocation type descriptor and the symbol pointer. Therefore, ++ relocations can be performed on output data using a relocation ++ method that is only available in one of the input formats. For ++ instance, Oasys provides a byte relocation format. A relocation ++ record requesting this relocation type would point indirectly to a ++ routine to perform this, so the relocation may be performed on a ++ byte being written to a 68k COFF file, even though 68k COFF has no ++ such relocation type. ++ ++_line numbers_ ++ Object formats can contain, for debugging purposes, some form of ++ mapping between symbols, source line numbers, and addresses in the ++ output file. These addresses have to be relocated along with the ++ symbol information. Each symbol with an associated list of line ++ number records points to the first record of the list. The head ++ of a line number list consists of a pointer to the symbol, which ++ allows finding out the address of the function whose line number ++ is being described. The rest of the list is made up of pairs: ++ offsets into the section and line numbers. Any format which can ++ simply derive this information can pass it successfully between ++ formats (COFF, IEEE and Oasys). ++ ++ ++File: ld.info, Node: Reporting Bugs, Next: MRI, Prev: BFD, Up: Top ++ ++6 Reporting Bugs ++**************** ++ ++Your bug reports play an essential role in making `ld' reliable. ++ ++ Reporting a bug may help you by bringing a solution to your problem, ++or it may not. But in any case the principal function of a bug report ++is to help the entire community by making the next version of `ld' work ++better. Bug reports are your contribution to the maintenance of `ld'. ++ ++ In order for a bug report to serve its purpose, you must include the ++information that enables us to fix the bug. ++ ++* Menu: ++ ++* Bug Criteria:: Have you found a bug? ++* Bug Reporting:: How to report bugs ++ ++ ++File: ld.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs ++ ++6.1 Have You Found a Bug? ++========================= ++ ++If you are not sure whether you have found a bug, here are some ++guidelines: ++ ++ * If the linker gets a fatal signal, for any input whatever, that is ++ a `ld' bug. Reliable linkers never crash. ++ ++ * If `ld' produces an error message for valid input, that is a bug. ++ ++ * If `ld' does not produce an error message for invalid input, that ++ may be a bug. In the general case, the linker can not verify that ++ object files are correct. ++ ++ * If you are an experienced user of linkers, your suggestions for ++ improvement of `ld' are welcome in any case. ++ ++ ++File: ld.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs ++ ++6.2 How to Report Bugs ++====================== ++ ++A number of companies and individuals offer support for GNU products. ++If you obtained `ld' from a support organization, we recommend you ++contact that organization first. ++ ++ You can find contact information for many support companies and ++individuals in the file `etc/SERVICE' in the GNU Emacs distribution. ++ ++ Otherwise, send bug reports for `ld' to `bug-binutils@gnu.org'. ++ ++ The fundamental principle of reporting bugs usefully is this: ++*report all the facts*. If you are not sure whether to state a fact or ++leave it out, state it! ++ ++ Often people omit facts because they think they know what causes the ++problem and assume that some details do not matter. Thus, you might ++assume that the name of a symbol you use in an example does not matter. ++Well, probably it does not, but one cannot be sure. Perhaps the bug ++is a stray memory reference which happens to fetch from the location ++where that name is stored in memory; perhaps, if the name were ++different, the contents of that location would fool the linker into ++doing the right thing despite the bug. Play it safe and give a ++specific, complete example. That is the easiest thing for you to do, ++and the most helpful. ++ ++ Keep in mind that the purpose of a bug report is to enable us to fix ++the bug if it is new to us. Therefore, always write your bug reports ++on the assumption that the bug has not been reported previously. ++ ++ Sometimes people give a few sketchy facts and ask, "Does this ring a ++bell?" This cannot help us fix a bug, so it is basically useless. We ++respond by asking for enough details to enable us to investigate. You ++might as well expedite matters by sending them to begin with. ++ ++ To enable us to fix the bug, you should include all these things: ++ ++ * The version of `ld'. `ld' announces it if you start it with the ++ `--version' argument. ++ ++ Without this, we will not know whether there is any point in ++ looking for the bug in the current version of `ld'. ++ ++ * Any patches you may have applied to the `ld' source, including any ++ patches made to the `BFD' library. ++ ++ * The type of machine you are using, and the operating system name ++ and version number. ++ ++ * What compiler (and its version) was used to compile `ld'--e.g. ++ "`gcc-2.7'". ++ ++ * The command arguments you gave the linker to link your example and ++ observe the bug. To guarantee you will not omit something ++ important, list them all. A copy of the Makefile (or the output ++ from make) is sufficient. ++ ++ If we were to try to guess the arguments, we would probably guess ++ wrong and then we might not encounter the bug. ++ ++ * A complete input file, or set of input files, that will reproduce ++ the bug. It is generally most helpful to send the actual object ++ files provided that they are reasonably small. Say no more than ++ 10K. For bigger files you can either make them available by FTP ++ or HTTP or else state that you are willing to send the object ++ file(s) to whomever requests them. (Note - your email will be ++ going to a mailing list, so we do not want to clog it up with ++ large attachments). But small attachments are best. ++ ++ If the source files were assembled using `gas' or compiled using ++ `gcc', then it may be OK to send the source files rather than the ++ object files. In this case, be sure to say exactly what version of ++ `gas' or `gcc' was used to produce the object files. Also say how ++ `gas' or `gcc' were configured. ++ ++ * A description of what behavior you observe that you believe is ++ incorrect. For example, "It gets a fatal signal." ++ ++ Of course, if the bug is that `ld' gets a fatal signal, then we ++ will certainly notice it. But if the bug is incorrect output, we ++ might not notice unless it is glaringly wrong. You might as well ++ not give us a chance to make a mistake. ++ ++ Even if the problem you experience is a fatal signal, you should ++ still say so explicitly. Suppose something strange is going on, ++ such as, your copy of `ld' is out of synch, or you have ++ encountered a bug in the C library on your system. (This has ++ happened!) Your copy might crash and ours would not. If you told ++ us to expect a crash, then when ours fails to crash, we would know ++ that the bug was not happening for us. If you had not told us to ++ expect a crash, then we would not be able to draw any conclusion ++ from our observations. ++ ++ * If you wish to suggest changes to the `ld' source, send us context ++ diffs, as generated by `diff' with the `-u', `-c', or `-p' option. ++ Always send diffs from the old file to the new file. If you even ++ discuss something in the `ld' source, refer to it by context, not ++ by line number. ++ ++ The line numbers in our development sources will not match those ++ in your sources. Your line numbers would convey no useful ++ information to us. ++ ++ Here are some things that are not necessary: ++ ++ * A description of the envelope of the bug. ++ ++ Often people who encounter a bug spend a lot of time investigating ++ which changes to the input file will make the bug go away and which ++ changes will not affect it. ++ ++ This is often time consuming and not very useful, because the way ++ we will find the bug is by running a single example under the ++ debugger with breakpoints, not by pure deduction from a series of ++ examples. We recommend that you save your time for something else. ++ ++ Of course, if you can find a simpler example to report _instead_ ++ of the original one, that is a convenience for us. Errors in the ++ output will be easier to spot, running under the debugger will take ++ less time, and so on. ++ ++ However, simplification is not vital; if you do not want to do ++ this, report the bug anyway and send us the entire test case you ++ used. ++ ++ * A patch for the bug. ++ ++ A patch for the bug does help us if it is a good one. But do not ++ omit the necessary information, such as the test case, on the ++ assumption that a patch is all we need. We might see problems ++ with your patch and decide to fix the problem another way, or we ++ might not understand it at all. ++ ++ Sometimes with a program as complicated as `ld' it is very hard to ++ construct an example that will make the program follow a certain ++ path through the code. If you do not send us the example, we will ++ not be able to construct one, so we will not be able to verify ++ that the bug is fixed. ++ ++ And if we cannot understand what bug you are trying to fix, or why ++ your patch should be an improvement, we will not install it. A ++ test case will help us to understand. ++ ++ * A guess about what the bug is or what it depends on. ++ ++ Such guesses are usually wrong. Even we cannot guess right about ++ such things without first using the debugger to find the facts. ++ ++ ++File: ld.info, Node: MRI, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top ++ ++Appendix A MRI Compatible Script Files ++************************************** ++ ++To aid users making the transition to GNU `ld' from the MRI linker, ++`ld' can use MRI compatible linker scripts as an alternative to the ++more general-purpose linker scripting language described in *Note ++Scripts::. MRI compatible linker scripts have a much simpler command ++set than the scripting language otherwise used with `ld'. GNU `ld' ++supports the most commonly used MRI linker commands; these commands are ++described here. ++ ++ In general, MRI scripts aren't of much use with the `a.out' object ++file format, since it only has three sections and MRI scripts lack some ++features to make use of them. ++ ++ You can specify a file containing an MRI-compatible script using the ++`-c' command-line option. ++ ++ Each command in an MRI-compatible script occupies its own line; each ++command line starts with the keyword that identifies the command (though ++blank lines are also allowed for punctuation). If a line of an ++MRI-compatible script begins with an unrecognized keyword, `ld' issues ++a warning message, but continues processing the script. ++ ++ Lines beginning with `*' are comments. ++ ++ You can write these commands using all upper-case letters, or all ++lower case; for example, `chip' is the same as `CHIP'. The following ++list shows only the upper-case form of each command. ++ ++`ABSOLUTE SECNAME' ++`ABSOLUTE SECNAME, SECNAME, ... SECNAME' ++ Normally, `ld' includes in the output file all sections from all ++ the input files. However, in an MRI-compatible script, you can ++ use the `ABSOLUTE' command to restrict the sections that will be ++ present in your output program. If the `ABSOLUTE' command is used ++ at all in a script, then only the sections named explicitly in ++ `ABSOLUTE' commands will appear in the linker output. You can ++ still use other input sections (whatever you select on the command ++ line, or using `LOAD') to resolve addresses in the output file. ++ ++`ALIAS OUT-SECNAME, IN-SECNAME' ++ Use this command to place the data from input section IN-SECNAME ++ in a section called OUT-SECNAME in the linker output file. ++ ++ IN-SECNAME may be an integer. ++ ++`ALIGN SECNAME = EXPRESSION' ++ Align the section called SECNAME to EXPRESSION. The EXPRESSION ++ should be a power of two. ++ ++`BASE EXPRESSION' ++ Use the value of EXPRESSION as the lowest address (other than ++ absolute addresses) in the output file. ++ ++`CHIP EXPRESSION' ++`CHIP EXPRESSION, EXPRESSION' ++ This command does nothing; it is accepted only for compatibility. ++ ++`END' ++ This command does nothing whatever; it's only accepted for ++ compatibility. ++ ++`FORMAT OUTPUT-FORMAT' ++ Similar to the `OUTPUT_FORMAT' command in the more general linker ++ language, but restricted to one of these output formats: ++ ++ 1. S-records, if OUTPUT-FORMAT is `S' ++ ++ 2. IEEE, if OUTPUT-FORMAT is `IEEE' ++ ++ 3. COFF (the `coff-m68k' variant in BFD), if OUTPUT-FORMAT is ++ `COFF' ++ ++`LIST ANYTHING...' ++ Print (to the standard output file) a link map, as produced by the ++ `ld' command-line option `-M'. ++ ++ The keyword `LIST' may be followed by anything on the same line, ++ with no change in its effect. ++ ++`LOAD FILENAME' ++`LOAD FILENAME, FILENAME, ... FILENAME' ++ Include one or more object file FILENAME in the link; this has the ++ same effect as specifying FILENAME directly on the `ld' command ++ line. ++ ++`NAME OUTPUT-NAME' ++ OUTPUT-NAME is the name for the program produced by `ld'; the ++ MRI-compatible command `NAME' is equivalent to the command-line ++ option `-o' or the general script language command `OUTPUT'. ++ ++`ORDER SECNAME, SECNAME, ... SECNAME' ++`ORDER SECNAME SECNAME SECNAME' ++ Normally, `ld' orders the sections in its output file in the order ++ in which they first appear in the input files. In an ++ MRI-compatible script, you can override this ordering with the ++ `ORDER' command. The sections you list with `ORDER' will appear ++ first in your output file, in the order specified. ++ ++`PUBLIC NAME=EXPRESSION' ++`PUBLIC NAME,EXPRESSION' ++`PUBLIC NAME EXPRESSION' ++ Supply a value (EXPRESSION) for external symbol NAME used in the ++ linker input files. ++ ++`SECT SECNAME, EXPRESSION' ++`SECT SECNAME=EXPRESSION' ++`SECT SECNAME EXPRESSION' ++ You can use any of these three forms of the `SECT' command to ++ specify the start address (EXPRESSION) for section SECNAME. If ++ you have more than one `SECT' statement for the same SECNAME, only ++ the _first_ sets the start address. ++ ++ ++File: ld.info, Node: GNU Free Documentation License, Next: Index, Prev: MRI, Up: Top ++ ++Appendix B GNU Free Documentation License ++***************************************** ++ ++ Version 1.1, March 2000 ++ ++ Copyright (C) 2000, 2003 Free Software Foundation, Inc. ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ ++ Everyone is permitted to copy and distribute verbatim copies ++ of this license document, but changing it is not allowed. ++ ++ ++ 0. PREAMBLE ++ ++ The purpose of this License is to make a manual, textbook, or other ++ written document "free" in the sense of freedom: to assure everyone ++ the effective freedom to copy and redistribute it, with or without ++ modifying it, either commercially or noncommercially. Secondarily, ++ this License preserves for the author and publisher a way to get ++ credit for their work, while not being considered responsible for ++ modifications made by others. ++ ++ This License is a kind of "copyleft", which means that derivative ++ works of the document must themselves be free in the same sense. ++ It complements the GNU General Public License, which is a copyleft ++ license designed for free software. ++ ++ We have designed this License in order to use it for manuals for ++ free software, because free software needs free documentation: a ++ free program should come with manuals providing the same freedoms ++ that the software does. But this License is not limited to ++ software manuals; it can be used for any textual work, regardless ++ of subject matter or whether it is published as a printed book. ++ We recommend this License principally for works whose purpose is ++ instruction or reference. ++ ++ ++ 1. APPLICABILITY AND DEFINITIONS ++ ++ This License applies to any manual or other work that contains a ++ notice placed by the copyright holder saying it can be distributed ++ under the terms of this License. The "Document", below, refers to ++ any such manual or work. Any member of the public is a licensee, ++ and is addressed as "you." ++ ++ A "Modified Version" of the Document means any work containing the ++ Document or a portion of it, either copied verbatim, or with ++ modifications and/or translated into another language. ++ ++ A "Secondary Section" is a named appendix or a front-matter ++ section of the Document that deals exclusively with the ++ relationship of the publishers or authors of the Document to the ++ Document's overall subject (or to related matters) and contains ++ nothing that could fall directly within that overall subject. ++ (For example, if the Document is in part a textbook of ++ mathematics, a Secondary Section may not explain any mathematics.) ++ The relationship could be a matter of historical connection with ++ the subject or with related matters, or of legal, commercial, ++ philosophical, ethical or political position regarding them. ++ ++ The "Invariant Sections" are certain Secondary Sections whose ++ titles are designated, as being those of Invariant Sections, in ++ the notice that says that the Document is released under this ++ License. ++ ++ The "Cover Texts" are certain short passages of text that are ++ listed, as Front-Cover Texts or Back-Cover Texts, in the notice ++ that says that the Document is released under this License. ++ ++ A "Transparent" copy of the Document means a machine-readable copy, ++ represented in a format whose specification is available to the ++ general public, whose contents can be viewed and edited directly ++ and straightforwardly with generic text editors or (for images ++ composed of pixels) generic paint programs or (for drawings) some ++ widely available drawing editor, and that is suitable for input to ++ text formatters or for automatic translation to a variety of ++ formats suitable for input to text formatters. A copy made in an ++ otherwise Transparent file format whose markup has been designed ++ to thwart or discourage subsequent modification by readers is not ++ Transparent. A copy that is not "Transparent" is called "Opaque." ++ ++ Examples of suitable formats for Transparent copies include plain ++ ASCII without markup, Texinfo input format, LaTeX input format, ++ SGML or XML using a publicly available DTD, and ++ standard-conforming simple HTML designed for human modification. ++ Opaque formats include PostScript, PDF, proprietary formats that ++ can be read and edited only by proprietary word processors, SGML ++ or XML for which the DTD and/or processing tools are not generally ++ available, and the machine-generated HTML produced by some word ++ processors for output purposes only. ++ ++ The "Title Page" means, for a printed book, the title page itself, ++ plus such following pages as are needed to hold, legibly, the ++ material this License requires to appear in the title page. For ++ works in formats which do not have any title page as such, "Title ++ Page" means the text near the most prominent appearance of the ++ work's title, preceding the beginning of the body of the text. ++ ++ 2. VERBATIM COPYING ++ ++ You may copy and distribute the Document in any medium, either ++ commercially or noncommercially, provided that this License, the ++ copyright notices, and the license notice saying this License ++ applies to the Document are reproduced in all copies, and that you ++ add no other conditions whatsoever to those of this License. You ++ may not use technical measures to obstruct or control the reading ++ or further copying of the copies you make or distribute. However, ++ you may accept compensation in exchange for copies. If you ++ distribute a large enough number of copies you must also follow ++ the conditions in section 3. ++ ++ You may also lend copies, under the same conditions stated above, ++ and you may publicly display copies. ++ ++ 3. COPYING IN QUANTITY ++ ++ If you publish printed copies of the Document numbering more than ++ 100, and the Document's license notice requires Cover Texts, you ++ must enclose the copies in covers that carry, clearly and legibly, ++ all these Cover Texts: Front-Cover Texts on the front cover, and ++ Back-Cover Texts on the back cover. Both covers must also clearly ++ and legibly identify you as the publisher of these copies. The ++ front cover must present the full title with all words of the ++ title equally prominent and visible. You may add other material ++ on the covers in addition. Copying with changes limited to the ++ covers, as long as they preserve the title of the Document and ++ satisfy these conditions, can be treated as verbatim copying in ++ other respects. ++ ++ If the required texts for either cover are too voluminous to fit ++ legibly, you should put the first ones listed (as many as fit ++ reasonably) on the actual cover, and continue the rest onto ++ adjacent pages. ++ ++ If you publish or distribute Opaque copies of the Document ++ numbering more than 100, you must either include a ++ machine-readable Transparent copy along with each Opaque copy, or ++ state in or with each Opaque copy a publicly-accessible ++ computer-network location containing a complete Transparent copy ++ of the Document, free of added material, which the general ++ network-using public has access to download anonymously at no ++ charge using public-standard network protocols. If you use the ++ latter option, you must take reasonably prudent steps, when you ++ begin distribution of Opaque copies in quantity, to ensure that ++ this Transparent copy will remain thus accessible at the stated ++ location until at least one year after the last time you ++ distribute an Opaque copy (directly or through your agents or ++ retailers) of that edition to the public. ++ ++ It is requested, but not required, that you contact the authors of ++ the Document well before redistributing any large number of ++ copies, to give them a chance to provide you with an updated ++ version of the Document. ++ ++ 4. MODIFICATIONS ++ ++ You may copy and distribute a Modified Version of the Document ++ under the conditions of sections 2 and 3 above, provided that you ++ release the Modified Version under precisely this License, with ++ the Modified Version filling the role of the Document, thus ++ licensing distribution and modification of the Modified Version to ++ whoever possesses a copy of it. In addition, you must do these ++ things in the Modified Version: ++ ++ A. Use in the Title Page (and on the covers, if any) a title ++ distinct from that of the Document, and from those of previous ++ versions (which should, if there were any, be listed in the ++ History section of the Document). You may use the same title ++ as a previous version if the original publisher of that version ++ gives permission. ++ B. List on the Title Page, as authors, one or more persons or ++ entities responsible for authorship of the modifications in the ++ Modified Version, together with at least five of the principal ++ authors of the Document (all of its principal authors, if it ++ has less than five). ++ C. State on the Title page the name of the publisher of the ++ Modified Version, as the publisher. ++ D. Preserve all the copyright notices of the Document. ++ E. Add an appropriate copyright notice for your modifications ++ adjacent to the other copyright notices. ++ F. Include, immediately after the copyright notices, a license ++ notice giving the public permission to use the Modified Version ++ under the terms of this License, in the form shown in the ++ Addendum below. ++ G. Preserve in that license notice the full lists of Invariant ++ Sections and required Cover Texts given in the Document's ++ license notice. ++ H. Include an unaltered copy of this License. ++ I. Preserve the section entitled "History", and its title, and add ++ to it an item stating at least the title, year, new authors, and ++ publisher of the Modified Version as given on the Title Page. ++ If there is no section entitled "History" in the Document, ++ create one stating the title, year, authors, and publisher of ++ the Document as given on its Title Page, then add an item ++ describing the Modified Version as stated in the previous ++ sentence. ++ J. Preserve the network location, if any, given in the Document for ++ public access to a Transparent copy of the Document, and ++ likewise the network locations given in the Document for ++ previous versions it was based on. These may be placed in the ++ "History" section. You may omit a network location for a work ++ that was published at least four years before the Document ++ itself, or if the original publisher of the version it refers ++ to gives permission. ++ K. In any section entitled "Acknowledgements" or "Dedications", ++ preserve the section's title, and preserve in the section all the ++ substance and tone of each of the contributor acknowledgements ++ and/or dedications given therein. ++ L. Preserve all the Invariant Sections of the Document, ++ unaltered in their text and in their titles. Section numbers ++ or the equivalent are not considered part of the section titles. ++ M. Delete any section entitled "Endorsements." Such a section ++ may not be included in the Modified Version. ++ N. Do not retitle any existing section as "Endorsements" or to ++ conflict in title with any Invariant Section. ++ ++ If the Modified Version includes new front-matter sections or ++ appendices that qualify as Secondary Sections and contain no ++ material copied from the Document, you may at your option ++ designate some or all of these sections as invariant. To do this, ++ add their titles to the list of Invariant Sections in the Modified ++ Version's license notice. These titles must be distinct from any ++ other section titles. ++ ++ You may add a section entitled "Endorsements", provided it contains ++ nothing but endorsements of your Modified Version by various ++ parties-for example, statements of peer review or that the text has ++ been approved by an organization as the authoritative definition ++ of a standard. ++ ++ You may add a passage of up to five words as a Front-Cover Text, ++ and a passage of up to 25 words as a Back-Cover Text, to the end ++ of the list of Cover Texts in the Modified Version. Only one ++ passage of Front-Cover Text and one of Back-Cover Text may be ++ added by (or through arrangements made by) any one entity. If the ++ Document already includes a cover text for the same cover, ++ previously added by you or by arrangement made by the same entity ++ you are acting on behalf of, you may not add another; but you may ++ replace the old one, on explicit permission from the previous ++ publisher that added the old one. ++ ++ The author(s) and publisher(s) of the Document do not by this ++ License give permission to use their names for publicity for or to ++ assert or imply endorsement of any Modified Version. ++ ++ 5. COMBINING DOCUMENTS ++ ++ You may combine the Document with other documents released under ++ this License, under the terms defined in section 4 above for ++ modified versions, provided that you include in the combination ++ all of the Invariant Sections of all of the original documents, ++ unmodified, and list them all as Invariant Sections of your ++ combined work in its license notice. ++ ++ The combined work need only contain one copy of this License, and ++ multiple identical Invariant Sections may be replaced with a single ++ copy. If there are multiple Invariant Sections with the same name ++ but different contents, make the title of each such section unique ++ by adding at the end of it, in parentheses, the name of the ++ original author or publisher of that section if known, or else a ++ unique number. Make the same adjustment to the section titles in ++ the list of Invariant Sections in the license notice of the ++ combined work. ++ ++ In the combination, you must combine any sections entitled ++ "History" in the various original documents, forming one section ++ entitled "History"; likewise combine any sections entitled ++ "Acknowledgements", and any sections entitled "Dedications." You ++ must delete all sections entitled "Endorsements." ++ ++ 6. COLLECTIONS OF DOCUMENTS ++ ++ You may make a collection consisting of the Document and other ++ documents released under this License, and replace the individual ++ copies of this License in the various documents with a single copy ++ that is included in the collection, provided that you follow the ++ rules of this License for verbatim copying of each of the ++ documents in all other respects. ++ ++ You may extract a single document from such a collection, and ++ distribute it individually under this License, provided you insert ++ a copy of this License into the extracted document, and follow ++ this License in all other respects regarding verbatim copying of ++ that document. ++ ++ 7. AGGREGATION WITH INDEPENDENT WORKS ++ ++ A compilation of the Document or its derivatives with other ++ separate and independent documents or works, in or on a volume of ++ a storage or distribution medium, does not as a whole count as a ++ Modified Version of the Document, provided no compilation ++ copyright is claimed for the compilation. Such a compilation is ++ called an "aggregate", and this License does not apply to the ++ other self-contained works thus compiled with the Document, on ++ account of their being thus compiled, if they are not themselves ++ derivative works of the Document. ++ ++ If the Cover Text requirement of section 3 is applicable to these ++ copies of the Document, then if the Document is less than one ++ quarter of the entire aggregate, the Document's Cover Texts may be ++ placed on covers that surround only the Document within the ++ aggregate. Otherwise they must appear on covers around the whole ++ aggregate. ++ ++ 8. TRANSLATION ++ ++ Translation is considered a kind of modification, so you may ++ distribute translations of the Document under the terms of section ++ 4. Replacing Invariant Sections with translations requires special ++ permission from their copyright holders, but you may include ++ translations of some or all Invariant Sections in addition to the ++ original versions of these Invariant Sections. You may include a ++ translation of this License provided that you also include the ++ original English version of this License. In case of a ++ disagreement between the translation and the original English ++ version of this License, the original English version will prevail. ++ ++ 9. TERMINATION ++ ++ You may not copy, modify, sublicense, or distribute the Document ++ except as expressly provided for under this License. Any other ++ attempt to copy, modify, sublicense or distribute the Document is ++ void, and will automatically terminate your rights under this ++ License. However, parties who have received copies, or rights, ++ from you under this License will not have their licenses ++ terminated so long as such parties remain in full compliance. ++ ++ 10. FUTURE REVISIONS OF THIS LICENSE ++ ++ The Free Software Foundation may publish new, revised versions of ++ the GNU Free Documentation License from time to time. Such new ++ versions will be similar in spirit to the present version, but may ++ differ in detail to address new problems or concerns. See ++ http://www.gnu.org/copyleft/. ++ ++ Each version of the License is given a distinguishing version ++ number. If the Document specifies that a particular numbered ++ version of this License "or any later version" applies to it, you ++ have the option of following the terms and conditions either of ++ that specified version or of any later version that has been ++ published (not as a draft) by the Free Software Foundation. If ++ the Document does not specify a version number of this License, ++ you may choose any version ever published (not as a draft) by the ++ Free Software Foundation. ++ ++ ++ADDENDUM: How to use this License for your documents ++==================================================== ++ ++To use this License in a document you have written, include a copy of ++the License in the document and put the following copyright and license ++notices just after the title page: ++ ++ Copyright (C) YEAR YOUR NAME. ++ Permission is granted to copy, distribute and/or modify this document ++ under the terms of the GNU Free Documentation License, Version 1.1 ++ or any later version published by the Free Software Foundation; ++ with the Invariant Sections being LIST THEIR TITLES, with the ++ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. ++ A copy of the license is included in the section entitled "GNU ++ Free Documentation License." ++ ++ If you have no Invariant Sections, write "with no Invariant Sections" ++instead of saying which ones are invariant. If you have no Front-Cover ++Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being ++LIST"; likewise for Back-Cover Texts. ++ ++ If your document contains nontrivial examples of program code, we ++recommend releasing these examples in parallel under your choice of ++free software license, such as the GNU General Public License, to ++permit their use in free software. ++ ++ ++File: ld.info, Node: Index, Prev: GNU Free Documentation License, Up: Top ++ ++Index ++***** ++ ++[index] ++* Menu: ++ ++* ": Symbols. (line 6) ++* -(: Options. (line 609) ++* --accept-unknown-input-arch: Options. (line 627) ++* --add-needed: Options. (line 649) ++* --add-stdcall-alias: Options. (line 1343) ++* --allow-multiple-definition: Options. (line 819) ++* --allow-shlib-undefined: Options. (line 825) ++* --architecture=ARCH: Options. (line 104) ++* --as-needed: Options. (line 637) ++* --auxiliary: Options. (line 205) ++* --base-file: Options. (line 1348) ++* --be8: ARM. (line 23) ++* --bss-plt: PowerPC ELF32. (line 13) ++* --check-sections: Options. (line 701) ++* --cref: Options. (line 711) ++* --default-imported-symver: Options. (line 853) ++* --default-symver: Options. (line 849) ++* --defsym SYMBOL=EXP: Options. (line 739) ++* --demangle[=STYLE]: Options. (line 752) ++* --disable-auto-image-base: Options. (line 1495) ++* --disable-auto-import: Options. (line 1624) ++* --disable-new-dtags: Options. (line 1295) ++* --disable-runtime-pseudo-reloc: Options. (line 1637) ++* --disable-stdcall-fixup: Options. (line 1358) ++* --discard-all: Options. (line 513) ++* --discard-locals: Options. (line 517) ++* --dll: Options. (line 1353) ++* --dll-search-prefix: Options. (line 1501) ++* --dotsyms: PowerPC64 ELF64. (line 33) ++* --dynamic-linker FILE: Options. (line 765) ++* --eh-frame-hdr: Options. (line 1291) ++* --emit-relocs: Options. (line 415) ++* --emit-stub-syms <1>: PowerPC64 ELF64. (line 29) ++* --emit-stub-syms: PowerPC ELF32. (line 37) ++* --enable-auto-image-base: Options. (line 1487) ++* --enable-auto-import: Options. (line 1510) ++* --enable-extra-pe-debug: Options. (line 1642) ++* --enable-new-dtags: Options. (line 1295) ++* --enable-runtime-pseudo-reloc: Options. (line 1629) ++* --enable-stdcall-fixup: Options. (line 1358) ++* --entry=ENTRY: Options. (line 158) ++* --error-unresolved-symbols: Options. (line 1244) ++* --exclude-libs: Options. (line 168) ++* --exclude-symbols: Options. (line 1400) ++* --export-all-symbols: Options. (line 1376) ++* --export-dynamic: Options. (line 179) ++* --fatal-warnings: Options. (line 771) ++* --file-alignment: Options. (line 1406) ++* --filter: Options. (line 226) ++* --fix-v4bx: ARM. (line 44) ++* --force-dynamic: Options. (line 424) ++* --force-exe-suffix: Options. (line 774) ++* --format=FORMAT: Options. (line 115) ++* --format=VERSION: TI COFF. (line 6) ++* --gc-sections: Options. (line 784) ++* --gpsize: Options. (line 259) ++* --hash-size=NUMBER: Options. (line 1304) ++* --heap: Options. (line 1412) ++* --help: Options. (line 792) ++* --image-base: Options. (line 1419) ++* --just-symbols=FILE: Options. (line 447) ++* --kill-at: Options. (line 1428) ++* --large-address-aware: Options. (line 1433) ++* --library-path=DIR: Options. (line 315) ++* --library=ARCHIVE: Options. (line 285) ++* --major-image-version: Options. (line 1442) ++* --major-os-version: Options. (line 1447) ++* --major-subsystem-version: Options. (line 1451) ++* --minor-image-version: Options. (line 1456) ++* --minor-os-version: Options. (line 1461) ++* --minor-subsystem-version: Options. (line 1465) ++* --mri-script=MRI-CMDFILE: Options. (line 139) ++* --multi-subspace: HPPA ELF32. (line 6) ++* --nmagic: Options. (line 384) ++* --no-accept-unknown-input-arch: Options. (line 627) ++* --no-add-needed: Options. (line 649) ++* --no-allow-shlib-undefined: Options. (line 825) ++* --no-as-needed: Options. (line 637) ++* --no-check-sections: Options. (line 701) ++* --no-define-common: Options. (line 723) ++* --no-demangle: Options. (line 752) ++* --no-dotsyms: PowerPC64 ELF64. (line 33) ++* --no-gc-sections: Options. (line 784) ++* --no-keep-memory: Options. (line 804) ++* --no-multi-toc: PowerPC64 ELF64. (line 74) ++* --no-omagic: Options. (line 398) ++* --no-opd-optimize: PowerPC64 ELF64. (line 48) ++* --no-relax: Xtensa. (line 56) ++* --no-tls-optimize <1>: PowerPC64 ELF64. (line 43) ++* --no-tls-optimize: PowerPC ELF32. (line 41) ++* --no-toc-optimize: PowerPC64 ELF64. (line 60) ++* --no-undefined: Options. (line 811) ++* --no-undefined-version: Options. (line 844) ++* --no-warn-mismatch: Options. (line 857) ++* --no-whole-archive: Options. (line 866) ++* --noinhibit-exec: Options. (line 870) ++* --non-overlapping-opd: PowerPC64 ELF64. (line 54) ++* --oformat: Options. (line 882) ++* --omagic: Options. (line 389) ++* --out-implib: Options. (line 1478) ++* --output-def: Options. (line 1470) ++* --output=OUTPUT: Options. (line 404) ++* --pic-executable: Options. (line 895) ++* --print-map: Options. (line 347) ++* --reduce-memory-overheads: Options. (line 1312) ++* --relax: Options. (line 911) ++* --relax on i960: i960. (line 31) ++* --relax on PowerPC: PowerPC ELF32. (line 6) ++* --relax on Xtensa: Xtensa. (line 27) ++* --relocatable: Options. (line 428) ++* --script=SCRIPT: Options. (line 471) ++* --sdata-got: PowerPC ELF32. (line 23) ++* --section-alignment: Options. (line 1647) ++* --section-start SECTIONNAME=ORG: Options. (line 1081) ++* --sort-common: Options. (line 1028) ++* --sort-section alignment: Options. (line 1038) ++* --sort-section name: Options. (line 1034) ++* --split-by-file: Options. (line 1042) ++* --split-by-reloc: Options. (line 1047) ++* --stack: Options. (line 1653) ++* --stats: Options. (line 1060) ++* --strip-all: Options. (line 458) ++* --strip-debug: Options. (line 462) ++* --stub-group-size: PowerPC64 ELF64. (line 6) ++* --stub-group-size=N: HPPA ELF32. (line 12) ++* --subsystem: Options. (line 1660) ++* --support-old-code: ARM. (line 6) ++* --sysroot: Options. (line 1064) ++* --target-help: Options. (line 796) ++* --target1-abs: ARM. (line 27) ++* --target1-rel: ARM. (line 27) ++* --target2=TYPE: ARM. (line 32) ++* --thumb-entry=ENTRY: ARM. (line 17) ++* --trace: Options. (line 467) ++* --trace-symbol=SYMBOL: Options. (line 522) ++* --traditional-format: Options. (line 1069) ++* --undefined=SYMBOL: Options. (line 480) ++* --unique[=SECTION]: Options. (line 498) ++* --unresolved-symbols: Options. (line 1096) ++* --use-blx: ARM. (line 57) ++* --verbose: Options. (line 1125) ++* --version: Options. (line 507) ++* --version-script=VERSION-SCRIPTFILE: Options. (line 1131) ++* --warn-common: Options. (line 1138) ++* --warn-constructors: Options. (line 1206) ++* --warn-multiple-gp: Options. (line 1211) ++* --warn-once: Options. (line 1225) ++* --warn-section-align: Options. (line 1229) ++* --warn-shared-textrel: Options. (line 1236) ++* --warn-unresolved-symbols: Options. (line 1239) ++* --whole-archive: Options. (line 1248) ++* --wrap: Options. (line 1262) ++* -AARCH: Options. (line 103) ++* -aKEYWORD: Options. (line 96) ++* -assert KEYWORD: Options. (line 659) ++* -b FORMAT: Options. (line 115) ++* -Bdynamic: Options. (line 662) ++* -Bgroup: Options. (line 672) ++* -Bshareable: Options. (line 1020) ++* -Bstatic: Options. (line 679) ++* -Bsymbolic: Options. (line 694) ++* -c MRI-CMDFILE: Options. (line 139) ++* -call_shared: Options. (line 662) ++* -d: Options. (line 149) ++* -dc: Options. (line 149) ++* -dn: Options. (line 679) ++* -dp: Options. (line 149) ++* -dy: Options. (line 662) ++* -E: Options. (line 179) ++* -e ENTRY: Options. (line 158) ++* -EB: Options. (line 198) ++* -EL: Options. (line 201) ++* -F: Options. (line 226) ++* -f: Options. (line 205) ++* -fini: Options. (line 250) ++* -G: Options. (line 259) ++* -g: Options. (line 256) ++* -hNAME: Options. (line 267) ++* -i: Options. (line 276) ++* -IFILE: Options. (line 765) ++* -init: Options. (line 279) ++* -lARCHIVE: Options. (line 285) ++* -LDIR: Options. (line 315) ++* -M: Options. (line 347) ++* -m EMULATION: Options. (line 337) ++* -Map: Options. (line 800) ++* -N: Options. (line 389) ++* -n: Options. (line 384) ++* -non_shared: Options. (line 679) ++* -nostdlib: Options. (line 876) ++* -O LEVEL: Options. (line 410) ++* -o OUTPUT: Options. (line 404) ++* -pie: Options. (line 895) ++* -q: Options. (line 415) ++* -qmagic: Options. (line 905) ++* -Qy: Options. (line 908) ++* -r: Options. (line 428) ++* -R FILE: Options. (line 447) ++* -rpath: Options. (line 945) ++* -rpath-link: Options. (line 967) ++* -S: Options. (line 462) ++* -s: Options. (line 458) ++* -shared: Options. (line 1020) ++* -soname=NAME: Options. (line 267) ++* -static: Options. (line 679) ++* -t: Options. (line 467) ++* -T SCRIPT: Options. (line 471) ++* -Tbss ORG: Options. (line 1090) ++* -Tdata ORG: Options. (line 1090) ++* -Ttext ORG: Options. (line 1090) ++* -u SYMBOL: Options. (line 480) ++* -Ur: Options. (line 488) ++* -V: Options. (line 507) ++* -v: Options. (line 507) ++* -X: Options. (line 517) ++* -x: Options. (line 513) ++* -Y PATH: Options. (line 531) ++* -y SYMBOL: Options. (line 522) ++* -z defs: Options. (line 811) ++* -z KEYWORD: Options. (line 535) ++* -z muldefs: Options. (line 819) ++* .: Location Counter. (line 6) ++* /DISCARD/: Output Section Discarding. ++ (line 18) ++* :PHDR: Output Section Phdr. ++ (line 6) ++* =FILLEXP: Output Section Fill. ++ (line 6) ++* >REGION: Output Section Region. ++ (line 6) ++* [COMMON]: Input Section Common. ++ (line 29) ++* ABSOLUTE (MRI): MRI. (line 33) ++* absolute and relocatable symbols: Expression Section. (line 6) ++* absolute expressions: Expression Section. (line 6) ++* ABSOLUTE(EXP): Builtin Functions. (line 10) ++* ADDR(SECTION): Builtin Functions. (line 17) ++* address, section: Output Section Address. ++ (line 6) ++* ALIAS (MRI): MRI. (line 44) ++* ALIGN (MRI): MRI. (line 50) ++* align expression: Builtin Functions. (line 36) ++* align location counter: Builtin Functions. (line 36) ++* ALIGN(ALIGN): Builtin Functions. (line 36) ++* ALIGN(EXP,ALIGN): Builtin Functions. (line 36) ++* ALIGN(SECTION_ALIGN): Forced Output Alignment. ++ (line 6) ++* allocating memory: MEMORY. (line 6) ++* architecture: Miscellaneous Commands. ++ (line 46) ++* architectures: Options. (line 103) ++* archive files, from cmd line: Options. (line 285) ++* archive search path in linker script: File Commands. (line 71) ++* arithmetic: Expressions. (line 6) ++* arithmetic operators: Operators. (line 6) ++* ARM interworking support: ARM. (line 6) ++* AS_NEEDED(FILES): File Commands. (line 51) ++* ASSERT: Miscellaneous Commands. ++ (line 9) ++* assertion in linker script: Miscellaneous Commands. ++ (line 9) ++* assignment in scripts: Assignments. (line 6) ++* AT(LMA): Output Section LMA. (line 6) ++* AT>LMA_REGION: Output Section LMA. (line 6) ++* automatic data imports: WIN32. (line 170) ++* back end: BFD. (line 6) ++* BASE (MRI): MRI. (line 54) ++* BE8: ARM. (line 23) ++* BFD canonical format: Canonical format. (line 11) ++* BFD requirements: BFD. (line 16) ++* big-endian objects: Options. (line 198) ++* binary input format: Options. (line 115) ++* BLOCK(EXP): Builtin Functions. (line 62) ++* bug criteria: Bug Criteria. (line 6) ++* bug reports: Bug Reporting. (line 6) ++* bugs in ld: Reporting Bugs. (line 6) ++* BYTE(EXPRESSION): Output Section Data. ++ (line 6) ++* C++ constructors, arranging in link: Output Section Keywords. ++ (line 19) ++* CHIP (MRI): MRI. (line 58) ++* COLLECT_NO_DEMANGLE: Environment. (line 29) ++* combining symbols, warnings on: Options. (line 1138) ++* command files: Scripts. (line 6) ++* command line: Options. (line 6) ++* common allocation: Options. (line 149) ++* common allocation in linker script: Miscellaneous Commands. ++ (line 20) ++* common symbol placement: Input Section Common. ++ (line 6) ++* compatibility, MRI: Options. (line 139) ++* constants in linker scripts: Constants. (line 6) ++* CONSTRUCTORS: Output Section Keywords. ++ (line 19) ++* constructors: Options. (line 488) ++* constructors, arranging in link: Output Section Keywords. ++ (line 19) ++* crash of linker: Bug Criteria. (line 9) ++* CREATE_OBJECT_SYMBOLS: Output Section Keywords. ++ (line 9) ++* creating a DEF file: WIN32. (line 137) ++* cross reference table: Options. (line 711) ++* cross references: Miscellaneous Commands. ++ (line 30) ++* current output location: Location Counter. (line 6) ++* data: Output Section Data. ++ (line 6) ++* DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE): Builtin Functions. ++ (line 67) ++* DATA_SEGMENT_END(EXP): Builtin Functions. (line 88) ++* DATA_SEGMENT_RELRO_END(OFFSET, EXP): Builtin Functions. (line 94) ++* dbx: Options. (line 1074) ++* DEF files, creating: Options. (line 1470) ++* default emulation: Environment. (line 21) ++* default input format: Environment. (line 9) ++* DEFINED(SYMBOL): Builtin Functions. (line 105) ++* deleting local symbols: Options. (line 513) ++* demangling, default: Environment. (line 29) ++* demangling, from command line: Options. (line 752) ++* direct linking to a dll: WIN32. (line 218) ++* discarding sections: Output Section Discarding. ++ (line 6) ++* discontinuous memory: MEMORY. (line 6) ++* DLLs, creating: Options. (line 1376) ++* DLLs, linking to: Options. (line 1501) ++* dot: Location Counter. (line 6) ++* dot inside sections: Location Counter. (line 34) ++* dot outside sections: Location Counter. (line 64) ++* dynamic linker, from command line: Options. (line 765) ++* dynamic symbol table: Options. (line 179) ++* ELF program headers: PHDRS. (line 6) ++* emulation: Options. (line 337) ++* emulation, default: Environment. (line 21) ++* END (MRI): MRI. (line 62) ++* endianness: Options. (line 198) ++* entry point: Entry Point. (line 6) ++* entry point, from command line: Options. (line 158) ++* entry point, thumb: ARM. (line 17) ++* ENTRY(SYMBOL): Entry Point. (line 6) ++* error on valid input: Bug Criteria. (line 12) ++* example of linker script: Simple Example. (line 6) ++* exporting DLL symbols: WIN32. (line 19) ++* expression evaluation order: Evaluation. (line 6) ++* expression sections: Expression Section. (line 6) ++* expression, absolute: Builtin Functions. (line 10) ++* expressions: Expressions. (line 6) ++* EXTERN: Miscellaneous Commands. ++ (line 13) ++* fatal signal: Bug Criteria. (line 9) ++* file name wildcard patterns: Input Section Wildcards. ++ (line 6) ++* FILEHDR: PHDRS. (line 61) ++* filename symbols: Output Section Keywords. ++ (line 9) ++* fill pattern, entire section: Output Section Fill. ++ (line 6) ++* FILL(EXPRESSION): Output Section Data. ++ (line 39) ++* finalization function: Options. (line 250) ++* first input file: File Commands. (line 79) ++* first instruction: Entry Point. (line 6) ++* FIX_V4BX: ARM. (line 44) ++* FORCE_COMMON_ALLOCATION: Miscellaneous Commands. ++ (line 20) ++* forcing input section alignment: Forced Input Alignment. ++ (line 6) ++* forcing output section alignment: Forced Output Alignment. ++ (line 6) ++* forcing the creation of dynamic sections: Options. (line 424) ++* FORMAT (MRI): MRI. (line 66) ++* functions in expressions: Builtin Functions. (line 6) ++* garbage collection <1>: Input Section Keep. (line 6) ++* garbage collection: Options. (line 784) ++* generating optimized output: Options. (line 410) ++* GNU linker: Overview. (line 6) ++* GNUTARGET: Environment. (line 9) ++* GROUP(FILES): File Commands. (line 44) ++* grouping input files: File Commands. (line 44) ++* groups of archives: Options. (line 609) ++* H8/300 support: H8/300. (line 6) ++* header size: Builtin Functions. (line 170) ++* heap size: Options. (line 1412) ++* help: Options. (line 792) ++* holes: Location Counter. (line 12) ++* holes, filling: Output Section Data. ++ (line 39) ++* HPPA multiple sub-space stubs: HPPA ELF32. (line 6) ++* HPPA stub grouping: HPPA ELF32. (line 12) ++* i960 support: i960. (line 6) ++* image base: Options. (line 1419) ++* implicit linker scripts: Implicit Linker Scripts. ++ (line 6) ++* import libraries: WIN32. (line 10) ++* INCLUDE FILENAME: File Commands. (line 9) ++* including a linker script: File Commands. (line 9) ++* including an entire archive: Options. (line 1248) ++* incremental link: Options. (line 276) ++* INHIBIT_COMMON_ALLOCATION: Miscellaneous Commands. ++ (line 25) ++* initialization function: Options. (line 279) ++* initialized data in ROM: Output Section LMA. (line 21) ++* input file format in linker script: Format Commands. (line 35) ++* input filename symbols: Output Section Keywords. ++ (line 9) ++* input files in linker scripts: File Commands. (line 16) ++* input files, displaying: Options. (line 467) ++* input format: Options. (line 115) ++* input object files in linker scripts: File Commands. (line 16) ++* input section alignment: Forced Input Alignment. ++ (line 6) ++* input section basics: Input Section Basics. ++ (line 6) ++* input section wildcards: Input Section Wildcards. ++ (line 6) ++* input sections: Input Section. (line 6) ++* INPUT(FILES): File Commands. (line 16) ++* integer notation: Constants. (line 6) ++* integer suffixes: Constants. (line 12) ++* internal object-file format: Canonical format. (line 11) ++* invalid input: Bug Criteria. (line 14) ++* K and M integer suffixes: Constants. (line 12) ++* KEEP: Input Section Keep. (line 6) ++* l =: MEMORY. (line 72) ++* L, deleting symbols beginning: Options. (line 517) ++* lazy evaluation: Evaluation. (line 6) ++* ld bugs, reporting: Bug Reporting. (line 6) ++* LDEMULATION: Environment. (line 21) ++* len =: MEMORY. (line 72) ++* LENGTH =: MEMORY. (line 72) ++* LENGTH(MEMORY): Builtin Functions. (line 122) ++* library search path in linker script: File Commands. (line 71) ++* link map: Options. (line 347) ++* link-time runtime library search path: Options. (line 967) ++* linker crash: Bug Criteria. (line 9) ++* linker script concepts: Basic Script Concepts. ++ (line 6) ++* linker script example: Simple Example. (line 6) ++* linker script file commands: File Commands. (line 6) ++* linker script format: Script Format. (line 6) ++* linker script input object files: File Commands. (line 16) ++* linker script simple commands: Simple Commands. (line 6) ++* linker scripts: Scripts. (line 6) ++* LIST (MRI): MRI. (line 77) ++* little-endian objects: Options. (line 201) ++* LOAD (MRI): MRI. (line 84) ++* load address: Output Section LMA. (line 6) ++* LOADADDR(SECTION): Builtin Functions. (line 125) ++* loading, preventing: Output Section Type. ++ (line 22) ++* local symbols, deleting: Options. (line 517) ++* location counter: Location Counter. (line 6) ++* LONG(EXPRESSION): Output Section Data. ++ (line 6) ++* M and K integer suffixes: Constants. (line 12) ++* machine architecture: Miscellaneous Commands. ++ (line 46) ++* machine dependencies: Machine Dependent. (line 6) ++* mapping input sections to output sections: Input Section. (line 6) ++* MAX: Builtin Functions. (line 130) ++* MEMORY: MEMORY. (line 6) ++* memory region attributes: MEMORY. (line 32) ++* memory regions: MEMORY. (line 6) ++* memory regions and sections: Output Section Region. ++ (line 6) ++* memory usage: Options. (line 804) ++* MIN: Builtin Functions. (line 133) ++* MRI compatibility: MRI. (line 6) ++* MSP430 extra sections: MSP430. (line 11) ++* NAME (MRI): MRI. (line 90) ++* name, section: Output Section Name. ++ (line 6) ++* names: Symbols. (line 6) ++* naming the output file: Options. (line 404) ++* NEXT(EXP): Builtin Functions. (line 137) ++* NMAGIC: Options. (line 384) ++* NOCROSSREFS(SECTIONS): Miscellaneous Commands. ++ (line 30) ++* NOLOAD: Output Section Type. ++ (line 22) ++* not enough room for program headers: Builtin Functions. (line 175) ++* o =: MEMORY. (line 67) ++* objdump -i: BFD. (line 6) ++* object file management: BFD. (line 6) ++* object files: Options. (line 29) ++* object formats available: BFD. (line 6) ++* object size: Options. (line 259) ++* OMAGIC: Options. (line 389) ++* opening object files: BFD outline. (line 6) ++* operators for arithmetic: Operators. (line 6) ++* options: Options. (line 6) ++* ORDER (MRI): MRI. (line 95) ++* org =: MEMORY. (line 67) ++* ORIGIN =: MEMORY. (line 67) ++* ORIGIN(MEMORY): Builtin Functions. (line 143) ++* orphan: Orphan Sections. (line 6) ++* output file after errors: Options. (line 870) ++* output file format in linker script: Format Commands. (line 10) ++* output file name in linker scripot: File Commands. (line 61) ++* output section alignment: Forced Output Alignment. ++ (line 6) ++* output section attributes: Output Section Attributes. ++ (line 6) ++* output section data: Output Section Data. ++ (line 6) ++* OUTPUT(FILENAME): File Commands. (line 61) ++* OUTPUT_ARCH(BFDARCH): Miscellaneous Commands. ++ (line 46) ++* OUTPUT_FORMAT(BFDNAME): Format Commands. (line 10) ++* OVERLAY: Overlay Description. ++ (line 6) ++* overlays: Overlay Description. ++ (line 6) ++* partial link: Options. (line 428) ++* PHDRS: PHDRS. (line 6) ++* position independent executables: Options. (line 897) ++* PowerPC ELF32 options: PowerPC ELF32. (line 13) ++* PowerPC GOT: PowerPC ELF32. (line 23) ++* PowerPC long branches: PowerPC ELF32. (line 6) ++* PowerPC PLT: PowerPC ELF32. (line 13) ++* PowerPC stub symbols: PowerPC ELF32. (line 37) ++* PowerPC TLS optimization: PowerPC ELF32. (line 41) ++* PowerPC64 dot symbols: PowerPC64 ELF64. (line 33) ++* PowerPC64 ELF64 options: PowerPC64 ELF64. (line 6) ++* PowerPC64 multi-TOC: PowerPC64 ELF64. (line 74) ++* PowerPC64 OPD optimization: PowerPC64 ELF64. (line 48) ++* PowerPC64 OPD spacing: PowerPC64 ELF64. (line 54) ++* PowerPC64 stub grouping: PowerPC64 ELF64. (line 6) ++* PowerPC64 stub symbols: PowerPC64 ELF64. (line 29) ++* PowerPC64 TLS optimization: PowerPC64 ELF64. (line 43) ++* PowerPC64 TOC optimization: PowerPC64 ELF64. (line 60) ++* precedence in expressions: Operators. (line 6) ++* prevent unnecessary loading: Output Section Type. ++ (line 22) ++* program headers: PHDRS. (line 6) ++* program headers and sections: Output Section Phdr. ++ (line 6) ++* program headers, not enough room: Builtin Functions. (line 175) ++* program segments: PHDRS. (line 6) ++* PROVIDE: PROVIDE. (line 6) ++* PROVIDE_HIDDEN: PROVIDE_HIDDEN. (line 6) ++* PUBLIC (MRI): MRI. (line 103) ++* QUAD(EXPRESSION): Output Section Data. ++ (line 6) ++* quoted symbol names: Symbols. (line 6) ++* read-only text: Options. (line 384) ++* read/write from cmd line: Options. (line 389) ++* regions of memory: MEMORY. (line 6) ++* relative expressions: Expression Section. (line 6) ++* relaxing addressing modes: Options. (line 911) ++* relaxing on H8/300: H8/300. (line 9) ++* relaxing on i960: i960. (line 31) ++* relaxing on Xtensa: Xtensa. (line 27) ++* relocatable and absolute symbols: Expression Section. (line 6) ++* relocatable output: Options. (line 428) ++* removing sections: Output Section Discarding. ++ (line 6) ++* reporting bugs in ld: Reporting Bugs. (line 6) ++* requirements for BFD: BFD. (line 16) ++* retain relocations in final executable: Options. (line 415) ++* retaining specified symbols: Options. (line 931) ++* ROM initialized data: Output Section LMA. (line 21) ++* round up expression: Builtin Functions. (line 36) ++* round up location counter: Builtin Functions. (line 36) ++* runtime library name: Options. (line 267) ++* runtime library search path: Options. (line 945) ++* runtime pseudo-relocation: WIN32. (line 196) ++* scaled integers: Constants. (line 12) ++* scommon section: Input Section Common. ++ (line 20) ++* script files: Options. (line 471) ++* scripts: Scripts. (line 6) ++* search directory, from cmd line: Options. (line 315) ++* search path in linker script: File Commands. (line 71) ++* SEARCH_DIR(PATH): File Commands. (line 71) ++* SECT (MRI): MRI. (line 109) ++* section address: Output Section Address. ++ (line 6) ++* section address in expression: Builtin Functions. (line 17) ++* section alignment, warnings on: Options. (line 1229) ++* section data: Output Section Data. ++ (line 6) ++* section fill pattern: Output Section Fill. ++ (line 6) ++* section load address: Output Section LMA. (line 6) ++* section load address in expression: Builtin Functions. (line 125) ++* section name: Output Section Name. ++ (line 6) ++* section name wildcard patterns: Input Section Wildcards. ++ (line 6) ++* section size: Builtin Functions. (line 154) ++* section, assigning to memory region: Output Section Region. ++ (line 6) ++* section, assigning to program header: Output Section Phdr. ++ (line 6) ++* SECTIONS: SECTIONS. (line 6) ++* sections, discarding: Output Section Discarding. ++ (line 6) ++* segment origins, cmd line: Options. (line 1090) ++* SEGMENT_START(SEGMENT, DEFAULT): Builtin Functions. (line 146) ++* segments, ELF: PHDRS. (line 6) ++* shared libraries: Options. (line 1022) ++* SHORT(EXPRESSION): Output Section Data. ++ (line 6) ++* SIZEOF(SECTION): Builtin Functions. (line 154) ++* SIZEOF_HEADERS: Builtin Functions. (line 170) ++* small common symbols: Input Section Common. ++ (line 20) ++* SORT: Input Section Wildcards. ++ (line 58) ++* SORT_BY_ALIGNMENT: Input Section Wildcards. ++ (line 54) ++* SORT_BY_NAME: Input Section Wildcards. ++ (line 46) ++* SQUAD(EXPRESSION): Output Section Data. ++ (line 6) ++* stack size: Options. (line 1653) ++* standard Unix system: Options. (line 7) ++* start of execution: Entry Point. (line 6) ++* STARTUP(FILENAME): File Commands. (line 79) ++* strip all symbols: Options. (line 458) ++* strip debugger symbols: Options. (line 462) ++* stripping all but some symbols: Options. (line 931) ++* SUBALIGN(SUBSECTION_ALIGN): Forced Input Alignment. ++ (line 6) ++* suffixes for integers: Constants. (line 12) ++* symbol defaults: Builtin Functions. (line 105) ++* symbol definition, scripts: Assignments. (line 6) ++* symbol names: Symbols. (line 6) ++* symbol tracing: Options. (line 522) ++* symbol versions: VERSION. (line 6) ++* symbol-only input: Options. (line 447) ++* symbols, from command line: Options. (line 739) ++* symbols, relocatable and absolute: Expression Section. (line 6) ++* symbols, retaining selectively: Options. (line 931) ++* synthesizing linker: Options. (line 911) ++* synthesizing on H8/300: H8/300. (line 14) ++* TARGET(BFDNAME): Format Commands. (line 35) ++* TARGET1: ARM. (line 27) ++* TARGET2: ARM. (line 32) ++* thumb entry point: ARM. (line 17) ++* TI COFF versions: TI COFF. (line 6) ++* traditional format: Options. (line 1069) ++* unallocated address, next: Builtin Functions. (line 137) ++* undefined symbol: Options. (line 480) ++* undefined symbol in linker script: Miscellaneous Commands. ++ (line 13) ++* undefined symbols, warnings on: Options. (line 1225) ++* uninitialized data placement: Input Section Common. ++ (line 6) ++* unspecified memory: Output Section Data. ++ (line 39) ++* usage: Options. (line 792) ++* USE_BLX: ARM. (line 57) ++* using a DEF file: WIN32. (line 42) ++* using auto-export functionality: WIN32. (line 22) ++* Using decorations: WIN32. (line 141) ++* variables, defining: Assignments. (line 6) ++* verbose: Options. (line 1125) ++* version: Options. (line 507) ++* version script: VERSION. (line 6) ++* version script, symbol versions: Options. (line 1131) ++* VERSION {script text}: VERSION. (line 6) ++* versions of symbols: VERSION. (line 6) ++* warnings, on combining symbols: Options. (line 1138) ++* warnings, on section alignment: Options. (line 1229) ++* warnings, on undefined symbols: Options. (line 1225) ++* weak externals: WIN32. (line 380) ++* what is this?: Overview. (line 6) ++* wildcard file name patterns: Input Section Wildcards. ++ (line 6) ++* Xtensa options: Xtensa. (line 56) ++* Xtensa processors: Xtensa. (line 6) ++ ++ ++ ++Tag Table: ++Node: Top487 ++Node: Overview1249 ++Node: Invocation2363 ++Node: Options2771 ++Node: Environment77426 ++Node: Scripts79186 ++Node: Basic Script Concepts80920 ++Node: Script Format83627 ++Node: Simple Example84490 ++Node: Simple Commands87586 ++Node: Entry Point88037 ++Node: File Commands88796 ++Node: Format Commands92662 ++Node: Miscellaneous Commands94628 ++Node: Assignments96858 ++Node: Simple Assignments97349 ++Node: PROVIDE99085 ++Node: PROVIDE_HIDDEN100290 ++Node: Source Code Reference100534 ++Node: SECTIONS104114 ++Node: Output Section Description106005 ++Node: Output Section Name107058 ++Node: Output Section Address107934 ++Node: Input Section109583 ++Node: Input Section Basics110384 ++Node: Input Section Wildcards112736 ++Node: Input Section Common117469 ++Node: Input Section Keep118951 ++Node: Input Section Example119441 ++Node: Output Section Data120409 ++Node: Output Section Keywords123186 ++Node: Output Section Discarding126755 ++Node: Output Section Attributes127711 ++Node: Output Section Type128715 ++Node: Output Section LMA129869 ++Node: Forced Output Alignment132140 ++Node: Forced Input Alignment132408 ++Node: Output Section Region132793 ++Node: Output Section Phdr133223 ++Node: Output Section Fill133887 ++Node: Overlay Description135029 ++Node: MEMORY139277 ++Node: PHDRS143477 ++Node: VERSION148516 ++Node: Expressions156307 ++Node: Constants157185 ++Node: Symbols157746 ++Node: Orphan Sections158484 ++Node: Location Counter159247 ++Node: Operators163551 ++Node: Evaluation164473 ++Node: Expression Section165837 ++Node: Builtin Functions167326 ++Node: Implicit Linker Scripts174818 ++Node: Machine Dependent175593 ++Node: H8/300176454 ++Node: i960178079 ++Node: ARM179764 ++Node: HPPA ELF32182680 ++Node: MMIX184303 ++Node: MSP430185520 ++Node: PowerPC ELF32186568 ++Node: PowerPC64 ELF64188859 ++Node: TI COFF193273 ++Node: WIN32193805 ++Node: Xtensa211879 ++Node: BFD215001 ++Node: BFD outline216456 ++Node: BFD information loss217742 ++Node: Canonical format220259 ++Node: Reporting Bugs224616 ++Node: Bug Criteria225310 ++Node: Bug Reporting226009 ++Node: MRI233034 ++Node: GNU Free Documentation License237677 ++Node: Index257391 ++ ++End Tag Table +diff -Nrup binutils-2.17/ld/ld.info.r27273 binutils-2.17.atmel.1.3.0/ld/ld.info.r27273 +--- binutils-2.17/ld/ld.info.r27273 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/ld.info.r27273 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,6691 @@ ++This is .././ld/ld.info, produced by makeinfo version 4.8 from ++.././ld/ld.texinfo. ++ ++START-INFO-DIR-ENTRY ++* Ld: (ld). The GNU linker. ++END-INFO-DIR-ENTRY ++ ++ This file documents the GNU linker LD version 2.17. ++ ++ Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, ++2002, 2003, 2004 Free Software Foundation, Inc. ++ ++ ++File: ld.info, Node: Top, Next: Overview, Up: (dir) ++ ++Using ld ++******** ++ ++This file documents the GNU linker ld version 2.17. ++ ++ This document is distributed under the terms of the GNU Free ++Documentation License. A copy of the license is included in the ++section entitled "GNU Free Documentation License". ++ ++* Menu: ++ ++* Overview:: Overview ++* Invocation:: Invocation ++* Scripts:: Linker Scripts ++ ++* Machine Dependent:: Machine Dependent Features ++ ++* BFD:: BFD ++ ++* Reporting Bugs:: Reporting Bugs ++* MRI:: MRI Compatible Script Files ++* GNU Free Documentation License:: GNU Free Documentation License ++* Index:: Index ++ ++ ++File: ld.info, Node: Overview, Next: Invocation, Prev: Top, Up: Top ++ ++1 Overview ++********** ++ ++`ld' combines a number of object and archive files, relocates their ++data and ties up symbol references. Usually the last step in compiling ++a program is to run `ld'. ++ ++ `ld' accepts Linker Command Language files written in a superset of ++AT&T's Link Editor Command Language syntax, to provide explicit and ++total control over the linking process. ++ ++ This version of `ld' uses the general purpose BFD libraries to ++operate on object files. This allows `ld' to read, combine, and write ++object files in many different formats--for example, COFF or `a.out'. ++Different formats may be linked together to produce any available kind ++of object file. *Note BFD::, for more information. ++ ++ Aside from its flexibility, the GNU linker is more helpful than other ++linkers in providing diagnostic information. Many linkers abandon ++execution immediately upon encountering an error; whenever possible, ++`ld' continues executing, allowing you to identify other errors (or, in ++some cases, to get an output file in spite of the error). ++ ++ ++File: ld.info, Node: Invocation, Next: Scripts, Prev: Overview, Up: Top ++ ++2 Invocation ++************ ++ ++The GNU linker `ld' is meant to cover a broad range of situations, and ++to be as compatible as possible with other linkers. As a result, you ++have many choices to control its behavior. ++ ++* Menu: ++ ++* Options:: Command Line Options ++* Environment:: Environment Variables ++ ++ ++File: ld.info, Node: Options, Next: Environment, Up: Invocation ++ ++2.1 Command Line Options ++======================== ++ ++ The linker supports a plethora of command-line options, but in actual ++practice few of them are used in any particular context. For instance, ++a frequent use of `ld' is to link standard Unix object files on a ++standard, supported Unix system. On such a system, to link a file ++`hello.o': ++ ++ ld -o OUTPUT /lib/crt0.o hello.o -lc ++ ++ This tells `ld' to produce a file called OUTPUT as the result of ++linking the file `/lib/crt0.o' with `hello.o' and the library `libc.a', ++which will come from the standard search directories. (See the ++discussion of the `-l' option below.) ++ ++ Some of the command-line options to `ld' may be specified at any ++point in the command line. However, options which refer to files, such ++as `-l' or `-T', cause the file to be read at the point at which the ++option appears in the command line, relative to the object files and ++other file options. Repeating non-file options with a different ++argument will either have no further effect, or override prior ++occurrences (those further to the left on the command line) of that ++option. Options which may be meaningfully specified more than once are ++noted in the descriptions below. ++ ++ Non-option arguments are object files or archives which are to be ++linked together. They may follow, precede, or be mixed in with ++command-line options, except that an object file argument may not be ++placed between an option and its argument. ++ ++ Usually the linker is invoked with at least one object file, but you ++can specify other forms of binary input files using `-l', `-R', and the ++script command language. If _no_ binary input files at all are ++specified, the linker does not produce any output, and issues the ++message `No input files'. ++ ++ If the linker cannot recognize the format of an object file, it will ++assume that it is a linker script. A script specified in this way ++augments the main linker script used for the link (either the default ++linker script or the one specified by using `-T'). This feature ++permits the linker to link against a file which appears to be an object ++or an archive, but actually merely defines some symbol values, or uses ++`INPUT' or `GROUP' to load other objects. Note that specifying a ++script in this way merely augments the main linker script; use the `-T' ++option to replace the default linker script entirely. *Note Scripts::. ++ ++ For options whose names are a single letter, option arguments must ++either follow the option letter without intervening whitespace, or be ++given as separate arguments immediately following the option that ++requires them. ++ ++ For options whose names are multiple letters, either one dash or two ++can precede the option name; for example, `-trace-symbol' and ++`--trace-symbol' are equivalent. Note--there is one exception to this ++rule. Multiple letter options that start with a lower case 'o' can ++only be preceeded by two dashes. This is to reduce confusion with the ++`-o' option. So for example `-omagic' sets the output file name to ++`magic' whereas `--omagic' sets the NMAGIC flag on the output. ++ ++ Arguments to multiple-letter options must either be separated from ++the option name by an equals sign, or be given as separate arguments ++immediately following the option that requires them. For example, ++`--trace-symbol foo' and `--trace-symbol=foo' are equivalent. Unique ++abbreviations of the names of multiple-letter options are accepted. ++ ++ Note--if the linker is being invoked indirectly, via a compiler ++driver (e.g. `gcc') then all the linker command line options should be ++prefixed by `-Wl,' (or whatever is appropriate for the particular ++compiler driver) like this: ++ ++ gcc -Wl,--startgroup foo.o bar.o -Wl,--endgroup ++ ++ This is important, because otherwise the compiler driver program may ++silently drop the linker options, resulting in a bad link. ++ ++ Here is a table of the generic command line switches accepted by the ++GNU linker: ++ ++`@FILE' ++ Read command-line options from FILE. The options read are ++ inserted in place of the original @FILE option. If FILE does not ++ exist, or cannot be read, then the option will be treated ++ literally, and not removed. ++ ++ Options in FILE are separated by whitespace. A whitespace ++ character may be included in an option by surrounding the entire ++ option in either single or double quotes. Any character ++ (including a backslash) may be included by prefixing the character ++ to be included with a backslash. The FILE may itself contain ++ additional @FILE options; any such options will be processed ++ recursively. ++ ++`-aKEYWORD' ++ This option is supported for HP/UX compatibility. The KEYWORD ++ argument must be one of the strings `archive', `shared', or ++ `default'. `-aarchive' is functionally equivalent to `-Bstatic', ++ and the other two keywords are functionally equivalent to ++ `-Bdynamic'. This option may be used any number of times. ++ ++`-AARCHITECTURE' ++`--architecture=ARCHITECTURE' ++ In the current release of `ld', this option is useful only for the ++ Intel 960 family of architectures. In that `ld' configuration, the ++ ARCHITECTURE argument identifies the particular architecture in ++ the 960 family, enabling some safeguards and modifying the ++ archive-library search path. *Note `ld' and the Intel 960 family: ++ i960, for details. ++ ++ Future releases of `ld' may support similar functionality for ++ other architecture families. ++ ++`-b INPUT-FORMAT' ++`--format=INPUT-FORMAT' ++ `ld' may be configured to support more than one kind of object ++ file. If your `ld' is configured this way, you can use the `-b' ++ option to specify the binary format for input object files that ++ follow this option on the command line. Even when `ld' is ++ configured to support alternative object formats, you don't ++ usually need to specify this, as `ld' should be configured to ++ expect as a default input format the most usual format on each ++ machine. INPUT-FORMAT is a text string, the name of a particular ++ format supported by the BFD libraries. (You can list the ++ available binary formats with `objdump -i'.) *Note BFD::. ++ ++ You may want to use this option if you are linking files with an ++ unusual binary format. You can also use `-b' to switch formats ++ explicitly (when linking object files of different formats), by ++ including `-b INPUT-FORMAT' before each group of object files in a ++ particular format. ++ ++ The default format is taken from the environment variable ++ `GNUTARGET'. *Note Environment::. You can also define the input ++ format from a script, using the command `TARGET'; see *Note Format ++ Commands::. ++ ++`-c MRI-COMMANDFILE' ++`--mri-script=MRI-COMMANDFILE' ++ For compatibility with linkers produced by MRI, `ld' accepts script ++ files written in an alternate, restricted command language, ++ described in *Note MRI Compatible Script Files: MRI. Introduce ++ MRI script files with the option `-c'; use the `-T' option to run ++ linker scripts written in the general-purpose `ld' scripting ++ language. If MRI-CMDFILE does not exist, `ld' looks for it in the ++ directories specified by any `-L' options. ++ ++`-d' ++`-dc' ++`-dp' ++ These three options are equivalent; multiple forms are supported ++ for compatibility with other linkers. They assign space to common ++ symbols even if a relocatable output file is specified (with ++ `-r'). The script command `FORCE_COMMON_ALLOCATION' has the same ++ effect. *Note Miscellaneous Commands::. ++ ++`-e ENTRY' ++`--entry=ENTRY' ++ Use ENTRY as the explicit symbol for beginning execution of your ++ program, rather than the default entry point. If there is no ++ symbol named ENTRY, the linker will try to parse ENTRY as a number, ++ and use that as the entry address (the number will be interpreted ++ in base 10; you may use a leading `0x' for base 16, or a leading ++ `0' for base 8). *Note Entry Point::, for a discussion of defaults ++ and other ways of specifying the entry point. ++ ++`--exclude-libs LIB,LIB,...' ++ Specifies a list of archive libraries from which symbols should ++ not be automatically exported. The library names may be delimited ++ by commas or colons. Specifying `--exclude-libs ALL' excludes ++ symbols in all archive libraries from automatic export. This ++ option is available only for the i386 PE targeted port of the ++ linker and for ELF targeted ports. For i386 PE, symbols ++ explicitly listed in a .def file are still exported, regardless of ++ this option. For ELF targeted ports, symbols affected by this ++ option will be treated as hidden. ++ ++`-E' ++`--export-dynamic' ++ When creating a dynamically linked executable, add all symbols to ++ the dynamic symbol table. The dynamic symbol table is the set of ++ symbols which are visible from dynamic objects at run time. ++ ++ If you do not use this option, the dynamic symbol table will ++ normally contain only those symbols which are referenced by some ++ dynamic object mentioned in the link. ++ ++ If you use `dlopen' to load a dynamic object which needs to refer ++ back to the symbols defined by the program, rather than some other ++ dynamic object, then you will probably need to use this option when ++ linking the program itself. ++ ++ You can also use the version script to control what symbols should ++ be added to the dynamic symbol table if the output format supports ++ it. See the description of `--version-script' in *Note VERSION::. ++ ++`-EB' ++ Link big-endian objects. This affects the default output format. ++ ++`-EL' ++ Link little-endian objects. This affects the default output ++ format. ++ ++`-f' ++`--auxiliary NAME' ++ When creating an ELF shared object, set the internal DT_AUXILIARY ++ field to the specified name. This tells the dynamic linker that ++ the symbol table of the shared object should be used as an ++ auxiliary filter on the symbol table of the shared object NAME. ++ ++ If you later link a program against this filter object, then, when ++ you run the program, the dynamic linker will see the DT_AUXILIARY ++ field. If the dynamic linker resolves any symbols from the filter ++ object, it will first check whether there is a definition in the ++ shared object NAME. If there is one, it will be used instead of ++ the definition in the filter object. The shared object NAME need ++ not exist. Thus the shared object NAME may be used to provide an ++ alternative implementation of certain functions, perhaps for ++ debugging or for machine specific performance. ++ ++ This option may be specified more than once. The DT_AUXILIARY ++ entries will be created in the order in which they appear on the ++ command line. ++ ++`-F NAME' ++`--filter NAME' ++ When creating an ELF shared object, set the internal DT_FILTER ++ field to the specified name. This tells the dynamic linker that ++ the symbol table of the shared object which is being created ++ should be used as a filter on the symbol table of the shared ++ object NAME. ++ ++ If you later link a program against this filter object, then, when ++ you run the program, the dynamic linker will see the DT_FILTER ++ field. The dynamic linker will resolve symbols according to the ++ symbol table of the filter object as usual, but it will actually ++ link to the definitions found in the shared object NAME. Thus the ++ filter object can be used to select a subset of the symbols ++ provided by the object NAME. ++ ++ Some older linkers used the `-F' option throughout a compilation ++ toolchain for specifying object-file format for both input and ++ output object files. The GNU linker uses other mechanisms for ++ this purpose: the `-b', `--format', `--oformat' options, the ++ `TARGET' command in linker scripts, and the `GNUTARGET' ++ environment variable. The GNU linker will ignore the `-F' option ++ when not creating an ELF shared object. ++ ++`-fini NAME' ++ When creating an ELF executable or shared object, call NAME when ++ the executable or shared object is unloaded, by setting DT_FINI to ++ the address of the function. By default, the linker uses `_fini' ++ as the function to call. ++ ++`-g' ++ Ignored. Provided for compatibility with other tools. ++ ++`-GVALUE' ++`--gpsize=VALUE' ++ Set the maximum size of objects to be optimized using the GP ++ register to SIZE. This is only meaningful for object file formats ++ such as MIPS ECOFF which supports putting large and small objects ++ into different sections. This is ignored for other object file ++ formats. ++ ++`-hNAME' ++`-soname=NAME' ++ When creating an ELF shared object, set the internal DT_SONAME ++ field to the specified name. When an executable is linked with a ++ shared object which has a DT_SONAME field, then when the ++ executable is run the dynamic linker will attempt to load the ++ shared object specified by the DT_SONAME field rather than the ++ using the file name given to the linker. ++ ++`-i' ++ Perform an incremental link (same as option `-r'). ++ ++`-init NAME' ++ When creating an ELF executable or shared object, call NAME when ++ the executable or shared object is loaded, by setting DT_INIT to ++ the address of the function. By default, the linker uses `_init' ++ as the function to call. ++ ++`-lARCHIVE' ++`--library=ARCHIVE' ++ Add archive file ARCHIVE to the list of files to link. This ++ option may be used any number of times. `ld' will search its ++ path-list for occurrences of `libARCHIVE.a' for every ARCHIVE ++ specified. ++ ++ On systems which support shared libraries, `ld' may also search for ++ libraries with extensions other than `.a'. Specifically, on ELF ++ and SunOS systems, `ld' will search a directory for a library with ++ an extension of `.so' before searching for one with an extension of ++ `.a'. By convention, a `.so' extension indicates a shared library. ++ ++ The linker will search an archive only once, at the location where ++ it is specified on the command line. If the archive defines a ++ symbol which was undefined in some object which appeared before ++ the archive on the command line, the linker will include the ++ appropriate file(s) from the archive. However, an undefined ++ symbol in an object appearing later on the command line will not ++ cause the linker to search the archive again. ++ ++ See the `-(' option for a way to force the linker to search ++ archives multiple times. ++ ++ You may list the same archive multiple times on the command line. ++ ++ This type of archive searching is standard for Unix linkers. ++ However, if you are using `ld' on AIX, note that it is different ++ from the behaviour of the AIX linker. ++ ++`-LSEARCHDIR' ++`--library-path=SEARCHDIR' ++ Add path SEARCHDIR to the list of paths that `ld' will search for ++ archive libraries and `ld' control scripts. You may use this ++ option any number of times. The directories are searched in the ++ order in which they are specified on the command line. ++ Directories specified on the command line are searched before the ++ default directories. All `-L' options apply to all `-l' options, ++ regardless of the order in which the options appear. ++ ++ If SEARCHDIR begins with `=', then the `=' will be replaced by the ++ "sysroot prefix", a path specified when the linker is configured. ++ ++ The default set of paths searched (without being specified with ++ `-L') depends on which emulation mode `ld' is using, and in some ++ cases also on how it was configured. *Note Environment::. ++ ++ The paths can also be specified in a link script with the ++ `SEARCH_DIR' command. Directories specified this way are searched ++ at the point in which the linker script appears in the command ++ line. ++ ++`-mEMULATION' ++ Emulate the EMULATION linker. You can list the available ++ emulations with the `--verbose' or `-V' options. ++ ++ If the `-m' option is not used, the emulation is taken from the ++ `LDEMULATION' environment variable, if that is defined. ++ ++ Otherwise, the default emulation depends upon how the linker was ++ configured. ++ ++`-M' ++`--print-map' ++ Print a link map to the standard output. A link map provides ++ information about the link, including the following: ++ ++ * Where object files are mapped into memory. ++ ++ * How common symbols are allocated. ++ ++ * All archive members included in the link, with a mention of ++ the symbol which caused the archive member to be brought in. ++ ++ * The values assigned to symbols. ++ ++ Note - symbols whose values are computed by an expression ++ which involves a reference to a previous value of the same ++ symbol may not have correct result displayed in the link map. ++ This is because the linker discards intermediate results and ++ only retains the final value of an expression. Under such ++ circumstances the linker will display the final value ++ enclosed by square brackets. Thus for example a linker ++ script containing: ++ ++ foo = 1 ++ foo = foo * 4 ++ foo = foo + 8 ++ ++ will produce the following output in the link map if the `-M' ++ option is used: ++ ++ 0x00000001 foo = 0x1 ++ [0x0000000c] foo = (foo * 0x4) ++ [0x0000000c] foo = (foo + 0x8) ++ ++ See *Note Expressions:: for more information about ++ expressions in linker scripts. ++ ++`-n' ++`--nmagic' ++ Turn off page alignment of sections, and mark the output as ++ `NMAGIC' if possible. ++ ++`-N' ++`--omagic' ++ Set the text and data sections to be readable and writable. Also, ++ do not page-align the data segment, and disable linking against ++ shared libraries. If the output format supports Unix style magic ++ numbers, mark the output as `OMAGIC'. Note: Although a writable ++ text section is allowed for PE-COFF targets, it does not conform ++ to the format specification published by Microsoft. ++ ++`--no-omagic' ++ This option negates most of the effects of the `-N' option. It ++ sets the text section to be read-only, and forces the data segment ++ to be page-aligned. Note - this option does not enable linking ++ against shared libraries. Use `-Bdynamic' for this. ++ ++`-o OUTPUT' ++`--output=OUTPUT' ++ Use OUTPUT as the name for the program produced by `ld'; if this ++ option is not specified, the name `a.out' is used by default. The ++ script command `OUTPUT' can also specify the output file name. ++ ++`-O LEVEL' ++ If LEVEL is a numeric values greater than zero `ld' optimizes the ++ output. This might take significantly longer and therefore ++ probably should only be enabled for the final binary. ++ ++`-q' ++`--emit-relocs' ++ Leave relocation sections and contents in fully linked ++ exececutables. Post link analysis and optimization tools may need ++ this information in order to perform correct modifications of ++ executables. This results in larger executables. ++ ++ This option is currently only supported on ELF platforms. ++ ++`--force-dynamic' ++ Force the output file to have dynamic sections. This option is ++ specific to VxWorks targets. ++ ++`-r' ++`--relocatable' ++ Generate relocatable output--i.e., generate an output file that ++ can in turn serve as input to `ld'. This is often called "partial ++ linking". As a side effect, in environments that support standard ++ Unix magic numbers, this option also sets the output file's magic ++ number to `OMAGIC'. If this option is not specified, an absolute ++ file is produced. When linking C++ programs, this option _will ++ not_ resolve references to constructors; to do that, use `-Ur'. ++ ++ When an input file does not have the same format as the output ++ file, partial linking is only supported if that input file does ++ not contain any relocations. Different output formats can have ++ further restrictions; for example some `a.out'-based formats do ++ not support partial linking with input files in other formats at ++ all. ++ ++ This option does the same thing as `-i'. ++ ++`-R FILENAME' ++`--just-symbols=FILENAME' ++ Read symbol names and their addresses from FILENAME, but do not ++ relocate it or include it in the output. This allows your output ++ file to refer symbolically to absolute locations of memory defined ++ in other programs. You may use this option more than once. ++ ++ For compatibility with other ELF linkers, if the `-R' option is ++ followed by a directory name, rather than a file name, it is ++ treated as the `-rpath' option. ++ ++`-s' ++`--strip-all' ++ Omit all symbol information from the output file. ++ ++`-S' ++`--strip-debug' ++ Omit debugger symbol information (but not all symbols) from the ++ output file. ++ ++`-t' ++`--trace' ++ Print the names of the input files as `ld' processes them. ++ ++`-T SCRIPTFILE' ++`--script=SCRIPTFILE' ++ Use SCRIPTFILE as the linker script. This script replaces `ld''s ++ default linker script (rather than adding to it), so COMMANDFILE ++ must specify everything necessary to describe the output file. ++ *Note Scripts::. If SCRIPTFILE does not exist in the current ++ directory, `ld' looks for it in the directories specified by any ++ preceding `-L' options. Multiple `-T' options accumulate. ++ ++`-u SYMBOL' ++`--undefined=SYMBOL' ++ Force SYMBOL to be entered in the output file as an undefined ++ symbol. Doing this may, for example, trigger linking of additional ++ modules from standard libraries. `-u' may be repeated with ++ different option arguments to enter additional undefined symbols. ++ This option is equivalent to the `EXTERN' linker script command. ++ ++`-Ur' ++ For anything other than C++ programs, this option is equivalent to ++ `-r': it generates relocatable output--i.e., an output file that ++ can in turn serve as input to `ld'. When linking C++ programs, ++ `-Ur' _does_ resolve references to constructors, unlike `-r'. It ++ does not work to use `-Ur' on files that were themselves linked ++ with `-Ur'; once the constructor table has been built, it cannot ++ be added to. Use `-Ur' only for the last partial link, and `-r' ++ for the others. ++ ++`--unique[=SECTION]' ++ Creates a separate output section for every input section matching ++ SECTION, or if the optional wildcard SECTION argument is missing, ++ for every orphan input section. An orphan section is one not ++ specifically mentioned in a linker script. You may use this option ++ multiple times on the command line; It prevents the normal ++ merging of input sections with the same name, overriding output ++ section assignments in a linker script. ++ ++`-v' ++`--version' ++`-V' ++ Display the version number for `ld'. The `-V' option also lists ++ the supported emulations. ++ ++`-x' ++`--discard-all' ++ Delete all local symbols. ++ ++`-X' ++`--discard-locals' ++ Delete all temporary local symbols. For most targets, this is all ++ local symbols whose names begin with `L'. ++ ++`-y SYMBOL' ++`--trace-symbol=SYMBOL' ++ Print the name of each linked file in which SYMBOL appears. This ++ option may be given any number of times. On many systems it is ++ necessary to prepend an underscore. ++ ++ This option is useful when you have an undefined symbol in your ++ link but don't know where the reference is coming from. ++ ++`-Y PATH' ++ Add PATH to the default library search path. This option exists ++ for Solaris compatibility. ++ ++`-z KEYWORD' ++ The recognized keywords are: ++ `combreloc' ++ Combines multiple reloc sections and sorts them to make ++ dynamic symbol lookup caching possible. ++ ++ `defs' ++ Disallows undefined symbols in object files. Undefined ++ symbols in shared libraries are still allowed. ++ ++ `execstack' ++ Marks the object as requiring executable stack. ++ ++ `initfirst' ++ This option is only meaningful when building a shared object. ++ It marks the object so that its runtime initialization will ++ occur before the runtime initialization of any other objects ++ brought into the process at the same time. Similarly the ++ runtime finalization of the object will occur after the ++ runtime finalization of any other objects. ++ ++ `interpose' ++ Marks the object that its symbol table interposes before all ++ symbols but the primary executable. ++ ++ `loadfltr' ++ Marks the object that its filters be processed immediately at ++ runtime. ++ ++ `muldefs' ++ Allows multiple definitions. ++ ++ `nocombreloc' ++ Disables multiple reloc sections combining. ++ ++ `nocopyreloc' ++ Disables production of copy relocs. ++ ++ `nodefaultlib' ++ Marks the object that the search for dependencies of this ++ object will ignore any default library search paths. ++ ++ `nodelete' ++ Marks the object shouldn't be unloaded at runtime. ++ ++ `nodlopen' ++ Marks the object not available to `dlopen'. ++ ++ `nodump' ++ Marks the object can not be dumped by `dldump'. ++ ++ `noexecstack' ++ Marks the object as not requiring executable stack. ++ ++ `norelro' ++ Don't create an ELF `PT_GNU_RELRO' segment header in the ++ object. ++ ++ `now' ++ When generating an executable or shared library, mark it to ++ tell the dynamic linker to resolve all symbols when the ++ program is started, or when the shared library is linked to ++ using dlopen, instead of deferring function call resolution ++ to the point when the function is first called. ++ ++ `origin' ++ Marks the object may contain $ORIGIN. ++ ++ `relro' ++ Create an ELF `PT_GNU_RELRO' segment header in the object. ++ ++ ++ Other keywords are ignored for Solaris compatibility. ++ ++`-( ARCHIVES -)' ++`--start-group ARCHIVES --end-group' ++ The ARCHIVES should be a list of archive files. They may be ++ either explicit file names, or `-l' options. ++ ++ The specified archives are searched repeatedly until no new ++ undefined references are created. Normally, an archive is ++ searched only once in the order that it is specified on the ++ command line. If a symbol in that archive is needed to resolve an ++ undefined symbol referred to by an object in an archive that ++ appears later on the command line, the linker would not be able to ++ resolve that reference. By grouping the archives, they all be ++ searched repeatedly until all possible references are resolved. ++ ++ Using this option has a significant performance cost. It is best ++ to use it only when there are unavoidable circular references ++ between two or more archives. ++ ++`--accept-unknown-input-arch' ++`--no-accept-unknown-input-arch' ++ Tells the linker to accept input files whose architecture cannot be ++ recognised. The assumption is that the user knows what they are ++ doing and deliberately wants to link in these unknown input files. ++ This was the default behaviour of the linker, before release ++ 2.14. The default behaviour from release 2.14 onwards is to ++ reject such input files, and so the `--accept-unknown-input-arch' ++ option has been added to restore the old behaviour. ++ ++`--as-needed' ++`--no-as-needed' ++ This option affects ELF DT_NEEDED tags for dynamic libraries ++ mentioned on the command line after the `--as-needed' option. ++ Normally, the linker will add a DT_NEEDED tag for each dynamic ++ library mentioned on the command line, regardless of whether the ++ library is actually needed. `--as-needed' causes DT_NEEDED tags ++ to only be emitted for libraries that satisfy some symbol ++ reference from regular objects which is undefined at the point ++ that the library was linked. `--no-as-needed' restores the ++ default behaviour. ++ ++`--add-needed' ++`--no-add-needed' ++ This option affects the treatment of dynamic libraries from ELF ++ DT_NEEDED tags in dynamic libraries mentioned on the command line ++ after the `--no-add-needed' option. Normally, the linker will add ++ a DT_NEEDED tag for each dynamic library from DT_NEEDED tags. ++ `--no-add-needed' causes DT_NEEDED tags will never be emitted for ++ those libraries from DT_NEEDED tags. `--add-needed' restores the ++ default behaviour. ++ ++`-assert KEYWORD' ++ This option is ignored for SunOS compatibility. ++ ++`-Bdynamic' ++`-dy' ++`-call_shared' ++ Link against dynamic libraries. This is only meaningful on ++ platforms for which shared libraries are supported. This option ++ is normally the default on such platforms. The different variants ++ of this option are for compatibility with various systems. You ++ may use this option multiple times on the command line: it affects ++ library searching for `-l' options which follow it. ++ ++`-Bgroup' ++ Set the `DF_1_GROUP' flag in the `DT_FLAGS_1' entry in the dynamic ++ section. This causes the runtime linker to handle lookups in this ++ object and its dependencies to be performed only inside the group. ++ `--unresolved-symbols=report-all' is implied. This option is only ++ meaningful on ELF platforms which support shared libraries. ++ ++`-Bstatic' ++`-dn' ++`-non_shared' ++`-static' ++ Do not link against shared libraries. This is only meaningful on ++ platforms for which shared libraries are supported. The different ++ variants of this option are for compatibility with various ++ systems. You may use this option multiple times on the command ++ line: it affects library searching for `-l' options which follow ++ it. This option also implies `--unresolved-symbols=report-all'. ++ This option can be used with `-shared'. Doing so means that a ++ shared library is being created but that all of the library's ++ external references must be resolved by pulling in entries from ++ static libraries. ++ ++`-Bsymbolic' ++ When creating a shared library, bind references to global symbols ++ to the definition within the shared library, if any. Normally, it ++ is possible for a program linked against a shared library to ++ override the definition within the shared library. This option is ++ only meaningful on ELF platforms which support shared libraries. ++ ++`--check-sections' ++`--no-check-sections' ++ Asks the linker _not_ to check section addresses after they have ++ been assigned to see if there are any overlaps. Normally the ++ linker will perform this check, and if it finds any overlaps it ++ will produce suitable error messages. The linker does know about, ++ and does make allowances for sections in overlays. The default ++ behaviour can be restored by using the command line switch ++ `--check-sections'. ++ ++`--cref' ++ Output a cross reference table. If a linker map file is being ++ generated, the cross reference table is printed to the map file. ++ Otherwise, it is printed on the standard output. ++ ++ The format of the table is intentionally simple, so that it may be ++ easily processed by a script if necessary. The symbols are ++ printed out, sorted by name. For each symbol, a list of file ++ names is given. If the symbol is defined, the first file listed ++ is the location of the definition. The remaining files contain ++ references to the symbol. ++ ++`--no-define-common' ++ This option inhibits the assignment of addresses to common symbols. ++ The script command `INHIBIT_COMMON_ALLOCATION' has the same effect. ++ *Note Miscellaneous Commands::. ++ ++ The `--no-define-common' option allows decoupling the decision to ++ assign addresses to Common symbols from the choice of the output ++ file type; otherwise a non-Relocatable output type forces ++ assigning addresses to Common symbols. Using `--no-define-common' ++ allows Common symbols that are referenced from a shared library to ++ be assigned addresses only in the main program. This eliminates ++ the unused duplicate space in the shared library, and also ++ prevents any possible confusion over resolving to the wrong ++ duplicate when there are many dynamic modules with specialized ++ search paths for runtime symbol resolution. ++ ++`--defsym SYMBOL=EXPRESSION' ++ Create a global symbol in the output file, containing the absolute ++ address given by EXPRESSION. You may use this option as many ++ times as necessary to define multiple symbols in the command line. ++ A limited form of arithmetic is supported for the EXPRESSION in ++ this context: you may give a hexadecimal constant or the name of ++ an existing symbol, or use `+' and `-' to add or subtract ++ hexadecimal constants or symbols. If you need more elaborate ++ expressions, consider using the linker command language from a ++ script (*note Assignment: Symbol Definitions: Assignments.). ++ _Note:_ there should be no white space between SYMBOL, the equals ++ sign ("<=>"), and EXPRESSION. ++ ++`--demangle[=STYLE]' ++`--no-demangle' ++ These options control whether to demangle symbol names in error ++ messages and other output. When the linker is told to demangle, ++ it tries to present symbol names in a readable fashion: it strips ++ leading underscores if they are used by the object file format, ++ and converts C++ mangled symbol names into user readable names. ++ Different compilers have different mangling styles. The optional ++ demangling style argument can be used to choose an appropriate ++ demangling style for your compiler. The linker will demangle by ++ default unless the environment variable `COLLECT_NO_DEMANGLE' is ++ set. These options may be used to override the default. ++ ++`--dynamic-linker FILE' ++ Set the name of the dynamic linker. This is only meaningful when ++ generating dynamically linked ELF executables. The default dynamic ++ linker is normally correct; don't use this unless you know what ++ you are doing. ++ ++`--fatal-warnings' ++ Treat all warnings as errors. ++ ++`--force-exe-suffix' ++ Make sure that an output file has a .exe suffix. ++ ++ If a successfully built fully linked output file does not have a ++ `.exe' or `.dll' suffix, this option forces the linker to copy the ++ output file to one of the same name with a `.exe' suffix. This ++ option is useful when using unmodified Unix makefiles on a ++ Microsoft Windows host, since some versions of Windows won't run ++ an image unless it ends in a `.exe' suffix. ++ ++`--no-gc-sections' ++`--gc-sections' ++ Enable garbage collection of unused input sections. It is ignored ++ on targets that do not support this option. This option is not ++ compatible with `-r'. The default behaviour (of not performing ++ this garbage collection) can be restored by specifying ++ `--no-gc-sections' on the command line. ++ ++`--help' ++ Print a summary of the command-line options on the standard output ++ and exit. ++ ++`--target-help' ++ Print a summary of all target specific options on the standard ++ output and exit. ++ ++`-Map MAPFILE' ++ Print a link map to the file MAPFILE. See the description of the ++ `-M' option, above. ++ ++`--no-keep-memory' ++ `ld' normally optimizes for speed over memory usage by caching the ++ symbol tables of input files in memory. This option tells `ld' to ++ instead optimize for memory usage, by rereading the symbol tables ++ as necessary. This may be required if `ld' runs out of memory ++ space while linking a large executable. ++ ++`--no-undefined' ++`-z defs' ++ Report unresolved symbol references from regular object files. ++ This is done even if the linker is creating a non-symbolic shared ++ library. The switch `--[no-]allow-shlib-undefined' controls the ++ behaviour for reporting unresolved references found in shared ++ libraries being linked in. ++ ++`--allow-multiple-definition' ++`-z muldefs' ++ Normally when a symbol is defined multiple times, the linker will ++ report a fatal error. These options allow multiple definitions and ++ the first definition will be used. ++ ++`--allow-shlib-undefined' ++`--no-allow-shlib-undefined' ++ Allows (the default) or disallows undefined symbols in shared ++ libraries. This switch is similar to `--no-undefined' except that ++ it determines the behaviour when the undefined symbols are in a ++ shared library rather than a regular object file. It does not ++ affect how undefined symbols in regular object files are handled. ++ ++ The reason that `--allow-shlib-undefined' is the default is that ++ the shared library being specified at link time may not be the ++ same as the one that is available at load time, so the symbols ++ might actually be resolvable at load time. Plus there are some ++ systems, (eg BeOS) where undefined symbols in shared libraries is ++ normal. (The kernel patches them at load time to select which ++ function is most appropriate for the current architecture. This ++ is used for example to dynamically select an appropriate memset ++ function). Apparently it is also normal for HPPA shared libraries ++ to have undefined symbols. ++ ++`--no-undefined-version' ++ Normally when a symbol has an undefined version, the linker will ++ ignore it. This option disallows symbols with undefined version ++ and a fatal error will be issued instead. ++ ++`--default-symver' ++ Create and use a default symbol version (the soname) for ++ unversioned exported symbols. ++ ++`--default-imported-symver' ++ Create and use a default symbol version (the soname) for ++ unversioned imported symbols. ++ ++`--no-warn-mismatch' ++ Normally `ld' will give an error if you try to link together input ++ files that are mismatched for some reason, perhaps because they ++ have been compiled for different processors or for different ++ endiannesses. This option tells `ld' that it should silently ++ permit such possible errors. This option should only be used with ++ care, in cases when you have taken some special action that ++ ensures that the linker errors are inappropriate. ++ ++`--no-whole-archive' ++ Turn off the effect of the `--whole-archive' option for subsequent ++ archive files. ++ ++`--noinhibit-exec' ++ Retain the executable output file whenever it is still usable. ++ Normally, the linker will not produce an output file if it ++ encounters errors during the link process; it exits without ++ writing an output file when it issues any error whatsoever. ++ ++`-nostdlib' ++ Only search library directories explicitly specified on the ++ command line. Library directories specified in linker scripts ++ (including linker scripts specified on the command line) are ++ ignored. ++ ++`--oformat OUTPUT-FORMAT' ++ `ld' may be configured to support more than one kind of object ++ file. If your `ld' is configured this way, you can use the ++ `--oformat' option to specify the binary format for the output ++ object file. Even when `ld' is configured to support alternative ++ object formats, you don't usually need to specify this, as `ld' ++ should be configured to produce as a default output format the most ++ usual format on each machine. OUTPUT-FORMAT is a text string, the ++ name of a particular format supported by the BFD libraries. (You ++ can list the available binary formats with `objdump -i'.) The ++ script command `OUTPUT_FORMAT' can also specify the output format, ++ but this option overrides it. *Note BFD::. ++ ++`-pie' ++`--pic-executable' ++ Create a position independent executable. This is currently only ++ supported on ELF platforms. Position independent executables are ++ similar to shared libraries in that they are relocated by the ++ dynamic linker to the virtual address the OS chooses for them ++ (which can vary between invocations). Like normal dynamically ++ linked executables they can be executed and symbols defined in the ++ executable cannot be overridden by shared libraries. ++ ++`-qmagic' ++ This option is ignored for Linux compatibility. ++ ++`-Qy' ++ This option is ignored for SVR4 compatibility. ++ ++`--relax' ++ An option with machine dependent effects. This option is only ++ supported on a few targets. *Note `ld' and the H8/300: H8/300. ++ *Note `ld' and the Intel 960 family: i960. *Note `ld' and Xtensa ++ Processors: Xtensa. *Note `ld' and PowerPC 32-bit ELF Support: ++ PowerPC ELF32. ++ ++ On some platforms, the `--relax' option performs global ++ optimizations that become possible when the linker resolves ++ addressing in the program, such as relaxing address modes and ++ synthesizing new instructions in the output object file. ++ ++ On some platforms these link time global optimizations may make ++ symbolic debugging of the resulting executable impossible. This ++ is known to be the case for the Matsushita MN10200 and MN10300 ++ family of processors. ++ ++ On platforms where this is not supported, `--relax' is accepted, ++ but ignored. ++ ++`--retain-symbols-file FILENAME' ++ Retain _only_ the symbols listed in the file FILENAME, discarding ++ all others. FILENAME is simply a flat file, with one symbol name ++ per line. This option is especially useful in environments (such ++ as VxWorks) where a large global symbol table is accumulated ++ gradually, to conserve run-time memory. ++ ++ `--retain-symbols-file' does _not_ discard undefined symbols, or ++ symbols needed for relocations. ++ ++ You may only specify `--retain-symbols-file' once in the command ++ line. It overrides `-s' and `-S'. ++ ++`-rpath DIR' ++ Add a directory to the runtime library search path. This is used ++ when linking an ELF executable with shared objects. All `-rpath' ++ arguments are concatenated and passed to the runtime linker, which ++ uses them to locate shared objects at runtime. The `-rpath' ++ option is also used when locating shared objects which are needed ++ by shared objects explicitly included in the link; see the ++ description of the `-rpath-link' option. If `-rpath' is not used ++ when linking an ELF executable, the contents of the environment ++ variable `LD_RUN_PATH' will be used if it is defined. ++ ++ The `-rpath' option may also be used on SunOS. By default, on ++ SunOS, the linker will form a runtime search patch out of all the ++ `-L' options it is given. If a `-rpath' option is used, the ++ runtime search path will be formed exclusively using the `-rpath' ++ options, ignoring the `-L' options. This can be useful when using ++ gcc, which adds many `-L' options which may be on NFS mounted ++ filesystems. ++ ++ For compatibility with other ELF linkers, if the `-R' option is ++ followed by a directory name, rather than a file name, it is ++ treated as the `-rpath' option. ++ ++`-rpath-link DIR' ++ When using ELF or SunOS, one shared library may require another. ++ This happens when an `ld -shared' link includes a shared library ++ as one of the input files. ++ ++ When the linker encounters such a dependency when doing a ++ non-shared, non-relocatable link, it will automatically try to ++ locate the required shared library and include it in the link, if ++ it is not included explicitly. In such a case, the `-rpath-link' ++ option specifies the first set of directories to search. The ++ `-rpath-link' option may specify a sequence of directory names ++ either by specifying a list of names separated by colons, or by ++ appearing multiple times. ++ ++ This option should be used with caution as it overrides the search ++ path that may have been hard compiled into a shared library. In ++ such a case it is possible to use unintentionally a different ++ search path than the runtime linker would do. ++ ++ The linker uses the following search paths to locate required ++ shared libraries. ++ 1. Any directories specified by `-rpath-link' options. ++ ++ 2. Any directories specified by `-rpath' options. The difference ++ between `-rpath' and `-rpath-link' is that directories ++ specified by `-rpath' options are included in the executable ++ and used at runtime, whereas the `-rpath-link' option is only ++ effective at link time. It is for the native linker only. ++ ++ 3. On an ELF system, if the `-rpath' and `rpath-link' options ++ were not used, search the contents of the environment variable ++ `LD_RUN_PATH'. It is for the native linker only. ++ ++ 4. On SunOS, if the `-rpath' option was not used, search any ++ directories specified using `-L' options. ++ ++ 5. For a native linker, the contents of the environment variable ++ `LD_LIBRARY_PATH'. ++ ++ 6. For a native ELF linker, the directories in `DT_RUNPATH' or ++ `DT_RPATH' of a shared library are searched for shared ++ libraries needed by it. The `DT_RPATH' entries are ignored if ++ `DT_RUNPATH' entries exist. ++ ++ 7. The default directories, normally `/lib' and `/usr/lib'. ++ ++ 8. For a native linker on an ELF system, if the file ++ `/etc/ld.so.conf' exists, the list of directories found in ++ that file. ++ ++ If the required shared library is not found, the linker will issue ++ a warning and continue with the link. ++ ++`-shared' ++`-Bshareable' ++ Create a shared library. This is currently only supported on ELF, ++ XCOFF and SunOS platforms. On SunOS, the linker will ++ automatically create a shared library if the `-e' option is not ++ used and there are undefined symbols in the link. ++ ++`--sort-common' ++ This option tells `ld' to sort the common symbols by size when it ++ places them in the appropriate output sections. First come all ++ the one byte symbols, then all the two byte, then all the four ++ byte, and then everything else. This is to prevent gaps between ++ symbols due to alignment constraints. ++ ++`--sort-section name' ++ This option will apply `SORT_BY_NAME' to all wildcard section ++ patterns in the linker script. ++ ++`--sort-section alignment' ++ This option will apply `SORT_BY_ALIGNMENT' to all wildcard section ++ patterns in the linker script. ++ ++`--split-by-file [SIZE]' ++ Similar to `--split-by-reloc' but creates a new output section for ++ each input file when SIZE is reached. SIZE defaults to a size of ++ 1 if not given. ++ ++`--split-by-reloc [COUNT]' ++ Tries to creates extra sections in the output file so that no ++ single output section in the file contains more than COUNT ++ relocations. This is useful when generating huge relocatable ++ files for downloading into certain real time kernels with the COFF ++ object file format; since COFF cannot represent more than 65535 ++ relocations in a single section. Note that this will fail to work ++ with object file formats which do not support arbitrary sections. ++ The linker will not split up individual input sections for ++ redistribution, so if a single input section contains more than ++ COUNT relocations one output section will contain that many ++ relocations. COUNT defaults to a value of 32768. ++ ++`--stats' ++ Compute and display statistics about the operation of the linker, ++ such as execution time and memory usage. ++ ++`--sysroot=DIRECTORY' ++ Use DIRECTORY as the location of the sysroot, overriding the ++ configure-time default. This option is only supported by linkers ++ that were configured using `--with-sysroot'. ++ ++`--traditional-format' ++ For some targets, the output of `ld' is different in some ways from ++ the output of some existing linker. This switch requests `ld' to ++ use the traditional format instead. ++ ++ For example, on SunOS, `ld' combines duplicate entries in the ++ symbol string table. This can reduce the size of an output file ++ with full debugging information by over 30 percent. ++ Unfortunately, the SunOS `dbx' program can not read the resulting ++ program (`gdb' has no trouble). The `--traditional-format' switch ++ tells `ld' to not combine duplicate entries. ++ ++`--section-start SECTIONNAME=ORG' ++ Locate a section in the output file at the absolute address given ++ by ORG. You may use this option as many times as necessary to ++ locate multiple sections in the command line. ORG must be a ++ single hexadecimal integer; for compatibility with other linkers, ++ you may omit the leading `0x' usually associated with hexadecimal ++ values. _Note:_ there should be no white space between ++ SECTIONNAME, the equals sign ("<=>"), and ORG. ++ ++`-Tbss ORG' ++`-Tdata ORG' ++`-Ttext ORG' ++ Same as -section-start, with `.bss', `.data' or `.text' as the ++ SECTIONNAME. ++ ++`--unresolved-symbols=METHOD' ++ Determine how to handle unresolved symbols. There are four ++ possible values for `method': ++ ++ `ignore-all' ++ Do not report any unresolved symbols. ++ ++ `report-all' ++ Report all unresolved symbols. This is the default. ++ ++ `ignore-in-object-files' ++ Report unresolved symbols that are contained in shared ++ libraries, but ignore them if they come from regular object ++ files. ++ ++ `ignore-in-shared-libs' ++ Report unresolved symbols that come from regular object ++ files, but ignore them if they come from shared libraries. ++ This can be useful when creating a dynamic binary and it is ++ known that all the shared libraries that it should be ++ referencing are included on the linker's command line. ++ ++ The behaviour for shared libraries on their own can also be ++ controlled by the `--[no-]allow-shlib-undefined' option. ++ ++ Normally the linker will generate an error message for each ++ reported unresolved symbol but the option ++ `--warn-unresolved-symbols' can change this to a warning. ++ ++`--dll-verbose' ++`--verbose' ++ Display the version number for `ld' and list the linker emulations ++ supported. Display which input files can and cannot be opened. ++ Display the linker script being used by the linker. ++ ++`--version-script=VERSION-SCRIPTFILE' ++ Specify the name of a version script to the linker. This is ++ typically used when creating shared libraries to specify ++ additional information about the version hierarchy for the library ++ being created. This option is only meaningful on ELF platforms ++ which support shared libraries. *Note VERSION::. ++ ++`--warn-common' ++ Warn when a common symbol is combined with another common symbol ++ or with a symbol definition. Unix linkers allow this somewhat ++ sloppy practise, but linkers on some other operating systems do ++ not. This option allows you to find potential problems from ++ combining global symbols. Unfortunately, some C libraries use ++ this practise, so you may get some warnings about symbols in the ++ libraries as well as in your programs. ++ ++ There are three kinds of global symbols, illustrated here by C ++ examples: ++ ++ `int i = 1;' ++ A definition, which goes in the initialized data section of ++ the output file. ++ ++ `extern int i;' ++ An undefined reference, which does not allocate space. There ++ must be either a definition or a common symbol for the ++ variable somewhere. ++ ++ `int i;' ++ A common symbol. If there are only (one or more) common ++ symbols for a variable, it goes in the uninitialized data ++ area of the output file. The linker merges multiple common ++ symbols for the same variable into a single symbol. If they ++ are of different sizes, it picks the largest size. The ++ linker turns a common symbol into a declaration, if there is ++ a definition of the same variable. ++ ++ The `--warn-common' option can produce five kinds of warnings. ++ Each warning consists of a pair of lines: the first describes the ++ symbol just encountered, and the second describes the previous ++ symbol encountered with the same name. One or both of the two ++ symbols will be a common symbol. ++ ++ 1. Turning a common symbol into a reference, because there is ++ already a definition for the symbol. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overridden by definition ++ FILE(SECTION): warning: defined here ++ ++ 2. Turning a common symbol into a reference, because a later ++ definition for the symbol is encountered. This is the same ++ as the previous case, except that the symbols are encountered ++ in a different order. ++ FILE(SECTION): warning: definition of `SYMBOL' ++ overriding common ++ FILE(SECTION): warning: common is here ++ ++ 3. Merging a common symbol with a previous same-sized common ++ symbol. ++ FILE(SECTION): warning: multiple common ++ of `SYMBOL' ++ FILE(SECTION): warning: previous common is here ++ ++ 4. Merging a common symbol with a previous larger common symbol. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overridden by larger common ++ FILE(SECTION): warning: larger common is here ++ ++ 5. Merging a common symbol with a previous smaller common ++ symbol. This is the same as the previous case, except that ++ the symbols are encountered in a different order. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overriding smaller common ++ FILE(SECTION): warning: smaller common is here ++ ++`--warn-constructors' ++ Warn if any global constructors are used. This is only useful for ++ a few object file formats. For formats like COFF or ELF, the ++ linker can not detect the use of global constructors. ++ ++`--warn-multiple-gp' ++ Warn if multiple global pointer values are required in the output ++ file. This is only meaningful for certain processors, such as the ++ Alpha. Specifically, some processors put large-valued constants ++ in a special section. A special register (the global pointer) ++ points into the middle of this section, so that constants can be ++ loaded efficiently via a base-register relative addressing mode. ++ Since the offset in base-register relative mode is fixed and ++ relatively small (e.g., 16 bits), this limits the maximum size of ++ the constant pool. Thus, in large programs, it is often necessary ++ to use multiple global pointer values in order to be able to ++ address all possible constants. This option causes a warning to ++ be issued whenever this case occurs. ++ ++`--warn-once' ++ Only warn once for each undefined symbol, rather than once per ++ module which refers to it. ++ ++`--warn-section-align' ++ Warn if the address of an output section is changed because of ++ alignment. Typically, the alignment will be set by an input ++ section. The address will only be changed if it not explicitly ++ specified; that is, if the `SECTIONS' command does not specify a ++ start address for the section (*note SECTIONS::). ++ ++`--warn-shared-textrel' ++ Warn if the linker adds a DT_TEXTREL to a shared object. ++ ++`--warn-unresolved-symbols' ++ If the linker is going to report an unresolved symbol (see the ++ option `--unresolved-symbols') it will normally generate an error. ++ This option makes it generate a warning instead. ++ ++`--error-unresolved-symbols' ++ This restores the linker's default behaviour of generating errors ++ when it is reporting unresolved symbols. ++ ++`--whole-archive' ++ For each archive mentioned on the command line after the ++ `--whole-archive' option, include every object file in the archive ++ in the link, rather than searching the archive for the required ++ object files. This is normally used to turn an archive file into ++ a shared library, forcing every object to be included in the ++ resulting shared library. This option may be used more than once. ++ ++ Two notes when using this option from gcc: First, gcc doesn't know ++ about this option, so you have to use `-Wl,-whole-archive'. ++ Second, don't forget to use `-Wl,-no-whole-archive' after your ++ list of archives, because gcc will add its own list of archives to ++ your link and you may not want this flag to affect those as well. ++ ++`--wrap SYMBOL' ++ Use a wrapper function for SYMBOL. Any undefined reference to ++ SYMBOL will be resolved to `__wrap_SYMBOL'. Any undefined ++ reference to `__real_SYMBOL' will be resolved to SYMBOL. ++ ++ This can be used to provide a wrapper for a system function. The ++ wrapper function should be called `__wrap_SYMBOL'. If it wishes ++ to call the system function, it should call `__real_SYMBOL'. ++ ++ Here is a trivial example: ++ ++ void * ++ __wrap_malloc (size_t c) ++ { ++ printf ("malloc called with %zu\n", c); ++ return __real_malloc (c); ++ } ++ ++ If you link other code with this file using `--wrap malloc', then ++ all calls to `malloc' will call the function `__wrap_malloc' ++ instead. The call to `__real_malloc' in `__wrap_malloc' will call ++ the real `malloc' function. ++ ++ You may wish to provide a `__real_malloc' function as well, so that ++ links without the `--wrap' option will succeed. If you do this, ++ you should not put the definition of `__real_malloc' in the same ++ file as `__wrap_malloc'; if you do, the assembler may resolve the ++ call before the linker has a chance to wrap it to `malloc'. ++ ++`--eh-frame-hdr' ++ Request creation of `.eh_frame_hdr' section and ELF ++ `PT_GNU_EH_FRAME' segment header. ++ ++`--enable-new-dtags' ++`--disable-new-dtags' ++ This linker can create the new dynamic tags in ELF. But the older ++ ELF systems may not understand them. If you specify ++ `--enable-new-dtags', the dynamic tags will be created as needed. ++ If you specify `--disable-new-dtags', no new dynamic tags will be ++ created. By default, the new dynamic tags are not created. Note ++ that those options are only available for ELF systems. ++ ++`--hash-size=NUMBER' ++ Set the default size of the linker's hash tables to a prime number ++ close to NUMBER. Increasing this value can reduce the length of ++ time it takes the linker to perform its tasks, at the expense of ++ increasing the linker's memory requirements. Similarly reducing ++ this value can reduce the memory requirements at the expense of ++ speed. ++ ++`--reduce-memory-overheads' ++ This option reduces memory requirements at ld runtime, at the ++ expense of linking speed. This was introduced to select the old ++ O(n^2) algorithm for link map file generation, rather than the new ++ O(n) algorithm which uses about 40% more memory for symbol storage. ++ ++ Another effect of the switch is to set the default hash table size ++ to 1021, which again saves memory at the cost of lengthening the ++ linker's run time. This is not done however if the `--hash-size' ++ switch has been used. ++ ++ The `--reduce-memory-overheads' switch may be also be used to ++ enable other tradeoffs in future versions of the linker. ++ ++ ++2.1.1 Options Specific to i386 PE Targets ++----------------------------------------- ++ ++The i386 PE linker supports the `-shared' option, which causes the ++output to be a dynamically linked library (DLL) instead of a normal ++executable. You should name the output `*.dll' when you use this ++option. In addition, the linker fully supports the standard `*.def' ++files, which may be specified on the linker command line like an object ++file (in fact, it should precede archives it exports symbols from, to ++ensure that they get linked in, just like a normal object file). ++ ++ In addition to the options common to all targets, the i386 PE linker ++support additional command line options that are specific to the i386 ++PE target. Options that take values may be separated from their values ++by either a space or an equals sign. ++ ++`--add-stdcall-alias' ++ If given, symbols with a stdcall suffix (@NN) will be exported ++ as-is and also with the suffix stripped. [This option is specific ++ to the i386 PE targeted port of the linker] ++ ++`--base-file FILE' ++ Use FILE as the name of a file in which to save the base addresses ++ of all the relocations needed for generating DLLs with `dlltool'. ++ [This is an i386 PE specific option] ++ ++`--dll' ++ Create a DLL instead of a regular executable. You may also use ++ `-shared' or specify a `LIBRARY' in a given `.def' file. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--enable-stdcall-fixup' ++`--disable-stdcall-fixup' ++ If the link finds a symbol that it cannot resolve, it will attempt ++ to do "fuzzy linking" by looking for another defined symbol that ++ differs only in the format of the symbol name (cdecl vs stdcall) ++ and will resolve that symbol by linking to the match. For ++ example, the undefined symbol `_foo' might be linked to the ++ function `_foo@12', or the undefined symbol `_bar@16' might be ++ linked to the function `_bar'. When the linker does this, it ++ prints a warning, since it normally should have failed to link, ++ but sometimes import libraries generated from third-party dlls may ++ need this feature to be usable. If you specify ++ `--enable-stdcall-fixup', this feature is fully enabled and ++ warnings are not printed. If you specify ++ `--disable-stdcall-fixup', this feature is disabled and such ++ mismatches are considered to be errors. [This option is specific ++ to the i386 PE targeted port of the linker] ++ ++`--export-all-symbols' ++ If given, all global symbols in the objects used to build a DLL ++ will be exported by the DLL. Note that this is the default if ++ there otherwise wouldn't be any exported symbols. When symbols are ++ explicitly exported via DEF files or implicitly exported via ++ function attributes, the default is to not export anything else ++ unless this option is given. Note that the symbols `DllMain@12', ++ `DllEntryPoint@0', `DllMainCRTStartup@12', and `impure_ptr' will ++ not be automatically exported. Also, symbols imported from other ++ DLLs will not be re-exported, nor will symbols specifying the ++ DLL's internal layout such as those beginning with `_head_' or ++ ending with `_iname'. In addition, no symbols from `libgcc', ++ `libstd++', `libmingw32', or `crtX.o' will be exported. Symbols ++ whose names begin with `__rtti_' or `__builtin_' will not be ++ exported, to help with C++ DLLs. Finally, there is an extensive ++ list of cygwin-private symbols that are not exported (obviously, ++ this applies on when building DLLs for cygwin targets). These ++ cygwin-excludes are: `_cygwin_dll_entry@12', ++ `_cygwin_crt0_common@8', `_cygwin_noncygwin_dll_entry@12', ++ `_fmode', `_impure_ptr', `cygwin_attach_dll', `cygwin_premain0', ++ `cygwin_premain1', `cygwin_premain2', `cygwin_premain3', and ++ `environ'. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--exclude-symbols SYMBOL,SYMBOL,...' ++ Specifies a list of symbols which should not be automatically ++ exported. The symbol names may be delimited by commas or colons. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--file-alignment' ++ Specify the file alignment. Sections in the file will always ++ begin at file offsets which are multiples of this number. This ++ defaults to 512. [This option is specific to the i386 PE targeted ++ port of the linker] ++ ++`--heap RESERVE' ++`--heap RESERVE,COMMIT' ++ Specify the amount of memory to reserve (and optionally commit) to ++ be used as heap for this program. The default is 1Mb reserved, 4K ++ committed. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--image-base VALUE' ++ Use VALUE as the base address of your program or dll. This is the ++ lowest memory location that will be used when your program or dll ++ is loaded. To reduce the need to relocate and improve performance ++ of your dlls, each should have a unique base address and not ++ overlap any other dlls. The default is 0x400000 for executables, ++ and 0x10000000 for dlls. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--kill-at' ++ If given, the stdcall suffixes (@NN) will be stripped from symbols ++ before they are exported. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--large-address-aware' ++ If given, the appropriate bit in the "Charateristics" field of the ++ COFF header is set to indicate that this executable supports ++ virtual addresses greater than 2 gigabytes. This should be used ++ in conjuction with the /3GB or /USERVA=VALUE megabytes switch in ++ the "[operating systems]" section of the BOOT.INI. Otherwise, ++ this bit has no effect. [This option is specific to PE targeted ++ ports of the linker] ++ ++`--major-image-version VALUE' ++ Sets the major number of the "image version". Defaults to 1. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--major-os-version VALUE' ++ Sets the major number of the "os version". Defaults to 4. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--major-subsystem-version VALUE' ++ Sets the major number of the "subsystem version". Defaults to 4. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--minor-image-version VALUE' ++ Sets the minor number of the "image version". Defaults to 0. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--minor-os-version VALUE' ++ Sets the minor number of the "os version". Defaults to 0. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--minor-subsystem-version VALUE' ++ Sets the minor number of the "subsystem version". Defaults to 0. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--output-def FILE' ++ The linker will create the file FILE which will contain a DEF file ++ corresponding to the DLL the linker is generating. This DEF file ++ (which should be called `*.def') may be used to create an import ++ library with `dlltool' or may be used as a reference to ++ automatically or implicitly exported symbols. [This option is ++ specific to the i386 PE targeted port of the linker] ++ ++`--out-implib FILE' ++ The linker will create the file FILE which will contain an import ++ lib corresponding to the DLL the linker is generating. This import ++ lib (which should be called `*.dll.a' or `*.a' may be used to link ++ clients against the generated DLL; this behaviour makes it ++ possible to skip a separate `dlltool' import library creation step. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--enable-auto-image-base' ++ Automatically choose the image base for DLLs, unless one is ++ specified using the `--image-base' argument. By using a hash ++ generated from the dllname to create unique image bases for each ++ DLL, in-memory collisions and relocations which can delay program ++ execution are avoided. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--disable-auto-image-base' ++ Do not automatically generate a unique image base. If there is no ++ user-specified image base (`--image-base') then use the platform ++ default. [This option is specific to the i386 PE targeted port of ++ the linker] ++ ++`--dll-search-prefix STRING' ++ When linking dynamically to a dll without an import library, ++ search for `.dll' in preference to ++ `lib.dll'. This behaviour allows easy distinction ++ between DLLs built for the various "subplatforms": native, cygwin, ++ uwin, pw, etc. For instance, cygwin DLLs typically use ++ `--dll-search-prefix=cyg'. [This option is specific to the i386 ++ PE targeted port of the linker] ++ ++`--enable-auto-import' ++ Do sophisticated linking of `_symbol' to `__imp__symbol' for DATA ++ imports from DLLs, and create the necessary thunking symbols when ++ building the import libraries with those DATA exports. Note: Use ++ of the 'auto-import' extension will cause the text section of the ++ image file to be made writable. This does not conform to the ++ PE-COFF format specification published by Microsoft. ++ ++ Using 'auto-import' generally will 'just work' - but sometimes you ++ may see this message: ++ ++ "variable '' can't be auto-imported. Please read the ++ documentation for ld's `--enable-auto-import' for details." ++ ++ This message occurs when some (sub)expression accesses an address ++ ultimately given by the sum of two constants (Win32 import tables ++ only allow one). Instances where this may occur include accesses ++ to member fields of struct variables imported from a DLL, as well ++ as using a constant index into an array variable imported from a ++ DLL. Any multiword variable (arrays, structs, long long, etc) may ++ trigger this error condition. However, regardless of the exact ++ data type of the offending exported variable, ld will always ++ detect it, issue the warning, and exit. ++ ++ There are several ways to address this difficulty, regardless of ++ the data type of the exported variable: ++ ++ One way is to use -enable-runtime-pseudo-reloc switch. This leaves ++ the task of adjusting references in your client code for runtime ++ environment, so this method works only when runtime environment ++ supports this feature. ++ ++ A second solution is to force one of the 'constants' to be a ++ variable - that is, unknown and un-optimizable at compile time. ++ For arrays, there are two possibilities: a) make the indexee (the ++ array's address) a variable, or b) make the 'constant' index a ++ variable. Thus: ++ ++ extern type extern_array[]; ++ extern_array[1] --> ++ { volatile type *t=extern_array; t[1] } ++ ++ or ++ ++ extern type extern_array[]; ++ extern_array[1] --> ++ { volatile int t=1; extern_array[t] } ++ ++ For structs (and most other multiword data types) the only option ++ is to make the struct itself (or the long long, or the ...) ++ variable: ++ ++ extern struct s extern_struct; ++ extern_struct.field --> ++ { volatile struct s *t=&extern_struct; t->field } ++ ++ or ++ ++ extern long long extern_ll; ++ extern_ll --> ++ { volatile long long * local_ll=&extern_ll; *local_ll } ++ ++ A third method of dealing with this difficulty is to abandon ++ 'auto-import' for the offending symbol and mark it with ++ `__declspec(dllimport)'. However, in practise that requires using ++ compile-time #defines to indicate whether you are building a DLL, ++ building client code that will link to the DLL, or merely ++ building/linking to a static library. In making the choice ++ between the various methods of resolving the 'direct address with ++ constant offset' problem, you should consider typical real-world ++ usage: ++ ++ Original: ++ --foo.h ++ extern int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ printf("%d\n",arr[1]); ++ } ++ ++ Solution 1: ++ --foo.h ++ extern int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ /* This workaround is for win32 and cygwin; do not "optimize" */ ++ volatile int *parr = arr; ++ printf("%d\n",parr[1]); ++ } ++ ++ Solution 2: ++ --foo.h ++ /* Note: auto-export is assumed (no __declspec(dllexport)) */ ++ #if (defined(_WIN32) || defined(__CYGWIN__)) && \ ++ !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC)) ++ #define FOO_IMPORT __declspec(dllimport) ++ #else ++ #define FOO_IMPORT ++ #endif ++ extern FOO_IMPORT int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ printf("%d\n",arr[1]); ++ } ++ ++ A fourth way to avoid this problem is to re-code your library to ++ use a functional interface rather than a data interface for the ++ offending variables (e.g. set_foo() and get_foo() accessor ++ functions). [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--disable-auto-import' ++ Do not attempt to do sophisticated linking of `_symbol' to ++ `__imp__symbol' for DATA imports from DLLs. [This option is ++ specific to the i386 PE targeted port of the linker] ++ ++`--enable-runtime-pseudo-reloc' ++ If your code contains expressions described in -enable-auto-import ++ section, that is, DATA imports from DLL with non-zero offset, this ++ switch will create a vector of 'runtime pseudo relocations' which ++ can be used by runtime environment to adjust references to such ++ data in your client code. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--disable-runtime-pseudo-reloc' ++ Do not create pseudo relocations for non-zero offset DATA imports ++ from DLLs. This is the default. [This option is specific to the ++ i386 PE targeted port of the linker] ++ ++`--enable-extra-pe-debug' ++ Show additional debug info related to auto-import symbol thunking. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--section-alignment' ++ Sets the section alignment. Sections in memory will always begin ++ at addresses which are a multiple of this number. Defaults to ++ 0x1000. [This option is specific to the i386 PE targeted port of ++ the linker] ++ ++`--stack RESERVE' ++`--stack RESERVE,COMMIT' ++ Specify the amount of memory to reserve (and optionally commit) to ++ be used as stack for this program. The default is 2Mb reserved, 4K ++ committed. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--subsystem WHICH' ++`--subsystem WHICH:MAJOR' ++`--subsystem WHICH:MAJOR.MINOR' ++ Specifies the subsystem under which your program will execute. The ++ legal values for WHICH are `native', `windows', `console', ++ `posix', and `xbox'. You may optionally set the subsystem version ++ also. Numeric values are also accepted for WHICH. [This option ++ is specific to the i386 PE targeted port of the linker] ++ ++ ++ ++File: ld.info, Node: Environment, Prev: Options, Up: Invocation ++ ++2.2 Environment Variables ++========================= ++ ++You can change the behaviour of `ld' with the environment variables ++`GNUTARGET', `LDEMULATION' and `COLLECT_NO_DEMANGLE'. ++ ++ `GNUTARGET' determines the input-file object format if you don't use ++`-b' (or its synonym `--format'). Its value should be one of the BFD ++names for an input format (*note BFD::). If there is no `GNUTARGET' in ++the environment, `ld' uses the natural format of the target. If ++`GNUTARGET' is set to `default' then BFD attempts to discover the input ++format by examining binary input files; this method often succeeds, but ++there are potential ambiguities, since there is no method of ensuring ++that the magic number used to specify object-file formats is unique. ++However, the configuration procedure for BFD on each system places the ++conventional format for that system first in the search-list, so ++ambiguities are resolved in favor of convention. ++ ++ `LDEMULATION' determines the default emulation if you don't use the ++`-m' option. The emulation can affect various aspects of linker ++behaviour, particularly the default linker script. You can list the ++available emulations with the `--verbose' or `-V' options. If the `-m' ++option is not used, and the `LDEMULATION' environment variable is not ++defined, the default emulation depends upon how the linker was ++configured. ++ ++ Normally, the linker will default to demangling symbols. However, if ++`COLLECT_NO_DEMANGLE' is set in the environment, then it will default ++to not demangling symbols. This environment variable is used in a ++similar fashion by the `gcc' linker wrapper program. The default may ++be overridden by the `--demangle' and `--no-demangle' options. ++ ++ ++File: ld.info, Node: Scripts, Next: Machine Dependent, Prev: Invocation, Up: Top ++ ++3 Linker Scripts ++**************** ++ ++Every link is controlled by a "linker script". This script is written ++in the linker command language. ++ ++ The main purpose of the linker script is to describe how the ++sections in the input files should be mapped into the output file, and ++to control the memory layout of the output file. Most linker scripts ++do nothing more than this. However, when necessary, the linker script ++can also direct the linker to perform many other operations, using the ++commands described below. ++ ++ The linker always uses a linker script. If you do not supply one ++yourself, the linker will use a default script that is compiled into the ++linker executable. You can use the `--verbose' command line option to ++display the default linker script. Certain command line options, such ++as `-r' or `-N', will affect the default linker script. ++ ++ You may supply your own linker script by using the `-T' command line ++option. When you do this, your linker script will replace the default ++linker script. ++ ++ You may also use linker scripts implicitly by naming them as input ++files to the linker, as though they were files to be linked. *Note ++Implicit Linker Scripts::. ++ ++* Menu: ++ ++* Basic Script Concepts:: Basic Linker Script Concepts ++* Script Format:: Linker Script Format ++* Simple Example:: Simple Linker Script Example ++* Simple Commands:: Simple Linker Script Commands ++* Assignments:: Assigning Values to Symbols ++* SECTIONS:: SECTIONS Command ++* MEMORY:: MEMORY Command ++* PHDRS:: PHDRS Command ++* VERSION:: VERSION Command ++* Expressions:: Expressions in Linker Scripts ++* Implicit Linker Scripts:: Implicit Linker Scripts ++ ++ ++File: ld.info, Node: Basic Script Concepts, Next: Script Format, Up: Scripts ++ ++3.1 Basic Linker Script Concepts ++================================ ++ ++We need to define some basic concepts and vocabulary in order to ++describe the linker script language. ++ ++ The linker combines input files into a single output file. The ++output file and each input file are in a special data format known as an ++"object file format". Each file is called an "object file". The ++output file is often called an "executable", but for our purposes we ++will also call it an object file. Each object file has, among other ++things, a list of "sections". We sometimes refer to a section in an ++input file as an "input section"; similarly, a section in the output ++file is an "output section". ++ ++ Each section in an object file has a name and a size. Most sections ++also have an associated block of data, known as the "section contents". ++A section may be marked as "loadable", which mean that the contents ++should be loaded into memory when the output file is run. A section ++with no contents may be "allocatable", which means that an area in ++memory should be set aside, but nothing in particular should be loaded ++there (in some cases this memory must be zeroed out). A section which ++is neither loadable nor allocatable typically contains some sort of ++debugging information. ++ ++ Every loadable or allocatable output section has two addresses. The ++first is the "VMA", or virtual memory address. This is the address the ++section will have when the output file is run. The second is the ++"LMA", or load memory address. This is the address at which the ++section will be loaded. In most cases the two addresses will be the ++same. An example of when they might be different is when a data section ++is loaded into ROM, and then copied into RAM when the program starts up ++(this technique is often used to initialize global variables in a ROM ++based system). In this case the ROM address would be the LMA, and the ++RAM address would be the VMA. ++ ++ You can see the sections in an object file by using the `objdump' ++program with the `-h' option. ++ ++ Every object file also has a list of "symbols", known as the "symbol ++table". A symbol may be defined or undefined. Each symbol has a name, ++and each defined symbol has an address, among other information. If ++you compile a C or C++ program into an object file, you will get a ++defined symbol for every defined function and global or static ++variable. Every undefined function or global variable which is ++referenced in the input file will become an undefined symbol. ++ ++ You can see the symbols in an object file by using the `nm' program, ++or by using the `objdump' program with the `-t' option. ++ ++ ++File: ld.info, Node: Script Format, Next: Simple Example, Prev: Basic Script Concepts, Up: Scripts ++ ++3.2 Linker Script Format ++======================== ++ ++Linker scripts are text files. ++ ++ You write a linker script as a series of commands. Each command is ++either a keyword, possibly followed by arguments, or an assignment to a ++symbol. You may separate commands using semicolons. Whitespace is ++generally ignored. ++ ++ Strings such as file or format names can normally be entered ++directly. If the file name contains a character such as a comma which ++would otherwise serve to separate file names, you may put the file name ++in double quotes. There is no way to use a double quote character in a ++file name. ++ ++ You may include comments in linker scripts just as in C, delimited by ++`/*' and `*/'. As in C, comments are syntactically equivalent to ++whitespace. ++ ++ ++File: ld.info, Node: Simple Example, Next: Simple Commands, Prev: Script Format, Up: Scripts ++ ++3.3 Simple Linker Script Example ++================================ ++ ++Many linker scripts are fairly simple. ++ ++ The simplest possible linker script has just one command: ++`SECTIONS'. You use the `SECTIONS' command to describe the memory ++layout of the output file. ++ ++ The `SECTIONS' command is a powerful command. Here we will describe ++a simple use of it. Let's assume your program consists only of code, ++initialized data, and uninitialized data. These will be in the ++`.text', `.data', and `.bss' sections, respectively. Let's assume ++further that these are the only sections which appear in your input ++files. ++ ++ For this example, let's say that the code should be loaded at address ++0x10000, and that the data should start at address 0x8000000. Here is a ++linker script which will do that: ++ SECTIONS ++ { ++ . = 0x10000; ++ .text : { *(.text) } ++ . = 0x8000000; ++ .data : { *(.data) } ++ .bss : { *(.bss) } ++ } ++ ++ You write the `SECTIONS' command as the keyword `SECTIONS', followed ++by a series of symbol assignments and output section descriptions ++enclosed in curly braces. ++ ++ The first line inside the `SECTIONS' command of the above example ++sets the value of the special symbol `.', which is the location ++counter. If you do not specify the address of an output section in some ++other way (other ways are described later), the address is set from the ++current value of the location counter. The location counter is then ++incremented by the size of the output section. At the start of the ++`SECTIONS' command, the location counter has the value `0'. ++ ++ The second line defines an output section, `.text'. The colon is ++required syntax which may be ignored for now. Within the curly braces ++after the output section name, you list the names of the input sections ++which should be placed into this output section. The `*' is a wildcard ++which matches any file name. The expression `*(.text)' means all ++`.text' input sections in all input files. ++ ++ Since the location counter is `0x10000' when the output section ++`.text' is defined, the linker will set the address of the `.text' ++section in the output file to be `0x10000'. ++ ++ The remaining lines define the `.data' and `.bss' sections in the ++output file. The linker will place the `.data' output section at ++address `0x8000000'. After the linker places the `.data' output ++section, the value of the location counter will be `0x8000000' plus the ++size of the `.data' output section. The effect is that the linker will ++place the `.bss' output section immediately after the `.data' output ++section in memory. ++ ++ The linker will ensure that each output section has the required ++alignment, by increasing the location counter if necessary. In this ++example, the specified addresses for the `.text' and `.data' sections ++will probably satisfy any alignment constraints, but the linker may ++have to create a small gap between the `.data' and `.bss' sections. ++ ++ That's it! That's a simple and complete linker script. ++ ++ ++File: ld.info, Node: Simple Commands, Next: Assignments, Prev: Simple Example, Up: Scripts ++ ++3.4 Simple Linker Script Commands ++================================= ++ ++In this section we describe the simple linker script commands. ++ ++* Menu: ++ ++* Entry Point:: Setting the entry point ++* File Commands:: Commands dealing with files ++ ++* Format Commands:: Commands dealing with object file formats ++ ++* Miscellaneous Commands:: Other linker script commands ++ ++ ++File: ld.info, Node: Entry Point, Next: File Commands, Up: Simple Commands ++ ++3.4.1 Setting the Entry Point ++----------------------------- ++ ++The first instruction to execute in a program is called the "entry ++point". You can use the `ENTRY' linker script command to set the entry ++point. The argument is a symbol name: ++ ENTRY(SYMBOL) ++ ++ There are several ways to set the entry point. The linker will set ++the entry point by trying each of the following methods in order, and ++stopping when one of them succeeds: ++ * the `-e' ENTRY command-line option; ++ ++ * the `ENTRY(SYMBOL)' command in a linker script; ++ ++ * the value of the symbol `start', if defined; ++ ++ * the address of the first byte of the `.text' section, if present; ++ ++ * The address `0'. ++ ++ ++File: ld.info, Node: File Commands, Next: Format Commands, Prev: Entry Point, Up: Simple Commands ++ ++3.4.2 Commands Dealing with Files ++--------------------------------- ++ ++Several linker script commands deal with files. ++ ++`INCLUDE FILENAME' ++ Include the linker script FILENAME at this point. The file will ++ be searched for in the current directory, and in any directory ++ specified with the `-L' option. You can nest calls to `INCLUDE' ++ up to 10 levels deep. ++ ++`INPUT(FILE, FILE, ...)' ++`INPUT(FILE FILE ...)' ++ The `INPUT' command directs the linker to include the named files ++ in the link, as though they were named on the command line. ++ ++ For example, if you always want to include `subr.o' any time you do ++ a link, but you can't be bothered to put it on every link command ++ line, then you can put `INPUT (subr.o)' in your linker script. ++ ++ In fact, if you like, you can list all of your input files in the ++ linker script, and then invoke the linker with nothing but a `-T' ++ option. ++ ++ In case a "sysroot prefix" is configured, and the filename starts ++ with the `/' character, and the script being processed was located ++ inside the "sysroot prefix", the filename will be looked for in ++ the "sysroot prefix". Otherwise, the linker will try to open the ++ file in the current directory. If it is not found, the linker ++ will search through the archive library search path. See the ++ description of `-L' in *Note Command Line Options: Options. ++ ++ If you use `INPUT (-lFILE)', `ld' will transform the name to ++ `libFILE.a', as with the command line argument `-l'. ++ ++ When you use the `INPUT' command in an implicit linker script, the ++ files will be included in the link at the point at which the linker ++ script file is included. This can affect archive searching. ++ ++`GROUP(FILE, FILE, ...)' ++`GROUP(FILE FILE ...)' ++ The `GROUP' command is like `INPUT', except that the named files ++ should all be archives, and they are searched repeatedly until no ++ new undefined references are created. See the description of `-(' ++ in *Note Command Line Options: Options. ++ ++`AS_NEEDED(FILE, FILE, ...)' ++`AS_NEEDED(FILE FILE ...)' ++ This construct can appear only inside of the `INPUT' or `GROUP' ++ commands, among other filenames. The files listed will be handled ++ as if they appear directly in the `INPUT' or `GROUP' commands, ++ with the exception of ELF shared libraries, that will be added only ++ when they are actually needed. This construct essentially enables ++ `--as-needed' option for all the files listed inside of it and ++ restores previous `--as-needed' resp. `--no-as-needed' setting ++ afterwards. ++ ++`OUTPUT(FILENAME)' ++ The `OUTPUT' command names the output file. Using ++ `OUTPUT(FILENAME)' in the linker script is exactly like using `-o ++ FILENAME' on the command line (*note Command Line Options: ++ Options.). If both are used, the command line option takes ++ precedence. ++ ++ You can use the `OUTPUT' command to define a default name for the ++ output file other than the usual default of `a.out'. ++ ++`SEARCH_DIR(PATH)' ++ The `SEARCH_DIR' command adds PATH to the list of paths where `ld' ++ looks for archive libraries. Using `SEARCH_DIR(PATH)' is exactly ++ like using `-L PATH' on the command line (*note Command Line ++ Options: Options.). If both are used, then the linker will search ++ both paths. Paths specified using the command line option are ++ searched first. ++ ++`STARTUP(FILENAME)' ++ The `STARTUP' command is just like the `INPUT' command, except ++ that FILENAME will become the first input file to be linked, as ++ though it were specified first on the command line. This may be ++ useful when using a system in which the entry point is always the ++ start of the first file. ++ ++ ++File: ld.info, Node: Format Commands, Next: Miscellaneous Commands, Prev: File Commands, Up: Simple Commands ++ ++3.4.3 Commands Dealing with Object File Formats ++----------------------------------------------- ++ ++A couple of linker script commands deal with object file formats. ++ ++`OUTPUT_FORMAT(BFDNAME)' ++`OUTPUT_FORMAT(DEFAULT, BIG, LITTLE)' ++ The `OUTPUT_FORMAT' command names the BFD format to use for the ++ output file (*note BFD::). Using `OUTPUT_FORMAT(BFDNAME)' is ++ exactly like using `--oformat BFDNAME' on the command line (*note ++ Command Line Options: Options.). If both are used, the command ++ line option takes precedence. ++ ++ You can use `OUTPUT_FORMAT' with three arguments to use different ++ formats based on the `-EB' and `-EL' command line options. This ++ permits the linker script to set the output format based on the ++ desired endianness. ++ ++ If neither `-EB' nor `-EL' are used, then the output format will ++ be the first argument, DEFAULT. If `-EB' is used, the output ++ format will be the second argument, BIG. If `-EL' is used, the ++ output format will be the third argument, LITTLE. ++ ++ For example, the default linker script for the MIPS ELF target ++ uses this command: ++ OUTPUT_FORMAT(elf32-bigmips, elf32-bigmips, elf32-littlemips) ++ This says that the default format for the output file is ++ `elf32-bigmips', but if the user uses the `-EL' command line ++ option, the output file will be created in the `elf32-littlemips' ++ format. ++ ++`TARGET(BFDNAME)' ++ The `TARGET' command names the BFD format to use when reading input ++ files. It affects subsequent `INPUT' and `GROUP' commands. This ++ command is like using `-b BFDNAME' on the command line (*note ++ Command Line Options: Options.). If the `TARGET' command is used ++ but `OUTPUT_FORMAT' is not, then the last `TARGET' command is also ++ used to set the format for the output file. *Note BFD::. ++ ++ ++File: ld.info, Node: Miscellaneous Commands, Prev: Format Commands, Up: Simple Commands ++ ++3.4.4 Other Linker Script Commands ++---------------------------------- ++ ++There are a few other linker scripts commands. ++ ++`ASSERT(EXP, MESSAGE)' ++ Ensure that EXP is non-zero. If it is zero, then exit the linker ++ with an error code, and print MESSAGE. ++ ++`EXTERN(SYMBOL SYMBOL ...)' ++ Force SYMBOL to be entered in the output file as an undefined ++ symbol. Doing this may, for example, trigger linking of additional ++ modules from standard libraries. You may list several SYMBOLs for ++ each `EXTERN', and you may use `EXTERN' multiple times. This ++ command has the same effect as the `-u' command-line option. ++ ++`FORCE_COMMON_ALLOCATION' ++ This command has the same effect as the `-d' command-line option: ++ to make `ld' assign space to common symbols even if a relocatable ++ output file is specified (`-r'). ++ ++`INHIBIT_COMMON_ALLOCATION' ++ This command has the same effect as the `--no-define-common' ++ command-line option: to make `ld' omit the assignment of addresses ++ to common symbols even for a non-relocatable output file. ++ ++`NOCROSSREFS(SECTION SECTION ...)' ++ This command may be used to tell `ld' to issue an error about any ++ references among certain output sections. ++ ++ In certain types of programs, particularly on embedded systems when ++ using overlays, when one section is loaded into memory, another ++ section will not be. Any direct references between the two ++ sections would be errors. For example, it would be an error if ++ code in one section called a function defined in the other section. ++ ++ The `NOCROSSREFS' command takes a list of output section names. If ++ `ld' detects any cross references between the sections, it reports ++ an error and returns a non-zero exit status. Note that the ++ `NOCROSSREFS' command uses output section names, not input section ++ names. ++ ++`OUTPUT_ARCH(BFDARCH)' ++ Specify a particular output machine architecture. The argument is ++ one of the names used by the BFD library (*note BFD::). You can ++ see the architecture of an object file by using the `objdump' ++ program with the `-f' option. ++ ++ ++File: ld.info, Node: Assignments, Next: SECTIONS, Prev: Simple Commands, Up: Scripts ++ ++3.5 Assigning Values to Symbols ++=============================== ++ ++You may assign a value to a symbol in a linker script. This will define ++the symbol and place it into the symbol table with a global scope. ++ ++* Menu: ++ ++* Simple Assignments:: Simple Assignments ++* PROVIDE:: PROVIDE ++* PROVIDE_HIDDEN:: PROVIDE_HIDDEN ++* Source Code Reference:: How to use a linker script defined symbol in source code ++ ++ ++File: ld.info, Node: Simple Assignments, Next: PROVIDE, Up: Assignments ++ ++3.5.1 Simple Assignments ++------------------------ ++ ++You may assign to a symbol using any of the C assignment operators: ++ ++`SYMBOL = EXPRESSION ;' ++`SYMBOL += EXPRESSION ;' ++`SYMBOL -= EXPRESSION ;' ++`SYMBOL *= EXPRESSION ;' ++`SYMBOL /= EXPRESSION ;' ++`SYMBOL <<= EXPRESSION ;' ++`SYMBOL >>= EXPRESSION ;' ++`SYMBOL &= EXPRESSION ;' ++`SYMBOL |= EXPRESSION ;' ++ ++ The first case will define SYMBOL to the value of EXPRESSION. In ++the other cases, SYMBOL must already be defined, and the value will be ++adjusted accordingly. ++ ++ The special symbol name `.' indicates the location counter. You may ++only use this within a `SECTIONS' command. *Note Location Counter::. ++ ++ The semicolon after EXPRESSION is required. ++ ++ Expressions are defined below; see *Note Expressions::. ++ ++ You may write symbol assignments as commands in their own right, or ++as statements within a `SECTIONS' command, or as part of an output ++section description in a `SECTIONS' command. ++ ++ The section of the symbol will be set from the section of the ++expression; for more information, see *Note Expression Section::. ++ ++ Here is an example showing the three different places that symbol ++assignments may be used: ++ ++ floating_point = 0; ++ SECTIONS ++ { ++ .text : ++ { ++ *(.text) ++ _etext = .; ++ } ++ _bdata = (. + 3) & ~ 3; ++ .data : { *(.data) } ++ } ++ In this example, the symbol `floating_point' will be defined as ++zero. The symbol `_etext' will be defined as the address following the ++last `.text' input section. The symbol `_bdata' will be defined as the ++address following the `.text' output section aligned upward to a 4 byte ++boundary. ++ ++ ++File: ld.info, Node: PROVIDE, Next: PROVIDE_HIDDEN, Prev: Simple Assignments, Up: Assignments ++ ++3.5.2 PROVIDE ++------------- ++ ++In some cases, it is desirable for a linker script to define a symbol ++only if it is referenced and is not defined by any object included in ++the link. For example, traditional linkers defined the symbol `etext'. ++However, ANSI C requires that the user be able to use `etext' as a ++function name without encountering an error. The `PROVIDE' keyword may ++be used to define a symbol, such as `etext', only if it is referenced ++but not defined. The syntax is `PROVIDE(SYMBOL = EXPRESSION)'. ++ ++ Here is an example of using `PROVIDE' to define `etext': ++ SECTIONS ++ { ++ .text : ++ { ++ *(.text) ++ _etext = .; ++ PROVIDE(etext = .); ++ } ++ } ++ ++ In this example, if the program defines `_etext' (with a leading ++underscore), the linker will give a multiple definition error. If, on ++the other hand, the program defines `etext' (with no leading ++underscore), the linker will silently use the definition in the program. ++If the program references `etext' but does not define it, the linker ++will use the definition in the linker script. ++ ++ ++File: ld.info, Node: PROVIDE_HIDDEN, Next: Source Code Reference, Prev: PROVIDE, Up: Assignments ++ ++3.5.3 PROVIDE_HIDDEN ++-------------------- ++ ++Similar to `PROVIDE'. For ELF targeted ports, the symbol will be ++hidden and won't be exported. ++ ++ ++File: ld.info, Node: Source Code Reference, Prev: PROVIDE_HIDDEN, Up: Assignments ++ ++3.5.4 Source Code Reference ++--------------------------- ++ ++Accessing a linker script defined variable from source code is not ++intuitive. In particular a linker script symbol is not equivalent to a ++variable declaration in a high level language, it is instead a symbol ++that does not have a value. ++ ++ Before going further, it is important to note that compilers often ++transform names in the source code into different names when they are ++stored in the symbol table. For example, Fortran compilers commonly ++prepend or append an underscore, and C++ performs extensive `name ++mangling'. Therefore there might be a discrepancy between the name of ++a variable as it is used in source code and the name of the same ++variable as it is defined in a linker script. For example in C a ++linker script variable might be referred to as: ++ ++ extern int foo; ++ ++ But in the linker script it might be defined as: ++ ++ _foo = 1000; ++ ++ In the remaining examples however it is assumed that no name ++transformation has taken place. ++ ++ When a symbol is declared in a high level language such as C, two ++things happen. The first is that the compiler reserves enough space in ++the program's memory to hold the _value_ of the symbol. The second is ++that the compiler creates an entry in the program's symbol table which ++holds the symbol's _address_. ie the symbol table contains the address ++of the block of memory holding the symbol's value. So for example the ++following C declaration, at file scope: ++ ++ int foo = 1000; ++ ++ creates a entry called `foo' in the symbol table. This entry holds ++the address of an `int' sized block of memory where the number 1000 is ++initially stored. ++ ++ When a program references a symbol the compiler generates code that ++first accesses the symbol table to find the address of the symbol's ++memory block and then code to read the value from that memory block. ++So: ++ ++ foo = 1; ++ ++ looks up the symbol `foo' in the symbol table, gets the address ++associated with this symbol and then writes the value 1 into that ++address. Whereas: ++ ++ int * a = & foo; ++ ++ looks up the symbol `foo' in the symbol table, gets it address and ++then copies this address into the block of memory associated with the ++variable `a'. ++ ++ Linker scripts symbol declarations, by contrast, create an entry in ++the symbol table but do not assign any memory to them. Thus they are ++an address without a value. So for example the linker script ++definition: ++ ++ foo = 1000; ++ ++ creates an entry in the symbol table called `foo' which holds the ++address of memory location 1000, but nothing special is stored at ++address 1000. This means that you cannot access the _value_ of a ++linker script defined symbol - it has no value - all you can do is ++access the _address_ of a linker script defined symbol. ++ ++ Hence when you are using a linker script defined symbol in source ++code you should always take the address of the symbol, and never ++attempt to use its value. For example suppose you want to copy the ++contents of a section of memory called .ROM into a section called ++.FLASH and the linker script contains these declarations: ++ ++ start_of_ROM = .ROM; ++ end_of_ROM = .ROM + sizeof (.ROM) - 1; ++ start_of_FLASH = .FLASH; ++ ++ Then the C source code to perform the copy would be: ++ ++ extern char start_of_ROM, end_of_ROM, start_of_FLASH; ++ ++ memcpy (& start_of_FLASH, & start_of_ROM, & end_of_ROM - & start_of_ROM); ++ ++ Note the use of the `&' operators. These are correct. ++ ++ ++File: ld.info, Node: SECTIONS, Next: MEMORY, Prev: Assignments, Up: Scripts ++ ++3.6 SECTIONS Command ++==================== ++ ++The `SECTIONS' command tells the linker how to map input sections into ++output sections, and how to place the output sections in memory. ++ ++ The format of the `SECTIONS' command is: ++ SECTIONS ++ { ++ SECTIONS-COMMAND ++ SECTIONS-COMMAND ++ ... ++ } ++ ++ Each SECTIONS-COMMAND may of be one of the following: ++ ++ * an `ENTRY' command (*note Entry command: Entry Point.) ++ ++ * a symbol assignment (*note Assignments::) ++ ++ * an output section description ++ ++ * an overlay description ++ ++ The `ENTRY' command and symbol assignments are permitted inside the ++`SECTIONS' command for convenience in using the location counter in ++those commands. This can also make the linker script easier to ++understand because you can use those commands at meaningful points in ++the layout of the output file. ++ ++ Output section descriptions and overlay descriptions are described ++below. ++ ++ If you do not use a `SECTIONS' command in your linker script, the ++linker will place each input section into an identically named output ++section in the order that the sections are first encountered in the ++input files. If all input sections are present in the first file, for ++example, the order of sections in the output file will match the order ++in the first input file. The first section will be at address zero. ++ ++* Menu: ++ ++* Output Section Description:: Output section description ++* Output Section Name:: Output section name ++* Output Section Address:: Output section address ++* Input Section:: Input section description ++* Output Section Data:: Output section data ++* Output Section Keywords:: Output section keywords ++* Output Section Discarding:: Output section discarding ++* Output Section Attributes:: Output section attributes ++* Overlay Description:: Overlay description ++ ++ ++File: ld.info, Node: Output Section Description, Next: Output Section Name, Up: SECTIONS ++ ++3.6.1 Output Section Description ++-------------------------------- ++ ++The full description of an output section looks like this: ++ SECTION [ADDRESS] [(TYPE)] : ++ [AT(LMA)] [ALIGN(SECTION_ALIGN)] [SUBALIGN(SUBSECTION_ALIGN)] ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [>REGION] [AT>LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP] ++ ++ Most output sections do not use most of the optional section ++attributes. ++ ++ The whitespace around SECTION is required, so that the section name ++is unambiguous. The colon and the curly braces are also required. The ++line breaks and other white space are optional. ++ ++ Each OUTPUT-SECTION-COMMAND may be one of the following: ++ ++ * a symbol assignment (*note Assignments::) ++ ++ * an input section description (*note Input Section::) ++ ++ * data values to include directly (*note Output Section Data::) ++ ++ * a special output section keyword (*note Output Section Keywords::) ++ ++ ++File: ld.info, Node: Output Section Name, Next: Output Section Address, Prev: Output Section Description, Up: SECTIONS ++ ++3.6.2 Output Section Name ++------------------------- ++ ++The name of the output section is SECTION. SECTION must meet the ++constraints of your output format. In formats which only support a ++limited number of sections, such as `a.out', the name must be one of ++the names supported by the format (`a.out', for example, allows only ++`.text', `.data' or `.bss'). If the output format supports any number ++of sections, but with numbers and not names (as is the case for Oasys), ++the name should be supplied as a quoted numeric string. A section name ++may consist of any sequence of characters, but a name which contains ++any unusual characters such as commas must be quoted. ++ ++ The output section name `/DISCARD/' is special; *Note Output Section ++Discarding::. ++ ++ ++File: ld.info, Node: Output Section Address, Next: Input Section, Prev: Output Section Name, Up: SECTIONS ++ ++3.6.3 Output Section Address ++---------------------------- ++ ++The ADDRESS is an expression for the VMA (the virtual memory address) ++of the output section. If you do not provide ADDRESS, the linker will ++set it based on REGION if present, or otherwise based on the current ++value of the location counter. ++ ++ If you provide ADDRESS, the address of the output section will be ++set to precisely that. If you provide neither ADDRESS nor REGION, then ++the address of the output section will be set to the current value of ++the location counter aligned to the alignment requirements of the ++output section. The alignment requirement of the output section is the ++strictest alignment of any input section contained within the output ++section. ++ ++ For example, ++ .text . : { *(.text) } ++ and ++ .text : { *(.text) } ++ are subtly different. The first will set the address of the `.text' ++output section to the current value of the location counter. The ++second will set it to the current value of the location counter aligned ++to the strictest alignment of a `.text' input section. ++ ++ The ADDRESS may be an arbitrary expression; *Note Expressions::. ++For example, if you want to align the section on a 0x10 byte boundary, ++so that the lowest four bits of the section address are zero, you could ++do something like this: ++ .text ALIGN(0x10) : { *(.text) } ++ This works because `ALIGN' returns the current location counter ++aligned upward to the specified value. ++ ++ Specifying ADDRESS for a section will change the value of the ++location counter. ++ ++ ++File: ld.info, Node: Input Section, Next: Output Section Data, Prev: Output Section Address, Up: SECTIONS ++ ++3.6.4 Input Section Description ++------------------------------- ++ ++The most common output section command is an input section description. ++ ++ The input section description is the most basic linker script ++operation. You use output sections to tell the linker how to lay out ++your program in memory. You use input section descriptions to tell the ++linker how to map the input files into your memory layout. ++ ++* Menu: ++ ++* Input Section Basics:: Input section basics ++* Input Section Wildcards:: Input section wildcard patterns ++* Input Section Common:: Input section for common symbols ++* Input Section Keep:: Input section and garbage collection ++* Input Section Example:: Input section example ++ ++ ++File: ld.info, Node: Input Section Basics, Next: Input Section Wildcards, Up: Input Section ++ ++3.6.4.1 Input Section Basics ++............................ ++ ++An input section description consists of a file name optionally followed ++by a list of section names in parentheses. ++ ++ The file name and the section name may be wildcard patterns, which we ++describe further below (*note Input Section Wildcards::). ++ ++ The most common input section description is to include all input ++sections with a particular name in the output section. For example, to ++include all input `.text' sections, you would write: ++ *(.text) ++ Here the `*' is a wildcard which matches any file name. To exclude ++a list of files from matching the file name wildcard, EXCLUDE_FILE may ++be used to match all files except the ones specified in the ++EXCLUDE_FILE list. For example: ++ (*(EXCLUDE_FILE (*crtend.o *otherfile.o) .ctors)) ++ will cause all .ctors sections from all files except `crtend.o' and ++`otherfile.o' to be included. ++ ++ There are two ways to include more than one section: ++ *(.text .rdata) ++ *(.text) *(.rdata) ++ The difference between these is the order in which the `.text' and ++`.rdata' input sections will appear in the output section. In the ++first example, they will be intermingled, appearing in the same order as ++they are found in the linker input. In the second example, all `.text' ++input sections will appear first, followed by all `.rdata' input ++sections. ++ ++ You can specify a file name to include sections from a particular ++file. You would do this if one or more of your files contain special ++data that needs to be at a particular location in memory. For example: ++ data.o(.data) ++ ++ If you use a file name without a list of sections, then all sections ++in the input file will be included in the output section. This is not ++commonly done, but it may by useful on occasion. For example: ++ data.o ++ ++ When you use a file name which does not contain any wild card ++characters, the linker will first see if you also specified the file ++name on the linker command line or in an `INPUT' command. If you did ++not, the linker will attempt to open the file as an input file, as ++though it appeared on the command line. Note that this differs from an ++`INPUT' command, because the linker will not search for the file in the ++archive search path. ++ ++ ++File: ld.info, Node: Input Section Wildcards, Next: Input Section Common, Prev: Input Section Basics, Up: Input Section ++ ++3.6.4.2 Input Section Wildcard Patterns ++....................................... ++ ++In an input section description, either the file name or the section ++name or both may be wildcard patterns. ++ ++ The file name of `*' seen in many examples is a simple wildcard ++pattern for the file name. ++ ++ The wildcard patterns are like those used by the Unix shell. ++ ++`*' ++ matches any number of characters ++ ++`?' ++ matches any single character ++ ++`[CHARS]' ++ matches a single instance of any of the CHARS; the `-' character ++ may be used to specify a range of characters, as in `[a-z]' to ++ match any lower case letter ++ ++`\' ++ quotes the following character ++ ++ When a file name is matched with a wildcard, the wildcard characters ++will not match a `/' character (used to separate directory names on ++Unix). A pattern consisting of a single `*' character is an exception; ++it will always match any file name, whether it contains a `/' or not. ++In a section name, the wildcard characters will match a `/' character. ++ ++ File name wildcard patterns only match files which are explicitly ++specified on the command line or in an `INPUT' command. The linker ++does not search directories to expand wildcards. ++ ++ If a file name matches more than one wildcard pattern, or if a file ++name appears explicitly and is also matched by a wildcard pattern, the ++linker will use the first match in the linker script. For example, this ++sequence of input section descriptions is probably in error, because the ++`data.o' rule will not be used: ++ .data : { *(.data) } ++ .data1 : { data.o(.data) } ++ ++ Normally, the linker will place files and sections matched by ++wildcards in the order in which they are seen during the link. You can ++change this by using the `SORT_BY_NAME' keyword, which appears before a ++wildcard pattern in parentheses (e.g., `SORT_BY_NAME(.text*)'). When ++the `SORT_BY_NAME' keyword is used, the linker will sort the files or ++sections into ascending order by name before placing them in the output ++file. ++ ++ `SORT_BY_ALIGNMENT' is very similar to `SORT_BY_NAME'. The ++difference is `SORT_BY_ALIGNMENT' will sort sections into ascending ++order by alignment before placing them in the output file. ++ ++ `SORT' is an alias for `SORT_BY_NAME'. ++ ++ When there are nested section sorting commands in linker script, ++there can be at most 1 level of nesting for section sorting commands. ++ ++ 1. `SORT_BY_NAME' (`SORT_BY_ALIGNMENT' (wildcard section pattern)). ++ It will sort the input sections by name first, then by alignment ++ if 2 sections have the same name. ++ ++ 2. `SORT_BY_ALIGNMENT' (`SORT_BY_NAME' (wildcard section pattern)). ++ It will sort the input sections by alignment first, then by name ++ if 2 sections have the same alignment. ++ ++ 3. `SORT_BY_NAME' (`SORT_BY_NAME' (wildcard section pattern)) is ++ treated the same as `SORT_BY_NAME' (wildcard section pattern). ++ ++ 4. `SORT_BY_ALIGNMENT' (`SORT_BY_ALIGNMENT' (wildcard section ++ pattern)) is treated the same as `SORT_BY_ALIGNMENT' (wildcard ++ section pattern). ++ ++ 5. All other nested section sorting commands are invalid. ++ ++ When both command line section sorting option and linker script ++section sorting command are used, section sorting command always takes ++precedence over the command line option. ++ ++ If the section sorting command in linker script isn't nested, the ++command line option will make the section sorting command to be treated ++as nested sorting command. ++ ++ 1. `SORT_BY_NAME' (wildcard section pattern ) with `--sort-sections ++ alignment' is equivalent to `SORT_BY_NAME' (`SORT_BY_ALIGNMENT' ++ (wildcard section pattern)). ++ ++ 2. `SORT_BY_ALIGNMENT' (wildcard section pattern) with ++ `--sort-section name' is equivalent to `SORT_BY_ALIGNMENT' ++ (`SORT_BY_NAME' (wildcard section pattern)). ++ ++ If the section sorting command in linker script is nested, the ++command line option will be ignored. ++ ++ If you ever get confused about where input sections are going, use ++the `-M' linker option to generate a map file. The map file shows ++precisely how input sections are mapped to output sections. ++ ++ This example shows how wildcard patterns might be used to partition ++files. This linker script directs the linker to place all `.text' ++sections in `.text' and all `.bss' sections in `.bss'. The linker will ++place the `.data' section from all files beginning with an upper case ++character in `.DATA'; for all other files, the linker will place the ++`.data' section in `.data'. ++ SECTIONS { ++ .text : { *(.text) } ++ .DATA : { [A-Z]*(.data) } ++ .data : { *(.data) } ++ .bss : { *(.bss) } ++ } ++ ++ ++File: ld.info, Node: Input Section Common, Next: Input Section Keep, Prev: Input Section Wildcards, Up: Input Section ++ ++3.6.4.3 Input Section for Common Symbols ++........................................ ++ ++A special notation is needed for common symbols, because in many object ++file formats common symbols do not have a particular input section. The ++linker treats common symbols as though they are in an input section ++named `COMMON'. ++ ++ You may use file names with the `COMMON' section just as with any ++other input sections. You can use this to place common symbols from a ++particular input file in one section while common symbols from other ++input files are placed in another section. ++ ++ In most cases, common symbols in input files will be placed in the ++`.bss' section in the output file. For example: ++ .bss { *(.bss) *(COMMON) } ++ ++ Some object file formats have more than one type of common symbol. ++For example, the MIPS ELF object file format distinguishes standard ++common symbols and small common symbols. In this case, the linker will ++use a different special section name for other types of common symbols. ++In the case of MIPS ELF, the linker uses `COMMON' for standard common ++symbols and `.scommon' for small common symbols. This permits you to ++map the different types of common symbols into memory at different ++locations. ++ ++ You will sometimes see `[COMMON]' in old linker scripts. This ++notation is now considered obsolete. It is equivalent to `*(COMMON)'. ++ ++ ++File: ld.info, Node: Input Section Keep, Next: Input Section Example, Prev: Input Section Common, Up: Input Section ++ ++3.6.4.4 Input Section and Garbage Collection ++............................................ ++ ++When link-time garbage collection is in use (`--gc-sections'), it is ++often useful to mark sections that should not be eliminated. This is ++accomplished by surrounding an input section's wildcard entry with ++`KEEP()', as in `KEEP(*(.init))' or `KEEP(SORT_BY_NAME(*)(.ctors))'. ++ ++ ++File: ld.info, Node: Input Section Example, Prev: Input Section Keep, Up: Input Section ++ ++3.6.4.5 Input Section Example ++............................. ++ ++The following example is a complete linker script. It tells the linker ++to read all of the sections from file `all.o' and place them at the ++start of output section `outputa' which starts at location `0x10000'. ++All of section `.input1' from file `foo.o' follows immediately, in the ++same output section. All of section `.input2' from `foo.o' goes into ++output section `outputb', followed by section `.input1' from `foo1.o'. ++All of the remaining `.input1' and `.input2' sections from any files ++are written to output section `outputc'. ++ ++ SECTIONS { ++ outputa 0x10000 : ++ { ++ all.o ++ foo.o (.input1) ++ } ++ outputb : ++ { ++ foo.o (.input2) ++ foo1.o (.input1) ++ } ++ outputc : ++ { ++ *(.input1) ++ *(.input2) ++ } ++ } ++ ++ ++File: ld.info, Node: Output Section Data, Next: Output Section Keywords, Prev: Input Section, Up: SECTIONS ++ ++3.6.5 Output Section Data ++------------------------- ++ ++You can include explicit bytes of data in an output section by using ++`BYTE', `SHORT', `LONG', `QUAD', or `SQUAD' as an output section ++command. Each keyword is followed by an expression in parentheses ++providing the value to store (*note Expressions::). The value of the ++expression is stored at the current value of the location counter. ++ ++ The `BYTE', `SHORT', `LONG', and `QUAD' commands store one, two, ++four, and eight bytes (respectively). After storing the bytes, the ++location counter is incremented by the number of bytes stored. ++ ++ For example, this will store the byte 1 followed by the four byte ++value of the symbol `addr': ++ BYTE(1) ++ LONG(addr) ++ ++ When using a 64 bit host or target, `QUAD' and `SQUAD' are the same; ++they both store an 8 byte, or 64 bit, value. When both host and target ++are 32 bits, an expression is computed as 32 bits. In this case `QUAD' ++stores a 32 bit value zero extended to 64 bits, and `SQUAD' stores a 32 ++bit value sign extended to 64 bits. ++ ++ If the object file format of the output file has an explicit ++endianness, which is the normal case, the value will be stored in that ++endianness. When the object file format does not have an explicit ++endianness, as is true of, for example, S-records, the value will be ++stored in the endianness of the first input object file. ++ ++ Note--these commands only work inside a section description and not ++between them, so the following will produce an error from the linker: ++ SECTIONS { .text : { *(.text) } LONG(1) .data : { *(.data) } } ++ whereas this will work: ++ SECTIONS { .text : { *(.text) ; LONG(1) } .data : { *(.data) } } ++ ++ You may use the `FILL' command to set the fill pattern for the ++current section. It is followed by an expression in parentheses. Any ++otherwise unspecified regions of memory within the section (for example, ++gaps left due to the required alignment of input sections) are filled ++with the value of the expression, repeated as necessary. A `FILL' ++statement covers memory locations after the point at which it occurs in ++the section definition; by including more than one `FILL' statement, ++you can have different fill patterns in different parts of an output ++section. ++ ++ This example shows how to fill unspecified regions of memory with the ++value `0x90': ++ FILL(0x90909090) ++ ++ The `FILL' command is similar to the `=FILLEXP' output section ++attribute, but it only affects the part of the section following the ++`FILL' command, rather than the entire section. If both are used, the ++`FILL' command takes precedence. *Note Output Section Fill::, for ++details on the fill expression. ++ ++ ++File: ld.info, Node: Output Section Keywords, Next: Output Section Discarding, Prev: Output Section Data, Up: SECTIONS ++ ++3.6.6 Output Section Keywords ++----------------------------- ++ ++There are a couple of keywords which can appear as output section ++commands. ++ ++`CREATE_OBJECT_SYMBOLS' ++ The command tells the linker to create a symbol for each input ++ file. The name of each symbol will be the name of the ++ corresponding input file. The section of each symbol will be the ++ output section in which the `CREATE_OBJECT_SYMBOLS' command ++ appears. ++ ++ This is conventional for the a.out object file format. It is not ++ normally used for any other object file format. ++ ++`CONSTRUCTORS' ++ When linking using the a.out object file format, the linker uses an ++ unusual set construct to support C++ global constructors and ++ destructors. When linking object file formats which do not support ++ arbitrary sections, such as ECOFF and XCOFF, the linker will ++ automatically recognize C++ global constructors and destructors by ++ name. For these object file formats, the `CONSTRUCTORS' command ++ tells the linker to place constructor information in the output ++ section where the `CONSTRUCTORS' command appears. The ++ `CONSTRUCTORS' command is ignored for other object file formats. ++ ++ The symbol `__CTOR_LIST__' marks the start of the global ++ constructors, and the symbol `__CTOR_END__' marks the end. ++ Similarly, `__DTOR_LIST__' and `__DTOR_END__' mark the start and ++ end of the global destructors. The first word in the list is the ++ number of entries, followed by the address of each constructor or ++ destructor, followed by a zero word. The compiler must arrange to ++ actually run the code. For these object file formats GNU C++ ++ normally calls constructors from a subroutine `__main'; a call to ++ `__main' is automatically inserted into the startup code for ++ `main'. GNU C++ normally runs destructors either by using ++ `atexit', or directly from the function `exit'. ++ ++ For object file formats such as `COFF' or `ELF' which support ++ arbitrary section names, GNU C++ will normally arrange to put the ++ addresses of global constructors and destructors into the `.ctors' ++ and `.dtors' sections. Placing the following sequence into your ++ linker script will build the sort of table which the GNU C++ ++ runtime code expects to see. ++ ++ __CTOR_LIST__ = .; ++ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) ++ *(.ctors) ++ LONG(0) ++ __CTOR_END__ = .; ++ __DTOR_LIST__ = .; ++ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) ++ *(.dtors) ++ LONG(0) ++ __DTOR_END__ = .; ++ ++ If you are using the GNU C++ support for initialization priority, ++ which provides some control over the order in which global ++ constructors are run, you must sort the constructors at link time ++ to ensure that they are executed in the correct order. When using ++ the `CONSTRUCTORS' command, use `SORT_BY_NAME(CONSTRUCTORS)' ++ instead. When using the `.ctors' and `.dtors' sections, use ++ `*(SORT_BY_NAME(.ctors))' and `*(SORT_BY_NAME(.dtors))' instead of ++ just `*(.ctors)' and `*(.dtors)'. ++ ++ Normally the compiler and linker will handle these issues ++ automatically, and you will not need to concern yourself with ++ them. However, you may need to consider this if you are using C++ ++ and writing your own linker scripts. ++ ++ ++ ++File: ld.info, Node: Output Section Discarding, Next: Output Section Attributes, Prev: Output Section Keywords, Up: SECTIONS ++ ++3.6.7 Output Section Discarding ++------------------------------- ++ ++The linker will not create output section which do not have any ++contents. This is for convenience when referring to input sections that ++may or may not be present in any of the input files. For example: ++ .foo { *(.foo) } ++ will only create a `.foo' section in the output file if there is a ++`.foo' section in at least one input file. ++ ++ If you use anything other than an input section description as an ++output section command, such as a symbol assignment, then the output ++section will always be created, even if there are no matching input ++sections. ++ ++ The special output section name `/DISCARD/' may be used to discard ++input sections. Any input sections which are assigned to an output ++section named `/DISCARD/' are not included in the output file. ++ ++ ++File: ld.info, Node: Output Section Attributes, Next: Overlay Description, Prev: Output Section Discarding, Up: SECTIONS ++ ++3.6.8 Output Section Attributes ++------------------------------- ++ ++We showed above that the full description of an output section looked ++like this: ++ SECTION [ADDRESS] [(TYPE)] : ++ [AT(LMA)] [ALIGN(SECTION_ALIGN)] [SUBALIGN(SUBSECTION_ALIGN)] ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [>REGION] [AT>LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP] ++We've already described SECTION, ADDRESS, and ++OUTPUT-SECTION-COMMAND. In this section we will describe the remaining ++section attributes. ++ ++* Menu: ++ ++* Output Section Type:: Output section type ++* Output Section LMA:: Output section LMA ++* Forced Output Alignment:: Forced Output Alignment ++* Forced Input Alignment:: Forced Input Alignment ++* Output Section Region:: Output section region ++* Output Section Phdr:: Output section phdr ++* Output Section Fill:: Output section fill ++ ++ ++File: ld.info, Node: Output Section Type, Next: Output Section LMA, Up: Output Section Attributes ++ ++3.6.8.1 Output Section Type ++........................... ++ ++Each output section may have a type. The type is a keyword in ++parentheses. The following types are defined: ++ ++`NOLOAD' ++ The section should be marked as not loadable, so that it will not ++ be loaded into memory when the program is run. ++ ++`DSECT' ++`COPY' ++`INFO' ++`OVERLAY' ++ These type names are supported for backward compatibility, and are ++ rarely used. They all have the same effect: the section should be ++ marked as not allocatable, so that no memory is allocated for the ++ section when the program is run. ++ ++ The linker normally sets the attributes of an output section based on ++the input sections which map into it. You can override this by using ++the section type. For example, in the script sample below, the `ROM' ++section is addressed at memory location `0' and does not need to be ++loaded when the program is run. The contents of the `ROM' section will ++appear in the linker output file as usual. ++ SECTIONS { ++ ROM 0 (NOLOAD) : { ... } ++ ... ++ } ++ ++ ++File: ld.info, Node: Output Section LMA, Next: Forced Output Alignment, Prev: Output Section Type, Up: Output Section Attributes ++ ++3.6.8.2 Output Section LMA ++.......................... ++ ++Every section has a virtual address (VMA) and a load address (LMA); see ++*Note Basic Script Concepts::. The address expression which may appear ++in an output section description sets the VMA (*note Output Section ++Address::). ++ ++ The linker will normally set the LMA equal to the VMA. You can ++change that by using the `AT' keyword. The expression LMA that follows ++the `AT' keyword specifies the load address of the section. ++ ++ Alternatively, with `AT>LMA_REGION' expression, you may specify a ++memory region for the section's load address. *Note MEMORY::. Note ++that if the section has not had a VMA assigned to it then the linker ++will use the LMA_REGION as the VMA region as well. *Note Output ++Section Region::. ++ ++ This feature is designed to make it easy to build a ROM image. For ++example, the following linker script creates three output sections: one ++called `.text', which starts at `0x1000', one called `.mdata', which is ++loaded at the end of the `.text' section even though its VMA is ++`0x2000', and one called `.bss' to hold uninitialized data at address ++`0x3000'. The symbol `_data' is defined with the value `0x2000', which ++shows that the location counter holds the VMA value, not the LMA value. ++ ++ SECTIONS ++ { ++ .text 0x1000 : { *(.text) _etext = . ; } ++ .mdata 0x2000 : ++ AT ( ADDR (.text) + SIZEOF (.text) ) ++ { _data = . ; *(.data); _edata = . ; } ++ .bss 0x3000 : ++ { _bstart = . ; *(.bss) *(COMMON) ; _bend = . ;} ++ } ++ ++ The run-time initialization code for use with a program generated ++with this linker script would include something like the following, to ++copy the initialized data from the ROM image to its runtime address. ++Notice how this code takes advantage of the symbols defined by the ++linker script. ++ ++ extern char _etext, _data, _edata, _bstart, _bend; ++ char *src = &_etext; ++ char *dst = &_data; ++ ++ /* ROM has data at end of text; copy it. */ ++ while (dst < &_edata) { ++ *dst++ = *src++; ++ } ++ ++ /* Zero bss */ ++ for (dst = &_bstart; dst< &_bend; dst++) ++ *dst = 0; ++ ++ ++File: ld.info, Node: Forced Output Alignment, Next: Forced Input Alignment, Prev: Output Section LMA, Up: Output Section Attributes ++ ++3.6.8.3 Forced Output Alignment ++............................... ++ ++You can increase an output section's alignment by using ALIGN. ++ ++ ++File: ld.info, Node: Forced Input Alignment, Next: Output Section Region, Prev: Forced Output Alignment, Up: Output Section Attributes ++ ++3.6.8.4 Forced Input Alignment ++.............................. ++ ++You can force input section alignment within an output section by using ++SUBALIGN. The value specified overrides any alignment given by input ++sections, whether larger or smaller. ++ ++ ++File: ld.info, Node: Output Section Region, Next: Output Section Phdr, Prev: Forced Input Alignment, Up: Output Section Attributes ++ ++3.6.8.5 Output Section Region ++............................. ++ ++You can assign a section to a previously defined region of memory by ++using `>REGION'. *Note MEMORY::. ++ ++ Here is a simple example: ++ MEMORY { rom : ORIGIN = 0x1000, LENGTH = 0x1000 } ++ SECTIONS { ROM : { *(.text) } >rom } ++ ++ ++File: ld.info, Node: Output Section Phdr, Next: Output Section Fill, Prev: Output Section Region, Up: Output Section Attributes ++ ++3.6.8.6 Output Section Phdr ++........................... ++ ++You can assign a section to a previously defined program segment by ++using `:PHDR'. *Note PHDRS::. If a section is assigned to one or more ++segments, then all subsequent allocated sections will be assigned to ++those segments as well, unless they use an explicitly `:PHDR' modifier. ++You can use `:NONE' to tell the linker to not put the section in any ++segment at all. ++ ++ Here is a simple example: ++ PHDRS { text PT_LOAD ; } ++ SECTIONS { .text : { *(.text) } :text } ++ ++ ++File: ld.info, Node: Output Section Fill, Prev: Output Section Phdr, Up: Output Section Attributes ++ ++3.6.8.7 Output Section Fill ++........................... ++ ++You can set the fill pattern for an entire section by using `=FILLEXP'. ++FILLEXP is an expression (*note Expressions::). Any otherwise ++unspecified regions of memory within the output section (for example, ++gaps left due to the required alignment of input sections) will be ++filled with the value, repeated as necessary. If the fill expression ++is a simple hex number, ie. a string of hex digit starting with `0x' ++and without a trailing `k' or `M', then an arbitrarily long sequence of ++hex digits can be used to specify the fill pattern; Leading zeros ++become part of the pattern too. For all other cases, including extra ++parentheses or a unary `+', the fill pattern is the four least ++significant bytes of the value of the expression. In all cases, the ++number is big-endian. ++ ++ You can also change the fill value with a `FILL' command in the ++output section commands; (*note Output Section Data::). ++ ++ Here is a simple example: ++ SECTIONS { .text : { *(.text) } =0x90909090 } ++ ++ ++File: ld.info, Node: Overlay Description, Prev: Output Section Attributes, Up: SECTIONS ++ ++3.6.9 Overlay Description ++------------------------- ++ ++An overlay description provides an easy way to describe sections which ++are to be loaded as part of a single memory image but are to be run at ++the same memory address. At run time, some sort of overlay manager will ++copy the overlaid sections in and out of the runtime memory address as ++required, perhaps by simply manipulating addressing bits. This approach ++can be useful, for example, when a certain region of memory is faster ++than another. ++ ++ Overlays are described using the `OVERLAY' command. The `OVERLAY' ++command is used within a `SECTIONS' command, like an output section ++description. The full syntax of the `OVERLAY' command is as follows: ++ OVERLAY [START] : [NOCROSSREFS] [AT ( LDADDR )] ++ { ++ SECNAME1 ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [:PHDR...] [=FILL] ++ SECNAME2 ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [:PHDR...] [=FILL] ++ ... ++ } [>REGION] [:PHDR...] [=FILL] ++ ++ Everything is optional except `OVERLAY' (a keyword), and each ++section must have a name (SECNAME1 and SECNAME2 above). The section ++definitions within the `OVERLAY' construct are identical to those ++within the general `SECTIONS' contruct (*note SECTIONS::), except that ++no addresses and no memory regions may be defined for sections within ++an `OVERLAY'. ++ ++ The sections are all defined with the same starting address. The ++load addresses of the sections are arranged such that they are ++consecutive in memory starting at the load address used for the ++`OVERLAY' as a whole (as with normal section definitions, the load ++address is optional, and defaults to the start address; the start ++address is also optional, and defaults to the current value of the ++location counter). ++ ++ If the `NOCROSSREFS' keyword is used, and there any references among ++the sections, the linker will report an error. Since the sections all ++run at the same address, it normally does not make sense for one ++section to refer directly to another. *Note NOCROSSREFS: Miscellaneous ++Commands. ++ ++ For each section within the `OVERLAY', the linker automatically ++defines two symbols. The symbol `__load_start_SECNAME' is defined as ++the starting load address of the section. The symbol ++`__load_stop_SECNAME' is defined as the final load address of the ++section. Any characters within SECNAME which are not legal within C ++identifiers are removed. C (or assembler) code may use these symbols ++to move the overlaid sections around as necessary. ++ ++ At the end of the overlay, the value of the location counter is set ++to the start address of the overlay plus the size of the largest ++section. ++ ++ Here is an example. Remember that this would appear inside a ++`SECTIONS' construct. ++ OVERLAY 0x1000 : AT (0x4000) ++ { ++ .text0 { o1/*.o(.text) } ++ .text1 { o2/*.o(.text) } ++ } ++This will define both `.text0' and `.text1' to start at address ++0x1000. `.text0' will be loaded at address 0x4000, and `.text1' will ++be loaded immediately after `.text0'. The following symbols will be ++defined: `__load_start_text0', `__load_stop_text0', ++`__load_start_text1', `__load_stop_text1'. ++ ++ C code to copy overlay `.text1' into the overlay area might look ++like the following. ++ ++ extern char __load_start_text1, __load_stop_text1; ++ memcpy ((char *) 0x1000, &__load_start_text1, ++ &__load_stop_text1 - &__load_start_text1); ++ ++ Note that the `OVERLAY' command is just syntactic sugar, since ++everything it does can be done using the more basic commands. The above ++example could have been written identically as follows. ++ ++ .text0 0x1000 : AT (0x4000) { o1/*.o(.text) } ++ __load_start_text0 = LOADADDR (.text0); ++ __load_stop_text0 = LOADADDR (.text0) + SIZEOF (.text0); ++ .text1 0x1000 : AT (0x4000 + SIZEOF (.text0)) { o2/*.o(.text) } ++ __load_start_text1 = LOADADDR (.text1); ++ __load_stop_text1 = LOADADDR (.text1) + SIZEOF (.text1); ++ . = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1)); ++ ++ ++File: ld.info, Node: MEMORY, Next: PHDRS, Prev: SECTIONS, Up: Scripts ++ ++3.7 MEMORY Command ++================== ++ ++The linker's default configuration permits allocation of all available ++memory. You can override this by using the `MEMORY' command. ++ ++ The `MEMORY' command describes the location and size of blocks of ++memory in the target. You can use it to describe which memory regions ++may be used by the linker, and which memory regions it must avoid. You ++can then assign sections to particular memory regions. The linker will ++set section addresses based on the memory regions, and will warn about ++regions that become too full. The linker will not shuffle sections ++around to fit into the available regions. ++ ++ A linker script may contain at most one use of the `MEMORY' command. ++However, you can define as many blocks of memory within it as you ++wish. The syntax is: ++ MEMORY ++ { ++ NAME [(ATTR)] : ORIGIN = ORIGIN, LENGTH = LEN ++ ... ++ } ++ ++ The NAME is a name used in the linker script to refer to the region. ++The region name has no meaning outside of the linker script. Region ++names are stored in a separate name space, and will not conflict with ++symbol names, file names, or section names. Each memory region must ++have a distinct name. ++ ++ The ATTR string is an optional list of attributes that specify ++whether to use a particular memory region for an input section which is ++not explicitly mapped in the linker script. As described in *Note ++SECTIONS::, if you do not specify an output section for some input ++section, the linker will create an output section with the same name as ++the input section. If you define region attributes, the linker will use ++them to select the memory region for the output section that it creates. ++ ++ The ATTR string must consist only of the following characters: ++`R' ++ Read-only section ++ ++`W' ++ Read/write section ++ ++`X' ++ Executable section ++ ++`A' ++ Allocatable section ++ ++`I' ++ Initialized section ++ ++`L' ++ Same as `I' ++ ++`!' ++ Invert the sense of any of the preceding attributes ++ ++ If a unmapped section matches any of the listed attributes other than ++`!', it will be placed in the memory region. The `!' attribute ++reverses this test, so that an unmapped section will be placed in the ++memory region only if it does not match any of the listed attributes. ++ ++ The ORIGIN is an numerical expression for the start address of the ++memory region. The expression must evaluate to a constant and it ++cannot involve any symbols. The keyword `ORIGIN' may be abbreviated to ++`org' or `o' (but not, for example, `ORG'). ++ ++ The LEN is an expression for the size in bytes of the memory region. ++As with the ORIGIN expression, the expression must be numerical only ++and must evaluate to a constant. The keyword `LENGTH' may be ++abbreviated to `len' or `l'. ++ ++ In the following example, we specify that there are two memory ++regions available for allocation: one starting at `0' for 256 kilobytes, ++and the other starting at `0x40000000' for four megabytes. The linker ++will place into the `rom' memory region every section which is not ++explicitly mapped into a memory region, and is either read-only or ++executable. The linker will place other sections which are not ++explicitly mapped into a memory region into the `ram' memory region. ++ ++ MEMORY ++ { ++ rom (rx) : ORIGIN = 0, LENGTH = 256K ++ ram (!rx) : org = 0x40000000, l = 4M ++ } ++ ++ Once you define a memory region, you can direct the linker to place ++specific output sections into that memory region by using the `>REGION' ++output section attribute. For example, if you have a memory region ++named `mem', you would use `>mem' in the output section definition. ++*Note Output Section Region::. If no address was specified for the ++output section, the linker will set the address to the next available ++address within the memory region. If the combined output sections ++directed to a memory region are too large for the region, the linker ++will issue an error message. ++ ++ It is possible to access the origin and length of a memory in an ++expression via the `ORIGIN(MEMORY)' and `LENGTH(MEMORY)' functions: ++ ++ _fstack = ORIGIN(ram) + LENGTH(ram) - 4; ++ ++ ++File: ld.info, Node: PHDRS, Next: VERSION, Prev: MEMORY, Up: Scripts ++ ++3.8 PHDRS Command ++================= ++ ++The ELF object file format uses "program headers", also knows as ++"segments". The program headers describe how the program should be ++loaded into memory. You can print them out by using the `objdump' ++program with the `-p' option. ++ ++ When you run an ELF program on a native ELF system, the system loader ++reads the program headers in order to figure out how to load the ++program. This will only work if the program headers are set correctly. ++This manual does not describe the details of how the system loader ++interprets program headers; for more information, see the ELF ABI. ++ ++ The linker will create reasonable program headers by default. ++However, in some cases, you may need to specify the program headers more ++precisely. You may use the `PHDRS' command for this purpose. When the ++linker sees the `PHDRS' command in the linker script, it will not ++create any program headers other than the ones specified. ++ ++ The linker only pays attention to the `PHDRS' command when ++generating an ELF output file. In other cases, the linker will simply ++ignore `PHDRS'. ++ ++ This is the syntax of the `PHDRS' command. The words `PHDRS', ++`FILEHDR', `AT', and `FLAGS' are keywords. ++ ++ PHDRS ++ { ++ NAME TYPE [ FILEHDR ] [ PHDRS ] [ AT ( ADDRESS ) ] ++ [ FLAGS ( FLAGS ) ] ; ++ } ++ ++ The NAME is used only for reference in the `SECTIONS' command of the ++linker script. It is not put into the output file. Program header ++names are stored in a separate name space, and will not conflict with ++symbol names, file names, or section names. Each program header must ++have a distinct name. ++ ++ Certain program header types describe segments of memory which the ++system loader will load from the file. In the linker script, you ++specify the contents of these segments by placing allocatable output ++sections in the segments. You use the `:PHDR' output section attribute ++to place a section in a particular segment. *Note Output Section ++Phdr::. ++ ++ It is normal to put certain sections in more than one segment. This ++merely implies that one segment of memory contains another. You may ++repeat `:PHDR', using it once for each segment which should contain the ++section. ++ ++ If you place a section in one or more segments using `:PHDR', then ++the linker will place all subsequent allocatable sections which do not ++specify `:PHDR' in the same segments. This is for convenience, since ++generally a whole set of contiguous sections will be placed in a single ++segment. You can use `:NONE' to override the default segment and tell ++the linker to not put the section in any segment at all. ++ ++ You may use the `FILEHDR' and `PHDRS' keywords appear after the ++program header type to further describe the contents of the segment. ++The `FILEHDR' keyword means that the segment should include the ELF ++file header. The `PHDRS' keyword means that the segment should include ++the ELF program headers themselves. ++ ++ The TYPE may be one of the following. The numbers indicate the ++value of the keyword. ++ ++`PT_NULL' (0) ++ Indicates an unused program header. ++ ++`PT_LOAD' (1) ++ Indicates that this program header describes a segment to be ++ loaded from the file. ++ ++`PT_DYNAMIC' (2) ++ Indicates a segment where dynamic linking information can be found. ++ ++`PT_INTERP' (3) ++ Indicates a segment where the name of the program interpreter may ++ be found. ++ ++`PT_NOTE' (4) ++ Indicates a segment holding note information. ++ ++`PT_SHLIB' (5) ++ A reserved program header type, defined but not specified by the ++ ELF ABI. ++ ++`PT_PHDR' (6) ++ Indicates a segment where the program headers may be found. ++ ++EXPRESSION ++ An expression giving the numeric type of the program header. This ++ may be used for types not defined above. ++ ++ You can specify that a segment should be loaded at a particular ++address in memory by using an `AT' expression. This is identical to the ++`AT' command used as an output section attribute (*note Output Section ++LMA::). The `AT' command for a program header overrides the output ++section attribute. ++ ++ The linker will normally set the segment flags based on the sections ++which comprise the segment. You may use the `FLAGS' keyword to ++explicitly specify the segment flags. The value of FLAGS must be an ++integer. It is used to set the `p_flags' field of the program header. ++ ++ Here is an example of `PHDRS'. This shows a typical set of program ++headers used on a native ELF system. ++ ++ PHDRS ++ { ++ headers PT_PHDR PHDRS ; ++ interp PT_INTERP ; ++ text PT_LOAD FILEHDR PHDRS ; ++ data PT_LOAD ; ++ dynamic PT_DYNAMIC ; ++ } ++ ++ SECTIONS ++ { ++ . = SIZEOF_HEADERS; ++ .interp : { *(.interp) } :text :interp ++ .text : { *(.text) } :text ++ .rodata : { *(.rodata) } /* defaults to :text */ ++ ... ++ . = . + 0x1000; /* move to a new page in memory */ ++ .data : { *(.data) } :data ++ .dynamic : { *(.dynamic) } :data :dynamic ++ ... ++ } ++ ++ ++File: ld.info, Node: VERSION, Next: Expressions, Prev: PHDRS, Up: Scripts ++ ++3.9 VERSION Command ++=================== ++ ++The linker supports symbol versions when using ELF. Symbol versions are ++only useful when using shared libraries. The dynamic linker can use ++symbol versions to select a specific version of a function when it runs ++a program that may have been linked against an earlier version of the ++shared library. ++ ++ You can include a version script directly in the main linker script, ++or you can supply the version script as an implicit linker script. You ++can also use the `--version-script' linker option. ++ ++ The syntax of the `VERSION' command is simply ++ VERSION { version-script-commands } ++ ++ The format of the version script commands is identical to that used ++by Sun's linker in Solaris 2.5. The version script defines a tree of ++version nodes. You specify the node names and interdependencies in the ++version script. You can specify which symbols are bound to which ++version nodes, and you can reduce a specified set of symbols to local ++scope so that they are not globally visible outside of the shared ++library. ++ ++ The easiest way to demonstrate the version script language is with a ++few examples. ++ ++ VERS_1.1 { ++ global: ++ foo1; ++ local: ++ old*; ++ original*; ++ new*; ++ }; ++ ++ VERS_1.2 { ++ foo2; ++ } VERS_1.1; ++ ++ VERS_2.0 { ++ bar1; bar2; ++ extern "C++" { ++ ns::*; ++ "int f(int, double)"; ++ } ++ } VERS_1.2; ++ ++ This example version script defines three version nodes. The first ++version node defined is `VERS_1.1'; it has no other dependencies. The ++script binds the symbol `foo1' to `VERS_1.1'. It reduces a number of ++symbols to local scope so that they are not visible outside of the ++shared library; this is done using wildcard patterns, so that any ++symbol whose name begins with `old', `original', or `new' is matched. ++The wildcard patterns available are the same as those used in the shell ++when matching filenames (also known as "globbing"). However, if you ++specify the symbol name inside double quotes, then the name is treated ++as literal, rather than as a glob pattern. ++ ++ Next, the version script defines node `VERS_1.2'. This node depends ++upon `VERS_1.1'. The script binds the symbol `foo2' to the version ++node `VERS_1.2'. ++ ++ Finally, the version script defines node `VERS_2.0'. This node ++depends upon `VERS_1.2'. The scripts binds the symbols `bar1' and ++`bar2' are bound to the version node `VERS_2.0'. ++ ++ When the linker finds a symbol defined in a library which is not ++specifically bound to a version node, it will effectively bind it to an ++unspecified base version of the library. You can bind all otherwise ++unspecified symbols to a given version node by using `global: *;' ++somewhere in the version script. ++ ++ The names of the version nodes have no specific meaning other than ++what they might suggest to the person reading them. The `2.0' version ++could just as well have appeared in between `1.1' and `1.2'. However, ++this would be a confusing way to write a version script. ++ ++ Node name can be omited, provided it is the only version node in the ++version script. Such version script doesn't assign any versions to ++symbols, only selects which symbols will be globally visible out and ++which won't. ++ ++ { global: foo; bar; local: *; }; ++ ++ When you link an application against a shared library that has ++versioned symbols, the application itself knows which version of each ++symbol it requires, and it also knows which version nodes it needs from ++each shared library it is linked against. Thus at runtime, the dynamic ++loader can make a quick check to make sure that the libraries you have ++linked against do in fact supply all of the version nodes that the ++application will need to resolve all of the dynamic symbols. In this ++way it is possible for the dynamic linker to know with certainty that ++all external symbols that it needs will be resolvable without having to ++search for each symbol reference. ++ ++ The symbol versioning is in effect a much more sophisticated way of ++doing minor version checking that SunOS does. The fundamental problem ++that is being addressed here is that typically references to external ++functions are bound on an as-needed basis, and are not all bound when ++the application starts up. If a shared library is out of date, a ++required interface may be missing; when the application tries to use ++that interface, it may suddenly and unexpectedly fail. With symbol ++versioning, the user will get a warning when they start their program if ++the libraries being used with the application are too old. ++ ++ There are several GNU extensions to Sun's versioning approach. The ++first of these is the ability to bind a symbol to a version node in the ++source file where the symbol is defined instead of in the versioning ++script. This was done mainly to reduce the burden on the library ++maintainer. You can do this by putting something like: ++ __asm__(".symver original_foo,foo@VERS_1.1"); ++ in the C source file. This renames the function `original_foo' to ++be an alias for `foo' bound to the version node `VERS_1.1'. The ++`local:' directive can be used to prevent the symbol `original_foo' ++from being exported. A `.symver' directive takes precedence over a ++version script. ++ ++ The second GNU extension is to allow multiple versions of the same ++function to appear in a given shared library. In this way you can make ++an incompatible change to an interface without increasing the major ++version number of the shared library, while still allowing applications ++linked against the old interface to continue to function. ++ ++ To do this, you must use multiple `.symver' directives in the source ++file. Here is an example: ++ ++ __asm__(".symver original_foo,foo@"); ++ __asm__(".symver old_foo,foo@VERS_1.1"); ++ __asm__(".symver old_foo1,foo@VERS_1.2"); ++ __asm__(".symver new_foo,foo@@VERS_2.0"); ++ ++ In this example, `foo@' represents the symbol `foo' bound to the ++unspecified base version of the symbol. The source file that contains ++this example would define 4 C functions: `original_foo', `old_foo', ++`old_foo1', and `new_foo'. ++ ++ When you have multiple definitions of a given symbol, there needs to ++be some way to specify a default version to which external references to ++this symbol will be bound. You can do this with the `foo@@VERS_2.0' ++type of `.symver' directive. You can only declare one version of a ++symbol as the default in this manner; otherwise you would effectively ++have multiple definitions of the same symbol. ++ ++ If you wish to bind a reference to a specific version of the symbol ++within the shared library, you can use the aliases of convenience ++(i.e., `old_foo'), or you can use the `.symver' directive to ++specifically bind to an external version of the function in question. ++ ++ You can also specify the language in the version script: ++ ++ VERSION extern "lang" { version-script-commands } ++ ++ The supported `lang's are `C', `C++', and `Java'. The linker will ++iterate over the list of symbols at the link time and demangle them ++according to `lang' before matching them to the patterns specified in ++`version-script-commands'. ++ ++ Demangled names may contains spaces and other special characters. As ++described above, you can use a glob pattern to match demangled names, ++or you can use a double-quoted string to match the string exactly. In ++the latter case, be aware that minor differences (such as differing ++whitespace) between the version script and the demangler output will ++cause a mismatch. As the exact string generated by the demangler might ++change in the future, even if the mangled name does not, you should ++check that all of your version directives are behaving as you expect ++when you upgrade. ++ ++ ++File: ld.info, Node: Expressions, Next: Implicit Linker Scripts, Prev: VERSION, Up: Scripts ++ ++3.10 Expressions in Linker Scripts ++================================== ++ ++The syntax for expressions in the linker script language is identical to ++that of C expressions. All expressions are evaluated as integers. All ++expressions are evaluated in the same size, which is 32 bits if both the ++host and target are 32 bits, and is otherwise 64 bits. ++ ++ You can use and set symbol values in expressions. ++ ++ The linker defines several special purpose builtin functions for use ++in expressions. ++ ++* Menu: ++ ++* Constants:: Constants ++* Symbols:: Symbol Names ++* Orphan Sections:: Orphan Sections ++* Location Counter:: The Location Counter ++* Operators:: Operators ++* Evaluation:: Evaluation ++* Expression Section:: The Section of an Expression ++* Builtin Functions:: Builtin Functions ++ ++ ++File: ld.info, Node: Constants, Next: Symbols, Up: Expressions ++ ++3.10.1 Constants ++---------------- ++ ++All constants are integers. ++ ++ As in C, the linker considers an integer beginning with `0' to be ++octal, and an integer beginning with `0x' or `0X' to be hexadecimal. ++The linker considers other integers to be decimal. ++ ++ In addition, you can use the suffixes `K' and `M' to scale a ++constant by `1024' or `1024*1024' respectively. For example, the ++following all refer to the same quantity: ++ _fourk_1 = 4K; ++ _fourk_2 = 4096; ++ _fourk_3 = 0x1000; ++ ++ ++File: ld.info, Node: Symbols, Next: Orphan Sections, Prev: Constants, Up: Expressions ++ ++3.10.2 Symbol Names ++------------------- ++ ++Unless quoted, symbol names start with a letter, underscore, or period ++and may include letters, digits, underscores, periods, and hyphens. ++Unquoted symbol names must not conflict with any keywords. You can ++specify a symbol which contains odd characters or has the same name as a ++keyword by surrounding the symbol name in double quotes: ++ "SECTION" = 9; ++ "with a space" = "also with a space" + 10; ++ ++ Since symbols can contain many non-alphabetic characters, it is ++safest to delimit symbols with spaces. For example, `A-B' is one ++symbol, whereas `A - B' is an expression involving subtraction. ++ ++ ++File: ld.info, Node: Orphan Sections, Next: Location Counter, Prev: Symbols, Up: Expressions ++ ++3.10.3 Orphan Sections ++---------------------- ++ ++Orphan sections are sections present in the input files which are not ++explicitly placed into the output file by the linker script. The ++linker will still copy these sections into the output file, but it has ++to guess as to where they should be placed. The linker uses a simple ++heuristic to do this. It attempts to place orphan sections after ++non-orphan sections of the same attribute, such as code vs data, ++loadable vs non-loadable, etc. If there is not enough room to do this ++then it places at the end of the file. ++ ++ For ELF targets, the attribute of the section includes section type ++as well as section flag. ++ ++ ++File: ld.info, Node: Location Counter, Next: Operators, Prev: Orphan Sections, Up: Expressions ++ ++3.10.4 The Location Counter ++--------------------------- ++ ++The special linker variable "dot" `.' always contains the current ++output location counter. Since the `.' always refers to a location in ++an output section, it may only appear in an expression within a ++`SECTIONS' command. The `.' symbol may appear anywhere that an ++ordinary symbol is allowed in an expression. ++ ++ Assigning a value to `.' will cause the location counter to be ++moved. This may be used to create holes in the output section. The ++location counter may never be moved backwards. ++ ++ SECTIONS ++ { ++ output : ++ { ++ file1(.text) ++ . = . + 1000; ++ file2(.text) ++ . += 1000; ++ file3(.text) ++ } = 0x12345678; ++ } ++ In the previous example, the `.text' section from `file1' is located ++at the beginning of the output section `output'. It is followed by a ++1000 byte gap. Then the `.text' section from `file2' appears, also ++with a 1000 byte gap following before the `.text' section from `file3'. ++The notation `= 0x12345678' specifies what data to write in the gaps ++(*note Output Section Fill::). ++ ++ Note: `.' actually refers to the byte offset from the start of the ++current containing object. Normally this is the `SECTIONS' statement, ++whose start address is 0, hence `.' can be used as an absolute address. ++If `.' is used inside a section description however, it refers to the ++byte offset from the start of that section, not an absolute address. ++Thus in a script like this: ++ ++ SECTIONS ++ { ++ . = 0x100 ++ .text: { ++ *(.text) ++ . = 0x200 ++ } ++ . = 0x500 ++ .data: { ++ *(.data) ++ . += 0x600 ++ } ++ } ++ ++ The `.text' section will be assigned a starting address of 0x100 and ++a size of exactly 0x200 bytes, even if there is not enough data in the ++`.text' input sections to fill this area. (If there is too much data, ++an error will be produced because this would be an attempt to move `.' ++backwards). The `.data' section will start at 0x500 and it will have ++an extra 0x600 bytes worth of space after the end of the values from ++the `.data' input sections and before the end of the `.data' output ++section itself. ++ ++ Setting symbols to the value of the location counter outside of an ++output section statement can result in unexpected values if the linker ++needs to place orphan sections. For example, given the following: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ start_of_data = . ; ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ If the linker needs to place some input section, e.g. `.rodata', not ++mentioned in the script, it might choose to place that section between ++`.text' and `.data'. You might think the linker should place `.rodata' ++on the blank line in the above script, but blank lines are of no ++particular significance to the linker. As well, the linker doesn't ++associate the above symbol names with their sections. Instead, it ++assumes that all assignments or other statements belong to the previous ++output section, except for the special case of an assignment to `.'. ++I.e., the linker will place the orphan `.rodata' section as if the ++script was written as follows: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ start_of_data = . ; ++ .rodata: { *(.rodata) } ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ This may or may not be the script author's intention for the value of ++`start_of_data'. One way to influence the orphan section placement is ++to assign the location counter to itself, as the linker assumes that an ++assignment to `.' is setting the start address of a following output ++section and thus should be grouped with that section. So you could ++write: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ . = . ; ++ start_of_data = . ; ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ Now, the orphan `.rodata' section will be placed between ++`end_of_text' and `start_of_data'. ++ ++ ++File: ld.info, Node: Operators, Next: Evaluation, Prev: Location Counter, Up: Expressions ++ ++3.10.5 Operators ++---------------- ++ ++The linker recognizes the standard C set of arithmetic operators, with ++the standard bindings and precedence levels: ++ precedence associativity Operators Notes ++ (highest) ++ 1 left ! - ~ (1) ++ 2 left * / % ++ 3 left + - ++ 4 left >> << ++ 5 left == != > < <= >= ++ 6 left & ++ 7 left | ++ 8 left && ++ 9 left || ++ 10 right ? : ++ 11 right &= += -= *= /= (2) ++ (lowest) ++ Notes: (1) Prefix operators (2) *Note Assignments::. ++ ++ ++File: ld.info, Node: Evaluation, Next: Expression Section, Prev: Operators, Up: Expressions ++ ++3.10.6 Evaluation ++----------------- ++ ++The linker evaluates expressions lazily. It only computes the value of ++an expression when absolutely necessary. ++ ++ The linker needs some information, such as the value of the start ++address of the first section, and the origins and lengths of memory ++regions, in order to do any linking at all. These values are computed ++as soon as possible when the linker reads in the linker script. ++ ++ However, other values (such as symbol values) are not known or needed ++until after storage allocation. Such values are evaluated later, when ++other information (such as the sizes of output sections) is available ++for use in the symbol assignment expression. ++ ++ The sizes of sections cannot be known until after allocation, so ++assignments dependent upon these are not performed until after ++allocation. ++ ++ Some expressions, such as those depending upon the location counter ++`.', must be evaluated during section allocation. ++ ++ If the result of an expression is required, but the value is not ++available, then an error results. For example, a script like the ++following ++ SECTIONS ++ { ++ .text 9+this_isnt_constant : ++ { *(.text) } ++ } ++will cause the error message `non constant expression for initial ++address'. ++ ++ ++File: ld.info, Node: Expression Section, Next: Builtin Functions, Prev: Evaluation, Up: Expressions ++ ++3.10.7 The Section of an Expression ++----------------------------------- ++ ++When the linker evaluates an expression, the result is either absolute ++or relative to some section. A relative expression is expressed as a ++fixed offset from the base of a section. ++ ++ The position of the expression within the linker script determines ++whether it is absolute or relative. An expression which appears within ++an output section definition is relative to the base of the output ++section. An expression which appears elsewhere will be absolute. ++ ++ A symbol set to a relative expression will be relocatable if you ++request relocatable output using the `-r' option. That means that a ++further link operation may change the value of the symbol. The symbol's ++section will be the section of the relative expression. ++ ++ A symbol set to an absolute expression will retain the same value ++through any further link operation. The symbol will be absolute, and ++will not have any particular associated section. ++ ++ You can use the builtin function `ABSOLUTE' to force an expression ++to be absolute when it would otherwise be relative. For example, to ++create an absolute symbol set to the address of the end of the output ++section `.data': ++ SECTIONS ++ { ++ .data : { *(.data) _edata = ABSOLUTE(.); } ++ } ++ If `ABSOLUTE' were not used, `_edata' would be relative to the ++`.data' section. ++ ++ ++File: ld.info, Node: Builtin Functions, Prev: Expression Section, Up: Expressions ++ ++3.10.8 Builtin Functions ++------------------------ ++ ++The linker script language includes a number of builtin functions for ++use in linker script expressions. ++ ++`ABSOLUTE(EXP)' ++ Return the absolute (non-relocatable, as opposed to non-negative) ++ value of the expression EXP. Primarily useful to assign an ++ absolute value to a symbol within a section definition, where ++ symbol values are normally section relative. *Note Expression ++ Section::. ++ ++`ADDR(SECTION)' ++ Return the absolute address (the VMA) of the named SECTION. Your ++ script must previously have defined the location of that section. ++ In the following example, `symbol_1' and `symbol_2' are assigned ++ identical values: ++ SECTIONS { ... ++ .output1 : ++ { ++ start_of_output_1 = ABSOLUTE(.); ++ ... ++ } ++ .output : ++ { ++ symbol_1 = ADDR(.output1); ++ symbol_2 = start_of_output_1; ++ } ++ ... } ++ ++`ALIGN(ALIGN)' ++`ALIGN(EXP,ALIGN)' ++ Return the location counter (`.') or arbitrary expression aligned ++ to the next ALIGN boundary. The single operand `ALIGN' doesn't ++ change the value of the location counter--it just does arithmetic ++ on it. The two operand `ALIGN' allows an arbitrary expression to ++ be aligned upwards (`ALIGN(ALIGN)' is equivalent to `ALIGN(., ++ ALIGN)'). ++ ++ Here is an example which aligns the output `.data' section to the ++ next `0x2000' byte boundary after the preceding section and sets a ++ variable within the section to the next `0x8000' boundary after the ++ input sections: ++ SECTIONS { ... ++ .data ALIGN(0x2000): { ++ *(.data) ++ variable = ALIGN(0x8000); ++ } ++ ... } ++ The first use of `ALIGN' in this example specifies the ++ location of a section because it is used as the optional ADDRESS ++ attribute of a section definition (*note Output Section ++ Address::). The second use of `ALIGN' is used to defines the ++ value of a symbol. ++ ++ The builtin function `NEXT' is closely related to `ALIGN'. ++ ++`BLOCK(EXP)' ++ This is a synonym for `ALIGN', for compatibility with older linker ++ scripts. It is most often seen when setting the address of an ++ output section. ++ ++`DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE)' ++ This is equivalent to either ++ (ALIGN(MAXPAGESIZE) + (. & (MAXPAGESIZE - 1))) ++ or ++ (ALIGN(MAXPAGESIZE) + (. & (MAXPAGESIZE - COMMONPAGESIZE))) ++ depending on whether the latter uses fewer COMMONPAGESIZE sized ++ pages for the data segment (area between the result of this ++ expression and `DATA_SEGMENT_END') than the former or not. If the ++ latter form is used, it means COMMONPAGESIZE bytes of runtime ++ memory will be saved at the expense of up to COMMONPAGESIZE wasted ++ bytes in the on-disk file. ++ ++ This expression can only be used directly in `SECTIONS' commands, ++ not in any output section descriptions and only once in the linker ++ script. COMMONPAGESIZE should be less or equal to MAXPAGESIZE and ++ should be the system page size the object wants to be optimized ++ for (while still working on system page sizes up to MAXPAGESIZE). ++ ++ Example: ++ . = DATA_SEGMENT_ALIGN(0x10000, 0x2000); ++ ++`DATA_SEGMENT_END(EXP)' ++ This defines the end of data segment for `DATA_SEGMENT_ALIGN' ++ evaluation purposes. ++ ++ . = DATA_SEGMENT_END(.); ++ ++`DATA_SEGMENT_RELRO_END(OFFSET, EXP)' ++ This defines the end of the `PT_GNU_RELRO' segment when `-z relro' ++ option is used. Second argument is returned. When `-z relro' ++ option is not present, `DATA_SEGMENT_RELRO_END' does nothing, ++ otherwise `DATA_SEGMENT_ALIGN' is padded so that EXP + OFFSET is ++ aligned to the most commonly used page boundary for particular ++ target. If present in the linker script, it must always come in ++ between `DATA_SEGMENT_ALIGN' and `DATA_SEGMENT_END'. ++ ++ . = DATA_SEGMENT_RELRO_END(24, .); ++ ++`DEFINED(SYMBOL)' ++ Return 1 if SYMBOL is in the linker global symbol table and is ++ defined before the statement using DEFINED in the script, otherwise ++ return 0. You can use this function to provide default values for ++ symbols. For example, the following script fragment shows how to ++ set a global symbol `begin' to the first location in the `.text' ++ section--but if a symbol called `begin' already existed, its value ++ is preserved: ++ ++ SECTIONS { ... ++ .text : { ++ begin = DEFINED(begin) ? begin : . ; ++ ... ++ } ++ ... ++ } ++ ++`LENGTH(MEMORY)' ++ Return the length of the memory region named MEMORY. ++ ++`LOADADDR(SECTION)' ++ Return the absolute LMA of the named SECTION. This is normally ++ the same as `ADDR', but it may be different if the `AT' attribute ++ is used in the output section definition (*note Output Section ++ LMA::). ++ ++`MAX(EXP1, EXP2)' ++ Returns the maximum of EXP1 and EXP2. ++ ++`MIN(EXP1, EXP2)' ++ Returns the minimum of EXP1 and EXP2. ++ ++`NEXT(EXP)' ++ Return the next unallocated address that is a multiple of EXP. ++ This function is closely related to `ALIGN(EXP)'; unless you use ++ the `MEMORY' command to define discontinuous memory for the output ++ file, the two functions are equivalent. ++ ++`ORIGIN(MEMORY)' ++ Return the origin of the memory region named MEMORY. ++ ++`SEGMENT_START(SEGMENT, DEFAULT)' ++ Return the base address of the named SEGMENT. If an explicit ++ value has been given for this segment (with a command-line `-T' ++ option) that value will be returned; otherwise the value will be ++ DEFAULT. At present, the `-T' command-line option can only be ++ used to set the base address for the "text", "data", and "bss" ++ sections, but you use `SEGMENT_START' with any segment name. ++ ++`SIZEOF(SECTION)' ++ Return the size in bytes of the named SECTION, if that section has ++ been allocated. If the section has not been allocated when this is ++ evaluated, the linker will report an error. In the following ++ example, `symbol_1' and `symbol_2' are assigned identical values: ++ SECTIONS{ ... ++ .output { ++ .start = . ; ++ ... ++ .end = . ; ++ } ++ symbol_1 = .end - .start ; ++ symbol_2 = SIZEOF(.output); ++ ... } ++ ++`SIZEOF_HEADERS' ++`sizeof_headers' ++ Return the size in bytes of the output file's headers. This is ++ information which appears at the start of the output file. You ++ can use this number when setting the start address of the first ++ section, if you choose, to facilitate paging. ++ ++ When producing an ELF output file, if the linker script uses the ++ `SIZEOF_HEADERS' builtin function, the linker must compute the ++ number of program headers before it has determined all the section ++ addresses and sizes. If the linker later discovers that it needs ++ additional program headers, it will report an error `not enough ++ room for program headers'. To avoid this error, you must avoid ++ using the `SIZEOF_HEADERS' function, or you must rework your linker ++ script to avoid forcing the linker to use additional program ++ headers, or you must define the program headers yourself using the ++ `PHDRS' command (*note PHDRS::). ++ ++ ++File: ld.info, Node: Implicit Linker Scripts, Prev: Expressions, Up: Scripts ++ ++3.11 Implicit Linker Scripts ++============================ ++ ++If you specify a linker input file which the linker can not recognize as ++an object file or an archive file, it will try to read the file as a ++linker script. If the file can not be parsed as a linker script, the ++linker will report an error. ++ ++ An implicit linker script will not replace the default linker script. ++ ++ Typically an implicit linker script would contain only symbol ++assignments, or the `INPUT', `GROUP', or `VERSION' commands. ++ ++ Any input files read because of an implicit linker script will be ++read at the position in the command line where the implicit linker ++script was read. This can affect archive searching. ++ ++ ++File: ld.info, Node: Machine Dependent, Next: BFD, Prev: Scripts, Up: Top ++ ++4 Machine Dependent Features ++**************************** ++ ++`ld' has additional features on some platforms; the following sections ++describe them. Machines where `ld' has no additional functionality are ++not listed. ++ ++* Menu: ++ ++ ++* H8/300:: `ld' and the H8/300 ++ ++* i960:: `ld' and the Intel 960 family ++ ++* ARM:: `ld' and the ARM family ++ ++* HPPA ELF32:: `ld' and HPPA 32-bit ELF ++ ++* MMIX:: `ld' and MMIX ++ ++* MSP430:: `ld' and MSP430 ++ ++* PowerPC ELF32:: `ld' and PowerPC 32-bit ELF Support ++ ++* PowerPC64 ELF64:: `ld' and PowerPC64 64-bit ELF Support ++ ++* TI COFF:: `ld' and TI COFF ++ ++* WIN32:: `ld' and WIN32 (cygwin/mingw) ++ ++* Xtensa:: `ld' and Xtensa Processors ++ ++ ++File: ld.info, Node: H8/300, Next: i960, Up: Machine Dependent ++ ++4.1 `ld' and the H8/300 ++======================= ++ ++For the H8/300, `ld' can perform these global optimizations when you ++specify the `--relax' command-line option. ++ ++_relaxing address modes_ ++ `ld' finds all `jsr' and `jmp' instructions whose targets are ++ within eight bits, and turns them into eight-bit program-counter ++ relative `bsr' and `bra' instructions, respectively. ++ ++_synthesizing instructions_ ++ `ld' finds all `mov.b' instructions which use the sixteen-bit ++ absolute address form, but refer to the top page of memory, and ++ changes them to use the eight-bit address form. (That is: the ++ linker turns `mov.b `@'AA:16' into `mov.b `@'AA:8' whenever the ++ address AA is in the top page of memory). ++ ++_bit manipulation instructions_ ++ `ld' finds all bit manipulation instructions like `band, bclr, ++ biand, bild, bior, bist, bixor, bld, bnot, bor, bset, bst, btst, ++ bxor' which use 32 bit and 16 bit absolute address form, but refer ++ to the top page of memory, and changes them to use the 8 bit ++ address form. (That is: the linker turns `bset #xx:3,`@'AA:32' ++ into `bset #xx:3,`@'AA:8' whenever the address AA is in the top ++ page of memory). ++ ++_system control instructions_ ++ `ld' finds all `ldc.w, stc.w' instrcutions which use the 32 bit ++ absolute address form, but refer to the top page of memory, and ++ changes them to use 16 bit address form. (That is: the linker ++ turns `ldc.w `@'AA:32,ccr' into `ldc.w `@'AA:16,ccr' whenever the ++ address AA is in the top page of memory). ++ ++ ++File: ld.info, Node: i960, Next: ARM, Prev: H8/300, Up: Machine Dependent ++ ++4.2 `ld' and the Intel 960 Family ++================================= ++ ++You can use the `-AARCHITECTURE' command line option to specify one of ++the two-letter names identifying members of the 960 family; the option ++specifies the desired output target, and warns of any incompatible ++instructions in the input files. It also modifies the linker's search ++strategy for archive libraries, to support the use of libraries ++specific to each particular architecture, by including in the search ++loop names suffixed with the string identifying the architecture. ++ ++ For example, if your `ld' command line included `-ACA' as well as ++`-ltry', the linker would look (in its built-in search paths, and in ++any paths you specify with `-L') for a library with the names ++ ++ try ++ libtry.a ++ tryca ++ libtryca.a ++ ++The first two possibilities would be considered in any event; the last ++two are due to the use of `-ACA'. ++ ++ You can meaningfully use `-A' more than once on a command line, since ++the 960 architecture family allows combination of target architectures; ++each use will add another pair of name variants to search for when `-l' ++specifies a library. ++ ++ `ld' supports the `--relax' option for the i960 family. If you ++specify `--relax', `ld' finds all `balx' and `calx' instructions whose ++targets are within 24 bits, and turns them into 24-bit program-counter ++relative `bal' and `cal' instructions, respectively. `ld' also turns ++`cal' instructions into `bal' instructions when it determines that the ++target subroutine is a leaf routine (that is, the target subroutine does ++not itself call any subroutines). ++ ++ ++File: ld.info, Node: ARM, Next: HPPA ELF32, Prev: i960, Up: Machine Dependent ++ ++4.3 `ld' and the ARM family ++=========================== ++ ++For the ARM, `ld' will generate code stubs to allow functions calls ++betweem ARM and Thumb code. These stubs only work with code that has ++been compiled and assembled with the `-mthumb-interwork' command line ++option. If it is necessary to link with old ARM object files or ++libraries, which have not been compiled with the -mthumb-interwork ++option then the `--support-old-code' command line switch should be ++given to the linker. This will make it generate larger stub functions ++which will work with non-interworking aware ARM code. Note, however, ++the linker does not support generating stubs for function calls to ++non-interworking aware Thumb code. ++ ++ The `--thumb-entry' switch is a duplicate of the generic `--entry' ++switch, in that it sets the program's starting address. But it also ++sets the bottom bit of the address, so that it can be branched to using ++a BX instruction, and the program will start executing in Thumb mode ++straight away. ++ ++ The `--be8' switch instructs `ld' to generate BE8 format ++executables. This option is only valid when linking big-endian objects. ++The resulting image will contain big-endian data and little-endian code. ++ ++ The `R_ARM_TARGET1' relocation is typically used for entries in the ++`.init_array' section. It is interpreted as either `R_ARM_REL32' or ++`R_ARM_ABS32', depending on the target. The `--target1-rel' and ++`--target1-abs' switches override the default. ++ ++ The `--target2=type' switch overrides the default definition of the ++`R_ARM_TARGET2' relocation. Valid values for `type', their meanings, ++and target defaults are as follows: ++`rel' ++ `R_ARM_REL32' (arm*-*-elf, arm*-*-eabi) ++ ++`abs' ++ `R_ARM_ABS32' (arm*-*-symbianelf) ++ ++`got-rel' ++ `R_ARM_GOT_PREL' (arm*-*-linux, arm*-*-*bsd) ++ ++ The `R_ARM_V4BX' relocation (defined by the ARM AAELF specification) ++enables objects compiled for the ARMv4 architecture to be ++interworking-safe when linked with other objects compiled for ARMv4t, ++but also allows pure ARMv4 binaries to be built from the same ARMv4 ++objects. ++ ++ In the latter case, the switch `--fix-v4bx' must be passed to the ++linker, which causes v4t `BX rM' instructions to be rewritten as `MOV ++PC,rM', since v4 processors do not have a `BX' instruction. ++ ++ In the former case, the switch should not be used, and `R_ARM_V4BX' ++relocations are ignored. ++ ++ The `--use-blx' switch enables the linker to use ARM/Thumb BLX ++instructions (available on ARMv5t and above) in various situations. ++Currently it is used to perform calls via the PLT from Thumb code using ++BLX rather than using BX and a mode-switching stub before each PLT ++entry. This should lead to such calls executing slightly faster. ++ ++ This option is enabled implicitly for SymbianOS, so there is no need ++to specify it if you are using that target. ++ ++ ++File: ld.info, Node: HPPA ELF32, Next: MMIX, Prev: ARM, Up: Machine Dependent ++ ++4.4 `ld' and HPPA 32-bit ELF Support ++==================================== ++ ++When generating a shared library, `ld' will by default generate import ++stubs suitable for use with a single sub-space application. The ++`--multi-subspace' switch causes `ld' to generate export stubs, and ++different (larger) import stubs suitable for use with multiple ++sub-spaces. ++ ++ Long branch stubs and import/export stubs are placed by `ld' in stub ++sections located between groups of input sections. `--stub-group-size' ++specifies the maximum size of a group of input sections handled by one ++stub section. Since branch offsets are signed, a stub section may ++serve two groups of input sections, one group before the stub section, ++and one group after it. However, when using conditional branches that ++require stubs, it may be better (for branch prediction) that stub ++sections only serve one group of input sections. A negative value for ++`N' chooses this scheme, ensuring that branches to stubs always use a ++negative offset. Two special values of `N' are recognized, `1' and ++`-1'. These both instruct `ld' to automatically size input section ++groups for the branch types detected, with the same behaviour regarding ++stub placement as other positive or negative values of `N' respectively. ++ ++ Note that `--stub-group-size' does not split input sections. A ++single input section larger than the group size specified will of course ++create a larger group (of one section). If input sections are too ++large, it may not be possible for a branch to reach its stub. ++ ++ ++File: ld.info, Node: MMIX, Next: MSP430, Prev: HPPA ELF32, Up: Machine Dependent ++ ++4.5 `ld' and MMIX ++================= ++ ++For MMIX, there is a choice of generating `ELF' object files or `mmo' ++object files when linking. The simulator `mmix' understands the `mmo' ++format. The binutils `objcopy' utility can translate between the two ++formats. ++ ++ There is one special section, the `.MMIX.reg_contents' section. ++Contents in this section is assumed to correspond to that of global ++registers, and symbols referring to it are translated to special ++symbols, equal to registers. In a final link, the start address of the ++`.MMIX.reg_contents' section corresponds to the first allocated global ++register multiplied by 8. Register `$255' is not included in this ++section; it is always set to the program entry, which is at the symbol ++`Main' for `mmo' files. ++ ++ Symbols with the prefix `__.MMIX.start.', for example ++`__.MMIX.start..text' and `__.MMIX.start..data' are special; there must ++be only one each, even if they are local. The default linker script ++uses these to set the default start address of a section. ++ ++ Initial and trailing multiples of zero-valued 32-bit words in a ++section, are left out from an mmo file. ++ ++ ++File: ld.info, Node: MSP430, Next: PowerPC ELF32, Prev: MMIX, Up: Machine Dependent ++ ++4.6 `ld' and MSP430 ++=================== ++ ++For the MSP430 it is possible to select the MPU architecture. The flag ++`-m [mpu type]' will select an appropriate linker script for selected ++MPU type. (To get a list of known MPUs just pass `-m help' option to ++the linker). ++ ++ The linker will recognize some extra sections which are MSP430 ++specific: ++ ++``.vectors'' ++ Defines a portion of ROM where interrupt vectors located. ++ ++``.bootloader'' ++ Defines the bootloader portion of the ROM (if applicable). Any ++ code in this section will be uploaded to the MPU. ++ ++``.infomem'' ++ Defines an information memory section (if applicable). Any code in ++ this section will be uploaded to the MPU. ++ ++``.infomemnobits'' ++ This is the same as the `.infomem' section except that any code in ++ this section will not be uploaded to the MPU. ++ ++``.noinit'' ++ Denotes a portion of RAM located above `.bss' section. ++ ++ The last two sections are used by gcc. ++ ++ ++File: ld.info, Node: PowerPC ELF32, Next: PowerPC64 ELF64, Prev: MSP430, Up: Machine Dependent ++ ++4.7 `ld' and PowerPC 32-bit ELF Support ++======================================= ++ ++Branches on PowerPC processors are limited to a signed 26-bit ++displacement, which may result in `ld' giving `relocation truncated to ++fit' errors with very large programs. `--relax' enables the generation ++of trampolines that can access the entire 32-bit address space. These ++trampolines are inserted at section boundaries, so may not themselves ++be reachable if an input section exceeds 33M in size. ++ ++`--bss-plt' ++ Current PowerPC GCC accepts a `-msecure-plt' option that generates ++ code capable of using a newer PLT and GOT layout that has the ++ security advantage of no executable section ever needing to be ++ writable and no writable section ever being executable. PowerPC ++ `ld' will generate this layout, including stubs to access the PLT, ++ if all input files (including startup and static libraries) were ++ compiled with `-msecure-plt'. `--bss-plt' forces the old BSS PLT ++ (and GOT layout) which can give slightly better performance. ++ ++`--sdata-got' ++ The new secure PLT and GOT are placed differently relative to other ++ sections compared to older BSS PLT and GOT placement. The ++ location of `.plt' must change because the new secure PLT is an ++ initialized section while the old PLT is uninitialized. The ++ reason for the `.got' change is more subtle: The new placement ++ allows `.got' to be read-only in applications linked with `-z ++ relro -z now'. However, this placement means that `.sdata' cannot ++ always be used in shared libraries, because the PowerPC ABI ++ accesses `.sdata' in shared libraries from the GOT pointer. ++ `--sdata-got' forces the old GOT placement. PowerPC GCC doesn't ++ use `.sdata' in shared libraries, so this option is really only ++ useful for other compilers that may do so. ++ ++`--emit-stub-syms' ++ This option causes `ld' to label linker stubs with a local symbol ++ that encodes the stub type and destination. ++ ++`--no-tls-optimize' ++ PowerPC `ld' normally performs some optimization of code sequences ++ used to access Thread-Local Storage. Use this option to disable ++ the optimization. ++ ++ ++File: ld.info, Node: PowerPC64 ELF64, Next: TI COFF, Prev: PowerPC ELF32, Up: Machine Dependent ++ ++4.8 `ld' and PowerPC64 64-bit ELF Support ++========================================= ++ ++`--stub-group-size' ++ Long branch stubs, PLT call stubs and TOC adjusting stubs are ++ placed by `ld' in stub sections located between groups of input ++ sections. `--stub-group-size' specifies the maximum size of a ++ group of input sections handled by one stub section. Since branch ++ offsets are signed, a stub section may serve two groups of input ++ sections, one group before the stub section, and one group after ++ it. However, when using conditional branches that require stubs, ++ it may be better (for branch prediction) that stub sections only ++ serve one group of input sections. A negative value for `N' ++ chooses this scheme, ensuring that branches to stubs always use a ++ negative offset. Two special values of `N' are recognized, `1' ++ and `-1'. These both instruct `ld' to automatically size input ++ section groups for the branch types detected, with the same ++ behaviour regarding stub placement as other positive or negative ++ values of `N' respectively. ++ ++ Note that `--stub-group-size' does not split input sections. A ++ single input section larger than the group size specified will of ++ course create a larger group (of one section). If input sections ++ are too large, it may not be possible for a branch to reach its ++ stub. ++ ++`--emit-stub-syms' ++ This option causes `ld' to label linker stubs with a local symbol ++ that encodes the stub type and destination. ++ ++`--dotsyms, --no-dotsyms' ++ These two options control how `ld' interprets version patterns in ++ a version script. Older PowerPC64 compilers emitted both a ++ function descriptor symbol with the same name as the function, and ++ a code entry symbol with the name prefixed by a dot (`.'). To ++ properly version a function `foo', the version script thus needs ++ to control both `foo' and `.foo'. The option `--dotsyms', on by ++ default, automatically adds the required dot-prefixed patterns. ++ Use `--no-dotsyms' to disable this feature. ++ ++`--no-tls-optimize' ++ PowerPC64 `ld' normally performs some optimization of code ++ sequences used to access Thread-Local Storage. Use this option to ++ disable the optimization. ++ ++`--no-opd-optimize' ++ PowerPC64 `ld' normally removes `.opd' section entries ++ corresponding to deleted link-once functions, or functions removed ++ by the action of `--gc-sections' or linker scrip `/DISCARD/'. Use ++ this option to disable `.opd' optimization. ++ ++`--non-overlapping-opd' ++ Some PowerPC64 compilers have an option to generate compressed ++ `.opd' entries spaced 16 bytes apart, overlapping the third word, ++ the static chain pointer (unused in C) with the first word of the ++ next entry. This option expands such entries to the full 24 bytes. ++ ++`--no-toc-optimize' ++ PowerPC64 `ld' normally removes unused `.toc' section entries. ++ Such entries are detected by examining relocations that reference ++ the TOC in code sections. A reloc in a deleted code section marks ++ a TOC word as unneeded, while a reloc in a kept code section marks ++ a TOC word as needed. Since the TOC may reference itself, TOC ++ relocs are also examined. TOC words marked as both needed and ++ unneeded will of course be kept. TOC words without any referencing ++ reloc are assumed to be part of a multi-word entry, and are kept or ++ discarded as per the nearest marked preceding word. This works ++ reliably for compiler generated code, but may be incorrect if ++ assembly code is used to insert TOC entries. Use this option to ++ disable the optimization. ++ ++`--no-multi-toc' ++ By default, PowerPC64 GCC generates code for a TOC model where TOC ++ entries are accessed with a 16-bit offset from r2. This limits the ++ total TOC size to 64K. PowerPC64 `ld' extends this limit by ++ grouping code sections such that each group uses less than 64K for ++ its TOC entries, then inserts r2 adjusting stubs between ++ inter-group calls. `ld' does not split apart input sections, so ++ cannot help if a single input file has a `.toc' section that ++ exceeds 64K, most likely from linking multiple files with `ld -r'. ++ Use this option to turn off this feature. ++ ++ ++File: ld.info, Node: TI COFF, Next: WIN32, Prev: PowerPC64 ELF64, Up: Machine Dependent ++ ++4.9 `ld''s Support for Various TI COFF Versions ++=============================================== ++ ++The `--format' switch allows selection of one of the various TI COFF ++versions. The latest of this writing is 2; versions 0 and 1 are also ++supported. The TI COFF versions also vary in header byte-order format; ++`ld' will read any version or byte order, but the output header format ++depends on the default specified by the specific target. ++ ++ ++File: ld.info, Node: WIN32, Next: Xtensa, Prev: TI COFF, Up: Machine Dependent ++ ++4.10 `ld' and WIN32 (cygwin/mingw) ++================================== ++ ++This section describes some of the win32 specific `ld' issues. See ++*Note Command Line Options: Options. for detailed decription of the ++command line options mentioned here. ++ ++_import libraries_ ++ The standard Windows linker creates and uses so-called import ++ libraries, which contains information for linking to dll's. They ++ are regular static archives and are handled as any other static ++ archive. The cygwin and mingw ports of `ld' have specific support ++ for creating such libraries provided with the `--out-implib' ++ command line option. ++ ++_exporting DLL symbols_ ++ The cygwin/mingw `ld' has several ways to export symbols for dll's. ++ ++ _using auto-export functionality_ ++ By default `ld' exports symbols with the auto-export ++ functionality, which is controlled by the following command ++ line options: ++ ++ * -export-all-symbols [This is the default] ++ ++ * -exclude-symbols ++ ++ * -exclude-libs ++ ++ If, however, `--export-all-symbols' is not given explicitly ++ on the command line, then the default auto-export behavior ++ will be _disabled_ if either of the following are true: ++ ++ * A DEF file is used. ++ ++ * Any symbol in any object file was marked with the ++ __declspec(dllexport) attribute. ++ ++ _using a DEF file_ ++ Another way of exporting symbols is using a DEF file. A DEF ++ file is an ASCII file containing definitions of symbols which ++ should be exported when a dll is created. Usually it is ++ named `.def' and is added as any other object file ++ to the linker's command line. The file's name must end in ++ `.def' or `.DEF'. ++ ++ gcc -o .def ++ ++ Using a DEF file turns off the normal auto-export behavior, ++ unless the `--export-all-symbols' option is also used. ++ ++ Here is an example of a DEF file for a shared library called ++ `xyz.dll': ++ ++ LIBRARY "xyz.dll" BASE=0x20000000 ++ ++ EXPORTS ++ foo ++ bar ++ _bar = bar ++ another_foo = abc.dll.afoo ++ var1 DATA ++ ++ This example defines a DLL with a non-default base address ++ and five symbols in the export table. The third exported ++ symbol `_bar' is an alias for the second. The fourth symbol, ++ `another_foo' is resolved by "forwarding" to another module ++ and treating it as an alias for `afoo' exported from the DLL ++ `abc.dll'. The final symbol `var1' is declared to be a data ++ object. ++ ++ The optional `LIBRARY ' command indicates the _internal_ ++ name of the output DLL. If `' does not include a suffix, ++ the default library suffix, `.DLL' is appended. ++ ++ When the .DEF file is used to build an application. rather ++ than a library, the `NAME ' command shoud be used ++ instead of `LIBRARY'. If `' does not include a suffix, ++ the default executable suffix, `.EXE' is appended. ++ ++ With either `LIBRARY ' or `NAME ' the optional ++ specification `BASE = ' may be used to specify a ++ non-default base address for the image. ++ ++ If neither `LIBRARY ' nor `NAME ' is specified, ++ or they specify an empty string, the internal name is the ++ same as the filename specified on the command line. ++ ++ The complete specification of an export symbol is: ++ ++ EXPORTS ++ ( ( ( [ = ] ) ++ | ( = . )) ++ [ @ ] [NONAME] [DATA] [CONSTANT] [PRIVATE] ) * ++ ++ Declares `' as an exported symbol from the DLL, or ++ declares `' as an exported alias for `'; or ++ declares `' as a "forward" alias for the symbol ++ `' in the DLL `'. Optionally, ++ the symbol may be exported by the specified ordinal ++ `' alias. ++ ++ The optional keywords that follow the declaration indicate: ++ ++ `NONAME': Do not put the symbol name in the DLL's export ++ table. It will still be exported by its ordinal alias ++ (either the value specified by the .def specification or, ++ otherwise, the value assigned by the linker). The symbol ++ name, however, does remain visible in the import library (if ++ any), unless `PRIVATE' is also specified. ++ ++ `DATA': The symbol is a variable or object, rather than a ++ function. The import lib will export only an indirect ++ reference to `foo' as the symbol `_imp__foo' (ie, `foo' must ++ be resolved as `*_imp__foo'). ++ ++ `CONSTANT': Like `DATA', but put the undecorated `foo' as ++ well as `_imp__foo' into the import library. Both refer to the ++ read-only import address table's pointer to the variable, not ++ to the variable itself. This can be dangerous. If the user ++ code fails to add the `dllimport' attribute and also fails to ++ explicitly add the extra indirection that the use of the ++ attribute enforces, the application will behave unexpectedly. ++ ++ `PRIVATE': Put the symbol in the DLL's export table, but do ++ not put it into the static import library used to resolve ++ imports at link time. The symbol can still be imported using ++ the `LoadLibrary/GetProcAddress' API at runtime or by by ++ using the GNU ld extension of linking directly to the DLL ++ without an import library. ++ ++ See ld/deffilep.y in the binutils sources for the full ++ specification of other DEF file statements ++ ++ While linking a shared dll, `ld' is able to create a DEF file ++ with the `--output-def ' command line option. ++ ++ _Using decorations_ ++ Another way of marking symbols for export is to modify the ++ source code itself, so that when building the DLL each symbol ++ to be exported is declared as: ++ ++ __declspec(dllexport) int a_variable ++ __declspec(dllexport) void a_function(int with_args) ++ ++ All such symbols will be exported from the DLL. If, however, ++ any of the object files in the DLL contain symbols decorated ++ in this way, then the normal auto-export behavior is ++ disabled, unless the `--export-all-symbols' option is also ++ used. ++ ++ Note that object files that wish to access these symbols must ++ _not_ decorate them with dllexport. Instead, they should use ++ dllimport, instead: ++ ++ __declspec(dllimport) int a_variable ++ __declspec(dllimport) void a_function(int with_args) ++ ++ This complicates the structure of library header files, ++ because when included by the library itself the header must ++ declare the variables and functions as dllexport, but when ++ included by client code the header must declare them as ++ dllimport. There are a number of idioms that are typically ++ used to do this; often client code can omit the __declspec() ++ declaration completely. See `--enable-auto-import' and ++ `automatic data imports' for more imformation. ++ ++_automatic data imports_ ++ The standard Windows dll format supports data imports from dlls ++ only by adding special decorations (dllimport/dllexport), which ++ let the compiler produce specific assembler instructions to deal ++ with this issue. This increases the effort necessary to port ++ existing Un*x code to these platforms, especially for large c++ ++ libraries and applications. The auto-import feature, which was ++ initially provided by Paul Sokolovsky, allows one to omit the ++ decorations to archieve a behavior that conforms to that on ++ POSIX/Un*x platforms. This feature is enabled with the ++ `--enable-auto-import' command-line option, although it is enabled ++ by default on cygwin/mingw. The `--enable-auto-import' option ++ itself now serves mainly to suppress any warnings that are ++ ordinarily emitted when linked objects trigger the feature's use. ++ ++ auto-import of variables does not always work flawlessly without ++ additional assistance. Sometimes, you will see this message ++ ++ "variable '' can't be auto-imported. Please read the ++ documentation for ld's `--enable-auto-import' for details." ++ ++ The `--enable-auto-import' documentation explains why this error ++ occurs, and several methods that can be used to overcome this ++ difficulty. One of these methods is the _runtime pseudo-relocs_ ++ feature, described below. ++ ++ For complex variables imported from DLLs (such as structs or ++ classes), object files typically contain a base address for the ++ variable and an offset (_addend_) within the variable-to specify a ++ particular field or public member, for instance. Unfortunately, ++ the runtime loader used in win32 environments is incapable of ++ fixing these references at runtime without the additional ++ information supplied by dllimport/dllexport decorations. The ++ standard auto-import feature described above is unable to resolve ++ these references. ++ ++ The `--enable-runtime-pseudo-relocs' switch allows these ++ references to be resolved without error, while leaving the task of ++ adjusting the references themselves (with their non-zero addends) ++ to specialized code provided by the runtime environment. Recent ++ versions of the cygwin and mingw environments and compilers ++ provide this runtime support; older versions do not. However, the ++ support is only necessary on the developer's platform; the ++ compiled result will run without error on an older system. ++ ++ `--enable-runtime-pseudo-relocs' is not the default; it must be ++ explicitly enabled as needed. ++ ++_direct linking to a dll_ ++ The cygwin/mingw ports of `ld' support the direct linking, ++ including data symbols, to a dll without the usage of any import ++ libraries. This is much faster and uses much less memory than ++ does the traditional import library method, expecially when ++ linking large libraries or applications. When `ld' creates an ++ import lib, each function or variable exported from the dll is ++ stored in its own bfd, even though a single bfd could contain many ++ exports. The overhead involved in storing, loading, and ++ processing so many bfd's is quite large, and explains the ++ tremendous time, memory, and storage needed to link against ++ particularly large or complex libraries when using import libs. ++ ++ Linking directly to a dll uses no extra command-line switches ++ other than `-L' and `-l', because `ld' already searches for a ++ number of names to match each library. All that is needed from ++ the developer's perspective is an understanding of this search, in ++ order to force ld to select the dll instead of an import library. ++ ++ For instance, when ld is called with the argument `-lxxx' it will ++ attempt to find, in the first directory of its search path, ++ ++ libxxx.dll.a ++ xxx.dll.a ++ libxxx.a ++ cygxxx.dll (*) ++ libxxx.dll ++ xxx.dll ++ ++ before moving on to the next directory in the search path. ++ ++ (*) Actually, this is not `cygxxx.dll' but in fact is ++ `xxx.dll', where `' is set by the `ld' option ++ `--dll-search-prefix='. In the case of cygwin, the ++ standard gcc spec file includes `--dll-search-prefix=cyg', so in ++ effect we actually search for `cygxxx.dll'. ++ ++ Other win32-based unix environments, such as mingw or pw32, may ++ use other `'es, although at present only cygwin makes use ++ of this feature. It was originally intended to help avoid name ++ conflicts among dll's built for the various win32/un*x ++ environments, so that (for example) two versions of a zlib dll ++ could coexist on the same machine. ++ ++ The generic cygwin/mingw path layout uses a `bin' directory for ++ applications and dll's and a `lib' directory for the import ++ libraries (using cygwin nomenclature): ++ ++ bin/ ++ cygxxx.dll ++ lib/ ++ libxxx.dll.a (in case of dll's) ++ libxxx.a (in case of static archive) ++ ++ Linking directly to a dll without using the import library can be ++ done two ways: ++ ++ 1. Use the dll directly by adding the `bin' path to the link line ++ gcc -Wl,-verbose -o a.exe -L../bin/ -lxxx ++ ++ However, as the dll's often have version numbers appended to their ++ names (`cygncurses-5.dll') this will often fail, unless one ++ specifies `-L../bin -lncurses-5' to include the version. Import ++ libs are generally not versioned, and do not have this difficulty. ++ ++ 2. Create a symbolic link from the dll to a file in the `lib' ++ directory according to the above mentioned search pattern. This ++ should be used to avoid unwanted changes in the tools needed for ++ making the app/dll. ++ ++ ln -s bin/cygxxx.dll lib/[cyg|lib|]xxx.dll[.a] ++ ++ Then you can link without any make environment changes. ++ ++ gcc -Wl,-verbose -o a.exe -L../lib/ -lxxx ++ ++ This technique also avoids the version number problems, because ++ the following is perfectly legal ++ ++ bin/ ++ cygxxx-5.dll ++ lib/ ++ libxxx.dll.a -> ../bin/cygxxx-5.dll ++ ++ Linking directly to a dll without using an import lib will work ++ even when auto-import features are exercised, and even when ++ `--enable-runtime-pseudo-relocs' is used. ++ ++ Given the improvements in speed and memory usage, one might ++ justifiably wonder why import libraries are used at all. There ++ are two reasons: ++ ++ 1. Until recently, the link-directly-to-dll functionality did _not_ ++ work with auto-imported data. ++ ++ 2. Sometimes it is necessary to include pure static objects within ++ the import library (which otherwise contains only bfd's for ++ indirection symbols that point to the exports of a dll). Again, ++ the import lib for the cygwin kernel makes use of this ability, ++ and it is not possible to do this without an import lib. ++ ++ So, import libs are not going away. But the ability to replace ++ true import libs with a simple symbolic link to (or a copy of) a ++ dll, in most cases, is a useful addition to the suite of tools ++ binutils makes available to the win32 developer. Given the ++ massive improvements in memory requirements during linking, storage ++ requirements, and linking speed, we expect that many developers ++ will soon begin to use this feature whenever possible. ++ ++_symbol aliasing_ ++ ++ _adding additional names_ ++ Sometimes, it is useful to export symbols with additional ++ names. A symbol `foo' will be exported as `foo', but it can ++ also be exported as `_foo' by using special directives in the ++ DEF file when creating the dll. This will affect also the ++ optional created import library. Consider the following DEF ++ file: ++ ++ LIBRARY "xyz.dll" BASE=0x61000000 ++ ++ EXPORTS ++ foo ++ _foo = foo ++ ++ The line `_foo = foo' maps the symbol `foo' to `_foo'. ++ ++ Another method for creating a symbol alias is to create it in ++ the source code using the "weak" attribute: ++ ++ void foo () { /* Do something. */; } ++ void _foo () __attribute__ ((weak, alias ("foo"))); ++ ++ See the gcc manual for more information about attributes and ++ weak symbols. ++ ++ _renaming symbols_ ++ Sometimes it is useful to rename exports. For instance, the ++ cygwin kernel does this regularly. A symbol `_foo' can be ++ exported as `foo' but not as `_foo' by using special ++ directives in the DEF file. (This will also affect the import ++ library, if it is created). In the following example: ++ ++ LIBRARY "xyz.dll" BASE=0x61000000 ++ ++ EXPORTS ++ _foo = foo ++ ++ The line `_foo = foo' maps the exported symbol `foo' to ++ `_foo'. ++ ++ Note: using a DEF file disables the default auto-export behavior, ++ unless the `--export-all-symbols' command line option is used. ++ If, however, you are trying to rename symbols, then you should list ++ _all_ desired exports in the DEF file, including the symbols that ++ are not being renamed, and do _not_ use the `--export-all-symbols' ++ option. If you list only the renamed symbols in the DEF file, and ++ use `--export-all-symbols' to handle the other symbols, then the ++ both the new names _and_ the original names for the renamed ++ symbols will be exported. In effect, you'd be aliasing those ++ symbols, not renaming them, which is probably not what you wanted. ++ ++_weak externals_ ++ The Windows object format, PE, specifies a form of weak symbols ++ called weak externals. When a weak symbol is linked and the ++ symbol is not defined, the weak symbol becomes an alias for some ++ other symbol. There are three variants of weak externals: ++ * Definition is searched for in objects and libraries, ++ historically called lazy externals. ++ ++ * Definition is searched for only in other objects, not in ++ libraries. This form is not presently implemented. ++ ++ * No search; the symbol is an alias. This form is not presently ++ implemented. ++ As a GNU extension, weak symbols that do not specify an alternate ++ symbol are supported. If the symbol is undefined when linking, ++ the symbol uses a default value. ++ ++ ++File: ld.info, Node: Xtensa, Prev: WIN32, Up: Machine Dependent ++ ++4.11 `ld' and Xtensa Processors ++=============================== ++ ++The default `ld' behavior for Xtensa processors is to interpret ++`SECTIONS' commands so that lists of explicitly named sections in a ++specification with a wildcard file will be interleaved when necessary to ++keep literal pools within the range of PC-relative load offsets. For ++example, with the command: ++ ++ SECTIONS ++ { ++ .text : { ++ *(.literal .text) ++ } ++ } ++ ++`ld' may interleave some of the `.literal' and `.text' sections from ++different object files to ensure that the literal pools are within the ++range of PC-relative load offsets. A valid interleaving might place ++the `.literal' sections from an initial group of files followed by the ++`.text' sections of that group of files. Then, the `.literal' sections ++from the rest of the files and the `.text' sections from the rest of ++the files would follow. ++ ++ Relaxation is enabled by default for the Xtensa version of `ld' and ++provides two important link-time optimizations. The first optimization ++is to combine identical literal values to reduce code size. A redundant ++literal will be removed and all the `L32R' instructions that use it ++will be changed to reference an identical literal, as long as the ++location of the replacement literal is within the offset range of all ++the `L32R' instructions. The second optimization is to remove ++unnecessary overhead from assembler-generated "longcall" sequences of ++`L32R'/`CALLXN' when the target functions are within range of direct ++`CALLN' instructions. ++ ++ For each of these cases where an indirect call sequence can be ++optimized to a direct call, the linker will change the `CALLXN' ++instruction to a `CALLN' instruction, remove the `L32R' instruction, ++and remove the literal referenced by the `L32R' instruction if it is ++not used for anything else. Removing the `L32R' instruction always ++reduces code size but can potentially hurt performance by changing the ++alignment of subsequent branch targets. By default, the linker will ++always preserve alignments, either by switching some instructions ++between 24-bit encodings and the equivalent density instructions or by ++inserting a no-op in place of the `L32R' instruction that was removed. ++If code size is more important than performance, the `--size-opt' ++option can be used to prevent the linker from widening density ++instructions or inserting no-ops, except in a few cases where no-ops ++are required for correctness. ++ ++ The following Xtensa-specific command-line options can be used to ++control the linker: ++ ++`--no-relax' ++ Since the Xtensa version of `ld' enables the `--relax' option by ++ default, the `--no-relax' option is provided to disable relaxation. ++ ++`--size-opt' ++ When optimizing indirect calls to direct calls, optimize for code ++ size more than performance. With this option, the linker will not ++ insert no-ops or widen density instructions to preserve branch ++ target alignment. There may still be some cases where no-ops are ++ required to preserve the correctness of the code. ++ ++ ++File: ld.info, Node: BFD, Next: Reporting Bugs, Prev: Machine Dependent, Up: Top ++ ++5 BFD ++***** ++ ++The linker accesses object and archive files using the BFD libraries. ++These libraries allow the linker to use the same routines to operate on ++object files whatever the object file format. A different object file ++format can be supported simply by creating a new BFD back end and adding ++it to the library. To conserve runtime memory, however, the linker and ++associated tools are usually configured to support only a subset of the ++object file formats available. You can use `objdump -i' (*note ++objdump: (binutils.info)objdump.) to list all the formats available for ++your configuration. ++ ++ As with most implementations, BFD is a compromise between several ++conflicting requirements. The major factor influencing BFD design was ++efficiency: any time used converting between formats is time which ++would not have been spent had BFD not been involved. This is partly ++offset by abstraction payback; since BFD simplifies applications and ++back ends, more time and care may be spent optimizing algorithms for a ++greater speed. ++ ++ One minor artifact of the BFD solution which you should bear in mind ++is the potential for information loss. There are two places where ++useful information can be lost using the BFD mechanism: during ++conversion and during output. *Note BFD information loss::. ++ ++* Menu: ++ ++* BFD outline:: How it works: an outline of BFD ++ ++ ++File: ld.info, Node: BFD outline, Up: BFD ++ ++5.1 How It Works: An Outline of BFD ++=================================== ++ ++When an object file is opened, BFD subroutines automatically determine ++the format of the input object file. They then build a descriptor in ++memory with pointers to routines that will be used to access elements of ++the object file's data structures. ++ ++ As different information from the object files is required, BFD ++reads from different sections of the file and processes them. For ++example, a very common operation for the linker is processing symbol ++tables. Each BFD back end provides a routine for converting between ++the object file's representation of symbols and an internal canonical ++format. When the linker asks for the symbol table of an object file, it ++calls through a memory pointer to the routine from the relevant BFD ++back end which reads and converts the table into a canonical form. The ++linker then operates upon the canonical form. When the link is finished ++and the linker writes the output file's symbol table, another BFD back ++end routine is called to take the newly created symbol table and ++convert it into the chosen output format. ++ ++* Menu: ++ ++* BFD information loss:: Information Loss ++* Canonical format:: The BFD canonical object-file format ++ ++ ++File: ld.info, Node: BFD information loss, Next: Canonical format, Up: BFD outline ++ ++5.1.1 Information Loss ++---------------------- ++ ++_Information can be lost during output._ The output formats supported ++by BFD do not provide identical facilities, and information which can ++be described in one form has nowhere to go in another format. One ++example of this is alignment information in `b.out'. There is nowhere ++in an `a.out' format file to store alignment information on the ++contained data, so when a file is linked from `b.out' and an `a.out' ++image is produced, alignment information will not propagate to the ++output file. (The linker will still use the alignment information ++internally, so the link is performed correctly). ++ ++ Another example is COFF section names. COFF files may contain an ++unlimited number of sections, each one with a textual section name. If ++the target of the link is a format which does not have many sections ++(e.g., `a.out') or has sections without names (e.g., the Oasys format), ++the link cannot be done simply. You can circumvent this problem by ++describing the desired input-to-output section mapping with the linker ++command language. ++ ++ _Information can be lost during canonicalization._ The BFD internal ++canonical form of the external formats is not exhaustive; there are ++structures in input formats for which there is no direct representation ++internally. This means that the BFD back ends cannot maintain all ++possible data richness through the transformation between external to ++internal and back to external formats. ++ ++ This limitation is only a problem when an application reads one ++format and writes another. Each BFD back end is responsible for ++maintaining as much data as possible, and the internal BFD canonical ++form has structures which are opaque to the BFD core, and exported only ++to the back ends. When a file is read in one format, the canonical form ++is generated for BFD and the application. At the same time, the back ++end saves away any information which may otherwise be lost. If the data ++is then written back in the same format, the back end routine will be ++able to use the canonical form provided by the BFD core as well as the ++information it prepared earlier. Since there is a great deal of ++commonality between back ends, there is no information lost when ++linking or copying big endian COFF to little endian COFF, or `a.out' to ++`b.out'. When a mixture of formats is linked, the information is only ++lost from the files whose format differs from the destination. ++ ++ ++File: ld.info, Node: Canonical format, Prev: BFD information loss, Up: BFD outline ++ ++5.1.2 The BFD canonical object-file format ++------------------------------------------ ++ ++The greatest potential for loss of information occurs when there is the ++least overlap between the information provided by the source format, ++that stored by the canonical format, and that needed by the destination ++format. A brief description of the canonical form may help you ++understand which kinds of data you can count on preserving across ++conversions. ++ ++_files_ ++ Information stored on a per-file basis includes target machine ++ architecture, particular implementation format type, a demand ++ pageable bit, and a write protected bit. Information like Unix ++ magic numbers is not stored here--only the magic numbers' meaning, ++ so a `ZMAGIC' file would have both the demand pageable bit and the ++ write protected text bit set. The byte order of the target is ++ stored on a per-file basis, so that big- and little-endian object ++ files may be used with one another. ++ ++_sections_ ++ Each section in the input file contains the name of the section, ++ the section's original address in the object file, size and ++ alignment information, various flags, and pointers into other BFD ++ data structures. ++ ++_symbols_ ++ Each symbol contains a pointer to the information for the object ++ file which originally defined it, its name, its value, and various ++ flag bits. When a BFD back end reads in a symbol table, it ++ relocates all symbols to make them relative to the base of the ++ section where they were defined. Doing this ensures that each ++ symbol points to its containing section. Each symbol also has a ++ varying amount of hidden private data for the BFD back end. Since ++ the symbol points to the original file, the private data format ++ for that symbol is accessible. `ld' can operate on a collection ++ of symbols of wildly different formats without problems. ++ ++ Normal global and simple local symbols are maintained on output, ++ so an output file (no matter its format) will retain symbols ++ pointing to functions and to global, static, and common variables. ++ Some symbol information is not worth retaining; in `a.out', type ++ information is stored in the symbol table as long symbol names. ++ This information would be useless to most COFF debuggers; the ++ linker has command line switches to allow users to throw it away. ++ ++ There is one word of type information within the symbol, so if the ++ format supports symbol type information within symbols (for ++ example, COFF, IEEE, Oasys) and the type is simple enough to fit ++ within one word (nearly everything but aggregates), the ++ information will be preserved. ++ ++_relocation level_ ++ Each canonical BFD relocation record contains a pointer to the ++ symbol to relocate to, the offset of the data to relocate, the ++ section the data is in, and a pointer to a relocation type ++ descriptor. Relocation is performed by passing messages through ++ the relocation type descriptor and the symbol pointer. Therefore, ++ relocations can be performed on output data using a relocation ++ method that is only available in one of the input formats. For ++ instance, Oasys provides a byte relocation format. A relocation ++ record requesting this relocation type would point indirectly to a ++ routine to perform this, so the relocation may be performed on a ++ byte being written to a 68k COFF file, even though 68k COFF has no ++ such relocation type. ++ ++_line numbers_ ++ Object formats can contain, for debugging purposes, some form of ++ mapping between symbols, source line numbers, and addresses in the ++ output file. These addresses have to be relocated along with the ++ symbol information. Each symbol with an associated list of line ++ number records points to the first record of the list. The head ++ of a line number list consists of a pointer to the symbol, which ++ allows finding out the address of the function whose line number ++ is being described. The rest of the list is made up of pairs: ++ offsets into the section and line numbers. Any format which can ++ simply derive this information can pass it successfully between ++ formats (COFF, IEEE and Oasys). ++ ++ ++File: ld.info, Node: Reporting Bugs, Next: MRI, Prev: BFD, Up: Top ++ ++6 Reporting Bugs ++**************** ++ ++Your bug reports play an essential role in making `ld' reliable. ++ ++ Reporting a bug may help you by bringing a solution to your problem, ++or it may not. But in any case the principal function of a bug report ++is to help the entire community by making the next version of `ld' work ++better. Bug reports are your contribution to the maintenance of `ld'. ++ ++ In order for a bug report to serve its purpose, you must include the ++information that enables us to fix the bug. ++ ++* Menu: ++ ++* Bug Criteria:: Have you found a bug? ++* Bug Reporting:: How to report bugs ++ ++ ++File: ld.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs ++ ++6.1 Have You Found a Bug? ++========================= ++ ++If you are not sure whether you have found a bug, here are some ++guidelines: ++ ++ * If the linker gets a fatal signal, for any input whatever, that is ++ a `ld' bug. Reliable linkers never crash. ++ ++ * If `ld' produces an error message for valid input, that is a bug. ++ ++ * If `ld' does not produce an error message for invalid input, that ++ may be a bug. In the general case, the linker can not verify that ++ object files are correct. ++ ++ * If you are an experienced user of linkers, your suggestions for ++ improvement of `ld' are welcome in any case. ++ ++ ++File: ld.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs ++ ++6.2 How to Report Bugs ++====================== ++ ++A number of companies and individuals offer support for GNU products. ++If you obtained `ld' from a support organization, we recommend you ++contact that organization first. ++ ++ You can find contact information for many support companies and ++individuals in the file `etc/SERVICE' in the GNU Emacs distribution. ++ ++ Otherwise, send bug reports for `ld' to `bug-binutils@gnu.org'. ++ ++ The fundamental principle of reporting bugs usefully is this: ++*report all the facts*. If you are not sure whether to state a fact or ++leave it out, state it! ++ ++ Often people omit facts because they think they know what causes the ++problem and assume that some details do not matter. Thus, you might ++assume that the name of a symbol you use in an example does not matter. ++Well, probably it does not, but one cannot be sure. Perhaps the bug ++is a stray memory reference which happens to fetch from the location ++where that name is stored in memory; perhaps, if the name were ++different, the contents of that location would fool the linker into ++doing the right thing despite the bug. Play it safe and give a ++specific, complete example. That is the easiest thing for you to do, ++and the most helpful. ++ ++ Keep in mind that the purpose of a bug report is to enable us to fix ++the bug if it is new to us. Therefore, always write your bug reports ++on the assumption that the bug has not been reported previously. ++ ++ Sometimes people give a few sketchy facts and ask, "Does this ring a ++bell?" This cannot help us fix a bug, so it is basically useless. We ++respond by asking for enough details to enable us to investigate. You ++might as well expedite matters by sending them to begin with. ++ ++ To enable us to fix the bug, you should include all these things: ++ ++ * The version of `ld'. `ld' announces it if you start it with the ++ `--version' argument. ++ ++ Without this, we will not know whether there is any point in ++ looking for the bug in the current version of `ld'. ++ ++ * Any patches you may have applied to the `ld' source, including any ++ patches made to the `BFD' library. ++ ++ * The type of machine you are using, and the operating system name ++ and version number. ++ ++ * What compiler (and its version) was used to compile `ld'--e.g. ++ "`gcc-2.7'". ++ ++ * The command arguments you gave the linker to link your example and ++ observe the bug. To guarantee you will not omit something ++ important, list them all. A copy of the Makefile (or the output ++ from make) is sufficient. ++ ++ If we were to try to guess the arguments, we would probably guess ++ wrong and then we might not encounter the bug. ++ ++ * A complete input file, or set of input files, that will reproduce ++ the bug. It is generally most helpful to send the actual object ++ files provided that they are reasonably small. Say no more than ++ 10K. For bigger files you can either make them available by FTP ++ or HTTP or else state that you are willing to send the object ++ file(s) to whomever requests them. (Note - your email will be ++ going to a mailing list, so we do not want to clog it up with ++ large attachments). But small attachments are best. ++ ++ If the source files were assembled using `gas' or compiled using ++ `gcc', then it may be OK to send the source files rather than the ++ object files. In this case, be sure to say exactly what version of ++ `gas' or `gcc' was used to produce the object files. Also say how ++ `gas' or `gcc' were configured. ++ ++ * A description of what behavior you observe that you believe is ++ incorrect. For example, "It gets a fatal signal." ++ ++ Of course, if the bug is that `ld' gets a fatal signal, then we ++ will certainly notice it. But if the bug is incorrect output, we ++ might not notice unless it is glaringly wrong. You might as well ++ not give us a chance to make a mistake. ++ ++ Even if the problem you experience is a fatal signal, you should ++ still say so explicitly. Suppose something strange is going on, ++ such as, your copy of `ld' is out of synch, or you have ++ encountered a bug in the C library on your system. (This has ++ happened!) Your copy might crash and ours would not. If you told ++ us to expect a crash, then when ours fails to crash, we would know ++ that the bug was not happening for us. If you had not told us to ++ expect a crash, then we would not be able to draw any conclusion ++ from our observations. ++ ++ * If you wish to suggest changes to the `ld' source, send us context ++ diffs, as generated by `diff' with the `-u', `-c', or `-p' option. ++ Always send diffs from the old file to the new file. If you even ++ discuss something in the `ld' source, refer to it by context, not ++ by line number. ++ ++ The line numbers in our development sources will not match those ++ in your sources. Your line numbers would convey no useful ++ information to us. ++ ++ Here are some things that are not necessary: ++ ++ * A description of the envelope of the bug. ++ ++ Often people who encounter a bug spend a lot of time investigating ++ which changes to the input file will make the bug go away and which ++ changes will not affect it. ++ ++ This is often time consuming and not very useful, because the way ++ we will find the bug is by running a single example under the ++ debugger with breakpoints, not by pure deduction from a series of ++ examples. We recommend that you save your time for something else. ++ ++ Of course, if you can find a simpler example to report _instead_ ++ of the original one, that is a convenience for us. Errors in the ++ output will be easier to spot, running under the debugger will take ++ less time, and so on. ++ ++ However, simplification is not vital; if you do not want to do ++ this, report the bug anyway and send us the entire test case you ++ used. ++ ++ * A patch for the bug. ++ ++ A patch for the bug does help us if it is a good one. But do not ++ omit the necessary information, such as the test case, on the ++ assumption that a patch is all we need. We might see problems ++ with your patch and decide to fix the problem another way, or we ++ might not understand it at all. ++ ++ Sometimes with a program as complicated as `ld' it is very hard to ++ construct an example that will make the program follow a certain ++ path through the code. If you do not send us the example, we will ++ not be able to construct one, so we will not be able to verify ++ that the bug is fixed. ++ ++ And if we cannot understand what bug you are trying to fix, or why ++ your patch should be an improvement, we will not install it. A ++ test case will help us to understand. ++ ++ * A guess about what the bug is or what it depends on. ++ ++ Such guesses are usually wrong. Even we cannot guess right about ++ such things without first using the debugger to find the facts. ++ ++ ++File: ld.info, Node: MRI, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top ++ ++Appendix A MRI Compatible Script Files ++************************************** ++ ++To aid users making the transition to GNU `ld' from the MRI linker, ++`ld' can use MRI compatible linker scripts as an alternative to the ++more general-purpose linker scripting language described in *Note ++Scripts::. MRI compatible linker scripts have a much simpler command ++set than the scripting language otherwise used with `ld'. GNU `ld' ++supports the most commonly used MRI linker commands; these commands are ++described here. ++ ++ In general, MRI scripts aren't of much use with the `a.out' object ++file format, since it only has three sections and MRI scripts lack some ++features to make use of them. ++ ++ You can specify a file containing an MRI-compatible script using the ++`-c' command-line option. ++ ++ Each command in an MRI-compatible script occupies its own line; each ++command line starts with the keyword that identifies the command (though ++blank lines are also allowed for punctuation). If a line of an ++MRI-compatible script begins with an unrecognized keyword, `ld' issues ++a warning message, but continues processing the script. ++ ++ Lines beginning with `*' are comments. ++ ++ You can write these commands using all upper-case letters, or all ++lower case; for example, `chip' is the same as `CHIP'. The following ++list shows only the upper-case form of each command. ++ ++`ABSOLUTE SECNAME' ++`ABSOLUTE SECNAME, SECNAME, ... SECNAME' ++ Normally, `ld' includes in the output file all sections from all ++ the input files. However, in an MRI-compatible script, you can ++ use the `ABSOLUTE' command to restrict the sections that will be ++ present in your output program. If the `ABSOLUTE' command is used ++ at all in a script, then only the sections named explicitly in ++ `ABSOLUTE' commands will appear in the linker output. You can ++ still use other input sections (whatever you select on the command ++ line, or using `LOAD') to resolve addresses in the output file. ++ ++`ALIAS OUT-SECNAME, IN-SECNAME' ++ Use this command to place the data from input section IN-SECNAME ++ in a section called OUT-SECNAME in the linker output file. ++ ++ IN-SECNAME may be an integer. ++ ++`ALIGN SECNAME = EXPRESSION' ++ Align the section called SECNAME to EXPRESSION. The EXPRESSION ++ should be a power of two. ++ ++`BASE EXPRESSION' ++ Use the value of EXPRESSION as the lowest address (other than ++ absolute addresses) in the output file. ++ ++`CHIP EXPRESSION' ++`CHIP EXPRESSION, EXPRESSION' ++ This command does nothing; it is accepted only for compatibility. ++ ++`END' ++ This command does nothing whatever; it's only accepted for ++ compatibility. ++ ++`FORMAT OUTPUT-FORMAT' ++ Similar to the `OUTPUT_FORMAT' command in the more general linker ++ language, but restricted to one of these output formats: ++ ++ 1. S-records, if OUTPUT-FORMAT is `S' ++ ++ 2. IEEE, if OUTPUT-FORMAT is `IEEE' ++ ++ 3. COFF (the `coff-m68k' variant in BFD), if OUTPUT-FORMAT is ++ `COFF' ++ ++`LIST ANYTHING...' ++ Print (to the standard output file) a link map, as produced by the ++ `ld' command-line option `-M'. ++ ++ The keyword `LIST' may be followed by anything on the same line, ++ with no change in its effect. ++ ++`LOAD FILENAME' ++`LOAD FILENAME, FILENAME, ... FILENAME' ++ Include one or more object file FILENAME in the link; this has the ++ same effect as specifying FILENAME directly on the `ld' command ++ line. ++ ++`NAME OUTPUT-NAME' ++ OUTPUT-NAME is the name for the program produced by `ld'; the ++ MRI-compatible command `NAME' is equivalent to the command-line ++ option `-o' or the general script language command `OUTPUT'. ++ ++`ORDER SECNAME, SECNAME, ... SECNAME' ++`ORDER SECNAME SECNAME SECNAME' ++ Normally, `ld' orders the sections in its output file in the order ++ in which they first appear in the input files. In an ++ MRI-compatible script, you can override this ordering with the ++ `ORDER' command. The sections you list with `ORDER' will appear ++ first in your output file, in the order specified. ++ ++`PUBLIC NAME=EXPRESSION' ++`PUBLIC NAME,EXPRESSION' ++`PUBLIC NAME EXPRESSION' ++ Supply a value (EXPRESSION) for external symbol NAME used in the ++ linker input files. ++ ++`SECT SECNAME, EXPRESSION' ++`SECT SECNAME=EXPRESSION' ++`SECT SECNAME EXPRESSION' ++ You can use any of these three forms of the `SECT' command to ++ specify the start address (EXPRESSION) for section SECNAME. If ++ you have more than one `SECT' statement for the same SECNAME, only ++ the _first_ sets the start address. ++ ++ ++File: ld.info, Node: GNU Free Documentation License, Next: Index, Prev: MRI, Up: Top ++ ++Appendix B GNU Free Documentation License ++***************************************** ++ ++ Version 1.1, March 2000 ++ ++ Copyright (C) 2000, 2003 Free Software Foundation, Inc. ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ ++ Everyone is permitted to copy and distribute verbatim copies ++ of this license document, but changing it is not allowed. ++ ++ ++ 0. PREAMBLE ++ ++ The purpose of this License is to make a manual, textbook, or other ++ written document "free" in the sense of freedom: to assure everyone ++ the effective freedom to copy and redistribute it, with or without ++ modifying it, either commercially or noncommercially. Secondarily, ++ this License preserves for the author and publisher a way to get ++ credit for their work, while not being considered responsible for ++ modifications made by others. ++ ++ This License is a kind of "copyleft", which means that derivative ++ works of the document must themselves be free in the same sense. ++ It complements the GNU General Public License, which is a copyleft ++ license designed for free software. ++ ++ We have designed this License in order to use it for manuals for ++ free software, because free software needs free documentation: a ++ free program should come with manuals providing the same freedoms ++ that the software does. But this License is not limited to ++ software manuals; it can be used for any textual work, regardless ++ of subject matter or whether it is published as a printed book. ++ We recommend this License principally for works whose purpose is ++ instruction or reference. ++ ++ ++ 1. APPLICABILITY AND DEFINITIONS ++ ++ This License applies to any manual or other work that contains a ++ notice placed by the copyright holder saying it can be distributed ++ under the terms of this License. The "Document", below, refers to ++ any such manual or work. Any member of the public is a licensee, ++ and is addressed as "you." ++ ++ A "Modified Version" of the Document means any work containing the ++ Document or a portion of it, either copied verbatim, or with ++ modifications and/or translated into another language. ++ ++ A "Secondary Section" is a named appendix or a front-matter ++ section of the Document that deals exclusively with the ++ relationship of the publishers or authors of the Document to the ++ Document's overall subject (or to related matters) and contains ++ nothing that could fall directly within that overall subject. ++ (For example, if the Document is in part a textbook of ++ mathematics, a Secondary Section may not explain any mathematics.) ++ The relationship could be a matter of historical connection with ++ the subject or with related matters, or of legal, commercial, ++ philosophical, ethical or political position regarding them. ++ ++ The "Invariant Sections" are certain Secondary Sections whose ++ titles are designated, as being those of Invariant Sections, in ++ the notice that says that the Document is released under this ++ License. ++ ++ The "Cover Texts" are certain short passages of text that are ++ listed, as Front-Cover Texts or Back-Cover Texts, in the notice ++ that says that the Document is released under this License. ++ ++ A "Transparent" copy of the Document means a machine-readable copy, ++ represented in a format whose specification is available to the ++ general public, whose contents can be viewed and edited directly ++ and straightforwardly with generic text editors or (for images ++ composed of pixels) generic paint programs or (for drawings) some ++ widely available drawing editor, and that is suitable for input to ++ text formatters or for automatic translation to a variety of ++ formats suitable for input to text formatters. A copy made in an ++ otherwise Transparent file format whose markup has been designed ++ to thwart or discourage subsequent modification by readers is not ++ Transparent. A copy that is not "Transparent" is called "Opaque." ++ ++ Examples of suitable formats for Transparent copies include plain ++ ASCII without markup, Texinfo input format, LaTeX input format, ++ SGML or XML using a publicly available DTD, and ++ standard-conforming simple HTML designed for human modification. ++ Opaque formats include PostScript, PDF, proprietary formats that ++ can be read and edited only by proprietary word processors, SGML ++ or XML for which the DTD and/or processing tools are not generally ++ available, and the machine-generated HTML produced by some word ++ processors for output purposes only. ++ ++ The "Title Page" means, for a printed book, the title page itself, ++ plus such following pages as are needed to hold, legibly, the ++ material this License requires to appear in the title page. For ++ works in formats which do not have any title page as such, "Title ++ Page" means the text near the most prominent appearance of the ++ work's title, preceding the beginning of the body of the text. ++ ++ 2. VERBATIM COPYING ++ ++ You may copy and distribute the Document in any medium, either ++ commercially or noncommercially, provided that this License, the ++ copyright notices, and the license notice saying this License ++ applies to the Document are reproduced in all copies, and that you ++ add no other conditions whatsoever to those of this License. You ++ may not use technical measures to obstruct or control the reading ++ or further copying of the copies you make or distribute. However, ++ you may accept compensation in exchange for copies. If you ++ distribute a large enough number of copies you must also follow ++ the conditions in section 3. ++ ++ You may also lend copies, under the same conditions stated above, ++ and you may publicly display copies. ++ ++ 3. COPYING IN QUANTITY ++ ++ If you publish printed copies of the Document numbering more than ++ 100, and the Document's license notice requires Cover Texts, you ++ must enclose the copies in covers that carry, clearly and legibly, ++ all these Cover Texts: Front-Cover Texts on the front cover, and ++ Back-Cover Texts on the back cover. Both covers must also clearly ++ and legibly identify you as the publisher of these copies. The ++ front cover must present the full title with all words of the ++ title equally prominent and visible. You may add other material ++ on the covers in addition. Copying with changes limited to the ++ covers, as long as they preserve the title of the Document and ++ satisfy these conditions, can be treated as verbatim copying in ++ other respects. ++ ++ If the required texts for either cover are too voluminous to fit ++ legibly, you should put the first ones listed (as many as fit ++ reasonably) on the actual cover, and continue the rest onto ++ adjacent pages. ++ ++ If you publish or distribute Opaque copies of the Document ++ numbering more than 100, you must either include a ++ machine-readable Transparent copy along with each Opaque copy, or ++ state in or with each Opaque copy a publicly-accessible ++ computer-network location containing a complete Transparent copy ++ of the Document, free of added material, which the general ++ network-using public has access to download anonymously at no ++ charge using public-standard network protocols. If you use the ++ latter option, you must take reasonably prudent steps, when you ++ begin distribution of Opaque copies in quantity, to ensure that ++ this Transparent copy will remain thus accessible at the stated ++ location until at least one year after the last time you ++ distribute an Opaque copy (directly or through your agents or ++ retailers) of that edition to the public. ++ ++ It is requested, but not required, that you contact the authors of ++ the Document well before redistributing any large number of ++ copies, to give them a chance to provide you with an updated ++ version of the Document. ++ ++ 4. MODIFICATIONS ++ ++ You may copy and distribute a Modified Version of the Document ++ under the conditions of sections 2 and 3 above, provided that you ++ release the Modified Version under precisely this License, with ++ the Modified Version filling the role of the Document, thus ++ licensing distribution and modification of the Modified Version to ++ whoever possesses a copy of it. In addition, you must do these ++ things in the Modified Version: ++ ++ A. Use in the Title Page (and on the covers, if any) a title ++ distinct from that of the Document, and from those of previous ++ versions (which should, if there were any, be listed in the ++ History section of the Document). You may use the same title ++ as a previous version if the original publisher of that version ++ gives permission. ++ B. List on the Title Page, as authors, one or more persons or ++ entities responsible for authorship of the modifications in the ++ Modified Version, together with at least five of the principal ++ authors of the Document (all of its principal authors, if it ++ has less than five). ++ C. State on the Title page the name of the publisher of the ++ Modified Version, as the publisher. ++ D. Preserve all the copyright notices of the Document. ++ E. Add an appropriate copyright notice for your modifications ++ adjacent to the other copyright notices. ++ F. Include, immediately after the copyright notices, a license ++ notice giving the public permission to use the Modified Version ++ under the terms of this License, in the form shown in the ++ Addendum below. ++ G. Preserve in that license notice the full lists of Invariant ++ Sections and required Cover Texts given in the Document's ++ license notice. ++ H. Include an unaltered copy of this License. ++ I. Preserve the section entitled "History", and its title, and add ++ to it an item stating at least the title, year, new authors, and ++ publisher of the Modified Version as given on the Title Page. ++ If there is no section entitled "History" in the Document, ++ create one stating the title, year, authors, and publisher of ++ the Document as given on its Title Page, then add an item ++ describing the Modified Version as stated in the previous ++ sentence. ++ J. Preserve the network location, if any, given in the Document for ++ public access to a Transparent copy of the Document, and ++ likewise the network locations given in the Document for ++ previous versions it was based on. These may be placed in the ++ "History" section. You may omit a network location for a work ++ that was published at least four years before the Document ++ itself, or if the original publisher of the version it refers ++ to gives permission. ++ K. In any section entitled "Acknowledgements" or "Dedications", ++ preserve the section's title, and preserve in the section all the ++ substance and tone of each of the contributor acknowledgements ++ and/or dedications given therein. ++ L. Preserve all the Invariant Sections of the Document, ++ unaltered in their text and in their titles. Section numbers ++ or the equivalent are not considered part of the section titles. ++ M. Delete any section entitled "Endorsements." Such a section ++ may not be included in the Modified Version. ++ N. Do not retitle any existing section as "Endorsements" or to ++ conflict in title with any Invariant Section. ++ ++ If the Modified Version includes new front-matter sections or ++ appendices that qualify as Secondary Sections and contain no ++ material copied from the Document, you may at your option ++ designate some or all of these sections as invariant. To do this, ++ add their titles to the list of Invariant Sections in the Modified ++ Version's license notice. These titles must be distinct from any ++ other section titles. ++ ++ You may add a section entitled "Endorsements", provided it contains ++ nothing but endorsements of your Modified Version by various ++ parties-for example, statements of peer review or that the text has ++ been approved by an organization as the authoritative definition ++ of a standard. ++ ++ You may add a passage of up to five words as a Front-Cover Text, ++ and a passage of up to 25 words as a Back-Cover Text, to the end ++ of the list of Cover Texts in the Modified Version. Only one ++ passage of Front-Cover Text and one of Back-Cover Text may be ++ added by (or through arrangements made by) any one entity. If the ++ Document already includes a cover text for the same cover, ++ previously added by you or by arrangement made by the same entity ++ you are acting on behalf of, you may not add another; but you may ++ replace the old one, on explicit permission from the previous ++ publisher that added the old one. ++ ++ The author(s) and publisher(s) of the Document do not by this ++ License give permission to use their names for publicity for or to ++ assert or imply endorsement of any Modified Version. ++ ++ 5. COMBINING DOCUMENTS ++ ++ You may combine the Document with other documents released under ++ this License, under the terms defined in section 4 above for ++ modified versions, provided that you include in the combination ++ all of the Invariant Sections of all of the original documents, ++ unmodified, and list them all as Invariant Sections of your ++ combined work in its license notice. ++ ++ The combined work need only contain one copy of this License, and ++ multiple identical Invariant Sections may be replaced with a single ++ copy. If there are multiple Invariant Sections with the same name ++ but different contents, make the title of each such section unique ++ by adding at the end of it, in parentheses, the name of the ++ original author or publisher of that section if known, or else a ++ unique number. Make the same adjustment to the section titles in ++ the list of Invariant Sections in the license notice of the ++ combined work. ++ ++ In the combination, you must combine any sections entitled ++ "History" in the various original documents, forming one section ++ entitled "History"; likewise combine any sections entitled ++ "Acknowledgements", and any sections entitled "Dedications." You ++ must delete all sections entitled "Endorsements." ++ ++ 6. COLLECTIONS OF DOCUMENTS ++ ++ You may make a collection consisting of the Document and other ++ documents released under this License, and replace the individual ++ copies of this License in the various documents with a single copy ++ that is included in the collection, provided that you follow the ++ rules of this License for verbatim copying of each of the ++ documents in all other respects. ++ ++ You may extract a single document from such a collection, and ++ distribute it individually under this License, provided you insert ++ a copy of this License into the extracted document, and follow ++ this License in all other respects regarding verbatim copying of ++ that document. ++ ++ 7. AGGREGATION WITH INDEPENDENT WORKS ++ ++ A compilation of the Document or its derivatives with other ++ separate and independent documents or works, in or on a volume of ++ a storage or distribution medium, does not as a whole count as a ++ Modified Version of the Document, provided no compilation ++ copyright is claimed for the compilation. Such a compilation is ++ called an "aggregate", and this License does not apply to the ++ other self-contained works thus compiled with the Document, on ++ account of their being thus compiled, if they are not themselves ++ derivative works of the Document. ++ ++ If the Cover Text requirement of section 3 is applicable to these ++ copies of the Document, then if the Document is less than one ++ quarter of the entire aggregate, the Document's Cover Texts may be ++ placed on covers that surround only the Document within the ++ aggregate. Otherwise they must appear on covers around the whole ++ aggregate. ++ ++ 8. TRANSLATION ++ ++ Translation is considered a kind of modification, so you may ++ distribute translations of the Document under the terms of section ++ 4. Replacing Invariant Sections with translations requires special ++ permission from their copyright holders, but you may include ++ translations of some or all Invariant Sections in addition to the ++ original versions of these Invariant Sections. You may include a ++ translation of this License provided that you also include the ++ original English version of this License. In case of a ++ disagreement between the translation and the original English ++ version of this License, the original English version will prevail. ++ ++ 9. TERMINATION ++ ++ You may not copy, modify, sublicense, or distribute the Document ++ except as expressly provided for under this License. Any other ++ attempt to copy, modify, sublicense or distribute the Document is ++ void, and will automatically terminate your rights under this ++ License. However, parties who have received copies, or rights, ++ from you under this License will not have their licenses ++ terminated so long as such parties remain in full compliance. ++ ++ 10. FUTURE REVISIONS OF THIS LICENSE ++ ++ The Free Software Foundation may publish new, revised versions of ++ the GNU Free Documentation License from time to time. Such new ++ versions will be similar in spirit to the present version, but may ++ differ in detail to address new problems or concerns. See ++ http://www.gnu.org/copyleft/. ++ ++ Each version of the License is given a distinguishing version ++ number. If the Document specifies that a particular numbered ++ version of this License "or any later version" applies to it, you ++ have the option of following the terms and conditions either of ++ that specified version or of any later version that has been ++ published (not as a draft) by the Free Software Foundation. If ++ the Document does not specify a version number of this License, ++ you may choose any version ever published (not as a draft) by the ++ Free Software Foundation. ++ ++ ++ADDENDUM: How to use this License for your documents ++==================================================== ++ ++To use this License in a document you have written, include a copy of ++the License in the document and put the following copyright and license ++notices just after the title page: ++ ++ Copyright (C) YEAR YOUR NAME. ++ Permission is granted to copy, distribute and/or modify this document ++ under the terms of the GNU Free Documentation License, Version 1.1 ++ or any later version published by the Free Software Foundation; ++ with the Invariant Sections being LIST THEIR TITLES, with the ++ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. ++ A copy of the license is included in the section entitled "GNU ++ Free Documentation License." ++ ++ If you have no Invariant Sections, write "with no Invariant Sections" ++instead of saying which ones are invariant. If you have no Front-Cover ++Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being ++LIST"; likewise for Back-Cover Texts. ++ ++ If your document contains nontrivial examples of program code, we ++recommend releasing these examples in parallel under your choice of ++free software license, such as the GNU General Public License, to ++permit their use in free software. ++ ++ ++File: ld.info, Node: Index, Prev: GNU Free Documentation License, Up: Top ++ ++Index ++***** ++ ++[index] ++* Menu: ++ ++* ": Symbols. (line 6) ++* -(: Options. (line 609) ++* --accept-unknown-input-arch: Options. (line 627) ++* --add-needed: Options. (line 649) ++* --add-stdcall-alias: Options. (line 1343) ++* --allow-multiple-definition: Options. (line 819) ++* --allow-shlib-undefined: Options. (line 825) ++* --architecture=ARCH: Options. (line 104) ++* --as-needed: Options. (line 637) ++* --auxiliary: Options. (line 205) ++* --base-file: Options. (line 1348) ++* --be8: ARM. (line 23) ++* --bss-plt: PowerPC ELF32. (line 13) ++* --check-sections: Options. (line 701) ++* --cref: Options. (line 711) ++* --default-imported-symver: Options. (line 853) ++* --default-symver: Options. (line 849) ++* --defsym SYMBOL=EXP: Options. (line 739) ++* --demangle[=STYLE]: Options. (line 752) ++* --disable-auto-image-base: Options. (line 1495) ++* --disable-auto-import: Options. (line 1624) ++* --disable-new-dtags: Options. (line 1295) ++* --disable-runtime-pseudo-reloc: Options. (line 1637) ++* --disable-stdcall-fixup: Options. (line 1358) ++* --discard-all: Options. (line 513) ++* --discard-locals: Options. (line 517) ++* --dll: Options. (line 1353) ++* --dll-search-prefix: Options. (line 1501) ++* --dotsyms: PowerPC64 ELF64. (line 33) ++* --dynamic-linker FILE: Options. (line 765) ++* --eh-frame-hdr: Options. (line 1291) ++* --emit-relocs: Options. (line 415) ++* --emit-stub-syms <1>: PowerPC64 ELF64. (line 29) ++* --emit-stub-syms: PowerPC ELF32. (line 37) ++* --enable-auto-image-base: Options. (line 1487) ++* --enable-auto-import: Options. (line 1510) ++* --enable-extra-pe-debug: Options. (line 1642) ++* --enable-new-dtags: Options. (line 1295) ++* --enable-runtime-pseudo-reloc: Options. (line 1629) ++* --enable-stdcall-fixup: Options. (line 1358) ++* --entry=ENTRY: Options. (line 158) ++* --error-unresolved-symbols: Options. (line 1244) ++* --exclude-libs: Options. (line 168) ++* --exclude-symbols: Options. (line 1400) ++* --export-all-symbols: Options. (line 1376) ++* --export-dynamic: Options. (line 179) ++* --fatal-warnings: Options. (line 771) ++* --file-alignment: Options. (line 1406) ++* --filter: Options. (line 226) ++* --fix-v4bx: ARM. (line 44) ++* --force-dynamic: Options. (line 424) ++* --force-exe-suffix: Options. (line 774) ++* --format=FORMAT: Options. (line 115) ++* --format=VERSION: TI COFF. (line 6) ++* --gc-sections: Options. (line 784) ++* --gpsize: Options. (line 259) ++* --hash-size=NUMBER: Options. (line 1304) ++* --heap: Options. (line 1412) ++* --help: Options. (line 792) ++* --image-base: Options. (line 1419) ++* --just-symbols=FILE: Options. (line 447) ++* --kill-at: Options. (line 1428) ++* --large-address-aware: Options. (line 1433) ++* --library-path=DIR: Options. (line 315) ++* --library=ARCHIVE: Options. (line 285) ++* --major-image-version: Options. (line 1442) ++* --major-os-version: Options. (line 1447) ++* --major-subsystem-version: Options. (line 1451) ++* --minor-image-version: Options. (line 1456) ++* --minor-os-version: Options. (line 1461) ++* --minor-subsystem-version: Options. (line 1465) ++* --mri-script=MRI-CMDFILE: Options. (line 139) ++* --multi-subspace: HPPA ELF32. (line 6) ++* --nmagic: Options. (line 384) ++* --no-accept-unknown-input-arch: Options. (line 627) ++* --no-add-needed: Options. (line 649) ++* --no-allow-shlib-undefined: Options. (line 825) ++* --no-as-needed: Options. (line 637) ++* --no-check-sections: Options. (line 701) ++* --no-define-common: Options. (line 723) ++* --no-demangle: Options. (line 752) ++* --no-dotsyms: PowerPC64 ELF64. (line 33) ++* --no-gc-sections: Options. (line 784) ++* --no-keep-memory: Options. (line 804) ++* --no-multi-toc: PowerPC64 ELF64. (line 74) ++* --no-omagic: Options. (line 398) ++* --no-opd-optimize: PowerPC64 ELF64. (line 48) ++* --no-relax: Xtensa. (line 56) ++* --no-tls-optimize <1>: PowerPC64 ELF64. (line 43) ++* --no-tls-optimize: PowerPC ELF32. (line 41) ++* --no-toc-optimize: PowerPC64 ELF64. (line 60) ++* --no-undefined: Options. (line 811) ++* --no-undefined-version: Options. (line 844) ++* --no-warn-mismatch: Options. (line 857) ++* --no-whole-archive: Options. (line 866) ++* --noinhibit-exec: Options. (line 870) ++* --non-overlapping-opd: PowerPC64 ELF64. (line 54) ++* --oformat: Options. (line 882) ++* --omagic: Options. (line 389) ++* --out-implib: Options. (line 1478) ++* --output-def: Options. (line 1470) ++* --output=OUTPUT: Options. (line 404) ++* --pic-executable: Options. (line 895) ++* --print-map: Options. (line 347) ++* --reduce-memory-overheads: Options. (line 1312) ++* --relax: Options. (line 911) ++* --relax on i960: i960. (line 31) ++* --relax on PowerPC: PowerPC ELF32. (line 6) ++* --relax on Xtensa: Xtensa. (line 27) ++* --relocatable: Options. (line 428) ++* --script=SCRIPT: Options. (line 471) ++* --sdata-got: PowerPC ELF32. (line 23) ++* --section-alignment: Options. (line 1647) ++* --section-start SECTIONNAME=ORG: Options. (line 1081) ++* --sort-common: Options. (line 1028) ++* --sort-section alignment: Options. (line 1038) ++* --sort-section name: Options. (line 1034) ++* --split-by-file: Options. (line 1042) ++* --split-by-reloc: Options. (line 1047) ++* --stack: Options. (line 1653) ++* --stats: Options. (line 1060) ++* --strip-all: Options. (line 458) ++* --strip-debug: Options. (line 462) ++* --stub-group-size: PowerPC64 ELF64. (line 6) ++* --stub-group-size=N: HPPA ELF32. (line 12) ++* --subsystem: Options. (line 1660) ++* --support-old-code: ARM. (line 6) ++* --sysroot: Options. (line 1064) ++* --target-help: Options. (line 796) ++* --target1-abs: ARM. (line 27) ++* --target1-rel: ARM. (line 27) ++* --target2=TYPE: ARM. (line 32) ++* --thumb-entry=ENTRY: ARM. (line 17) ++* --trace: Options. (line 467) ++* --trace-symbol=SYMBOL: Options. (line 522) ++* --traditional-format: Options. (line 1069) ++* --undefined=SYMBOL: Options. (line 480) ++* --unique[=SECTION]: Options. (line 498) ++* --unresolved-symbols: Options. (line 1096) ++* --use-blx: ARM. (line 57) ++* --verbose: Options. (line 1125) ++* --version: Options. (line 507) ++* --version-script=VERSION-SCRIPTFILE: Options. (line 1131) ++* --warn-common: Options. (line 1138) ++* --warn-constructors: Options. (line 1206) ++* --warn-multiple-gp: Options. (line 1211) ++* --warn-once: Options. (line 1225) ++* --warn-section-align: Options. (line 1229) ++* --warn-shared-textrel: Options. (line 1236) ++* --warn-unresolved-symbols: Options. (line 1239) ++* --whole-archive: Options. (line 1248) ++* --wrap: Options. (line 1262) ++* -AARCH: Options. (line 103) ++* -aKEYWORD: Options. (line 96) ++* -assert KEYWORD: Options. (line 659) ++* -b FORMAT: Options. (line 115) ++* -Bdynamic: Options. (line 662) ++* -Bgroup: Options. (line 672) ++* -Bshareable: Options. (line 1020) ++* -Bstatic: Options. (line 679) ++* -Bsymbolic: Options. (line 694) ++* -c MRI-CMDFILE: Options. (line 139) ++* -call_shared: Options. (line 662) ++* -d: Options. (line 149) ++* -dc: Options. (line 149) ++* -dn: Options. (line 679) ++* -dp: Options. (line 149) ++* -dy: Options. (line 662) ++* -E: Options. (line 179) ++* -e ENTRY: Options. (line 158) ++* -EB: Options. (line 198) ++* -EL: Options. (line 201) ++* -F: Options. (line 226) ++* -f: Options. (line 205) ++* -fini: Options. (line 250) ++* -G: Options. (line 259) ++* -g: Options. (line 256) ++* -hNAME: Options. (line 267) ++* -i: Options. (line 276) ++* -IFILE: Options. (line 765) ++* -init: Options. (line 279) ++* -lARCHIVE: Options. (line 285) ++* -LDIR: Options. (line 315) ++* -M: Options. (line 347) ++* -m EMULATION: Options. (line 337) ++* -Map: Options. (line 800) ++* -N: Options. (line 389) ++* -n: Options. (line 384) ++* -non_shared: Options. (line 679) ++* -nostdlib: Options. (line 876) ++* -O LEVEL: Options. (line 410) ++* -o OUTPUT: Options. (line 404) ++* -pie: Options. (line 895) ++* -q: Options. (line 415) ++* -qmagic: Options. (line 905) ++* -Qy: Options. (line 908) ++* -r: Options. (line 428) ++* -R FILE: Options. (line 447) ++* -rpath: Options. (line 945) ++* -rpath-link: Options. (line 967) ++* -S: Options. (line 462) ++* -s: Options. (line 458) ++* -shared: Options. (line 1020) ++* -soname=NAME: Options. (line 267) ++* -static: Options. (line 679) ++* -t: Options. (line 467) ++* -T SCRIPT: Options. (line 471) ++* -Tbss ORG: Options. (line 1090) ++* -Tdata ORG: Options. (line 1090) ++* -Ttext ORG: Options. (line 1090) ++* -u SYMBOL: Options. (line 480) ++* -Ur: Options. (line 488) ++* -V: Options. (line 507) ++* -v: Options. (line 507) ++* -X: Options. (line 517) ++* -x: Options. (line 513) ++* -Y PATH: Options. (line 531) ++* -y SYMBOL: Options. (line 522) ++* -z defs: Options. (line 811) ++* -z KEYWORD: Options. (line 535) ++* -z muldefs: Options. (line 819) ++* .: Location Counter. (line 6) ++* /DISCARD/: Output Section Discarding. ++ (line 18) ++* :PHDR: Output Section Phdr. ++ (line 6) ++* =FILLEXP: Output Section Fill. ++ (line 6) ++* >REGION: Output Section Region. ++ (line 6) ++* [COMMON]: Input Section Common. ++ (line 29) ++* ABSOLUTE (MRI): MRI. (line 33) ++* absolute and relocatable symbols: Expression Section. (line 6) ++* absolute expressions: Expression Section. (line 6) ++* ABSOLUTE(EXP): Builtin Functions. (line 10) ++* ADDR(SECTION): Builtin Functions. (line 17) ++* address, section: Output Section Address. ++ (line 6) ++* ALIAS (MRI): MRI. (line 44) ++* ALIGN (MRI): MRI. (line 50) ++* align expression: Builtin Functions. (line 36) ++* align location counter: Builtin Functions. (line 36) ++* ALIGN(ALIGN): Builtin Functions. (line 36) ++* ALIGN(EXP,ALIGN): Builtin Functions. (line 36) ++* ALIGN(SECTION_ALIGN): Forced Output Alignment. ++ (line 6) ++* allocating memory: MEMORY. (line 6) ++* architecture: Miscellaneous Commands. ++ (line 46) ++* architectures: Options. (line 103) ++* archive files, from cmd line: Options. (line 285) ++* archive search path in linker script: File Commands. (line 71) ++* arithmetic: Expressions. (line 6) ++* arithmetic operators: Operators. (line 6) ++* ARM interworking support: ARM. (line 6) ++* AS_NEEDED(FILES): File Commands. (line 51) ++* ASSERT: Miscellaneous Commands. ++ (line 9) ++* assertion in linker script: Miscellaneous Commands. ++ (line 9) ++* assignment in scripts: Assignments. (line 6) ++* AT(LMA): Output Section LMA. (line 6) ++* AT>LMA_REGION: Output Section LMA. (line 6) ++* automatic data imports: WIN32. (line 170) ++* back end: BFD. (line 6) ++* BASE (MRI): MRI. (line 54) ++* BE8: ARM. (line 23) ++* BFD canonical format: Canonical format. (line 11) ++* BFD requirements: BFD. (line 16) ++* big-endian objects: Options. (line 198) ++* binary input format: Options. (line 115) ++* BLOCK(EXP): Builtin Functions. (line 62) ++* bug criteria: Bug Criteria. (line 6) ++* bug reports: Bug Reporting. (line 6) ++* bugs in ld: Reporting Bugs. (line 6) ++* BYTE(EXPRESSION): Output Section Data. ++ (line 6) ++* C++ constructors, arranging in link: Output Section Keywords. ++ (line 19) ++* CHIP (MRI): MRI. (line 58) ++* COLLECT_NO_DEMANGLE: Environment. (line 29) ++* combining symbols, warnings on: Options. (line 1138) ++* command files: Scripts. (line 6) ++* command line: Options. (line 6) ++* common allocation: Options. (line 149) ++* common allocation in linker script: Miscellaneous Commands. ++ (line 20) ++* common symbol placement: Input Section Common. ++ (line 6) ++* compatibility, MRI: Options. (line 139) ++* constants in linker scripts: Constants. (line 6) ++* CONSTRUCTORS: Output Section Keywords. ++ (line 19) ++* constructors: Options. (line 488) ++* constructors, arranging in link: Output Section Keywords. ++ (line 19) ++* crash of linker: Bug Criteria. (line 9) ++* CREATE_OBJECT_SYMBOLS: Output Section Keywords. ++ (line 9) ++* creating a DEF file: WIN32. (line 137) ++* cross reference table: Options. (line 711) ++* cross references: Miscellaneous Commands. ++ (line 30) ++* current output location: Location Counter. (line 6) ++* data: Output Section Data. ++ (line 6) ++* DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE): Builtin Functions. ++ (line 67) ++* DATA_SEGMENT_END(EXP): Builtin Functions. (line 88) ++* DATA_SEGMENT_RELRO_END(OFFSET, EXP): Builtin Functions. (line 94) ++* dbx: Options. (line 1074) ++* DEF files, creating: Options. (line 1470) ++* default emulation: Environment. (line 21) ++* default input format: Environment. (line 9) ++* DEFINED(SYMBOL): Builtin Functions. (line 105) ++* deleting local symbols: Options. (line 513) ++* demangling, default: Environment. (line 29) ++* demangling, from command line: Options. (line 752) ++* direct linking to a dll: WIN32. (line 218) ++* discarding sections: Output Section Discarding. ++ (line 6) ++* discontinuous memory: MEMORY. (line 6) ++* DLLs, creating: Options. (line 1376) ++* DLLs, linking to: Options. (line 1501) ++* dot: Location Counter. (line 6) ++* dot inside sections: Location Counter. (line 34) ++* dot outside sections: Location Counter. (line 64) ++* dynamic linker, from command line: Options. (line 765) ++* dynamic symbol table: Options. (line 179) ++* ELF program headers: PHDRS. (line 6) ++* emulation: Options. (line 337) ++* emulation, default: Environment. (line 21) ++* END (MRI): MRI. (line 62) ++* endianness: Options. (line 198) ++* entry point: Entry Point. (line 6) ++* entry point, from command line: Options. (line 158) ++* entry point, thumb: ARM. (line 17) ++* ENTRY(SYMBOL): Entry Point. (line 6) ++* error on valid input: Bug Criteria. (line 12) ++* example of linker script: Simple Example. (line 6) ++* exporting DLL symbols: WIN32. (line 19) ++* expression evaluation order: Evaluation. (line 6) ++* expression sections: Expression Section. (line 6) ++* expression, absolute: Builtin Functions. (line 10) ++* expressions: Expressions. (line 6) ++* EXTERN: Miscellaneous Commands. ++ (line 13) ++* fatal signal: Bug Criteria. (line 9) ++* file name wildcard patterns: Input Section Wildcards. ++ (line 6) ++* FILEHDR: PHDRS. (line 61) ++* filename symbols: Output Section Keywords. ++ (line 9) ++* fill pattern, entire section: Output Section Fill. ++ (line 6) ++* FILL(EXPRESSION): Output Section Data. ++ (line 39) ++* finalization function: Options. (line 250) ++* first input file: File Commands. (line 79) ++* first instruction: Entry Point. (line 6) ++* FIX_V4BX: ARM. (line 44) ++* FORCE_COMMON_ALLOCATION: Miscellaneous Commands. ++ (line 20) ++* forcing input section alignment: Forced Input Alignment. ++ (line 6) ++* forcing output section alignment: Forced Output Alignment. ++ (line 6) ++* forcing the creation of dynamic sections: Options. (line 424) ++* FORMAT (MRI): MRI. (line 66) ++* functions in expressions: Builtin Functions. (line 6) ++* garbage collection <1>: Input Section Keep. (line 6) ++* garbage collection: Options. (line 784) ++* generating optimized output: Options. (line 410) ++* GNU linker: Overview. (line 6) ++* GNUTARGET: Environment. (line 9) ++* GROUP(FILES): File Commands. (line 44) ++* grouping input files: File Commands. (line 44) ++* groups of archives: Options. (line 609) ++* H8/300 support: H8/300. (line 6) ++* header size: Builtin Functions. (line 170) ++* heap size: Options. (line 1412) ++* help: Options. (line 792) ++* holes: Location Counter. (line 12) ++* holes, filling: Output Section Data. ++ (line 39) ++* HPPA multiple sub-space stubs: HPPA ELF32. (line 6) ++* HPPA stub grouping: HPPA ELF32. (line 12) ++* i960 support: i960. (line 6) ++* image base: Options. (line 1419) ++* implicit linker scripts: Implicit Linker Scripts. ++ (line 6) ++* import libraries: WIN32. (line 10) ++* INCLUDE FILENAME: File Commands. (line 9) ++* including a linker script: File Commands. (line 9) ++* including an entire archive: Options. (line 1248) ++* incremental link: Options. (line 276) ++* INHIBIT_COMMON_ALLOCATION: Miscellaneous Commands. ++ (line 25) ++* initialization function: Options. (line 279) ++* initialized data in ROM: Output Section LMA. (line 21) ++* input file format in linker script: Format Commands. (line 35) ++* input filename symbols: Output Section Keywords. ++ (line 9) ++* input files in linker scripts: File Commands. (line 16) ++* input files, displaying: Options. (line 467) ++* input format: Options. (line 115) ++* input object files in linker scripts: File Commands. (line 16) ++* input section alignment: Forced Input Alignment. ++ (line 6) ++* input section basics: Input Section Basics. ++ (line 6) ++* input section wildcards: Input Section Wildcards. ++ (line 6) ++* input sections: Input Section. (line 6) ++* INPUT(FILES): File Commands. (line 16) ++* integer notation: Constants. (line 6) ++* integer suffixes: Constants. (line 12) ++* internal object-file format: Canonical format. (line 11) ++* invalid input: Bug Criteria. (line 14) ++* K and M integer suffixes: Constants. (line 12) ++* KEEP: Input Section Keep. (line 6) ++* l =: MEMORY. (line 72) ++* L, deleting symbols beginning: Options. (line 517) ++* lazy evaluation: Evaluation. (line 6) ++* ld bugs, reporting: Bug Reporting. (line 6) ++* LDEMULATION: Environment. (line 21) ++* len =: MEMORY. (line 72) ++* LENGTH =: MEMORY. (line 72) ++* LENGTH(MEMORY): Builtin Functions. (line 122) ++* library search path in linker script: File Commands. (line 71) ++* link map: Options. (line 347) ++* link-time runtime library search path: Options. (line 967) ++* linker crash: Bug Criteria. (line 9) ++* linker script concepts: Basic Script Concepts. ++ (line 6) ++* linker script example: Simple Example. (line 6) ++* linker script file commands: File Commands. (line 6) ++* linker script format: Script Format. (line 6) ++* linker script input object files: File Commands. (line 16) ++* linker script simple commands: Simple Commands. (line 6) ++* linker scripts: Scripts. (line 6) ++* LIST (MRI): MRI. (line 77) ++* little-endian objects: Options. (line 201) ++* LOAD (MRI): MRI. (line 84) ++* load address: Output Section LMA. (line 6) ++* LOADADDR(SECTION): Builtin Functions. (line 125) ++* loading, preventing: Output Section Type. ++ (line 22) ++* local symbols, deleting: Options. (line 517) ++* location counter: Location Counter. (line 6) ++* LONG(EXPRESSION): Output Section Data. ++ (line 6) ++* M and K integer suffixes: Constants. (line 12) ++* machine architecture: Miscellaneous Commands. ++ (line 46) ++* machine dependencies: Machine Dependent. (line 6) ++* mapping input sections to output sections: Input Section. (line 6) ++* MAX: Builtin Functions. (line 130) ++* MEMORY: MEMORY. (line 6) ++* memory region attributes: MEMORY. (line 32) ++* memory regions: MEMORY. (line 6) ++* memory regions and sections: Output Section Region. ++ (line 6) ++* memory usage: Options. (line 804) ++* MIN: Builtin Functions. (line 133) ++* MRI compatibility: MRI. (line 6) ++* MSP430 extra sections: MSP430. (line 11) ++* NAME (MRI): MRI. (line 90) ++* name, section: Output Section Name. ++ (line 6) ++* names: Symbols. (line 6) ++* naming the output file: Options. (line 404) ++* NEXT(EXP): Builtin Functions. (line 137) ++* NMAGIC: Options. (line 384) ++* NOCROSSREFS(SECTIONS): Miscellaneous Commands. ++ (line 30) ++* NOLOAD: Output Section Type. ++ (line 22) ++* not enough room for program headers: Builtin Functions. (line 175) ++* o =: MEMORY. (line 67) ++* objdump -i: BFD. (line 6) ++* object file management: BFD. (line 6) ++* object files: Options. (line 29) ++* object formats available: BFD. (line 6) ++* object size: Options. (line 259) ++* OMAGIC: Options. (line 389) ++* opening object files: BFD outline. (line 6) ++* operators for arithmetic: Operators. (line 6) ++* options: Options. (line 6) ++* ORDER (MRI): MRI. (line 95) ++* org =: MEMORY. (line 67) ++* ORIGIN =: MEMORY. (line 67) ++* ORIGIN(MEMORY): Builtin Functions. (line 143) ++* orphan: Orphan Sections. (line 6) ++* output file after errors: Options. (line 870) ++* output file format in linker script: Format Commands. (line 10) ++* output file name in linker scripot: File Commands. (line 61) ++* output section alignment: Forced Output Alignment. ++ (line 6) ++* output section attributes: Output Section Attributes. ++ (line 6) ++* output section data: Output Section Data. ++ (line 6) ++* OUTPUT(FILENAME): File Commands. (line 61) ++* OUTPUT_ARCH(BFDARCH): Miscellaneous Commands. ++ (line 46) ++* OUTPUT_FORMAT(BFDNAME): Format Commands. (line 10) ++* OVERLAY: Overlay Description. ++ (line 6) ++* overlays: Overlay Description. ++ (line 6) ++* partial link: Options. (line 428) ++* PHDRS: PHDRS. (line 6) ++* position independent executables: Options. (line 897) ++* PowerPC ELF32 options: PowerPC ELF32. (line 13) ++* PowerPC GOT: PowerPC ELF32. (line 23) ++* PowerPC long branches: PowerPC ELF32. (line 6) ++* PowerPC PLT: PowerPC ELF32. (line 13) ++* PowerPC stub symbols: PowerPC ELF32. (line 37) ++* PowerPC TLS optimization: PowerPC ELF32. (line 41) ++* PowerPC64 dot symbols: PowerPC64 ELF64. (line 33) ++* PowerPC64 ELF64 options: PowerPC64 ELF64. (line 6) ++* PowerPC64 multi-TOC: PowerPC64 ELF64. (line 74) ++* PowerPC64 OPD optimization: PowerPC64 ELF64. (line 48) ++* PowerPC64 OPD spacing: PowerPC64 ELF64. (line 54) ++* PowerPC64 stub grouping: PowerPC64 ELF64. (line 6) ++* PowerPC64 stub symbols: PowerPC64 ELF64. (line 29) ++* PowerPC64 TLS optimization: PowerPC64 ELF64. (line 43) ++* PowerPC64 TOC optimization: PowerPC64 ELF64. (line 60) ++* precedence in expressions: Operators. (line 6) ++* prevent unnecessary loading: Output Section Type. ++ (line 22) ++* program headers: PHDRS. (line 6) ++* program headers and sections: Output Section Phdr. ++ (line 6) ++* program headers, not enough room: Builtin Functions. (line 175) ++* program segments: PHDRS. (line 6) ++* PROVIDE: PROVIDE. (line 6) ++* PROVIDE_HIDDEN: PROVIDE_HIDDEN. (line 6) ++* PUBLIC (MRI): MRI. (line 103) ++* QUAD(EXPRESSION): Output Section Data. ++ (line 6) ++* quoted symbol names: Symbols. (line 6) ++* read-only text: Options. (line 384) ++* read/write from cmd line: Options. (line 389) ++* regions of memory: MEMORY. (line 6) ++* relative expressions: Expression Section. (line 6) ++* relaxing addressing modes: Options. (line 911) ++* relaxing on H8/300: H8/300. (line 9) ++* relaxing on i960: i960. (line 31) ++* relaxing on Xtensa: Xtensa. (line 27) ++* relocatable and absolute symbols: Expression Section. (line 6) ++* relocatable output: Options. (line 428) ++* removing sections: Output Section Discarding. ++ (line 6) ++* reporting bugs in ld: Reporting Bugs. (line 6) ++* requirements for BFD: BFD. (line 16) ++* retain relocations in final executable: Options. (line 415) ++* retaining specified symbols: Options. (line 931) ++* ROM initialized data: Output Section LMA. (line 21) ++* round up expression: Builtin Functions. (line 36) ++* round up location counter: Builtin Functions. (line 36) ++* runtime library name: Options. (line 267) ++* runtime library search path: Options. (line 945) ++* runtime pseudo-relocation: WIN32. (line 196) ++* scaled integers: Constants. (line 12) ++* scommon section: Input Section Common. ++ (line 20) ++* script files: Options. (line 471) ++* scripts: Scripts. (line 6) ++* search directory, from cmd line: Options. (line 315) ++* search path in linker script: File Commands. (line 71) ++* SEARCH_DIR(PATH): File Commands. (line 71) ++* SECT (MRI): MRI. (line 109) ++* section address: Output Section Address. ++ (line 6) ++* section address in expression: Builtin Functions. (line 17) ++* section alignment, warnings on: Options. (line 1229) ++* section data: Output Section Data. ++ (line 6) ++* section fill pattern: Output Section Fill. ++ (line 6) ++* section load address: Output Section LMA. (line 6) ++* section load address in expression: Builtin Functions. (line 125) ++* section name: Output Section Name. ++ (line 6) ++* section name wildcard patterns: Input Section Wildcards. ++ (line 6) ++* section size: Builtin Functions. (line 154) ++* section, assigning to memory region: Output Section Region. ++ (line 6) ++* section, assigning to program header: Output Section Phdr. ++ (line 6) ++* SECTIONS: SECTIONS. (line 6) ++* sections, discarding: Output Section Discarding. ++ (line 6) ++* segment origins, cmd line: Options. (line 1090) ++* SEGMENT_START(SEGMENT, DEFAULT): Builtin Functions. (line 146) ++* segments, ELF: PHDRS. (line 6) ++* shared libraries: Options. (line 1022) ++* SHORT(EXPRESSION): Output Section Data. ++ (line 6) ++* SIZEOF(SECTION): Builtin Functions. (line 154) ++* SIZEOF_HEADERS: Builtin Functions. (line 170) ++* small common symbols: Input Section Common. ++ (line 20) ++* SORT: Input Section Wildcards. ++ (line 58) ++* SORT_BY_ALIGNMENT: Input Section Wildcards. ++ (line 54) ++* SORT_BY_NAME: Input Section Wildcards. ++ (line 46) ++* SQUAD(EXPRESSION): Output Section Data. ++ (line 6) ++* stack size: Options. (line 1653) ++* standard Unix system: Options. (line 7) ++* start of execution: Entry Point. (line 6) ++* STARTUP(FILENAME): File Commands. (line 79) ++* strip all symbols: Options. (line 458) ++* strip debugger symbols: Options. (line 462) ++* stripping all but some symbols: Options. (line 931) ++* SUBALIGN(SUBSECTION_ALIGN): Forced Input Alignment. ++ (line 6) ++* suffixes for integers: Constants. (line 12) ++* symbol defaults: Builtin Functions. (line 105) ++* symbol definition, scripts: Assignments. (line 6) ++* symbol names: Symbols. (line 6) ++* symbol tracing: Options. (line 522) ++* symbol versions: VERSION. (line 6) ++* symbol-only input: Options. (line 447) ++* symbols, from command line: Options. (line 739) ++* symbols, relocatable and absolute: Expression Section. (line 6) ++* symbols, retaining selectively: Options. (line 931) ++* synthesizing linker: Options. (line 911) ++* synthesizing on H8/300: H8/300. (line 14) ++* TARGET(BFDNAME): Format Commands. (line 35) ++* TARGET1: ARM. (line 27) ++* TARGET2: ARM. (line 32) ++* thumb entry point: ARM. (line 17) ++* TI COFF versions: TI COFF. (line 6) ++* traditional format: Options. (line 1069) ++* unallocated address, next: Builtin Functions. (line 137) ++* undefined symbol: Options. (line 480) ++* undefined symbol in linker script: Miscellaneous Commands. ++ (line 13) ++* undefined symbols, warnings on: Options. (line 1225) ++* uninitialized data placement: Input Section Common. ++ (line 6) ++* unspecified memory: Output Section Data. ++ (line 39) ++* usage: Options. (line 792) ++* USE_BLX: ARM. (line 57) ++* using a DEF file: WIN32. (line 42) ++* using auto-export functionality: WIN32. (line 22) ++* Using decorations: WIN32. (line 141) ++* variables, defining: Assignments. (line 6) ++* verbose: Options. (line 1125) ++* version: Options. (line 507) ++* version script: VERSION. (line 6) ++* version script, symbol versions: Options. (line 1131) ++* VERSION {script text}: VERSION. (line 6) ++* versions of symbols: VERSION. (line 6) ++* warnings, on combining symbols: Options. (line 1138) ++* warnings, on section alignment: Options. (line 1229) ++* warnings, on undefined symbols: Options. (line 1225) ++* weak externals: WIN32. (line 380) ++* what is this?: Overview. (line 6) ++* wildcard file name patterns: Input Section Wildcards. ++ (line 6) ++* Xtensa options: Xtensa. (line 56) ++* Xtensa processors: Xtensa. (line 6) ++ ++ ++ ++Tag Table: ++Node: Top347 ++Node: Overview1109 ++Node: Invocation2223 ++Node: Options2631 ++Node: Environment77286 ++Node: Scripts79046 ++Node: Basic Script Concepts80780 ++Node: Script Format83487 ++Node: Simple Example84350 ++Node: Simple Commands87446 ++Node: Entry Point87897 ++Node: File Commands88656 ++Node: Format Commands92522 ++Node: Miscellaneous Commands94488 ++Node: Assignments96718 ++Node: Simple Assignments97209 ++Node: PROVIDE98945 ++Node: PROVIDE_HIDDEN100150 ++Node: Source Code Reference100394 ++Node: SECTIONS103974 ++Node: Output Section Description105865 ++Node: Output Section Name106918 ++Node: Output Section Address107794 ++Node: Input Section109443 ++Node: Input Section Basics110244 ++Node: Input Section Wildcards112596 ++Node: Input Section Common117329 ++Node: Input Section Keep118811 ++Node: Input Section Example119301 ++Node: Output Section Data120269 ++Node: Output Section Keywords123046 ++Node: Output Section Discarding126615 ++Node: Output Section Attributes127571 ++Node: Output Section Type128575 ++Node: Output Section LMA129729 ++Node: Forced Output Alignment132000 ++Node: Forced Input Alignment132268 ++Node: Output Section Region132653 ++Node: Output Section Phdr133083 ++Node: Output Section Fill133747 ++Node: Overlay Description134889 ++Node: MEMORY139137 ++Node: PHDRS143337 ++Node: VERSION148376 ++Node: Expressions156167 ++Node: Constants157045 ++Node: Symbols157606 ++Node: Orphan Sections158344 ++Node: Location Counter159107 ++Node: Operators163411 ++Node: Evaluation164333 ++Node: Expression Section165697 ++Node: Builtin Functions167186 ++Node: Implicit Linker Scripts174678 ++Node: Machine Dependent175453 ++Node: H8/300176314 ++Node: i960177939 ++Node: ARM179624 ++Node: HPPA ELF32182540 ++Node: MMIX184163 ++Node: MSP430185380 ++Node: PowerPC ELF32186428 ++Node: PowerPC64 ELF64188719 ++Node: TI COFF193133 ++Node: WIN32193665 ++Node: Xtensa211739 ++Node: BFD214861 ++Node: BFD outline216316 ++Node: BFD information loss217602 ++Node: Canonical format220119 ++Node: Reporting Bugs224476 ++Node: Bug Criteria225170 ++Node: Bug Reporting225869 ++Node: MRI232894 ++Node: GNU Free Documentation License237537 ++Node: Index257251 ++ ++End Tag Table +diff -Nrup binutils-2.17/ld/ld.info.r31496 binutils-2.17.atmel.1.3.0/ld/ld.info.r31496 +--- binutils-2.17/ld/ld.info.r31496 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/ld.info.r31496 2007-09-28 10:30:45.000000000 +0200 +@@ -0,0 +1,6721 @@ ++This is .././ld/ld.info, produced by makeinfo version 4.8 from ++.././ld/ld.texinfo. ++ ++START-INFO-DIR-ENTRY ++* Ld: (ld). The GNU linker. ++END-INFO-DIR-ENTRY ++ ++ This file documents the GNU linker LD version 2.17. ++ ++ Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, ++2002, 2003, 2004 Free Software Foundation, Inc. ++ ++ ++File: ld.info, Node: Top, Next: Overview, Up: (dir) ++ ++Using ld ++******** ++ ++This file documents the GNU linker ld version 2.17. ++ ++ This document is distributed under the terms of the GNU Free ++Documentation License. A copy of the license is included in the ++section entitled "GNU Free Documentation License". ++ ++* Menu: ++ ++* Overview:: Overview ++* Invocation:: Invocation ++* Scripts:: Linker Scripts ++ ++* Machine Dependent:: Machine Dependent Features ++ ++* BFD:: BFD ++ ++* Reporting Bugs:: Reporting Bugs ++* MRI:: MRI Compatible Script Files ++* GNU Free Documentation License:: GNU Free Documentation License ++* Index:: Index ++ ++ ++File: ld.info, Node: Overview, Next: Invocation, Prev: Top, Up: Top ++ ++1 Overview ++********** ++ ++`ld' combines a number of object and archive files, relocates their ++data and ties up symbol references. Usually the last step in compiling ++a program is to run `ld'. ++ ++ `ld' accepts Linker Command Language files written in a superset of ++AT&T's Link Editor Command Language syntax, to provide explicit and ++total control over the linking process. ++ ++ This version of `ld' uses the general purpose BFD libraries to ++operate on object files. This allows `ld' to read, combine, and write ++object files in many different formats--for example, COFF or `a.out'. ++Different formats may be linked together to produce any available kind ++of object file. *Note BFD::, for more information. ++ ++ Aside from its flexibility, the GNU linker is more helpful than other ++linkers in providing diagnostic information. Many linkers abandon ++execution immediately upon encountering an error; whenever possible, ++`ld' continues executing, allowing you to identify other errors (or, in ++some cases, to get an output file in spite of the error). ++ ++ ++File: ld.info, Node: Invocation, Next: Scripts, Prev: Overview, Up: Top ++ ++2 Invocation ++************ ++ ++The GNU linker `ld' is meant to cover a broad range of situations, and ++to be as compatible as possible with other linkers. As a result, you ++have many choices to control its behavior. ++ ++* Menu: ++ ++* Options:: Command Line Options ++* Environment:: Environment Variables ++ ++ ++File: ld.info, Node: Options, Next: Environment, Up: Invocation ++ ++2.1 Command Line Options ++======================== ++ ++ The linker supports a plethora of command-line options, but in actual ++practice few of them are used in any particular context. For instance, ++a frequent use of `ld' is to link standard Unix object files on a ++standard, supported Unix system. On such a system, to link a file ++`hello.o': ++ ++ ld -o OUTPUT /lib/crt0.o hello.o -lc ++ ++ This tells `ld' to produce a file called OUTPUT as the result of ++linking the file `/lib/crt0.o' with `hello.o' and the library `libc.a', ++which will come from the standard search directories. (See the ++discussion of the `-l' option below.) ++ ++ Some of the command-line options to `ld' may be specified at any ++point in the command line. However, options which refer to files, such ++as `-l' or `-T', cause the file to be read at the point at which the ++option appears in the command line, relative to the object files and ++other file options. Repeating non-file options with a different ++argument will either have no further effect, or override prior ++occurrences (those further to the left on the command line) of that ++option. Options which may be meaningfully specified more than once are ++noted in the descriptions below. ++ ++ Non-option arguments are object files or archives which are to be ++linked together. They may follow, precede, or be mixed in with ++command-line options, except that an object file argument may not be ++placed between an option and its argument. ++ ++ Usually the linker is invoked with at least one object file, but you ++can specify other forms of binary input files using `-l', `-R', and the ++script command language. If _no_ binary input files at all are ++specified, the linker does not produce any output, and issues the ++message `No input files'. ++ ++ If the linker cannot recognize the format of an object file, it will ++assume that it is a linker script. A script specified in this way ++augments the main linker script used for the link (either the default ++linker script or the one specified by using `-T'). This feature ++permits the linker to link against a file which appears to be an object ++or an archive, but actually merely defines some symbol values, or uses ++`INPUT' or `GROUP' to load other objects. Note that specifying a ++script in this way merely augments the main linker script; use the `-T' ++option to replace the default linker script entirely. *Note Scripts::. ++ ++ For options whose names are a single letter, option arguments must ++either follow the option letter without intervening whitespace, or be ++given as separate arguments immediately following the option that ++requires them. ++ ++ For options whose names are multiple letters, either one dash or two ++can precede the option name; for example, `-trace-symbol' and ++`--trace-symbol' are equivalent. Note--there is one exception to this ++rule. Multiple letter options that start with a lower case 'o' can ++only be preceeded by two dashes. This is to reduce confusion with the ++`-o' option. So for example `-omagic' sets the output file name to ++`magic' whereas `--omagic' sets the NMAGIC flag on the output. ++ ++ Arguments to multiple-letter options must either be separated from ++the option name by an equals sign, or be given as separate arguments ++immediately following the option that requires them. For example, ++`--trace-symbol foo' and `--trace-symbol=foo' are equivalent. Unique ++abbreviations of the names of multiple-letter options are accepted. ++ ++ Note--if the linker is being invoked indirectly, via a compiler ++driver (e.g. `gcc') then all the linker command line options should be ++prefixed by `-Wl,' (or whatever is appropriate for the particular ++compiler driver) like this: ++ ++ gcc -Wl,--startgroup foo.o bar.o -Wl,--endgroup ++ ++ This is important, because otherwise the compiler driver program may ++silently drop the linker options, resulting in a bad link. ++ ++ Here is a table of the generic command line switches accepted by the ++GNU linker: ++ ++`@FILE' ++ Read command-line options from FILE. The options read are ++ inserted in place of the original @FILE option. If FILE does not ++ exist, or cannot be read, then the option will be treated ++ literally, and not removed. ++ ++ Options in FILE are separated by whitespace. A whitespace ++ character may be included in an option by surrounding the entire ++ option in either single or double quotes. Any character ++ (including a backslash) may be included by prefixing the character ++ to be included with a backslash. The FILE may itself contain ++ additional @FILE options; any such options will be processed ++ recursively. ++ ++`-aKEYWORD' ++ This option is supported for HP/UX compatibility. The KEYWORD ++ argument must be one of the strings `archive', `shared', or ++ `default'. `-aarchive' is functionally equivalent to `-Bstatic', ++ and the other two keywords are functionally equivalent to ++ `-Bdynamic'. This option may be used any number of times. ++ ++`-AARCHITECTURE' ++`--architecture=ARCHITECTURE' ++ In the current release of `ld', this option is useful only for the ++ Intel 960 family of architectures. In that `ld' configuration, the ++ ARCHITECTURE argument identifies the particular architecture in ++ the 960 family, enabling some safeguards and modifying the ++ archive-library search path. *Note `ld' and the Intel 960 family: ++ i960, for details. ++ ++ Future releases of `ld' may support similar functionality for ++ other architecture families. ++ ++`-b INPUT-FORMAT' ++`--format=INPUT-FORMAT' ++ `ld' may be configured to support more than one kind of object ++ file. If your `ld' is configured this way, you can use the `-b' ++ option to specify the binary format for input object files that ++ follow this option on the command line. Even when `ld' is ++ configured to support alternative object formats, you don't ++ usually need to specify this, as `ld' should be configured to ++ expect as a default input format the most usual format on each ++ machine. INPUT-FORMAT is a text string, the name of a particular ++ format supported by the BFD libraries. (You can list the ++ available binary formats with `objdump -i'.) *Note BFD::. ++ ++ You may want to use this option if you are linking files with an ++ unusual binary format. You can also use `-b' to switch formats ++ explicitly (when linking object files of different formats), by ++ including `-b INPUT-FORMAT' before each group of object files in a ++ particular format. ++ ++ The default format is taken from the environment variable ++ `GNUTARGET'. *Note Environment::. You can also define the input ++ format from a script, using the command `TARGET'; see *Note Format ++ Commands::. ++ ++`-c MRI-COMMANDFILE' ++`--mri-script=MRI-COMMANDFILE' ++ For compatibility with linkers produced by MRI, `ld' accepts script ++ files written in an alternate, restricted command language, ++ described in *Note MRI Compatible Script Files: MRI. Introduce ++ MRI script files with the option `-c'; use the `-T' option to run ++ linker scripts written in the general-purpose `ld' scripting ++ language. If MRI-CMDFILE does not exist, `ld' looks for it in the ++ directories specified by any `-L' options. ++ ++`-d' ++`-dc' ++`-dp' ++ These three options are equivalent; multiple forms are supported ++ for compatibility with other linkers. They assign space to common ++ symbols even if a relocatable output file is specified (with ++ `-r'). The script command `FORCE_COMMON_ALLOCATION' has the same ++ effect. *Note Miscellaneous Commands::. ++ ++`-e ENTRY' ++`--entry=ENTRY' ++ Use ENTRY as the explicit symbol for beginning execution of your ++ program, rather than the default entry point. If there is no ++ symbol named ENTRY, the linker will try to parse ENTRY as a number, ++ and use that as the entry address (the number will be interpreted ++ in base 10; you may use a leading `0x' for base 16, or a leading ++ `0' for base 8). *Note Entry Point::, for a discussion of defaults ++ and other ways of specifying the entry point. ++ ++`--exclude-libs LIB,LIB,...' ++ Specifies a list of archive libraries from which symbols should ++ not be automatically exported. The library names may be delimited ++ by commas or colons. Specifying `--exclude-libs ALL' excludes ++ symbols in all archive libraries from automatic export. This ++ option is available only for the i386 PE targeted port of the ++ linker and for ELF targeted ports. For i386 PE, symbols ++ explicitly listed in a .def file are still exported, regardless of ++ this option. For ELF targeted ports, symbols affected by this ++ option will be treated as hidden. ++ ++`-E' ++`--export-dynamic' ++ When creating a dynamically linked executable, add all symbols to ++ the dynamic symbol table. The dynamic symbol table is the set of ++ symbols which are visible from dynamic objects at run time. ++ ++ If you do not use this option, the dynamic symbol table will ++ normally contain only those symbols which are referenced by some ++ dynamic object mentioned in the link. ++ ++ If you use `dlopen' to load a dynamic object which needs to refer ++ back to the symbols defined by the program, rather than some other ++ dynamic object, then you will probably need to use this option when ++ linking the program itself. ++ ++ You can also use the version script to control what symbols should ++ be added to the dynamic symbol table if the output format supports ++ it. See the description of `--version-script' in *Note VERSION::. ++ ++`-EB' ++ Link big-endian objects. This affects the default output format. ++ ++`-EL' ++ Link little-endian objects. This affects the default output ++ format. ++ ++`-f' ++`--auxiliary NAME' ++ When creating an ELF shared object, set the internal DT_AUXILIARY ++ field to the specified name. This tells the dynamic linker that ++ the symbol table of the shared object should be used as an ++ auxiliary filter on the symbol table of the shared object NAME. ++ ++ If you later link a program against this filter object, then, when ++ you run the program, the dynamic linker will see the DT_AUXILIARY ++ field. If the dynamic linker resolves any symbols from the filter ++ object, it will first check whether there is a definition in the ++ shared object NAME. If there is one, it will be used instead of ++ the definition in the filter object. The shared object NAME need ++ not exist. Thus the shared object NAME may be used to provide an ++ alternative implementation of certain functions, perhaps for ++ debugging or for machine specific performance. ++ ++ This option may be specified more than once. The DT_AUXILIARY ++ entries will be created in the order in which they appear on the ++ command line. ++ ++`-F NAME' ++`--filter NAME' ++ When creating an ELF shared object, set the internal DT_FILTER ++ field to the specified name. This tells the dynamic linker that ++ the symbol table of the shared object which is being created ++ should be used as a filter on the symbol table of the shared ++ object NAME. ++ ++ If you later link a program against this filter object, then, when ++ you run the program, the dynamic linker will see the DT_FILTER ++ field. The dynamic linker will resolve symbols according to the ++ symbol table of the filter object as usual, but it will actually ++ link to the definitions found in the shared object NAME. Thus the ++ filter object can be used to select a subset of the symbols ++ provided by the object NAME. ++ ++ Some older linkers used the `-F' option throughout a compilation ++ toolchain for specifying object-file format for both input and ++ output object files. The GNU linker uses other mechanisms for ++ this purpose: the `-b', `--format', `--oformat' options, the ++ `TARGET' command in linker scripts, and the `GNUTARGET' ++ environment variable. The GNU linker will ignore the `-F' option ++ when not creating an ELF shared object. ++ ++`-fini NAME' ++ When creating an ELF executable or shared object, call NAME when ++ the executable or shared object is unloaded, by setting DT_FINI to ++ the address of the function. By default, the linker uses `_fini' ++ as the function to call. ++ ++`-g' ++ Ignored. Provided for compatibility with other tools. ++ ++`-GVALUE' ++`--gpsize=VALUE' ++ Set the maximum size of objects to be optimized using the GP ++ register to SIZE. This is only meaningful for object file formats ++ such as MIPS ECOFF which supports putting large and small objects ++ into different sections. This is ignored for other object file ++ formats. ++ ++`-hNAME' ++`-soname=NAME' ++ When creating an ELF shared object, set the internal DT_SONAME ++ field to the specified name. When an executable is linked with a ++ shared object which has a DT_SONAME field, then when the ++ executable is run the dynamic linker will attempt to load the ++ shared object specified by the DT_SONAME field rather than the ++ using the file name given to the linker. ++ ++`-i' ++ Perform an incremental link (same as option `-r'). ++ ++`-init NAME' ++ When creating an ELF executable or shared object, call NAME when ++ the executable or shared object is loaded, by setting DT_INIT to ++ the address of the function. By default, the linker uses `_init' ++ as the function to call. ++ ++`-lARCHIVE' ++`--library=ARCHIVE' ++ Add archive file ARCHIVE to the list of files to link. This ++ option may be used any number of times. `ld' will search its ++ path-list for occurrences of `libARCHIVE.a' for every ARCHIVE ++ specified. ++ ++ On systems which support shared libraries, `ld' may also search for ++ libraries with extensions other than `.a'. Specifically, on ELF ++ and SunOS systems, `ld' will search a directory for a library with ++ an extension of `.so' before searching for one with an extension of ++ `.a'. By convention, a `.so' extension indicates a shared library. ++ ++ The linker will search an archive only once, at the location where ++ it is specified on the command line. If the archive defines a ++ symbol which was undefined in some object which appeared before ++ the archive on the command line, the linker will include the ++ appropriate file(s) from the archive. However, an undefined ++ symbol in an object appearing later on the command line will not ++ cause the linker to search the archive again. ++ ++ See the `-(' option for a way to force the linker to search ++ archives multiple times. ++ ++ You may list the same archive multiple times on the command line. ++ ++ This type of archive searching is standard for Unix linkers. ++ However, if you are using `ld' on AIX, note that it is different ++ from the behaviour of the AIX linker. ++ ++`-LSEARCHDIR' ++`--library-path=SEARCHDIR' ++ Add path SEARCHDIR to the list of paths that `ld' will search for ++ archive libraries and `ld' control scripts. You may use this ++ option any number of times. The directories are searched in the ++ order in which they are specified on the command line. ++ Directories specified on the command line are searched before the ++ default directories. All `-L' options apply to all `-l' options, ++ regardless of the order in which the options appear. ++ ++ If SEARCHDIR begins with `=', then the `=' will be replaced by the ++ "sysroot prefix", a path specified when the linker is configured. ++ ++ The default set of paths searched (without being specified with ++ `-L') depends on which emulation mode `ld' is using, and in some ++ cases also on how it was configured. *Note Environment::. ++ ++ The paths can also be specified in a link script with the ++ `SEARCH_DIR' command. Directories specified this way are searched ++ at the point in which the linker script appears in the command ++ line. ++ ++`-mEMULATION' ++ Emulate the EMULATION linker. You can list the available ++ emulations with the `--verbose' or `-V' options. ++ ++ If the `-m' option is not used, the emulation is taken from the ++ `LDEMULATION' environment variable, if that is defined. ++ ++ Otherwise, the default emulation depends upon how the linker was ++ configured. ++ ++`-M' ++`--print-map' ++ Print a link map to the standard output. A link map provides ++ information about the link, including the following: ++ ++ * Where object files are mapped into memory. ++ ++ * How common symbols are allocated. ++ ++ * All archive members included in the link, with a mention of ++ the symbol which caused the archive member to be brought in. ++ ++ * The values assigned to symbols. ++ ++ Note - symbols whose values are computed by an expression ++ which involves a reference to a previous value of the same ++ symbol may not have correct result displayed in the link map. ++ This is because the linker discards intermediate results and ++ only retains the final value of an expression. Under such ++ circumstances the linker will display the final value ++ enclosed by square brackets. Thus for example a linker ++ script containing: ++ ++ foo = 1 ++ foo = foo * 4 ++ foo = foo + 8 ++ ++ will produce the following output in the link map if the `-M' ++ option is used: ++ ++ 0x00000001 foo = 0x1 ++ [0x0000000c] foo = (foo * 0x4) ++ [0x0000000c] foo = (foo + 0x8) ++ ++ See *Note Expressions:: for more information about ++ expressions in linker scripts. ++ ++`-n' ++`--nmagic' ++ Turn off page alignment of sections, and mark the output as ++ `NMAGIC' if possible. ++ ++`-N' ++`--omagic' ++ Set the text and data sections to be readable and writable. Also, ++ do not page-align the data segment, and disable linking against ++ shared libraries. If the output format supports Unix style magic ++ numbers, mark the output as `OMAGIC'. Note: Although a writable ++ text section is allowed for PE-COFF targets, it does not conform ++ to the format specification published by Microsoft. ++ ++`--no-omagic' ++ This option negates most of the effects of the `-N' option. It ++ sets the text section to be read-only, and forces the data segment ++ to be page-aligned. Note - this option does not enable linking ++ against shared libraries. Use `-Bdynamic' for this. ++ ++`-o OUTPUT' ++`--output=OUTPUT' ++ Use OUTPUT as the name for the program produced by `ld'; if this ++ option is not specified, the name `a.out' is used by default. The ++ script command `OUTPUT' can also specify the output file name. ++ ++`-O LEVEL' ++ If LEVEL is a numeric values greater than zero `ld' optimizes the ++ output. This might take significantly longer and therefore ++ probably should only be enabled for the final binary. ++ ++`-q' ++`--emit-relocs' ++ Leave relocation sections and contents in fully linked ++ exececutables. Post link analysis and optimization tools may need ++ this information in order to perform correct modifications of ++ executables. This results in larger executables. ++ ++ This option is currently only supported on ELF platforms. ++ ++`--force-dynamic' ++ Force the output file to have dynamic sections. This option is ++ specific to VxWorks targets. ++ ++`-r' ++`--relocatable' ++ Generate relocatable output--i.e., generate an output file that ++ can in turn serve as input to `ld'. This is often called "partial ++ linking". As a side effect, in environments that support standard ++ Unix magic numbers, this option also sets the output file's magic ++ number to `OMAGIC'. If this option is not specified, an absolute ++ file is produced. When linking C++ programs, this option _will ++ not_ resolve references to constructors; to do that, use `-Ur'. ++ ++ When an input file does not have the same format as the output ++ file, partial linking is only supported if that input file does ++ not contain any relocations. Different output formats can have ++ further restrictions; for example some `a.out'-based formats do ++ not support partial linking with input files in other formats at ++ all. ++ ++ This option does the same thing as `-i'. ++ ++`-R FILENAME' ++`--just-symbols=FILENAME' ++ Read symbol names and their addresses from FILENAME, but do not ++ relocate it or include it in the output. This allows your output ++ file to refer symbolically to absolute locations of memory defined ++ in other programs. You may use this option more than once. ++ ++ For compatibility with other ELF linkers, if the `-R' option is ++ followed by a directory name, rather than a file name, it is ++ treated as the `-rpath' option. ++ ++`-s' ++`--strip-all' ++ Omit all symbol information from the output file. ++ ++`-S' ++`--strip-debug' ++ Omit debugger symbol information (but not all symbols) from the ++ output file. ++ ++`-t' ++`--trace' ++ Print the names of the input files as `ld' processes them. ++ ++`-T SCRIPTFILE' ++`--script=SCRIPTFILE' ++ Use SCRIPTFILE as the linker script. This script replaces `ld''s ++ default linker script (rather than adding to it), so COMMANDFILE ++ must specify everything necessary to describe the output file. ++ *Note Scripts::. If SCRIPTFILE does not exist in the current ++ directory, `ld' looks for it in the directories specified by any ++ preceding `-L' options. Multiple `-T' options accumulate. ++ ++`-u SYMBOL' ++`--undefined=SYMBOL' ++ Force SYMBOL to be entered in the output file as an undefined ++ symbol. Doing this may, for example, trigger linking of additional ++ modules from standard libraries. `-u' may be repeated with ++ different option arguments to enter additional undefined symbols. ++ This option is equivalent to the `EXTERN' linker script command. ++ ++`-Ur' ++ For anything other than C++ programs, this option is equivalent to ++ `-r': it generates relocatable output--i.e., an output file that ++ can in turn serve as input to `ld'. When linking C++ programs, ++ `-Ur' _does_ resolve references to constructors, unlike `-r'. It ++ does not work to use `-Ur' on files that were themselves linked ++ with `-Ur'; once the constructor table has been built, it cannot ++ be added to. Use `-Ur' only for the last partial link, and `-r' ++ for the others. ++ ++`--unique[=SECTION]' ++ Creates a separate output section for every input section matching ++ SECTION, or if the optional wildcard SECTION argument is missing, ++ for every orphan input section. An orphan section is one not ++ specifically mentioned in a linker script. You may use this option ++ multiple times on the command line; It prevents the normal ++ merging of input sections with the same name, overriding output ++ section assignments in a linker script. ++ ++`-v' ++`--version' ++`-V' ++ Display the version number for `ld'. The `-V' option also lists ++ the supported emulations. ++ ++`-x' ++`--discard-all' ++ Delete all local symbols. ++ ++`-X' ++`--discard-locals' ++ Delete all temporary local symbols. For most targets, this is all ++ local symbols whose names begin with `L'. ++ ++`-y SYMBOL' ++`--trace-symbol=SYMBOL' ++ Print the name of each linked file in which SYMBOL appears. This ++ option may be given any number of times. On many systems it is ++ necessary to prepend an underscore. ++ ++ This option is useful when you have an undefined symbol in your ++ link but don't know where the reference is coming from. ++ ++`-Y PATH' ++ Add PATH to the default library search path. This option exists ++ for Solaris compatibility. ++ ++`-z KEYWORD' ++ The recognized keywords are: ++ `combreloc' ++ Combines multiple reloc sections and sorts them to make ++ dynamic symbol lookup caching possible. ++ ++ `defs' ++ Disallows undefined symbols in object files. Undefined ++ symbols in shared libraries are still allowed. ++ ++ `execstack' ++ Marks the object as requiring executable stack. ++ ++ `initfirst' ++ This option is only meaningful when building a shared object. ++ It marks the object so that its runtime initialization will ++ occur before the runtime initialization of any other objects ++ brought into the process at the same time. Similarly the ++ runtime finalization of the object will occur after the ++ runtime finalization of any other objects. ++ ++ `interpose' ++ Marks the object that its symbol table interposes before all ++ symbols but the primary executable. ++ ++ `loadfltr' ++ Marks the object that its filters be processed immediately at ++ runtime. ++ ++ `muldefs' ++ Allows multiple definitions. ++ ++ `nocombreloc' ++ Disables multiple reloc sections combining. ++ ++ `nocopyreloc' ++ Disables production of copy relocs. ++ ++ `nodefaultlib' ++ Marks the object that the search for dependencies of this ++ object will ignore any default library search paths. ++ ++ `nodelete' ++ Marks the object shouldn't be unloaded at runtime. ++ ++ `nodlopen' ++ Marks the object not available to `dlopen'. ++ ++ `nodump' ++ Marks the object can not be dumped by `dldump'. ++ ++ `noexecstack' ++ Marks the object as not requiring executable stack. ++ ++ `norelro' ++ Don't create an ELF `PT_GNU_RELRO' segment header in the ++ object. ++ ++ `now' ++ When generating an executable or shared library, mark it to ++ tell the dynamic linker to resolve all symbols when the ++ program is started, or when the shared library is linked to ++ using dlopen, instead of deferring function call resolution ++ to the point when the function is first called. ++ ++ `origin' ++ Marks the object may contain $ORIGIN. ++ ++ `relro' ++ Create an ELF `PT_GNU_RELRO' segment header in the object. ++ ++ ++ Other keywords are ignored for Solaris compatibility. ++ ++`-( ARCHIVES -)' ++`--start-group ARCHIVES --end-group' ++ The ARCHIVES should be a list of archive files. They may be ++ either explicit file names, or `-l' options. ++ ++ The specified archives are searched repeatedly until no new ++ undefined references are created. Normally, an archive is ++ searched only once in the order that it is specified on the ++ command line. If a symbol in that archive is needed to resolve an ++ undefined symbol referred to by an object in an archive that ++ appears later on the command line, the linker would not be able to ++ resolve that reference. By grouping the archives, they all be ++ searched repeatedly until all possible references are resolved. ++ ++ Using this option has a significant performance cost. It is best ++ to use it only when there are unavoidable circular references ++ between two or more archives. ++ ++`--accept-unknown-input-arch' ++`--no-accept-unknown-input-arch' ++ Tells the linker to accept input files whose architecture cannot be ++ recognised. The assumption is that the user knows what they are ++ doing and deliberately wants to link in these unknown input files. ++ This was the default behaviour of the linker, before release ++ 2.14. The default behaviour from release 2.14 onwards is to ++ reject such input files, and so the `--accept-unknown-input-arch' ++ option has been added to restore the old behaviour. ++ ++`--as-needed' ++`--no-as-needed' ++ This option affects ELF DT_NEEDED tags for dynamic libraries ++ mentioned on the command line after the `--as-needed' option. ++ Normally, the linker will add a DT_NEEDED tag for each dynamic ++ library mentioned on the command line, regardless of whether the ++ library is actually needed. `--as-needed' causes DT_NEEDED tags ++ to only be emitted for libraries that satisfy some symbol ++ reference from regular objects which is undefined at the point ++ that the library was linked. `--no-as-needed' restores the ++ default behaviour. ++ ++`--add-needed' ++`--no-add-needed' ++ This option affects the treatment of dynamic libraries from ELF ++ DT_NEEDED tags in dynamic libraries mentioned on the command line ++ after the `--no-add-needed' option. Normally, the linker will add ++ a DT_NEEDED tag for each dynamic library from DT_NEEDED tags. ++ `--no-add-needed' causes DT_NEEDED tags will never be emitted for ++ those libraries from DT_NEEDED tags. `--add-needed' restores the ++ default behaviour. ++ ++`-assert KEYWORD' ++ This option is ignored for SunOS compatibility. ++ ++`-Bdynamic' ++`-dy' ++`-call_shared' ++ Link against dynamic libraries. This is only meaningful on ++ platforms for which shared libraries are supported. This option ++ is normally the default on such platforms. The different variants ++ of this option are for compatibility with various systems. You ++ may use this option multiple times on the command line: it affects ++ library searching for `-l' options which follow it. ++ ++`-Bgroup' ++ Set the `DF_1_GROUP' flag in the `DT_FLAGS_1' entry in the dynamic ++ section. This causes the runtime linker to handle lookups in this ++ object and its dependencies to be performed only inside the group. ++ `--unresolved-symbols=report-all' is implied. This option is only ++ meaningful on ELF platforms which support shared libraries. ++ ++`-Bstatic' ++`-dn' ++`-non_shared' ++`-static' ++ Do not link against shared libraries. This is only meaningful on ++ platforms for which shared libraries are supported. The different ++ variants of this option are for compatibility with various ++ systems. You may use this option multiple times on the command ++ line: it affects library searching for `-l' options which follow ++ it. This option also implies `--unresolved-symbols=report-all'. ++ This option can be used with `-shared'. Doing so means that a ++ shared library is being created but that all of the library's ++ external references must be resolved by pulling in entries from ++ static libraries. ++ ++`-Bsymbolic' ++ When creating a shared library, bind references to global symbols ++ to the definition within the shared library, if any. Normally, it ++ is possible for a program linked against a shared library to ++ override the definition within the shared library. This option is ++ only meaningful on ELF platforms which support shared libraries. ++ ++`--check-sections' ++`--no-check-sections' ++ Asks the linker _not_ to check section addresses after they have ++ been assigned to see if there are any overlaps. Normally the ++ linker will perform this check, and if it finds any overlaps it ++ will produce suitable error messages. The linker does know about, ++ and does make allowances for sections in overlays. The default ++ behaviour can be restored by using the command line switch ++ `--check-sections'. ++ ++`--cref' ++ Output a cross reference table. If a linker map file is being ++ generated, the cross reference table is printed to the map file. ++ Otherwise, it is printed on the standard output. ++ ++ The format of the table is intentionally simple, so that it may be ++ easily processed by a script if necessary. The symbols are ++ printed out, sorted by name. For each symbol, a list of file ++ names is given. If the symbol is defined, the first file listed ++ is the location of the definition. The remaining files contain ++ references to the symbol. ++ ++`--no-define-common' ++ This option inhibits the assignment of addresses to common symbols. ++ The script command `INHIBIT_COMMON_ALLOCATION' has the same effect. ++ *Note Miscellaneous Commands::. ++ ++ The `--no-define-common' option allows decoupling the decision to ++ assign addresses to Common symbols from the choice of the output ++ file type; otherwise a non-Relocatable output type forces ++ assigning addresses to Common symbols. Using `--no-define-common' ++ allows Common symbols that are referenced from a shared library to ++ be assigned addresses only in the main program. This eliminates ++ the unused duplicate space in the shared library, and also ++ prevents any possible confusion over resolving to the wrong ++ duplicate when there are many dynamic modules with specialized ++ search paths for runtime symbol resolution. ++ ++`--defsym SYMBOL=EXPRESSION' ++ Create a global symbol in the output file, containing the absolute ++ address given by EXPRESSION. You may use this option as many ++ times as necessary to define multiple symbols in the command line. ++ A limited form of arithmetic is supported for the EXPRESSION in ++ this context: you may give a hexadecimal constant or the name of ++ an existing symbol, or use `+' and `-' to add or subtract ++ hexadecimal constants or symbols. If you need more elaborate ++ expressions, consider using the linker command language from a ++ script (*note Assignment: Symbol Definitions: Assignments.). ++ _Note:_ there should be no white space between SYMBOL, the equals ++ sign ("<=>"), and EXPRESSION. ++ ++`--demangle[=STYLE]' ++`--no-demangle' ++ These options control whether to demangle symbol names in error ++ messages and other output. When the linker is told to demangle, ++ it tries to present symbol names in a readable fashion: it strips ++ leading underscores if they are used by the object file format, ++ and converts C++ mangled symbol names into user readable names. ++ Different compilers have different mangling styles. The optional ++ demangling style argument can be used to choose an appropriate ++ demangling style for your compiler. The linker will demangle by ++ default unless the environment variable `COLLECT_NO_DEMANGLE' is ++ set. These options may be used to override the default. ++ ++`--dynamic-linker FILE' ++ Set the name of the dynamic linker. This is only meaningful when ++ generating dynamically linked ELF executables. The default dynamic ++ linker is normally correct; don't use this unless you know what ++ you are doing. ++ ++`--fatal-warnings' ++ Treat all warnings as errors. ++ ++`--force-exe-suffix' ++ Make sure that an output file has a .exe suffix. ++ ++ If a successfully built fully linked output file does not have a ++ `.exe' or `.dll' suffix, this option forces the linker to copy the ++ output file to one of the same name with a `.exe' suffix. This ++ option is useful when using unmodified Unix makefiles on a ++ Microsoft Windows host, since some versions of Windows won't run ++ an image unless it ends in a `.exe' suffix. ++ ++`--no-gc-sections' ++`--gc-sections' ++ Enable garbage collection of unused input sections. It is ignored ++ on targets that do not support this option. This option is not ++ compatible with `-r'. The default behaviour (of not performing ++ this garbage collection) can be restored by specifying ++ `--no-gc-sections' on the command line. ++ ++`--help' ++ Print a summary of the command-line options on the standard output ++ and exit. ++ ++`--target-help' ++ Print a summary of all target specific options on the standard ++ output and exit. ++ ++`-Map MAPFILE' ++ Print a link map to the file MAPFILE. See the description of the ++ `-M' option, above. ++ ++`--no-keep-memory' ++ `ld' normally optimizes for speed over memory usage by caching the ++ symbol tables of input files in memory. This option tells `ld' to ++ instead optimize for memory usage, by rereading the symbol tables ++ as necessary. This may be required if `ld' runs out of memory ++ space while linking a large executable. ++ ++`--no-undefined' ++`-z defs' ++ Report unresolved symbol references from regular object files. ++ This is done even if the linker is creating a non-symbolic shared ++ library. The switch `--[no-]allow-shlib-undefined' controls the ++ behaviour for reporting unresolved references found in shared ++ libraries being linked in. ++ ++`--allow-multiple-definition' ++`-z muldefs' ++ Normally when a symbol is defined multiple times, the linker will ++ report a fatal error. These options allow multiple definitions and ++ the first definition will be used. ++ ++`--allow-shlib-undefined' ++`--no-allow-shlib-undefined' ++ Allows (the default) or disallows undefined symbols in shared ++ libraries. This switch is similar to `--no-undefined' except that ++ it determines the behaviour when the undefined symbols are in a ++ shared library rather than a regular object file. It does not ++ affect how undefined symbols in regular object files are handled. ++ ++ The reason that `--allow-shlib-undefined' is the default is that ++ the shared library being specified at link time may not be the ++ same as the one that is available at load time, so the symbols ++ might actually be resolvable at load time. Plus there are some ++ systems, (eg BeOS) where undefined symbols in shared libraries is ++ normal. (The kernel patches them at load time to select which ++ function is most appropriate for the current architecture. This ++ is used for example to dynamically select an appropriate memset ++ function). Apparently it is also normal for HPPA shared libraries ++ to have undefined symbols. ++ ++`--no-undefined-version' ++ Normally when a symbol has an undefined version, the linker will ++ ignore it. This option disallows symbols with undefined version ++ and a fatal error will be issued instead. ++ ++`--default-symver' ++ Create and use a default symbol version (the soname) for ++ unversioned exported symbols. ++ ++`--default-imported-symver' ++ Create and use a default symbol version (the soname) for ++ unversioned imported symbols. ++ ++`--no-warn-mismatch' ++ Normally `ld' will give an error if you try to link together input ++ files that are mismatched for some reason, perhaps because they ++ have been compiled for different processors or for different ++ endiannesses. This option tells `ld' that it should silently ++ permit such possible errors. This option should only be used with ++ care, in cases when you have taken some special action that ++ ensures that the linker errors are inappropriate. ++ ++`--no-whole-archive' ++ Turn off the effect of the `--whole-archive' option for subsequent ++ archive files. ++ ++`--noinhibit-exec' ++ Retain the executable output file whenever it is still usable. ++ Normally, the linker will not produce an output file if it ++ encounters errors during the link process; it exits without ++ writing an output file when it issues any error whatsoever. ++ ++`-nostdlib' ++ Only search library directories explicitly specified on the ++ command line. Library directories specified in linker scripts ++ (including linker scripts specified on the command line) are ++ ignored. ++ ++`--oformat OUTPUT-FORMAT' ++ `ld' may be configured to support more than one kind of object ++ file. If your `ld' is configured this way, you can use the ++ `--oformat' option to specify the binary format for the output ++ object file. Even when `ld' is configured to support alternative ++ object formats, you don't usually need to specify this, as `ld' ++ should be configured to produce as a default output format the most ++ usual format on each machine. OUTPUT-FORMAT is a text string, the ++ name of a particular format supported by the BFD libraries. (You ++ can list the available binary formats with `objdump -i'.) The ++ script command `OUTPUT_FORMAT' can also specify the output format, ++ but this option overrides it. *Note BFD::. ++ ++`-pie' ++`--pic-executable' ++ Create a position independent executable. This is currently only ++ supported on ELF platforms. Position independent executables are ++ similar to shared libraries in that they are relocated by the ++ dynamic linker to the virtual address the OS chooses for them ++ (which can vary between invocations). Like normal dynamically ++ linked executables they can be executed and symbols defined in the ++ executable cannot be overridden by shared libraries. ++ ++`-qmagic' ++ This option is ignored for Linux compatibility. ++ ++`-Qy' ++ This option is ignored for SVR4 compatibility. ++ ++`--relax' ++ An option with machine dependent effects. This option is only ++ supported on a few targets. *Note `ld' and the H8/300: H8/300. ++ *Note `ld' and the Intel 960 family: i960. *Note `ld' and Xtensa ++ Processors: Xtensa. *Note `ld' and PowerPC 32-bit ELF Support: ++ PowerPC ELF32. ++ ++ On some platforms, the `--relax' option performs global ++ optimizations that become possible when the linker resolves ++ addressing in the program, such as relaxing address modes and ++ synthesizing new instructions in the output object file. ++ ++ On some platforms these link time global optimizations may make ++ symbolic debugging of the resulting executable impossible. This ++ is known to be the case for the Matsushita MN10200 and MN10300 ++ family of processors. ++ ++ On platforms where this is not supported, `--relax' is accepted, ++ but ignored. ++ ++`--retain-symbols-file FILENAME' ++ Retain _only_ the symbols listed in the file FILENAME, discarding ++ all others. FILENAME is simply a flat file, with one symbol name ++ per line. This option is especially useful in environments (such ++ as VxWorks) where a large global symbol table is accumulated ++ gradually, to conserve run-time memory. ++ ++ `--retain-symbols-file' does _not_ discard undefined symbols, or ++ symbols needed for relocations. ++ ++ You may only specify `--retain-symbols-file' once in the command ++ line. It overrides `-s' and `-S'. ++ ++`-rpath DIR' ++ Add a directory to the runtime library search path. This is used ++ when linking an ELF executable with shared objects. All `-rpath' ++ arguments are concatenated and passed to the runtime linker, which ++ uses them to locate shared objects at runtime. The `-rpath' ++ option is also used when locating shared objects which are needed ++ by shared objects explicitly included in the link; see the ++ description of the `-rpath-link' option. If `-rpath' is not used ++ when linking an ELF executable, the contents of the environment ++ variable `LD_RUN_PATH' will be used if it is defined. ++ ++ The `-rpath' option may also be used on SunOS. By default, on ++ SunOS, the linker will form a runtime search patch out of all the ++ `-L' options it is given. If a `-rpath' option is used, the ++ runtime search path will be formed exclusively using the `-rpath' ++ options, ignoring the `-L' options. This can be useful when using ++ gcc, which adds many `-L' options which may be on NFS mounted ++ filesystems. ++ ++ For compatibility with other ELF linkers, if the `-R' option is ++ followed by a directory name, rather than a file name, it is ++ treated as the `-rpath' option. ++ ++`-rpath-link DIR' ++ When using ELF or SunOS, one shared library may require another. ++ This happens when an `ld -shared' link includes a shared library ++ as one of the input files. ++ ++ When the linker encounters such a dependency when doing a ++ non-shared, non-relocatable link, it will automatically try to ++ locate the required shared library and include it in the link, if ++ it is not included explicitly. In such a case, the `-rpath-link' ++ option specifies the first set of directories to search. The ++ `-rpath-link' option may specify a sequence of directory names ++ either by specifying a list of names separated by colons, or by ++ appearing multiple times. ++ ++ This option should be used with caution as it overrides the search ++ path that may have been hard compiled into a shared library. In ++ such a case it is possible to use unintentionally a different ++ search path than the runtime linker would do. ++ ++ The linker uses the following search paths to locate required ++ shared libraries. ++ 1. Any directories specified by `-rpath-link' options. ++ ++ 2. Any directories specified by `-rpath' options. The difference ++ between `-rpath' and `-rpath-link' is that directories ++ specified by `-rpath' options are included in the executable ++ and used at runtime, whereas the `-rpath-link' option is only ++ effective at link time. It is for the native linker only. ++ ++ 3. On an ELF system, if the `-rpath' and `rpath-link' options ++ were not used, search the contents of the environment variable ++ `LD_RUN_PATH'. It is for the native linker only. ++ ++ 4. On SunOS, if the `-rpath' option was not used, search any ++ directories specified using `-L' options. ++ ++ 5. For a native linker, the contents of the environment variable ++ `LD_LIBRARY_PATH'. ++ ++ 6. For a native ELF linker, the directories in `DT_RUNPATH' or ++ `DT_RPATH' of a shared library are searched for shared ++ libraries needed by it. The `DT_RPATH' entries are ignored if ++ `DT_RUNPATH' entries exist. ++ ++ 7. The default directories, normally `/lib' and `/usr/lib'. ++ ++ 8. For a native linker on an ELF system, if the file ++ `/etc/ld.so.conf' exists, the list of directories found in ++ that file. ++ ++ If the required shared library is not found, the linker will issue ++ a warning and continue with the link. ++ ++`-shared' ++`-Bshareable' ++ Create a shared library. This is currently only supported on ELF, ++ XCOFF and SunOS platforms. On SunOS, the linker will ++ automatically create a shared library if the `-e' option is not ++ used and there are undefined symbols in the link. ++ ++`--sort-common' ++ This option tells `ld' to sort the common symbols by size when it ++ places them in the appropriate output sections. First come all ++ the one byte symbols, then all the two byte, then all the four ++ byte, and then everything else. This is to prevent gaps between ++ symbols due to alignment constraints. ++ ++`--sort-section name' ++ This option will apply `SORT_BY_NAME' to all wildcard section ++ patterns in the linker script. ++ ++`--sort-section alignment' ++ This option will apply `SORT_BY_ALIGNMENT' to all wildcard section ++ patterns in the linker script. ++ ++`--split-by-file [SIZE]' ++ Similar to `--split-by-reloc' but creates a new output section for ++ each input file when SIZE is reached. SIZE defaults to a size of ++ 1 if not given. ++ ++`--split-by-reloc [COUNT]' ++ Tries to creates extra sections in the output file so that no ++ single output section in the file contains more than COUNT ++ relocations. This is useful when generating huge relocatable ++ files for downloading into certain real time kernels with the COFF ++ object file format; since COFF cannot represent more than 65535 ++ relocations in a single section. Note that this will fail to work ++ with object file formats which do not support arbitrary sections. ++ The linker will not split up individual input sections for ++ redistribution, so if a single input section contains more than ++ COUNT relocations one output section will contain that many ++ relocations. COUNT defaults to a value of 32768. ++ ++`--stats' ++ Compute and display statistics about the operation of the linker, ++ such as execution time and memory usage. ++ ++`--sysroot=DIRECTORY' ++ Use DIRECTORY as the location of the sysroot, overriding the ++ configure-time default. This option is only supported by linkers ++ that were configured using `--with-sysroot'. ++ ++`--traditional-format' ++ For some targets, the output of `ld' is different in some ways from ++ the output of some existing linker. This switch requests `ld' to ++ use the traditional format instead. ++ ++ For example, on SunOS, `ld' combines duplicate entries in the ++ symbol string table. This can reduce the size of an output file ++ with full debugging information by over 30 percent. ++ Unfortunately, the SunOS `dbx' program can not read the resulting ++ program (`gdb' has no trouble). The `--traditional-format' switch ++ tells `ld' to not combine duplicate entries. ++ ++`--section-start SECTIONNAME=ORG' ++ Locate a section in the output file at the absolute address given ++ by ORG. You may use this option as many times as necessary to ++ locate multiple sections in the command line. ORG must be a ++ single hexadecimal integer; for compatibility with other linkers, ++ you may omit the leading `0x' usually associated with hexadecimal ++ values. _Note:_ there should be no white space between ++ SECTIONNAME, the equals sign ("<=>"), and ORG. ++ ++`-Tbss ORG' ++`-Tdata ORG' ++`-Ttext ORG' ++ Same as -section-start, with `.bss', `.data' or `.text' as the ++ SECTIONNAME. ++ ++`--unresolved-symbols=METHOD' ++ Determine how to handle unresolved symbols. There are four ++ possible values for `method': ++ ++ `ignore-all' ++ Do not report any unresolved symbols. ++ ++ `report-all' ++ Report all unresolved symbols. This is the default. ++ ++ `ignore-in-object-files' ++ Report unresolved symbols that are contained in shared ++ libraries, but ignore them if they come from regular object ++ files. ++ ++ `ignore-in-shared-libs' ++ Report unresolved symbols that come from regular object ++ files, but ignore them if they come from shared libraries. ++ This can be useful when creating a dynamic binary and it is ++ known that all the shared libraries that it should be ++ referencing are included on the linker's command line. ++ ++ The behaviour for shared libraries on their own can also be ++ controlled by the `--[no-]allow-shlib-undefined' option. ++ ++ Normally the linker will generate an error message for each ++ reported unresolved symbol but the option ++ `--warn-unresolved-symbols' can change this to a warning. ++ ++`--dll-verbose' ++`--verbose' ++ Display the version number for `ld' and list the linker emulations ++ supported. Display which input files can and cannot be opened. ++ Display the linker script being used by the linker. ++ ++`--version-script=VERSION-SCRIPTFILE' ++ Specify the name of a version script to the linker. This is ++ typically used when creating shared libraries to specify ++ additional information about the version hierarchy for the library ++ being created. This option is only meaningful on ELF platforms ++ which support shared libraries. *Note VERSION::. ++ ++`--warn-common' ++ Warn when a common symbol is combined with another common symbol ++ or with a symbol definition. Unix linkers allow this somewhat ++ sloppy practise, but linkers on some other operating systems do ++ not. This option allows you to find potential problems from ++ combining global symbols. Unfortunately, some C libraries use ++ this practise, so you may get some warnings about symbols in the ++ libraries as well as in your programs. ++ ++ There are three kinds of global symbols, illustrated here by C ++ examples: ++ ++ `int i = 1;' ++ A definition, which goes in the initialized data section of ++ the output file. ++ ++ `extern int i;' ++ An undefined reference, which does not allocate space. There ++ must be either a definition or a common symbol for the ++ variable somewhere. ++ ++ `int i;' ++ A common symbol. If there are only (one or more) common ++ symbols for a variable, it goes in the uninitialized data ++ area of the output file. The linker merges multiple common ++ symbols for the same variable into a single symbol. If they ++ are of different sizes, it picks the largest size. The ++ linker turns a common symbol into a declaration, if there is ++ a definition of the same variable. ++ ++ The `--warn-common' option can produce five kinds of warnings. ++ Each warning consists of a pair of lines: the first describes the ++ symbol just encountered, and the second describes the previous ++ symbol encountered with the same name. One or both of the two ++ symbols will be a common symbol. ++ ++ 1. Turning a common symbol into a reference, because there is ++ already a definition for the symbol. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overridden by definition ++ FILE(SECTION): warning: defined here ++ ++ 2. Turning a common symbol into a reference, because a later ++ definition for the symbol is encountered. This is the same ++ as the previous case, except that the symbols are encountered ++ in a different order. ++ FILE(SECTION): warning: definition of `SYMBOL' ++ overriding common ++ FILE(SECTION): warning: common is here ++ ++ 3. Merging a common symbol with a previous same-sized common ++ symbol. ++ FILE(SECTION): warning: multiple common ++ of `SYMBOL' ++ FILE(SECTION): warning: previous common is here ++ ++ 4. Merging a common symbol with a previous larger common symbol. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overridden by larger common ++ FILE(SECTION): warning: larger common is here ++ ++ 5. Merging a common symbol with a previous smaller common ++ symbol. This is the same as the previous case, except that ++ the symbols are encountered in a different order. ++ FILE(SECTION): warning: common of `SYMBOL' ++ overriding smaller common ++ FILE(SECTION): warning: smaller common is here ++ ++`--warn-constructors' ++ Warn if any global constructors are used. This is only useful for ++ a few object file formats. For formats like COFF or ELF, the ++ linker can not detect the use of global constructors. ++ ++`--warn-multiple-gp' ++ Warn if multiple global pointer values are required in the output ++ file. This is only meaningful for certain processors, such as the ++ Alpha. Specifically, some processors put large-valued constants ++ in a special section. A special register (the global pointer) ++ points into the middle of this section, so that constants can be ++ loaded efficiently via a base-register relative addressing mode. ++ Since the offset in base-register relative mode is fixed and ++ relatively small (e.g., 16 bits), this limits the maximum size of ++ the constant pool. Thus, in large programs, it is often necessary ++ to use multiple global pointer values in order to be able to ++ address all possible constants. This option causes a warning to ++ be issued whenever this case occurs. ++ ++`--warn-once' ++ Only warn once for each undefined symbol, rather than once per ++ module which refers to it. ++ ++`--warn-section-align' ++ Warn if the address of an output section is changed because of ++ alignment. Typically, the alignment will be set by an input ++ section. The address will only be changed if it not explicitly ++ specified; that is, if the `SECTIONS' command does not specify a ++ start address for the section (*note SECTIONS::). ++ ++`--warn-shared-textrel' ++ Warn if the linker adds a DT_TEXTREL to a shared object. ++ ++`--warn-unresolved-symbols' ++ If the linker is going to report an unresolved symbol (see the ++ option `--unresolved-symbols') it will normally generate an error. ++ This option makes it generate a warning instead. ++ ++`--error-unresolved-symbols' ++ This restores the linker's default behaviour of generating errors ++ when it is reporting unresolved symbols. ++ ++`--whole-archive' ++ For each archive mentioned on the command line after the ++ `--whole-archive' option, include every object file in the archive ++ in the link, rather than searching the archive for the required ++ object files. This is normally used to turn an archive file into ++ a shared library, forcing every object to be included in the ++ resulting shared library. This option may be used more than once. ++ ++ Two notes when using this option from gcc: First, gcc doesn't know ++ about this option, so you have to use `-Wl,-whole-archive'. ++ Second, don't forget to use `-Wl,-no-whole-archive' after your ++ list of archives, because gcc will add its own list of archives to ++ your link and you may not want this flag to affect those as well. ++ ++`--wrap SYMBOL' ++ Use a wrapper function for SYMBOL. Any undefined reference to ++ SYMBOL will be resolved to `__wrap_SYMBOL'. Any undefined ++ reference to `__real_SYMBOL' will be resolved to SYMBOL. ++ ++ This can be used to provide a wrapper for a system function. The ++ wrapper function should be called `__wrap_SYMBOL'. If it wishes ++ to call the system function, it should call `__real_SYMBOL'. ++ ++ Here is a trivial example: ++ ++ void * ++ __wrap_malloc (size_t c) ++ { ++ printf ("malloc called with %zu\n", c); ++ return __real_malloc (c); ++ } ++ ++ If you link other code with this file using `--wrap malloc', then ++ all calls to `malloc' will call the function `__wrap_malloc' ++ instead. The call to `__real_malloc' in `__wrap_malloc' will call ++ the real `malloc' function. ++ ++ You may wish to provide a `__real_malloc' function as well, so that ++ links without the `--wrap' option will succeed. If you do this, ++ you should not put the definition of `__real_malloc' in the same ++ file as `__wrap_malloc'; if you do, the assembler may resolve the ++ call before the linker has a chance to wrap it to `malloc'. ++ ++`--eh-frame-hdr' ++ Request creation of `.eh_frame_hdr' section and ELF ++ `PT_GNU_EH_FRAME' segment header. ++ ++`--enable-new-dtags' ++`--disable-new-dtags' ++ This linker can create the new dynamic tags in ELF. But the older ++ ELF systems may not understand them. If you specify ++ `--enable-new-dtags', the dynamic tags will be created as needed. ++ If you specify `--disable-new-dtags', no new dynamic tags will be ++ created. By default, the new dynamic tags are not created. Note ++ that those options are only available for ELF systems. ++ ++`--hash-size=NUMBER' ++ Set the default size of the linker's hash tables to a prime number ++ close to NUMBER. Increasing this value can reduce the length of ++ time it takes the linker to perform its tasks, at the expense of ++ increasing the linker's memory requirements. Similarly reducing ++ this value can reduce the memory requirements at the expense of ++ speed. ++ ++`--reduce-memory-overheads' ++ This option reduces memory requirements at ld runtime, at the ++ expense of linking speed. This was introduced to select the old ++ O(n^2) algorithm for link map file generation, rather than the new ++ O(n) algorithm which uses about 40% more memory for symbol storage. ++ ++ Another effect of the switch is to set the default hash table size ++ to 1021, which again saves memory at the cost of lengthening the ++ linker's run time. This is not done however if the `--hash-size' ++ switch has been used. ++ ++ The `--reduce-memory-overheads' switch may be also be used to ++ enable other tradeoffs in future versions of the linker. ++ ++ ++2.1.1 Options Specific to i386 PE Targets ++----------------------------------------- ++ ++The i386 PE linker supports the `-shared' option, which causes the ++output to be a dynamically linked library (DLL) instead of a normal ++executable. You should name the output `*.dll' when you use this ++option. In addition, the linker fully supports the standard `*.def' ++files, which may be specified on the linker command line like an object ++file (in fact, it should precede archives it exports symbols from, to ++ensure that they get linked in, just like a normal object file). ++ ++ In addition to the options common to all targets, the i386 PE linker ++support additional command line options that are specific to the i386 ++PE target. Options that take values may be separated from their values ++by either a space or an equals sign. ++ ++`--add-stdcall-alias' ++ If given, symbols with a stdcall suffix (@NN) will be exported ++ as-is and also with the suffix stripped. [This option is specific ++ to the i386 PE targeted port of the linker] ++ ++`--base-file FILE' ++ Use FILE as the name of a file in which to save the base addresses ++ of all the relocations needed for generating DLLs with `dlltool'. ++ [This is an i386 PE specific option] ++ ++`--dll' ++ Create a DLL instead of a regular executable. You may also use ++ `-shared' or specify a `LIBRARY' in a given `.def' file. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--enable-stdcall-fixup' ++`--disable-stdcall-fixup' ++ If the link finds a symbol that it cannot resolve, it will attempt ++ to do "fuzzy linking" by looking for another defined symbol that ++ differs only in the format of the symbol name (cdecl vs stdcall) ++ and will resolve that symbol by linking to the match. For ++ example, the undefined symbol `_foo' might be linked to the ++ function `_foo@12', or the undefined symbol `_bar@16' might be ++ linked to the function `_bar'. When the linker does this, it ++ prints a warning, since it normally should have failed to link, ++ but sometimes import libraries generated from third-party dlls may ++ need this feature to be usable. If you specify ++ `--enable-stdcall-fixup', this feature is fully enabled and ++ warnings are not printed. If you specify ++ `--disable-stdcall-fixup', this feature is disabled and such ++ mismatches are considered to be errors. [This option is specific ++ to the i386 PE targeted port of the linker] ++ ++`--export-all-symbols' ++ If given, all global symbols in the objects used to build a DLL ++ will be exported by the DLL. Note that this is the default if ++ there otherwise wouldn't be any exported symbols. When symbols are ++ explicitly exported via DEF files or implicitly exported via ++ function attributes, the default is to not export anything else ++ unless this option is given. Note that the symbols `DllMain@12', ++ `DllEntryPoint@0', `DllMainCRTStartup@12', and `impure_ptr' will ++ not be automatically exported. Also, symbols imported from other ++ DLLs will not be re-exported, nor will symbols specifying the ++ DLL's internal layout such as those beginning with `_head_' or ++ ending with `_iname'. In addition, no symbols from `libgcc', ++ `libstd++', `libmingw32', or `crtX.o' will be exported. Symbols ++ whose names begin with `__rtti_' or `__builtin_' will not be ++ exported, to help with C++ DLLs. Finally, there is an extensive ++ list of cygwin-private symbols that are not exported (obviously, ++ this applies on when building DLLs for cygwin targets). These ++ cygwin-excludes are: `_cygwin_dll_entry@12', ++ `_cygwin_crt0_common@8', `_cygwin_noncygwin_dll_entry@12', ++ `_fmode', `_impure_ptr', `cygwin_attach_dll', `cygwin_premain0', ++ `cygwin_premain1', `cygwin_premain2', `cygwin_premain3', and ++ `environ'. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--exclude-symbols SYMBOL,SYMBOL,...' ++ Specifies a list of symbols which should not be automatically ++ exported. The symbol names may be delimited by commas or colons. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--file-alignment' ++ Specify the file alignment. Sections in the file will always ++ begin at file offsets which are multiples of this number. This ++ defaults to 512. [This option is specific to the i386 PE targeted ++ port of the linker] ++ ++`--heap RESERVE' ++`--heap RESERVE,COMMIT' ++ Specify the amount of memory to reserve (and optionally commit) to ++ be used as heap for this program. The default is 1Mb reserved, 4K ++ committed. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--image-base VALUE' ++ Use VALUE as the base address of your program or dll. This is the ++ lowest memory location that will be used when your program or dll ++ is loaded. To reduce the need to relocate and improve performance ++ of your dlls, each should have a unique base address and not ++ overlap any other dlls. The default is 0x400000 for executables, ++ and 0x10000000 for dlls. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--kill-at' ++ If given, the stdcall suffixes (@NN) will be stripped from symbols ++ before they are exported. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--large-address-aware' ++ If given, the appropriate bit in the "Charateristics" field of the ++ COFF header is set to indicate that this executable supports ++ virtual addresses greater than 2 gigabytes. This should be used ++ in conjuction with the /3GB or /USERVA=VALUE megabytes switch in ++ the "[operating systems]" section of the BOOT.INI. Otherwise, ++ this bit has no effect. [This option is specific to PE targeted ++ ports of the linker] ++ ++`--major-image-version VALUE' ++ Sets the major number of the "image version". Defaults to 1. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--major-os-version VALUE' ++ Sets the major number of the "os version". Defaults to 4. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--major-subsystem-version VALUE' ++ Sets the major number of the "subsystem version". Defaults to 4. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--minor-image-version VALUE' ++ Sets the minor number of the "image version". Defaults to 0. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--minor-os-version VALUE' ++ Sets the minor number of the "os version". Defaults to 0. [This ++ option is specific to the i386 PE targeted port of the linker] ++ ++`--minor-subsystem-version VALUE' ++ Sets the minor number of the "subsystem version". Defaults to 0. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--output-def FILE' ++ The linker will create the file FILE which will contain a DEF file ++ corresponding to the DLL the linker is generating. This DEF file ++ (which should be called `*.def') may be used to create an import ++ library with `dlltool' or may be used as a reference to ++ automatically or implicitly exported symbols. [This option is ++ specific to the i386 PE targeted port of the linker] ++ ++`--out-implib FILE' ++ The linker will create the file FILE which will contain an import ++ lib corresponding to the DLL the linker is generating. This import ++ lib (which should be called `*.dll.a' or `*.a' may be used to link ++ clients against the generated DLL; this behaviour makes it ++ possible to skip a separate `dlltool' import library creation step. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--enable-auto-image-base' ++ Automatically choose the image base for DLLs, unless one is ++ specified using the `--image-base' argument. By using a hash ++ generated from the dllname to create unique image bases for each ++ DLL, in-memory collisions and relocations which can delay program ++ execution are avoided. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--disable-auto-image-base' ++ Do not automatically generate a unique image base. If there is no ++ user-specified image base (`--image-base') then use the platform ++ default. [This option is specific to the i386 PE targeted port of ++ the linker] ++ ++`--dll-search-prefix STRING' ++ When linking dynamically to a dll without an import library, ++ search for `.dll' in preference to ++ `lib.dll'. This behaviour allows easy distinction ++ between DLLs built for the various "subplatforms": native, cygwin, ++ uwin, pw, etc. For instance, cygwin DLLs typically use ++ `--dll-search-prefix=cyg'. [This option is specific to the i386 ++ PE targeted port of the linker] ++ ++`--enable-auto-import' ++ Do sophisticated linking of `_symbol' to `__imp__symbol' for DATA ++ imports from DLLs, and create the necessary thunking symbols when ++ building the import libraries with those DATA exports. Note: Use ++ of the 'auto-import' extension will cause the text section of the ++ image file to be made writable. This does not conform to the ++ PE-COFF format specification published by Microsoft. ++ ++ Using 'auto-import' generally will 'just work' - but sometimes you ++ may see this message: ++ ++ "variable '' can't be auto-imported. Please read the ++ documentation for ld's `--enable-auto-import' for details." ++ ++ This message occurs when some (sub)expression accesses an address ++ ultimately given by the sum of two constants (Win32 import tables ++ only allow one). Instances where this may occur include accesses ++ to member fields of struct variables imported from a DLL, as well ++ as using a constant index into an array variable imported from a ++ DLL. Any multiword variable (arrays, structs, long long, etc) may ++ trigger this error condition. However, regardless of the exact ++ data type of the offending exported variable, ld will always ++ detect it, issue the warning, and exit. ++ ++ There are several ways to address this difficulty, regardless of ++ the data type of the exported variable: ++ ++ One way is to use -enable-runtime-pseudo-reloc switch. This leaves ++ the task of adjusting references in your client code for runtime ++ environment, so this method works only when runtime environment ++ supports this feature. ++ ++ A second solution is to force one of the 'constants' to be a ++ variable - that is, unknown and un-optimizable at compile time. ++ For arrays, there are two possibilities: a) make the indexee (the ++ array's address) a variable, or b) make the 'constant' index a ++ variable. Thus: ++ ++ extern type extern_array[]; ++ extern_array[1] --> ++ { volatile type *t=extern_array; t[1] } ++ ++ or ++ ++ extern type extern_array[]; ++ extern_array[1] --> ++ { volatile int t=1; extern_array[t] } ++ ++ For structs (and most other multiword data types) the only option ++ is to make the struct itself (or the long long, or the ...) ++ variable: ++ ++ extern struct s extern_struct; ++ extern_struct.field --> ++ { volatile struct s *t=&extern_struct; t->field } ++ ++ or ++ ++ extern long long extern_ll; ++ extern_ll --> ++ { volatile long long * local_ll=&extern_ll; *local_ll } ++ ++ A third method of dealing with this difficulty is to abandon ++ 'auto-import' for the offending symbol and mark it with ++ `__declspec(dllimport)'. However, in practise that requires using ++ compile-time #defines to indicate whether you are building a DLL, ++ building client code that will link to the DLL, or merely ++ building/linking to a static library. In making the choice ++ between the various methods of resolving the 'direct address with ++ constant offset' problem, you should consider typical real-world ++ usage: ++ ++ Original: ++ --foo.h ++ extern int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ printf("%d\n",arr[1]); ++ } ++ ++ Solution 1: ++ --foo.h ++ extern int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ /* This workaround is for win32 and cygwin; do not "optimize" */ ++ volatile int *parr = arr; ++ printf("%d\n",parr[1]); ++ } ++ ++ Solution 2: ++ --foo.h ++ /* Note: auto-export is assumed (no __declspec(dllexport)) */ ++ #if (defined(_WIN32) || defined(__CYGWIN__)) && \ ++ !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC)) ++ #define FOO_IMPORT __declspec(dllimport) ++ #else ++ #define FOO_IMPORT ++ #endif ++ extern FOO_IMPORT int arr[]; ++ --foo.c ++ #include "foo.h" ++ void main(int argc, char **argv){ ++ printf("%d\n",arr[1]); ++ } ++ ++ A fourth way to avoid this problem is to re-code your library to ++ use a functional interface rather than a data interface for the ++ offending variables (e.g. set_foo() and get_foo() accessor ++ functions). [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--disable-auto-import' ++ Do not attempt to do sophisticated linking of `_symbol' to ++ `__imp__symbol' for DATA imports from DLLs. [This option is ++ specific to the i386 PE targeted port of the linker] ++ ++`--enable-runtime-pseudo-reloc' ++ If your code contains expressions described in -enable-auto-import ++ section, that is, DATA imports from DLL with non-zero offset, this ++ switch will create a vector of 'runtime pseudo relocations' which ++ can be used by runtime environment to adjust references to such ++ data in your client code. [This option is specific to the i386 PE ++ targeted port of the linker] ++ ++`--disable-runtime-pseudo-reloc' ++ Do not create pseudo relocations for non-zero offset DATA imports ++ from DLLs. This is the default. [This option is specific to the ++ i386 PE targeted port of the linker] ++ ++`--enable-extra-pe-debug' ++ Show additional debug info related to auto-import symbol thunking. ++ [This option is specific to the i386 PE targeted port of the ++ linker] ++ ++`--section-alignment' ++ Sets the section alignment. Sections in memory will always begin ++ at addresses which are a multiple of this number. Defaults to ++ 0x1000. [This option is specific to the i386 PE targeted port of ++ the linker] ++ ++`--stack RESERVE' ++`--stack RESERVE,COMMIT' ++ Specify the amount of memory to reserve (and optionally commit) to ++ be used as stack for this program. The default is 2Mb reserved, 4K ++ committed. [This option is specific to the i386 PE targeted port ++ of the linker] ++ ++`--subsystem WHICH' ++`--subsystem WHICH:MAJOR' ++`--subsystem WHICH:MAJOR.MINOR' ++ Specifies the subsystem under which your program will execute. The ++ legal values for WHICH are `native', `windows', `console', ++ `posix', and `xbox'. You may optionally set the subsystem version ++ also. Numeric values are also accepted for WHICH. [This option ++ is specific to the i386 PE targeted port of the linker] ++ ++ ++ ++File: ld.info, Node: Environment, Prev: Options, Up: Invocation ++ ++2.2 Environment Variables ++========================= ++ ++You can change the behaviour of `ld' with the environment variables ++`GNUTARGET', `LDEMULATION' and `COLLECT_NO_DEMANGLE'. ++ ++ `GNUTARGET' determines the input-file object format if you don't use ++`-b' (or its synonym `--format'). Its value should be one of the BFD ++names for an input format (*note BFD::). If there is no `GNUTARGET' in ++the environment, `ld' uses the natural format of the target. If ++`GNUTARGET' is set to `default' then BFD attempts to discover the input ++format by examining binary input files; this method often succeeds, but ++there are potential ambiguities, since there is no method of ensuring ++that the magic number used to specify object-file formats is unique. ++However, the configuration procedure for BFD on each system places the ++conventional format for that system first in the search-list, so ++ambiguities are resolved in favor of convention. ++ ++ `LDEMULATION' determines the default emulation if you don't use the ++`-m' option. The emulation can affect various aspects of linker ++behaviour, particularly the default linker script. You can list the ++available emulations with the `--verbose' or `-V' options. If the `-m' ++option is not used, and the `LDEMULATION' environment variable is not ++defined, the default emulation depends upon how the linker was ++configured. ++ ++ Normally, the linker will default to demangling symbols. However, if ++`COLLECT_NO_DEMANGLE' is set in the environment, then it will default ++to not demangling symbols. This environment variable is used in a ++similar fashion by the `gcc' linker wrapper program. The default may ++be overridden by the `--demangle' and `--no-demangle' options. ++ ++ ++File: ld.info, Node: Scripts, Next: Machine Dependent, Prev: Invocation, Up: Top ++ ++3 Linker Scripts ++**************** ++ ++Every link is controlled by a "linker script". This script is written ++in the linker command language. ++ ++ The main purpose of the linker script is to describe how the ++sections in the input files should be mapped into the output file, and ++to control the memory layout of the output file. Most linker scripts ++do nothing more than this. However, when necessary, the linker script ++can also direct the linker to perform many other operations, using the ++commands described below. ++ ++ The linker always uses a linker script. If you do not supply one ++yourself, the linker will use a default script that is compiled into the ++linker executable. You can use the `--verbose' command line option to ++display the default linker script. Certain command line options, such ++as `-r' or `-N', will affect the default linker script. ++ ++ You may supply your own linker script by using the `-T' command line ++option. When you do this, your linker script will replace the default ++linker script. ++ ++ You may also use linker scripts implicitly by naming them as input ++files to the linker, as though they were files to be linked. *Note ++Implicit Linker Scripts::. ++ ++* Menu: ++ ++* Basic Script Concepts:: Basic Linker Script Concepts ++* Script Format:: Linker Script Format ++* Simple Example:: Simple Linker Script Example ++* Simple Commands:: Simple Linker Script Commands ++* Assignments:: Assigning Values to Symbols ++* SECTIONS:: SECTIONS Command ++* MEMORY:: MEMORY Command ++* PHDRS:: PHDRS Command ++* VERSION:: VERSION Command ++* Expressions:: Expressions in Linker Scripts ++* Implicit Linker Scripts:: Implicit Linker Scripts ++ ++ ++File: ld.info, Node: Basic Script Concepts, Next: Script Format, Up: Scripts ++ ++3.1 Basic Linker Script Concepts ++================================ ++ ++We need to define some basic concepts and vocabulary in order to ++describe the linker script language. ++ ++ The linker combines input files into a single output file. The ++output file and each input file are in a special data format known as an ++"object file format". Each file is called an "object file". The ++output file is often called an "executable", but for our purposes we ++will also call it an object file. Each object file has, among other ++things, a list of "sections". We sometimes refer to a section in an ++input file as an "input section"; similarly, a section in the output ++file is an "output section". ++ ++ Each section in an object file has a name and a size. Most sections ++also have an associated block of data, known as the "section contents". ++A section may be marked as "loadable", which mean that the contents ++should be loaded into memory when the output file is run. A section ++with no contents may be "allocatable", which means that an area in ++memory should be set aside, but nothing in particular should be loaded ++there (in some cases this memory must be zeroed out). A section which ++is neither loadable nor allocatable typically contains some sort of ++debugging information. ++ ++ Every loadable or allocatable output section has two addresses. The ++first is the "VMA", or virtual memory address. This is the address the ++section will have when the output file is run. The second is the ++"LMA", or load memory address. This is the address at which the ++section will be loaded. In most cases the two addresses will be the ++same. An example of when they might be different is when a data section ++is loaded into ROM, and then copied into RAM when the program starts up ++(this technique is often used to initialize global variables in a ROM ++based system). In this case the ROM address would be the LMA, and the ++RAM address would be the VMA. ++ ++ You can see the sections in an object file by using the `objdump' ++program with the `-h' option. ++ ++ Every object file also has a list of "symbols", known as the "symbol ++table". A symbol may be defined or undefined. Each symbol has a name, ++and each defined symbol has an address, among other information. If ++you compile a C or C++ program into an object file, you will get a ++defined symbol for every defined function and global or static ++variable. Every undefined function or global variable which is ++referenced in the input file will become an undefined symbol. ++ ++ You can see the symbols in an object file by using the `nm' program, ++or by using the `objdump' program with the `-t' option. ++ ++ ++File: ld.info, Node: Script Format, Next: Simple Example, Prev: Basic Script Concepts, Up: Scripts ++ ++3.2 Linker Script Format ++======================== ++ ++Linker scripts are text files. ++ ++ You write a linker script as a series of commands. Each command is ++either a keyword, possibly followed by arguments, or an assignment to a ++symbol. You may separate commands using semicolons. Whitespace is ++generally ignored. ++ ++ Strings such as file or format names can normally be entered ++directly. If the file name contains a character such as a comma which ++would otherwise serve to separate file names, you may put the file name ++in double quotes. There is no way to use a double quote character in a ++file name. ++ ++ You may include comments in linker scripts just as in C, delimited by ++`/*' and `*/'. As in C, comments are syntactically equivalent to ++whitespace. ++ ++ ++File: ld.info, Node: Simple Example, Next: Simple Commands, Prev: Script Format, Up: Scripts ++ ++3.3 Simple Linker Script Example ++================================ ++ ++Many linker scripts are fairly simple. ++ ++ The simplest possible linker script has just one command: ++`SECTIONS'. You use the `SECTIONS' command to describe the memory ++layout of the output file. ++ ++ The `SECTIONS' command is a powerful command. Here we will describe ++a simple use of it. Let's assume your program consists only of code, ++initialized data, and uninitialized data. These will be in the ++`.text', `.data', and `.bss' sections, respectively. Let's assume ++further that these are the only sections which appear in your input ++files. ++ ++ For this example, let's say that the code should be loaded at address ++0x10000, and that the data should start at address 0x8000000. Here is a ++linker script which will do that: ++ SECTIONS ++ { ++ . = 0x10000; ++ .text : { *(.text) } ++ . = 0x8000000; ++ .data : { *(.data) } ++ .bss : { *(.bss) } ++ } ++ ++ You write the `SECTIONS' command as the keyword `SECTIONS', followed ++by a series of symbol assignments and output section descriptions ++enclosed in curly braces. ++ ++ The first line inside the `SECTIONS' command of the above example ++sets the value of the special symbol `.', which is the location ++counter. If you do not specify the address of an output section in some ++other way (other ways are described later), the address is set from the ++current value of the location counter. The location counter is then ++incremented by the size of the output section. At the start of the ++`SECTIONS' command, the location counter has the value `0'. ++ ++ The second line defines an output section, `.text'. The colon is ++required syntax which may be ignored for now. Within the curly braces ++after the output section name, you list the names of the input sections ++which should be placed into this output section. The `*' is a wildcard ++which matches any file name. The expression `*(.text)' means all ++`.text' input sections in all input files. ++ ++ Since the location counter is `0x10000' when the output section ++`.text' is defined, the linker will set the address of the `.text' ++section in the output file to be `0x10000'. ++ ++ The remaining lines define the `.data' and `.bss' sections in the ++output file. The linker will place the `.data' output section at ++address `0x8000000'. After the linker places the `.data' output ++section, the value of the location counter will be `0x8000000' plus the ++size of the `.data' output section. The effect is that the linker will ++place the `.bss' output section immediately after the `.data' output ++section in memory. ++ ++ The linker will ensure that each output section has the required ++alignment, by increasing the location counter if necessary. In this ++example, the specified addresses for the `.text' and `.data' sections ++will probably satisfy any alignment constraints, but the linker may ++have to create a small gap between the `.data' and `.bss' sections. ++ ++ That's it! That's a simple and complete linker script. ++ ++ ++File: ld.info, Node: Simple Commands, Next: Assignments, Prev: Simple Example, Up: Scripts ++ ++3.4 Simple Linker Script Commands ++================================= ++ ++In this section we describe the simple linker script commands. ++ ++* Menu: ++ ++* Entry Point:: Setting the entry point ++* File Commands:: Commands dealing with files ++ ++* Format Commands:: Commands dealing with object file formats ++ ++* Miscellaneous Commands:: Other linker script commands ++ ++ ++File: ld.info, Node: Entry Point, Next: File Commands, Up: Simple Commands ++ ++3.4.1 Setting the Entry Point ++----------------------------- ++ ++The first instruction to execute in a program is called the "entry ++point". You can use the `ENTRY' linker script command to set the entry ++point. The argument is a symbol name: ++ ENTRY(SYMBOL) ++ ++ There are several ways to set the entry point. The linker will set ++the entry point by trying each of the following methods in order, and ++stopping when one of them succeeds: ++ * the `-e' ENTRY command-line option; ++ ++ * the `ENTRY(SYMBOL)' command in a linker script; ++ ++ * the value of the symbol `start', if defined; ++ ++ * the address of the first byte of the `.text' section, if present; ++ ++ * The address `0'. ++ ++ ++File: ld.info, Node: File Commands, Next: Format Commands, Prev: Entry Point, Up: Simple Commands ++ ++3.4.2 Commands Dealing with Files ++--------------------------------- ++ ++Several linker script commands deal with files. ++ ++`INCLUDE FILENAME' ++ Include the linker script FILENAME at this point. The file will ++ be searched for in the current directory, and in any directory ++ specified with the `-L' option. You can nest calls to `INCLUDE' ++ up to 10 levels deep. ++ ++`INPUT(FILE, FILE, ...)' ++`INPUT(FILE FILE ...)' ++ The `INPUT' command directs the linker to include the named files ++ in the link, as though they were named on the command line. ++ ++ For example, if you always want to include `subr.o' any time you do ++ a link, but you can't be bothered to put it on every link command ++ line, then you can put `INPUT (subr.o)' in your linker script. ++ ++ In fact, if you like, you can list all of your input files in the ++ linker script, and then invoke the linker with nothing but a `-T' ++ option. ++ ++ In case a "sysroot prefix" is configured, and the filename starts ++ with the `/' character, and the script being processed was located ++ inside the "sysroot prefix", the filename will be looked for in ++ the "sysroot prefix". Otherwise, the linker will try to open the ++ file in the current directory. If it is not found, the linker ++ will search through the archive library search path. See the ++ description of `-L' in *Note Command Line Options: Options. ++ ++ If you use `INPUT (-lFILE)', `ld' will transform the name to ++ `libFILE.a', as with the command line argument `-l'. ++ ++ When you use the `INPUT' command in an implicit linker script, the ++ files will be included in the link at the point at which the linker ++ script file is included. This can affect archive searching. ++ ++`GROUP(FILE, FILE, ...)' ++`GROUP(FILE FILE ...)' ++ The `GROUP' command is like `INPUT', except that the named files ++ should all be archives, and they are searched repeatedly until no ++ new undefined references are created. See the description of `-(' ++ in *Note Command Line Options: Options. ++ ++`AS_NEEDED(FILE, FILE, ...)' ++`AS_NEEDED(FILE FILE ...)' ++ This construct can appear only inside of the `INPUT' or `GROUP' ++ commands, among other filenames. The files listed will be handled ++ as if they appear directly in the `INPUT' or `GROUP' commands, ++ with the exception of ELF shared libraries, that will be added only ++ when they are actually needed. This construct essentially enables ++ `--as-needed' option for all the files listed inside of it and ++ restores previous `--as-needed' resp. `--no-as-needed' setting ++ afterwards. ++ ++`OUTPUT(FILENAME)' ++ The `OUTPUT' command names the output file. Using ++ `OUTPUT(FILENAME)' in the linker script is exactly like using `-o ++ FILENAME' on the command line (*note Command Line Options: ++ Options.). If both are used, the command line option takes ++ precedence. ++ ++ You can use the `OUTPUT' command to define a default name for the ++ output file other than the usual default of `a.out'. ++ ++`SEARCH_DIR(PATH)' ++ The `SEARCH_DIR' command adds PATH to the list of paths where `ld' ++ looks for archive libraries. Using `SEARCH_DIR(PATH)' is exactly ++ like using `-L PATH' on the command line (*note Command Line ++ Options: Options.). If both are used, then the linker will search ++ both paths. Paths specified using the command line option are ++ searched first. ++ ++`STARTUP(FILENAME)' ++ The `STARTUP' command is just like the `INPUT' command, except ++ that FILENAME will become the first input file to be linked, as ++ though it were specified first on the command line. This may be ++ useful when using a system in which the entry point is always the ++ start of the first file. ++ ++ ++File: ld.info, Node: Format Commands, Next: Miscellaneous Commands, Prev: File Commands, Up: Simple Commands ++ ++3.4.3 Commands Dealing with Object File Formats ++----------------------------------------------- ++ ++A couple of linker script commands deal with object file formats. ++ ++`OUTPUT_FORMAT(BFDNAME)' ++`OUTPUT_FORMAT(DEFAULT, BIG, LITTLE)' ++ The `OUTPUT_FORMAT' command names the BFD format to use for the ++ output file (*note BFD::). Using `OUTPUT_FORMAT(BFDNAME)' is ++ exactly like using `--oformat BFDNAME' on the command line (*note ++ Command Line Options: Options.). If both are used, the command ++ line option takes precedence. ++ ++ You can use `OUTPUT_FORMAT' with three arguments to use different ++ formats based on the `-EB' and `-EL' command line options. This ++ permits the linker script to set the output format based on the ++ desired endianness. ++ ++ If neither `-EB' nor `-EL' are used, then the output format will ++ be the first argument, DEFAULT. If `-EB' is used, the output ++ format will be the second argument, BIG. If `-EL' is used, the ++ output format will be the third argument, LITTLE. ++ ++ For example, the default linker script for the MIPS ELF target ++ uses this command: ++ OUTPUT_FORMAT(elf32-bigmips, elf32-bigmips, elf32-littlemips) ++ This says that the default format for the output file is ++ `elf32-bigmips', but if the user uses the `-EL' command line ++ option, the output file will be created in the `elf32-littlemips' ++ format. ++ ++`TARGET(BFDNAME)' ++ The `TARGET' command names the BFD format to use when reading input ++ files. It affects subsequent `INPUT' and `GROUP' commands. This ++ command is like using `-b BFDNAME' on the command line (*note ++ Command Line Options: Options.). If the `TARGET' command is used ++ but `OUTPUT_FORMAT' is not, then the last `TARGET' command is also ++ used to set the format for the output file. *Note BFD::. ++ ++ ++File: ld.info, Node: Miscellaneous Commands, Prev: Format Commands, Up: Simple Commands ++ ++3.4.4 Other Linker Script Commands ++---------------------------------- ++ ++There are a few other linker scripts commands. ++ ++`ASSERT(EXP, MESSAGE)' ++ Ensure that EXP is non-zero. If it is zero, then exit the linker ++ with an error code, and print MESSAGE. ++ ++`EXTERN(SYMBOL SYMBOL ...)' ++ Force SYMBOL to be entered in the output file as an undefined ++ symbol. Doing this may, for example, trigger linking of additional ++ modules from standard libraries. You may list several SYMBOLs for ++ each `EXTERN', and you may use `EXTERN' multiple times. This ++ command has the same effect as the `-u' command-line option. ++ ++`FORCE_COMMON_ALLOCATION' ++ This command has the same effect as the `-d' command-line option: ++ to make `ld' assign space to common symbols even if a relocatable ++ output file is specified (`-r'). ++ ++`INHIBIT_COMMON_ALLOCATION' ++ This command has the same effect as the `--no-define-common' ++ command-line option: to make `ld' omit the assignment of addresses ++ to common symbols even for a non-relocatable output file. ++ ++`NOCROSSREFS(SECTION SECTION ...)' ++ This command may be used to tell `ld' to issue an error about any ++ references among certain output sections. ++ ++ In certain types of programs, particularly on embedded systems when ++ using overlays, when one section is loaded into memory, another ++ section will not be. Any direct references between the two ++ sections would be errors. For example, it would be an error if ++ code in one section called a function defined in the other section. ++ ++ The `NOCROSSREFS' command takes a list of output section names. If ++ `ld' detects any cross references between the sections, it reports ++ an error and returns a non-zero exit status. Note that the ++ `NOCROSSREFS' command uses output section names, not input section ++ names. ++ ++`OUTPUT_ARCH(BFDARCH)' ++ Specify a particular output machine architecture. The argument is ++ one of the names used by the BFD library (*note BFD::). You can ++ see the architecture of an object file by using the `objdump' ++ program with the `-f' option. ++ ++ ++File: ld.info, Node: Assignments, Next: SECTIONS, Prev: Simple Commands, Up: Scripts ++ ++3.5 Assigning Values to Symbols ++=============================== ++ ++You may assign a value to a symbol in a linker script. This will define ++the symbol and place it into the symbol table with a global scope. ++ ++* Menu: ++ ++* Simple Assignments:: Simple Assignments ++* PROVIDE:: PROVIDE ++* PROVIDE_HIDDEN:: PROVIDE_HIDDEN ++* Source Code Reference:: How to use a linker script defined symbol in source code ++ ++ ++File: ld.info, Node: Simple Assignments, Next: PROVIDE, Up: Assignments ++ ++3.5.1 Simple Assignments ++------------------------ ++ ++You may assign to a symbol using any of the C assignment operators: ++ ++`SYMBOL = EXPRESSION ;' ++`SYMBOL += EXPRESSION ;' ++`SYMBOL -= EXPRESSION ;' ++`SYMBOL *= EXPRESSION ;' ++`SYMBOL /= EXPRESSION ;' ++`SYMBOL <<= EXPRESSION ;' ++`SYMBOL >>= EXPRESSION ;' ++`SYMBOL &= EXPRESSION ;' ++`SYMBOL |= EXPRESSION ;' ++ ++ The first case will define SYMBOL to the value of EXPRESSION. In ++the other cases, SYMBOL must already be defined, and the value will be ++adjusted accordingly. ++ ++ The special symbol name `.' indicates the location counter. You may ++only use this within a `SECTIONS' command. *Note Location Counter::. ++ ++ The semicolon after EXPRESSION is required. ++ ++ Expressions are defined below; see *Note Expressions::. ++ ++ You may write symbol assignments as commands in their own right, or ++as statements within a `SECTIONS' command, or as part of an output ++section description in a `SECTIONS' command. ++ ++ The section of the symbol will be set from the section of the ++expression; for more information, see *Note Expression Section::. ++ ++ Here is an example showing the three different places that symbol ++assignments may be used: ++ ++ floating_point = 0; ++ SECTIONS ++ { ++ .text : ++ { ++ *(.text) ++ _etext = .; ++ } ++ _bdata = (. + 3) & ~ 3; ++ .data : { *(.data) } ++ } ++ In this example, the symbol `floating_point' will be defined as ++zero. The symbol `_etext' will be defined as the address following the ++last `.text' input section. The symbol `_bdata' will be defined as the ++address following the `.text' output section aligned upward to a 4 byte ++boundary. ++ ++ ++File: ld.info, Node: PROVIDE, Next: PROVIDE_HIDDEN, Prev: Simple Assignments, Up: Assignments ++ ++3.5.2 PROVIDE ++------------- ++ ++In some cases, it is desirable for a linker script to define a symbol ++only if it is referenced and is not defined by any object included in ++the link. For example, traditional linkers defined the symbol `etext'. ++However, ANSI C requires that the user be able to use `etext' as a ++function name without encountering an error. The `PROVIDE' keyword may ++be used to define a symbol, such as `etext', only if it is referenced ++but not defined. The syntax is `PROVIDE(SYMBOL = EXPRESSION)'. ++ ++ Here is an example of using `PROVIDE' to define `etext': ++ SECTIONS ++ { ++ .text : ++ { ++ *(.text) ++ _etext = .; ++ PROVIDE(etext = .); ++ } ++ } ++ ++ In this example, if the program defines `_etext' (with a leading ++underscore), the linker will give a multiple definition error. If, on ++the other hand, the program defines `etext' (with no leading ++underscore), the linker will silently use the definition in the program. ++If the program references `etext' but does not define it, the linker ++will use the definition in the linker script. ++ ++ ++File: ld.info, Node: PROVIDE_HIDDEN, Next: Source Code Reference, Prev: PROVIDE, Up: Assignments ++ ++3.5.3 PROVIDE_HIDDEN ++-------------------- ++ ++Similar to `PROVIDE'. For ELF targeted ports, the symbol will be ++hidden and won't be exported. ++ ++ ++File: ld.info, Node: Source Code Reference, Prev: PROVIDE_HIDDEN, Up: Assignments ++ ++3.5.4 Source Code Reference ++--------------------------- ++ ++Accessing a linker script defined variable from source code is not ++intuitive. In particular a linker script symbol is not equivalent to a ++variable declaration in a high level language, it is instead a symbol ++that does not have a value. ++ ++ Before going further, it is important to note that compilers often ++transform names in the source code into different names when they are ++stored in the symbol table. For example, Fortran compilers commonly ++prepend or append an underscore, and C++ performs extensive `name ++mangling'. Therefore there might be a discrepancy between the name of ++a variable as it is used in source code and the name of the same ++variable as it is defined in a linker script. For example in C a ++linker script variable might be referred to as: ++ ++ extern int foo; ++ ++ But in the linker script it might be defined as: ++ ++ _foo = 1000; ++ ++ In the remaining examples however it is assumed that no name ++transformation has taken place. ++ ++ When a symbol is declared in a high level language such as C, two ++things happen. The first is that the compiler reserves enough space in ++the program's memory to hold the _value_ of the symbol. The second is ++that the compiler creates an entry in the program's symbol table which ++holds the symbol's _address_. ie the symbol table contains the address ++of the block of memory holding the symbol's value. So for example the ++following C declaration, at file scope: ++ ++ int foo = 1000; ++ ++ creates a entry called `foo' in the symbol table. This entry holds ++the address of an `int' sized block of memory where the number 1000 is ++initially stored. ++ ++ When a program references a symbol the compiler generates code that ++first accesses the symbol table to find the address of the symbol's ++memory block and then code to read the value from that memory block. ++So: ++ ++ foo = 1; ++ ++ looks up the symbol `foo' in the symbol table, gets the address ++associated with this symbol and then writes the value 1 into that ++address. Whereas: ++ ++ int * a = & foo; ++ ++ looks up the symbol `foo' in the symbol table, gets it address and ++then copies this address into the block of memory associated with the ++variable `a'. ++ ++ Linker scripts symbol declarations, by contrast, create an entry in ++the symbol table but do not assign any memory to them. Thus they are ++an address without a value. So for example the linker script ++definition: ++ ++ foo = 1000; ++ ++ creates an entry in the symbol table called `foo' which holds the ++address of memory location 1000, but nothing special is stored at ++address 1000. This means that you cannot access the _value_ of a ++linker script defined symbol - it has no value - all you can do is ++access the _address_ of a linker script defined symbol. ++ ++ Hence when you are using a linker script defined symbol in source ++code you should always take the address of the symbol, and never ++attempt to use its value. For example suppose you want to copy the ++contents of a section of memory called .ROM into a section called ++.FLASH and the linker script contains these declarations: ++ ++ start_of_ROM = .ROM; ++ end_of_ROM = .ROM + sizeof (.ROM) - 1; ++ start_of_FLASH = .FLASH; ++ ++ Then the C source code to perform the copy would be: ++ ++ extern char start_of_ROM, end_of_ROM, start_of_FLASH; ++ ++ memcpy (& start_of_FLASH, & start_of_ROM, & end_of_ROM - & start_of_ROM); ++ ++ Note the use of the `&' operators. These are correct. ++ ++ ++File: ld.info, Node: SECTIONS, Next: MEMORY, Prev: Assignments, Up: Scripts ++ ++3.6 SECTIONS Command ++==================== ++ ++The `SECTIONS' command tells the linker how to map input sections into ++output sections, and how to place the output sections in memory. ++ ++ The format of the `SECTIONS' command is: ++ SECTIONS ++ { ++ SECTIONS-COMMAND ++ SECTIONS-COMMAND ++ ... ++ } ++ ++ Each SECTIONS-COMMAND may of be one of the following: ++ ++ * an `ENTRY' command (*note Entry command: Entry Point.) ++ ++ * a symbol assignment (*note Assignments::) ++ ++ * an output section description ++ ++ * an overlay description ++ ++ The `ENTRY' command and symbol assignments are permitted inside the ++`SECTIONS' command for convenience in using the location counter in ++those commands. This can also make the linker script easier to ++understand because you can use those commands at meaningful points in ++the layout of the output file. ++ ++ Output section descriptions and overlay descriptions are described ++below. ++ ++ If you do not use a `SECTIONS' command in your linker script, the ++linker will place each input section into an identically named output ++section in the order that the sections are first encountered in the ++input files. If all input sections are present in the first file, for ++example, the order of sections in the output file will match the order ++in the first input file. The first section will be at address zero. ++ ++* Menu: ++ ++* Output Section Description:: Output section description ++* Output Section Name:: Output section name ++* Output Section Address:: Output section address ++* Input Section:: Input section description ++* Output Section Data:: Output section data ++* Output Section Keywords:: Output section keywords ++* Output Section Discarding:: Output section discarding ++* Output Section Attributes:: Output section attributes ++* Overlay Description:: Overlay description ++ ++ ++File: ld.info, Node: Output Section Description, Next: Output Section Name, Up: SECTIONS ++ ++3.6.1 Output Section Description ++-------------------------------- ++ ++The full description of an output section looks like this: ++ SECTION [ADDRESS] [(TYPE)] : ++ [AT(LMA)] [ALIGN(SECTION_ALIGN)] [SUBALIGN(SUBSECTION_ALIGN)] ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [>REGION] [AT>LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP] ++ ++ Most output sections do not use most of the optional section ++attributes. ++ ++ The whitespace around SECTION is required, so that the section name ++is unambiguous. The colon and the curly braces are also required. The ++line breaks and other white space are optional. ++ ++ Each OUTPUT-SECTION-COMMAND may be one of the following: ++ ++ * a symbol assignment (*note Assignments::) ++ ++ * an input section description (*note Input Section::) ++ ++ * data values to include directly (*note Output Section Data::) ++ ++ * a special output section keyword (*note Output Section Keywords::) ++ ++ ++File: ld.info, Node: Output Section Name, Next: Output Section Address, Prev: Output Section Description, Up: SECTIONS ++ ++3.6.2 Output Section Name ++------------------------- ++ ++The name of the output section is SECTION. SECTION must meet the ++constraints of your output format. In formats which only support a ++limited number of sections, such as `a.out', the name must be one of ++the names supported by the format (`a.out', for example, allows only ++`.text', `.data' or `.bss'). If the output format supports any number ++of sections, but with numbers and not names (as is the case for Oasys), ++the name should be supplied as a quoted numeric string. A section name ++may consist of any sequence of characters, but a name which contains ++any unusual characters such as commas must be quoted. ++ ++ The output section name `/DISCARD/' is special; *Note Output Section ++Discarding::. ++ ++ ++File: ld.info, Node: Output Section Address, Next: Input Section, Prev: Output Section Name, Up: SECTIONS ++ ++3.6.3 Output Section Address ++---------------------------- ++ ++The ADDRESS is an expression for the VMA (the virtual memory address) ++of the output section. If you do not provide ADDRESS, the linker will ++set it based on REGION if present, or otherwise based on the current ++value of the location counter. ++ ++ If you provide ADDRESS, the address of the output section will be ++set to precisely that. If you provide neither ADDRESS nor REGION, then ++the address of the output section will be set to the current value of ++the location counter aligned to the alignment requirements of the ++output section. The alignment requirement of the output section is the ++strictest alignment of any input section contained within the output ++section. ++ ++ For example, ++ .text . : { *(.text) } ++ and ++ .text : { *(.text) } ++ are subtly different. The first will set the address of the `.text' ++output section to the current value of the location counter. The ++second will set it to the current value of the location counter aligned ++to the strictest alignment of a `.text' input section. ++ ++ The ADDRESS may be an arbitrary expression; *Note Expressions::. ++For example, if you want to align the section on a 0x10 byte boundary, ++so that the lowest four bits of the section address are zero, you could ++do something like this: ++ .text ALIGN(0x10) : { *(.text) } ++ This works because `ALIGN' returns the current location counter ++aligned upward to the specified value. ++ ++ Specifying ADDRESS for a section will change the value of the ++location counter. ++ ++ ++File: ld.info, Node: Input Section, Next: Output Section Data, Prev: Output Section Address, Up: SECTIONS ++ ++3.6.4 Input Section Description ++------------------------------- ++ ++The most common output section command is an input section description. ++ ++ The input section description is the most basic linker script ++operation. You use output sections to tell the linker how to lay out ++your program in memory. You use input section descriptions to tell the ++linker how to map the input files into your memory layout. ++ ++* Menu: ++ ++* Input Section Basics:: Input section basics ++* Input Section Wildcards:: Input section wildcard patterns ++* Input Section Common:: Input section for common symbols ++* Input Section Keep:: Input section and garbage collection ++* Input Section Example:: Input section example ++ ++ ++File: ld.info, Node: Input Section Basics, Next: Input Section Wildcards, Up: Input Section ++ ++3.6.4.1 Input Section Basics ++............................ ++ ++An input section description consists of a file name optionally followed ++by a list of section names in parentheses. ++ ++ The file name and the section name may be wildcard patterns, which we ++describe further below (*note Input Section Wildcards::). ++ ++ The most common input section description is to include all input ++sections with a particular name in the output section. For example, to ++include all input `.text' sections, you would write: ++ *(.text) ++ Here the `*' is a wildcard which matches any file name. To exclude ++a list of files from matching the file name wildcard, EXCLUDE_FILE may ++be used to match all files except the ones specified in the ++EXCLUDE_FILE list. For example: ++ (*(EXCLUDE_FILE (*crtend.o *otherfile.o) .ctors)) ++ will cause all .ctors sections from all files except `crtend.o' and ++`otherfile.o' to be included. ++ ++ There are two ways to include more than one section: ++ *(.text .rdata) ++ *(.text) *(.rdata) ++ The difference between these is the order in which the `.text' and ++`.rdata' input sections will appear in the output section. In the ++first example, they will be intermingled, appearing in the same order as ++they are found in the linker input. In the second example, all `.text' ++input sections will appear first, followed by all `.rdata' input ++sections. ++ ++ You can specify a file name to include sections from a particular ++file. You would do this if one or more of your files contain special ++data that needs to be at a particular location in memory. For example: ++ data.o(.data) ++ ++ If you use a file name without a list of sections, then all sections ++in the input file will be included in the output section. This is not ++commonly done, but it may by useful on occasion. For example: ++ data.o ++ ++ When you use a file name which does not contain any wild card ++characters, the linker will first see if you also specified the file ++name on the linker command line or in an `INPUT' command. If you did ++not, the linker will attempt to open the file as an input file, as ++though it appeared on the command line. Note that this differs from an ++`INPUT' command, because the linker will not search for the file in the ++archive search path. ++ ++ ++File: ld.info, Node: Input Section Wildcards, Next: Input Section Common, Prev: Input Section Basics, Up: Input Section ++ ++3.6.4.2 Input Section Wildcard Patterns ++....................................... ++ ++In an input section description, either the file name or the section ++name or both may be wildcard patterns. ++ ++ The file name of `*' seen in many examples is a simple wildcard ++pattern for the file name. ++ ++ The wildcard patterns are like those used by the Unix shell. ++ ++`*' ++ matches any number of characters ++ ++`?' ++ matches any single character ++ ++`[CHARS]' ++ matches a single instance of any of the CHARS; the `-' character ++ may be used to specify a range of characters, as in `[a-z]' to ++ match any lower case letter ++ ++`\' ++ quotes the following character ++ ++ When a file name is matched with a wildcard, the wildcard characters ++will not match a `/' character (used to separate directory names on ++Unix). A pattern consisting of a single `*' character is an exception; ++it will always match any file name, whether it contains a `/' or not. ++In a section name, the wildcard characters will match a `/' character. ++ ++ File name wildcard patterns only match files which are explicitly ++specified on the command line or in an `INPUT' command. The linker ++does not search directories to expand wildcards. ++ ++ If a file name matches more than one wildcard pattern, or if a file ++name appears explicitly and is also matched by a wildcard pattern, the ++linker will use the first match in the linker script. For example, this ++sequence of input section descriptions is probably in error, because the ++`data.o' rule will not be used: ++ .data : { *(.data) } ++ .data1 : { data.o(.data) } ++ ++ Normally, the linker will place files and sections matched by ++wildcards in the order in which they are seen during the link. You can ++change this by using the `SORT_BY_NAME' keyword, which appears before a ++wildcard pattern in parentheses (e.g., `SORT_BY_NAME(.text*)'). When ++the `SORT_BY_NAME' keyword is used, the linker will sort the files or ++sections into ascending order by name before placing them in the output ++file. ++ ++ `SORT_BY_ALIGNMENT' is very similar to `SORT_BY_NAME'. The ++difference is `SORT_BY_ALIGNMENT' will sort sections into ascending ++order by alignment before placing them in the output file. ++ ++ `SORT' is an alias for `SORT_BY_NAME'. ++ ++ When there are nested section sorting commands in linker script, ++there can be at most 1 level of nesting for section sorting commands. ++ ++ 1. `SORT_BY_NAME' (`SORT_BY_ALIGNMENT' (wildcard section pattern)). ++ It will sort the input sections by name first, then by alignment ++ if 2 sections have the same name. ++ ++ 2. `SORT_BY_ALIGNMENT' (`SORT_BY_NAME' (wildcard section pattern)). ++ It will sort the input sections by alignment first, then by name ++ if 2 sections have the same alignment. ++ ++ 3. `SORT_BY_NAME' (`SORT_BY_NAME' (wildcard section pattern)) is ++ treated the same as `SORT_BY_NAME' (wildcard section pattern). ++ ++ 4. `SORT_BY_ALIGNMENT' (`SORT_BY_ALIGNMENT' (wildcard section ++ pattern)) is treated the same as `SORT_BY_ALIGNMENT' (wildcard ++ section pattern). ++ ++ 5. All other nested section sorting commands are invalid. ++ ++ When both command line section sorting option and linker script ++section sorting command are used, section sorting command always takes ++precedence over the command line option. ++ ++ If the section sorting command in linker script isn't nested, the ++command line option will make the section sorting command to be treated ++as nested sorting command. ++ ++ 1. `SORT_BY_NAME' (wildcard section pattern ) with `--sort-sections ++ alignment' is equivalent to `SORT_BY_NAME' (`SORT_BY_ALIGNMENT' ++ (wildcard section pattern)). ++ ++ 2. `SORT_BY_ALIGNMENT' (wildcard section pattern) with ++ `--sort-section name' is equivalent to `SORT_BY_ALIGNMENT' ++ (`SORT_BY_NAME' (wildcard section pattern)). ++ ++ If the section sorting command in linker script is nested, the ++command line option will be ignored. ++ ++ If you ever get confused about where input sections are going, use ++the `-M' linker option to generate a map file. The map file shows ++precisely how input sections are mapped to output sections. ++ ++ This example shows how wildcard patterns might be used to partition ++files. This linker script directs the linker to place all `.text' ++sections in `.text' and all `.bss' sections in `.bss'. The linker will ++place the `.data' section from all files beginning with an upper case ++character in `.DATA'; for all other files, the linker will place the ++`.data' section in `.data'. ++ SECTIONS { ++ .text : { *(.text) } ++ .DATA : { [A-Z]*(.data) } ++ .data : { *(.data) } ++ .bss : { *(.bss) } ++ } ++ ++ ++File: ld.info, Node: Input Section Common, Next: Input Section Keep, Prev: Input Section Wildcards, Up: Input Section ++ ++3.6.4.3 Input Section for Common Symbols ++........................................ ++ ++A special notation is needed for common symbols, because in many object ++file formats common symbols do not have a particular input section. The ++linker treats common symbols as though they are in an input section ++named `COMMON'. ++ ++ You may use file names with the `COMMON' section just as with any ++other input sections. You can use this to place common symbols from a ++particular input file in one section while common symbols from other ++input files are placed in another section. ++ ++ In most cases, common symbols in input files will be placed in the ++`.bss' section in the output file. For example: ++ .bss { *(.bss) *(COMMON) } ++ ++ Some object file formats have more than one type of common symbol. ++For example, the MIPS ELF object file format distinguishes standard ++common symbols and small common symbols. In this case, the linker will ++use a different special section name for other types of common symbols. ++In the case of MIPS ELF, the linker uses `COMMON' for standard common ++symbols and `.scommon' for small common symbols. This permits you to ++map the different types of common symbols into memory at different ++locations. ++ ++ You will sometimes see `[COMMON]' in old linker scripts. This ++notation is now considered obsolete. It is equivalent to `*(COMMON)'. ++ ++ ++File: ld.info, Node: Input Section Keep, Next: Input Section Example, Prev: Input Section Common, Up: Input Section ++ ++3.6.4.4 Input Section and Garbage Collection ++............................................ ++ ++When link-time garbage collection is in use (`--gc-sections'), it is ++often useful to mark sections that should not be eliminated. This is ++accomplished by surrounding an input section's wildcard entry with ++`KEEP()', as in `KEEP(*(.init))' or `KEEP(SORT_BY_NAME(*)(.ctors))'. ++ ++ ++File: ld.info, Node: Input Section Example, Prev: Input Section Keep, Up: Input Section ++ ++3.6.4.5 Input Section Example ++............................. ++ ++The following example is a complete linker script. It tells the linker ++to read all of the sections from file `all.o' and place them at the ++start of output section `outputa' which starts at location `0x10000'. ++All of section `.input1' from file `foo.o' follows immediately, in the ++same output section. All of section `.input2' from `foo.o' goes into ++output section `outputb', followed by section `.input1' from `foo1.o'. ++All of the remaining `.input1' and `.input2' sections from any files ++are written to output section `outputc'. ++ ++ SECTIONS { ++ outputa 0x10000 : ++ { ++ all.o ++ foo.o (.input1) ++ } ++ outputb : ++ { ++ foo.o (.input2) ++ foo1.o (.input1) ++ } ++ outputc : ++ { ++ *(.input1) ++ *(.input2) ++ } ++ } ++ ++ ++File: ld.info, Node: Output Section Data, Next: Output Section Keywords, Prev: Input Section, Up: SECTIONS ++ ++3.6.5 Output Section Data ++------------------------- ++ ++You can include explicit bytes of data in an output section by using ++`BYTE', `SHORT', `LONG', `QUAD', or `SQUAD' as an output section ++command. Each keyword is followed by an expression in parentheses ++providing the value to store (*note Expressions::). The value of the ++expression is stored at the current value of the location counter. ++ ++ The `BYTE', `SHORT', `LONG', and `QUAD' commands store one, two, ++four, and eight bytes (respectively). After storing the bytes, the ++location counter is incremented by the number of bytes stored. ++ ++ For example, this will store the byte 1 followed by the four byte ++value of the symbol `addr': ++ BYTE(1) ++ LONG(addr) ++ ++ When using a 64 bit host or target, `QUAD' and `SQUAD' are the same; ++they both store an 8 byte, or 64 bit, value. When both host and target ++are 32 bits, an expression is computed as 32 bits. In this case `QUAD' ++stores a 32 bit value zero extended to 64 bits, and `SQUAD' stores a 32 ++bit value sign extended to 64 bits. ++ ++ If the object file format of the output file has an explicit ++endianness, which is the normal case, the value will be stored in that ++endianness. When the object file format does not have an explicit ++endianness, as is true of, for example, S-records, the value will be ++stored in the endianness of the first input object file. ++ ++ Note--these commands only work inside a section description and not ++between them, so the following will produce an error from the linker: ++ SECTIONS { .text : { *(.text) } LONG(1) .data : { *(.data) } } ++ whereas this will work: ++ SECTIONS { .text : { *(.text) ; LONG(1) } .data : { *(.data) } } ++ ++ You may use the `FILL' command to set the fill pattern for the ++current section. It is followed by an expression in parentheses. Any ++otherwise unspecified regions of memory within the section (for example, ++gaps left due to the required alignment of input sections) are filled ++with the value of the expression, repeated as necessary. A `FILL' ++statement covers memory locations after the point at which it occurs in ++the section definition; by including more than one `FILL' statement, ++you can have different fill patterns in different parts of an output ++section. ++ ++ This example shows how to fill unspecified regions of memory with the ++value `0x90': ++ FILL(0x90909090) ++ ++ The `FILL' command is similar to the `=FILLEXP' output section ++attribute, but it only affects the part of the section following the ++`FILL' command, rather than the entire section. If both are used, the ++`FILL' command takes precedence. *Note Output Section Fill::, for ++details on the fill expression. ++ ++ ++File: ld.info, Node: Output Section Keywords, Next: Output Section Discarding, Prev: Output Section Data, Up: SECTIONS ++ ++3.6.6 Output Section Keywords ++----------------------------- ++ ++There are a couple of keywords which can appear as output section ++commands. ++ ++`CREATE_OBJECT_SYMBOLS' ++ The command tells the linker to create a symbol for each input ++ file. The name of each symbol will be the name of the ++ corresponding input file. The section of each symbol will be the ++ output section in which the `CREATE_OBJECT_SYMBOLS' command ++ appears. ++ ++ This is conventional for the a.out object file format. It is not ++ normally used for any other object file format. ++ ++`CONSTRUCTORS' ++ When linking using the a.out object file format, the linker uses an ++ unusual set construct to support C++ global constructors and ++ destructors. When linking object file formats which do not support ++ arbitrary sections, such as ECOFF and XCOFF, the linker will ++ automatically recognize C++ global constructors and destructors by ++ name. For these object file formats, the `CONSTRUCTORS' command ++ tells the linker to place constructor information in the output ++ section where the `CONSTRUCTORS' command appears. The ++ `CONSTRUCTORS' command is ignored for other object file formats. ++ ++ The symbol `__CTOR_LIST__' marks the start of the global ++ constructors, and the symbol `__CTOR_END__' marks the end. ++ Similarly, `__DTOR_LIST__' and `__DTOR_END__' mark the start and ++ end of the global destructors. The first word in the list is the ++ number of entries, followed by the address of each constructor or ++ destructor, followed by a zero word. The compiler must arrange to ++ actually run the code. For these object file formats GNU C++ ++ normally calls constructors from a subroutine `__main'; a call to ++ `__main' is automatically inserted into the startup code for ++ `main'. GNU C++ normally runs destructors either by using ++ `atexit', or directly from the function `exit'. ++ ++ For object file formats such as `COFF' or `ELF' which support ++ arbitrary section names, GNU C++ will normally arrange to put the ++ addresses of global constructors and destructors into the `.ctors' ++ and `.dtors' sections. Placing the following sequence into your ++ linker script will build the sort of table which the GNU C++ ++ runtime code expects to see. ++ ++ __CTOR_LIST__ = .; ++ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) ++ *(.ctors) ++ LONG(0) ++ __CTOR_END__ = .; ++ __DTOR_LIST__ = .; ++ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) ++ *(.dtors) ++ LONG(0) ++ __DTOR_END__ = .; ++ ++ If you are using the GNU C++ support for initialization priority, ++ which provides some control over the order in which global ++ constructors are run, you must sort the constructors at link time ++ to ensure that they are executed in the correct order. When using ++ the `CONSTRUCTORS' command, use `SORT_BY_NAME(CONSTRUCTORS)' ++ instead. When using the `.ctors' and `.dtors' sections, use ++ `*(SORT_BY_NAME(.ctors))' and `*(SORT_BY_NAME(.dtors))' instead of ++ just `*(.ctors)' and `*(.dtors)'. ++ ++ Normally the compiler and linker will handle these issues ++ automatically, and you will not need to concern yourself with ++ them. However, you may need to consider this if you are using C++ ++ and writing your own linker scripts. ++ ++ ++ ++File: ld.info, Node: Output Section Discarding, Next: Output Section Attributes, Prev: Output Section Keywords, Up: SECTIONS ++ ++3.6.7 Output Section Discarding ++------------------------------- ++ ++The linker will not create output section which do not have any ++contents. This is for convenience when referring to input sections that ++may or may not be present in any of the input files. For example: ++ .foo { *(.foo) } ++ will only create a `.foo' section in the output file if there is a ++`.foo' section in at least one input file. ++ ++ If you use anything other than an input section description as an ++output section command, such as a symbol assignment, then the output ++section will always be created, even if there are no matching input ++sections. ++ ++ The special output section name `/DISCARD/' may be used to discard ++input sections. Any input sections which are assigned to an output ++section named `/DISCARD/' are not included in the output file. ++ ++ ++File: ld.info, Node: Output Section Attributes, Next: Overlay Description, Prev: Output Section Discarding, Up: SECTIONS ++ ++3.6.8 Output Section Attributes ++------------------------------- ++ ++We showed above that the full description of an output section looked ++like this: ++ SECTION [ADDRESS] [(TYPE)] : ++ [AT(LMA)] [ALIGN(SECTION_ALIGN)] [SUBALIGN(SUBSECTION_ALIGN)] ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [>REGION] [AT>LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP] ++We've already described SECTION, ADDRESS, and ++OUTPUT-SECTION-COMMAND. In this section we will describe the remaining ++section attributes. ++ ++* Menu: ++ ++* Output Section Type:: Output section type ++* Output Section LMA:: Output section LMA ++* Forced Output Alignment:: Forced Output Alignment ++* Forced Input Alignment:: Forced Input Alignment ++* Output Section Region:: Output section region ++* Output Section Phdr:: Output section phdr ++* Output Section Fill:: Output section fill ++ ++ ++File: ld.info, Node: Output Section Type, Next: Output Section LMA, Up: Output Section Attributes ++ ++3.6.8.1 Output Section Type ++........................... ++ ++Each output section may have a type. The type is a keyword in ++parentheses. The following types are defined: ++ ++`NOLOAD' ++ The section should be marked as not loadable, so that it will not ++ be loaded into memory when the program is run. ++ ++`DSECT' ++`COPY' ++`INFO' ++`OVERLAY' ++ These type names are supported for backward compatibility, and are ++ rarely used. They all have the same effect: the section should be ++ marked as not allocatable, so that no memory is allocated for the ++ section when the program is run. ++ ++ The linker normally sets the attributes of an output section based on ++the input sections which map into it. You can override this by using ++the section type. For example, in the script sample below, the `ROM' ++section is addressed at memory location `0' and does not need to be ++loaded when the program is run. The contents of the `ROM' section will ++appear in the linker output file as usual. ++ SECTIONS { ++ ROM 0 (NOLOAD) : { ... } ++ ... ++ } ++ ++ ++File: ld.info, Node: Output Section LMA, Next: Forced Output Alignment, Prev: Output Section Type, Up: Output Section Attributes ++ ++3.6.8.2 Output Section LMA ++.......................... ++ ++Every section has a virtual address (VMA) and a load address (LMA); see ++*Note Basic Script Concepts::. The address expression which may appear ++in an output section description sets the VMA (*note Output Section ++Address::). ++ ++ The linker will normally set the LMA equal to the VMA. You can ++change that by using the `AT' keyword. The expression LMA that follows ++the `AT' keyword specifies the load address of the section. ++ ++ Alternatively, with `AT>LMA_REGION' expression, you may specify a ++memory region for the section's load address. *Note MEMORY::. Note ++that if the section has not had a VMA assigned to it then the linker ++will use the LMA_REGION as the VMA region as well. *Note Output ++Section Region::. ++ ++ This feature is designed to make it easy to build a ROM image. For ++example, the following linker script creates three output sections: one ++called `.text', which starts at `0x1000', one called `.mdata', which is ++loaded at the end of the `.text' section even though its VMA is ++`0x2000', and one called `.bss' to hold uninitialized data at address ++`0x3000'. The symbol `_data' is defined with the value `0x2000', which ++shows that the location counter holds the VMA value, not the LMA value. ++ ++ SECTIONS ++ { ++ .text 0x1000 : { *(.text) _etext = . ; } ++ .mdata 0x2000 : ++ AT ( ADDR (.text) + SIZEOF (.text) ) ++ { _data = . ; *(.data); _edata = . ; } ++ .bss 0x3000 : ++ { _bstart = . ; *(.bss) *(COMMON) ; _bend = . ;} ++ } ++ ++ The run-time initialization code for use with a program generated ++with this linker script would include something like the following, to ++copy the initialized data from the ROM image to its runtime address. ++Notice how this code takes advantage of the symbols defined by the ++linker script. ++ ++ extern char _etext, _data, _edata, _bstart, _bend; ++ char *src = &_etext; ++ char *dst = &_data; ++ ++ /* ROM has data at end of text; copy it. */ ++ while (dst < &_edata) { ++ *dst++ = *src++; ++ } ++ ++ /* Zero bss */ ++ for (dst = &_bstart; dst< &_bend; dst++) ++ *dst = 0; ++ ++ ++File: ld.info, Node: Forced Output Alignment, Next: Forced Input Alignment, Prev: Output Section LMA, Up: Output Section Attributes ++ ++3.6.8.3 Forced Output Alignment ++............................... ++ ++You can increase an output section's alignment by using ALIGN. ++ ++ ++File: ld.info, Node: Forced Input Alignment, Next: Output Section Region, Prev: Forced Output Alignment, Up: Output Section Attributes ++ ++3.6.8.4 Forced Input Alignment ++.............................. ++ ++You can force input section alignment within an output section by using ++SUBALIGN. The value specified overrides any alignment given by input ++sections, whether larger or smaller. ++ ++ ++File: ld.info, Node: Output Section Region, Next: Output Section Phdr, Prev: Forced Input Alignment, Up: Output Section Attributes ++ ++3.6.8.5 Output Section Region ++............................. ++ ++You can assign a section to a previously defined region of memory by ++using `>REGION'. *Note MEMORY::. ++ ++ Here is a simple example: ++ MEMORY { rom : ORIGIN = 0x1000, LENGTH = 0x1000 } ++ SECTIONS { ROM : { *(.text) } >rom } ++ ++ ++File: ld.info, Node: Output Section Phdr, Next: Output Section Fill, Prev: Output Section Region, Up: Output Section Attributes ++ ++3.6.8.6 Output Section Phdr ++........................... ++ ++You can assign a section to a previously defined program segment by ++using `:PHDR'. *Note PHDRS::. If a section is assigned to one or more ++segments, then all subsequent allocated sections will be assigned to ++those segments as well, unless they use an explicitly `:PHDR' modifier. ++You can use `:NONE' to tell the linker to not put the section in any ++segment at all. ++ ++ Here is a simple example: ++ PHDRS { text PT_LOAD ; } ++ SECTIONS { .text : { *(.text) } :text } ++ ++ ++File: ld.info, Node: Output Section Fill, Prev: Output Section Phdr, Up: Output Section Attributes ++ ++3.6.8.7 Output Section Fill ++........................... ++ ++You can set the fill pattern for an entire section by using `=FILLEXP'. ++FILLEXP is an expression (*note Expressions::). Any otherwise ++unspecified regions of memory within the output section (for example, ++gaps left due to the required alignment of input sections) will be ++filled with the value, repeated as necessary. If the fill expression ++is a simple hex number, ie. a string of hex digit starting with `0x' ++and without a trailing `k' or `M', then an arbitrarily long sequence of ++hex digits can be used to specify the fill pattern; Leading zeros ++become part of the pattern too. For all other cases, including extra ++parentheses or a unary `+', the fill pattern is the four least ++significant bytes of the value of the expression. In all cases, the ++number is big-endian. ++ ++ You can also change the fill value with a `FILL' command in the ++output section commands; (*note Output Section Data::). ++ ++ Here is a simple example: ++ SECTIONS { .text : { *(.text) } =0x90909090 } ++ ++ ++File: ld.info, Node: Overlay Description, Prev: Output Section Attributes, Up: SECTIONS ++ ++3.6.9 Overlay Description ++------------------------- ++ ++An overlay description provides an easy way to describe sections which ++are to be loaded as part of a single memory image but are to be run at ++the same memory address. At run time, some sort of overlay manager will ++copy the overlaid sections in and out of the runtime memory address as ++required, perhaps by simply manipulating addressing bits. This approach ++can be useful, for example, when a certain region of memory is faster ++than another. ++ ++ Overlays are described using the `OVERLAY' command. The `OVERLAY' ++command is used within a `SECTIONS' command, like an output section ++description. The full syntax of the `OVERLAY' command is as follows: ++ OVERLAY [START] : [NOCROSSREFS] [AT ( LDADDR )] ++ { ++ SECNAME1 ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [:PHDR...] [=FILL] ++ SECNAME2 ++ { ++ OUTPUT-SECTION-COMMAND ++ OUTPUT-SECTION-COMMAND ++ ... ++ } [:PHDR...] [=FILL] ++ ... ++ } [>REGION] [:PHDR...] [=FILL] ++ ++ Everything is optional except `OVERLAY' (a keyword), and each ++section must have a name (SECNAME1 and SECNAME2 above). The section ++definitions within the `OVERLAY' construct are identical to those ++within the general `SECTIONS' contruct (*note SECTIONS::), except that ++no addresses and no memory regions may be defined for sections within ++an `OVERLAY'. ++ ++ The sections are all defined with the same starting address. The ++load addresses of the sections are arranged such that they are ++consecutive in memory starting at the load address used for the ++`OVERLAY' as a whole (as with normal section definitions, the load ++address is optional, and defaults to the start address; the start ++address is also optional, and defaults to the current value of the ++location counter). ++ ++ If the `NOCROSSREFS' keyword is used, and there any references among ++the sections, the linker will report an error. Since the sections all ++run at the same address, it normally does not make sense for one ++section to refer directly to another. *Note NOCROSSREFS: Miscellaneous ++Commands. ++ ++ For each section within the `OVERLAY', the linker automatically ++defines two symbols. The symbol `__load_start_SECNAME' is defined as ++the starting load address of the section. The symbol ++`__load_stop_SECNAME' is defined as the final load address of the ++section. Any characters within SECNAME which are not legal within C ++identifiers are removed. C (or assembler) code may use these symbols ++to move the overlaid sections around as necessary. ++ ++ At the end of the overlay, the value of the location counter is set ++to the start address of the overlay plus the size of the largest ++section. ++ ++ Here is an example. Remember that this would appear inside a ++`SECTIONS' construct. ++ OVERLAY 0x1000 : AT (0x4000) ++ { ++ .text0 { o1/*.o(.text) } ++ .text1 { o2/*.o(.text) } ++ } ++This will define both `.text0' and `.text1' to start at address ++0x1000. `.text0' will be loaded at address 0x4000, and `.text1' will ++be loaded immediately after `.text0'. The following symbols will be ++defined: `__load_start_text0', `__load_stop_text0', ++`__load_start_text1', `__load_stop_text1'. ++ ++ C code to copy overlay `.text1' into the overlay area might look ++like the following. ++ ++ extern char __load_start_text1, __load_stop_text1; ++ memcpy ((char *) 0x1000, &__load_start_text1, ++ &__load_stop_text1 - &__load_start_text1); ++ ++ Note that the `OVERLAY' command is just syntactic sugar, since ++everything it does can be done using the more basic commands. The above ++example could have been written identically as follows. ++ ++ .text0 0x1000 : AT (0x4000) { o1/*.o(.text) } ++ __load_start_text0 = LOADADDR (.text0); ++ __load_stop_text0 = LOADADDR (.text0) + SIZEOF (.text0); ++ .text1 0x1000 : AT (0x4000 + SIZEOF (.text0)) { o2/*.o(.text) } ++ __load_start_text1 = LOADADDR (.text1); ++ __load_stop_text1 = LOADADDR (.text1) + SIZEOF (.text1); ++ . = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1)); ++ ++ ++File: ld.info, Node: MEMORY, Next: PHDRS, Prev: SECTIONS, Up: Scripts ++ ++3.7 MEMORY Command ++================== ++ ++The linker's default configuration permits allocation of all available ++memory. You can override this by using the `MEMORY' command. ++ ++ The `MEMORY' command describes the location and size of blocks of ++memory in the target. You can use it to describe which memory regions ++may be used by the linker, and which memory regions it must avoid. You ++can then assign sections to particular memory regions. The linker will ++set section addresses based on the memory regions, and will warn about ++regions that become too full. The linker will not shuffle sections ++around to fit into the available regions. ++ ++ A linker script may contain at most one use of the `MEMORY' command. ++However, you can define as many blocks of memory within it as you ++wish. The syntax is: ++ MEMORY ++ { ++ NAME [(ATTR)] : ORIGIN = ORIGIN, LENGTH = LEN ++ ... ++ } ++ ++ The NAME is a name used in the linker script to refer to the region. ++The region name has no meaning outside of the linker script. Region ++names are stored in a separate name space, and will not conflict with ++symbol names, file names, or section names. Each memory region must ++have a distinct name. ++ ++ The ATTR string is an optional list of attributes that specify ++whether to use a particular memory region for an input section which is ++not explicitly mapped in the linker script. As described in *Note ++SECTIONS::, if you do not specify an output section for some input ++section, the linker will create an output section with the same name as ++the input section. If you define region attributes, the linker will use ++them to select the memory region for the output section that it creates. ++ ++ The ATTR string must consist only of the following characters: ++`R' ++ Read-only section ++ ++`W' ++ Read/write section ++ ++`X' ++ Executable section ++ ++`A' ++ Allocatable section ++ ++`I' ++ Initialized section ++ ++`L' ++ Same as `I' ++ ++`!' ++ Invert the sense of any of the preceding attributes ++ ++ If a unmapped section matches any of the listed attributes other than ++`!', it will be placed in the memory region. The `!' attribute ++reverses this test, so that an unmapped section will be placed in the ++memory region only if it does not match any of the listed attributes. ++ ++ The ORIGIN is an numerical expression for the start address of the ++memory region. The expression must evaluate to a constant and it ++cannot involve any symbols. The keyword `ORIGIN' may be abbreviated to ++`org' or `o' (but not, for example, `ORG'). ++ ++ The LEN is an expression for the size in bytes of the memory region. ++As with the ORIGIN expression, the expression must be numerical only ++and must evaluate to a constant. The keyword `LENGTH' may be ++abbreviated to `len' or `l'. ++ ++ In the following example, we specify that there are two memory ++regions available for allocation: one starting at `0' for 256 kilobytes, ++and the other starting at `0x40000000' for four megabytes. The linker ++will place into the `rom' memory region every section which is not ++explicitly mapped into a memory region, and is either read-only or ++executable. The linker will place other sections which are not ++explicitly mapped into a memory region into the `ram' memory region. ++ ++ MEMORY ++ { ++ rom (rx) : ORIGIN = 0, LENGTH = 256K ++ ram (!rx) : org = 0x40000000, l = 4M ++ } ++ ++ Once you define a memory region, you can direct the linker to place ++specific output sections into that memory region by using the `>REGION' ++output section attribute. For example, if you have a memory region ++named `mem', you would use `>mem' in the output section definition. ++*Note Output Section Region::. If no address was specified for the ++output section, the linker will set the address to the next available ++address within the memory region. If the combined output sections ++directed to a memory region are too large for the region, the linker ++will issue an error message. ++ ++ It is possible to access the origin and length of a memory in an ++expression via the `ORIGIN(MEMORY)' and `LENGTH(MEMORY)' functions: ++ ++ _fstack = ORIGIN(ram) + LENGTH(ram) - 4; ++ ++ ++File: ld.info, Node: PHDRS, Next: VERSION, Prev: MEMORY, Up: Scripts ++ ++3.8 PHDRS Command ++================= ++ ++The ELF object file format uses "program headers", also knows as ++"segments". The program headers describe how the program should be ++loaded into memory. You can print them out by using the `objdump' ++program with the `-p' option. ++ ++ When you run an ELF program on a native ELF system, the system loader ++reads the program headers in order to figure out how to load the ++program. This will only work if the program headers are set correctly. ++This manual does not describe the details of how the system loader ++interprets program headers; for more information, see the ELF ABI. ++ ++ The linker will create reasonable program headers by default. ++However, in some cases, you may need to specify the program headers more ++precisely. You may use the `PHDRS' command for this purpose. When the ++linker sees the `PHDRS' command in the linker script, it will not ++create any program headers other than the ones specified. ++ ++ The linker only pays attention to the `PHDRS' command when ++generating an ELF output file. In other cases, the linker will simply ++ignore `PHDRS'. ++ ++ This is the syntax of the `PHDRS' command. The words `PHDRS', ++`FILEHDR', `AT', and `FLAGS' are keywords. ++ ++ PHDRS ++ { ++ NAME TYPE [ FILEHDR ] [ PHDRS ] [ AT ( ADDRESS ) ] ++ [ FLAGS ( FLAGS ) ] ; ++ } ++ ++ The NAME is used only for reference in the `SECTIONS' command of the ++linker script. It is not put into the output file. Program header ++names are stored in a separate name space, and will not conflict with ++symbol names, file names, or section names. Each program header must ++have a distinct name. ++ ++ Certain program header types describe segments of memory which the ++system loader will load from the file. In the linker script, you ++specify the contents of these segments by placing allocatable output ++sections in the segments. You use the `:PHDR' output section attribute ++to place a section in a particular segment. *Note Output Section ++Phdr::. ++ ++ It is normal to put certain sections in more than one segment. This ++merely implies that one segment of memory contains another. You may ++repeat `:PHDR', using it once for each segment which should contain the ++section. ++ ++ If you place a section in one or more segments using `:PHDR', then ++the linker will place all subsequent allocatable sections which do not ++specify `:PHDR' in the same segments. This is for convenience, since ++generally a whole set of contiguous sections will be placed in a single ++segment. You can use `:NONE' to override the default segment and tell ++the linker to not put the section in any segment at all. ++ ++ You may use the `FILEHDR' and `PHDRS' keywords appear after the ++program header type to further describe the contents of the segment. ++The `FILEHDR' keyword means that the segment should include the ELF ++file header. The `PHDRS' keyword means that the segment should include ++the ELF program headers themselves. ++ ++ The TYPE may be one of the following. The numbers indicate the ++value of the keyword. ++ ++`PT_NULL' (0) ++ Indicates an unused program header. ++ ++`PT_LOAD' (1) ++ Indicates that this program header describes a segment to be ++ loaded from the file. ++ ++`PT_DYNAMIC' (2) ++ Indicates a segment where dynamic linking information can be found. ++ ++`PT_INTERP' (3) ++ Indicates a segment where the name of the program interpreter may ++ be found. ++ ++`PT_NOTE' (4) ++ Indicates a segment holding note information. ++ ++`PT_SHLIB' (5) ++ A reserved program header type, defined but not specified by the ++ ELF ABI. ++ ++`PT_PHDR' (6) ++ Indicates a segment where the program headers may be found. ++ ++EXPRESSION ++ An expression giving the numeric type of the program header. This ++ may be used for types not defined above. ++ ++ You can specify that a segment should be loaded at a particular ++address in memory by using an `AT' expression. This is identical to the ++`AT' command used as an output section attribute (*note Output Section ++LMA::). The `AT' command for a program header overrides the output ++section attribute. ++ ++ The linker will normally set the segment flags based on the sections ++which comprise the segment. You may use the `FLAGS' keyword to ++explicitly specify the segment flags. The value of FLAGS must be an ++integer. It is used to set the `p_flags' field of the program header. ++ ++ Here is an example of `PHDRS'. This shows a typical set of program ++headers used on a native ELF system. ++ ++ PHDRS ++ { ++ headers PT_PHDR PHDRS ; ++ interp PT_INTERP ; ++ text PT_LOAD FILEHDR PHDRS ; ++ data PT_LOAD ; ++ dynamic PT_DYNAMIC ; ++ } ++ ++ SECTIONS ++ { ++ . = SIZEOF_HEADERS; ++ .interp : { *(.interp) } :text :interp ++ .text : { *(.text) } :text ++ .rodata : { *(.rodata) } /* defaults to :text */ ++ ... ++ . = . + 0x1000; /* move to a new page in memory */ ++ .data : { *(.data) } :data ++ .dynamic : { *(.dynamic) } :data :dynamic ++ ... ++ } ++ ++ ++File: ld.info, Node: VERSION, Next: Expressions, Prev: PHDRS, Up: Scripts ++ ++3.9 VERSION Command ++=================== ++ ++The linker supports symbol versions when using ELF. Symbol versions are ++only useful when using shared libraries. The dynamic linker can use ++symbol versions to select a specific version of a function when it runs ++a program that may have been linked against an earlier version of the ++shared library. ++ ++ You can include a version script directly in the main linker script, ++or you can supply the version script as an implicit linker script. You ++can also use the `--version-script' linker option. ++ ++ The syntax of the `VERSION' command is simply ++ VERSION { version-script-commands } ++ ++ The format of the version script commands is identical to that used ++by Sun's linker in Solaris 2.5. The version script defines a tree of ++version nodes. You specify the node names and interdependencies in the ++version script. You can specify which symbols are bound to which ++version nodes, and you can reduce a specified set of symbols to local ++scope so that they are not globally visible outside of the shared ++library. ++ ++ The easiest way to demonstrate the version script language is with a ++few examples. ++ ++ VERS_1.1 { ++ global: ++ foo1; ++ local: ++ old*; ++ original*; ++ new*; ++ }; ++ ++ VERS_1.2 { ++ foo2; ++ } VERS_1.1; ++ ++ VERS_2.0 { ++ bar1; bar2; ++ extern "C++" { ++ ns::*; ++ "int f(int, double)"; ++ } ++ } VERS_1.2; ++ ++ This example version script defines three version nodes. The first ++version node defined is `VERS_1.1'; it has no other dependencies. The ++script binds the symbol `foo1' to `VERS_1.1'. It reduces a number of ++symbols to local scope so that they are not visible outside of the ++shared library; this is done using wildcard patterns, so that any ++symbol whose name begins with `old', `original', or `new' is matched. ++The wildcard patterns available are the same as those used in the shell ++when matching filenames (also known as "globbing"). However, if you ++specify the symbol name inside double quotes, then the name is treated ++as literal, rather than as a glob pattern. ++ ++ Next, the version script defines node `VERS_1.2'. This node depends ++upon `VERS_1.1'. The script binds the symbol `foo2' to the version ++node `VERS_1.2'. ++ ++ Finally, the version script defines node `VERS_2.0'. This node ++depends upon `VERS_1.2'. The scripts binds the symbols `bar1' and ++`bar2' are bound to the version node `VERS_2.0'. ++ ++ When the linker finds a symbol defined in a library which is not ++specifically bound to a version node, it will effectively bind it to an ++unspecified base version of the library. You can bind all otherwise ++unspecified symbols to a given version node by using `global: *;' ++somewhere in the version script. ++ ++ The names of the version nodes have no specific meaning other than ++what they might suggest to the person reading them. The `2.0' version ++could just as well have appeared in between `1.1' and `1.2'. However, ++this would be a confusing way to write a version script. ++ ++ Node name can be omited, provided it is the only version node in the ++version script. Such version script doesn't assign any versions to ++symbols, only selects which symbols will be globally visible out and ++which won't. ++ ++ { global: foo; bar; local: *; }; ++ ++ When you link an application against a shared library that has ++versioned symbols, the application itself knows which version of each ++symbol it requires, and it also knows which version nodes it needs from ++each shared library it is linked against. Thus at runtime, the dynamic ++loader can make a quick check to make sure that the libraries you have ++linked against do in fact supply all of the version nodes that the ++application will need to resolve all of the dynamic symbols. In this ++way it is possible for the dynamic linker to know with certainty that ++all external symbols that it needs will be resolvable without having to ++search for each symbol reference. ++ ++ The symbol versioning is in effect a much more sophisticated way of ++doing minor version checking that SunOS does. The fundamental problem ++that is being addressed here is that typically references to external ++functions are bound on an as-needed basis, and are not all bound when ++the application starts up. If a shared library is out of date, a ++required interface may be missing; when the application tries to use ++that interface, it may suddenly and unexpectedly fail. With symbol ++versioning, the user will get a warning when they start their program if ++the libraries being used with the application are too old. ++ ++ There are several GNU extensions to Sun's versioning approach. The ++first of these is the ability to bind a symbol to a version node in the ++source file where the symbol is defined instead of in the versioning ++script. This was done mainly to reduce the burden on the library ++maintainer. You can do this by putting something like: ++ __asm__(".symver original_foo,foo@VERS_1.1"); ++ in the C source file. This renames the function `original_foo' to ++be an alias for `foo' bound to the version node `VERS_1.1'. The ++`local:' directive can be used to prevent the symbol `original_foo' ++from being exported. A `.symver' directive takes precedence over a ++version script. ++ ++ The second GNU extension is to allow multiple versions of the same ++function to appear in a given shared library. In this way you can make ++an incompatible change to an interface without increasing the major ++version number of the shared library, while still allowing applications ++linked against the old interface to continue to function. ++ ++ To do this, you must use multiple `.symver' directives in the source ++file. Here is an example: ++ ++ __asm__(".symver original_foo,foo@"); ++ __asm__(".symver old_foo,foo@VERS_1.1"); ++ __asm__(".symver old_foo1,foo@VERS_1.2"); ++ __asm__(".symver new_foo,foo@@VERS_2.0"); ++ ++ In this example, `foo@' represents the symbol `foo' bound to the ++unspecified base version of the symbol. The source file that contains ++this example would define 4 C functions: `original_foo', `old_foo', ++`old_foo1', and `new_foo'. ++ ++ When you have multiple definitions of a given symbol, there needs to ++be some way to specify a default version to which external references to ++this symbol will be bound. You can do this with the `foo@@VERS_2.0' ++type of `.symver' directive. You can only declare one version of a ++symbol as the default in this manner; otherwise you would effectively ++have multiple definitions of the same symbol. ++ ++ If you wish to bind a reference to a specific version of the symbol ++within the shared library, you can use the aliases of convenience ++(i.e., `old_foo'), or you can use the `.symver' directive to ++specifically bind to an external version of the function in question. ++ ++ You can also specify the language in the version script: ++ ++ VERSION extern "lang" { version-script-commands } ++ ++ The supported `lang's are `C', `C++', and `Java'. The linker will ++iterate over the list of symbols at the link time and demangle them ++according to `lang' before matching them to the patterns specified in ++`version-script-commands'. ++ ++ Demangled names may contains spaces and other special characters. As ++described above, you can use a glob pattern to match demangled names, ++or you can use a double-quoted string to match the string exactly. In ++the latter case, be aware that minor differences (such as differing ++whitespace) between the version script and the demangler output will ++cause a mismatch. As the exact string generated by the demangler might ++change in the future, even if the mangled name does not, you should ++check that all of your version directives are behaving as you expect ++when you upgrade. ++ ++ ++File: ld.info, Node: Expressions, Next: Implicit Linker Scripts, Prev: VERSION, Up: Scripts ++ ++3.10 Expressions in Linker Scripts ++================================== ++ ++The syntax for expressions in the linker script language is identical to ++that of C expressions. All expressions are evaluated as integers. All ++expressions are evaluated in the same size, which is 32 bits if both the ++host and target are 32 bits, and is otherwise 64 bits. ++ ++ You can use and set symbol values in expressions. ++ ++ The linker defines several special purpose builtin functions for use ++in expressions. ++ ++* Menu: ++ ++* Constants:: Constants ++* Symbols:: Symbol Names ++* Orphan Sections:: Orphan Sections ++* Location Counter:: The Location Counter ++* Operators:: Operators ++* Evaluation:: Evaluation ++* Expression Section:: The Section of an Expression ++* Builtin Functions:: Builtin Functions ++ ++ ++File: ld.info, Node: Constants, Next: Symbols, Up: Expressions ++ ++3.10.1 Constants ++---------------- ++ ++All constants are integers. ++ ++ As in C, the linker considers an integer beginning with `0' to be ++octal, and an integer beginning with `0x' or `0X' to be hexadecimal. ++The linker considers other integers to be decimal. ++ ++ In addition, you can use the suffixes `K' and `M' to scale a ++constant by `1024' or `1024*1024' respectively. For example, the ++following all refer to the same quantity: ++ _fourk_1 = 4K; ++ _fourk_2 = 4096; ++ _fourk_3 = 0x1000; ++ ++ ++File: ld.info, Node: Symbols, Next: Orphan Sections, Prev: Constants, Up: Expressions ++ ++3.10.2 Symbol Names ++------------------- ++ ++Unless quoted, symbol names start with a letter, underscore, or period ++and may include letters, digits, underscores, periods, and hyphens. ++Unquoted symbol names must not conflict with any keywords. You can ++specify a symbol which contains odd characters or has the same name as a ++keyword by surrounding the symbol name in double quotes: ++ "SECTION" = 9; ++ "with a space" = "also with a space" + 10; ++ ++ Since symbols can contain many non-alphabetic characters, it is ++safest to delimit symbols with spaces. For example, `A-B' is one ++symbol, whereas `A - B' is an expression involving subtraction. ++ ++ ++File: ld.info, Node: Orphan Sections, Next: Location Counter, Prev: Symbols, Up: Expressions ++ ++3.10.3 Orphan Sections ++---------------------- ++ ++Orphan sections are sections present in the input files which are not ++explicitly placed into the output file by the linker script. The ++linker will still copy these sections into the output file, but it has ++to guess as to where they should be placed. The linker uses a simple ++heuristic to do this. It attempts to place orphan sections after ++non-orphan sections of the same attribute, such as code vs data, ++loadable vs non-loadable, etc. If there is not enough room to do this ++then it places at the end of the file. ++ ++ For ELF targets, the attribute of the section includes section type ++as well as section flag. ++ ++ ++File: ld.info, Node: Location Counter, Next: Operators, Prev: Orphan Sections, Up: Expressions ++ ++3.10.4 The Location Counter ++--------------------------- ++ ++The special linker variable "dot" `.' always contains the current ++output location counter. Since the `.' always refers to a location in ++an output section, it may only appear in an expression within a ++`SECTIONS' command. The `.' symbol may appear anywhere that an ++ordinary symbol is allowed in an expression. ++ ++ Assigning a value to `.' will cause the location counter to be ++moved. This may be used to create holes in the output section. The ++location counter may never be moved backwards. ++ ++ SECTIONS ++ { ++ output : ++ { ++ file1(.text) ++ . = . + 1000; ++ file2(.text) ++ . += 1000; ++ file3(.text) ++ } = 0x12345678; ++ } ++ In the previous example, the `.text' section from `file1' is located ++at the beginning of the output section `output'. It is followed by a ++1000 byte gap. Then the `.text' section from `file2' appears, also ++with a 1000 byte gap following before the `.text' section from `file3'. ++The notation `= 0x12345678' specifies what data to write in the gaps ++(*note Output Section Fill::). ++ ++ Note: `.' actually refers to the byte offset from the start of the ++current containing object. Normally this is the `SECTIONS' statement, ++whose start address is 0, hence `.' can be used as an absolute address. ++If `.' is used inside a section description however, it refers to the ++byte offset from the start of that section, not an absolute address. ++Thus in a script like this: ++ ++ SECTIONS ++ { ++ . = 0x100 ++ .text: { ++ *(.text) ++ . = 0x200 ++ } ++ . = 0x500 ++ .data: { ++ *(.data) ++ . += 0x600 ++ } ++ } ++ ++ The `.text' section will be assigned a starting address of 0x100 and ++a size of exactly 0x200 bytes, even if there is not enough data in the ++`.text' input sections to fill this area. (If there is too much data, ++an error will be produced because this would be an attempt to move `.' ++backwards). The `.data' section will start at 0x500 and it will have ++an extra 0x600 bytes worth of space after the end of the values from ++the `.data' input sections and before the end of the `.data' output ++section itself. ++ ++ Setting symbols to the value of the location counter outside of an ++output section statement can result in unexpected values if the linker ++needs to place orphan sections. For example, given the following: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ start_of_data = . ; ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ If the linker needs to place some input section, e.g. `.rodata', not ++mentioned in the script, it might choose to place that section between ++`.text' and `.data'. You might think the linker should place `.rodata' ++on the blank line in the above script, but blank lines are of no ++particular significance to the linker. As well, the linker doesn't ++associate the above symbol names with their sections. Instead, it ++assumes that all assignments or other statements belong to the previous ++output section, except for the special case of an assignment to `.'. ++I.e., the linker will place the orphan `.rodata' section as if the ++script was written as follows: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ start_of_data = . ; ++ .rodata: { *(.rodata) } ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ This may or may not be the script author's intention for the value of ++`start_of_data'. One way to influence the orphan section placement is ++to assign the location counter to itself, as the linker assumes that an ++assignment to `.' is setting the start address of a following output ++section and thus should be grouped with that section. So you could ++write: ++ ++ SECTIONS ++ { ++ start_of_text = . ; ++ .text: { *(.text) } ++ end_of_text = . ; ++ ++ . = . ; ++ start_of_data = . ; ++ .data: { *(.data) } ++ end_of_data = . ; ++ } ++ ++ Now, the orphan `.rodata' section will be placed between ++`end_of_text' and `start_of_data'. ++ ++ ++File: ld.info, Node: Operators, Next: Evaluation, Prev: Location Counter, Up: Expressions ++ ++3.10.5 Operators ++---------------- ++ ++The linker recognizes the standard C set of arithmetic operators, with ++the standard bindings and precedence levels: ++ precedence associativity Operators Notes ++ (highest) ++ 1 left ! - ~ (1) ++ 2 left * / % ++ 3 left + - ++ 4 left >> << ++ 5 left == != > < <= >= ++ 6 left & ++ 7 left | ++ 8 left && ++ 9 left || ++ 10 right ? : ++ 11 right &= += -= *= /= (2) ++ (lowest) ++ Notes: (1) Prefix operators (2) *Note Assignments::. ++ ++ ++File: ld.info, Node: Evaluation, Next: Expression Section, Prev: Operators, Up: Expressions ++ ++3.10.6 Evaluation ++----------------- ++ ++The linker evaluates expressions lazily. It only computes the value of ++an expression when absolutely necessary. ++ ++ The linker needs some information, such as the value of the start ++address of the first section, and the origins and lengths of memory ++regions, in order to do any linking at all. These values are computed ++as soon as possible when the linker reads in the linker script. ++ ++ However, other values (such as symbol values) are not known or needed ++until after storage allocation. Such values are evaluated later, when ++other information (such as the sizes of output sections) is available ++for use in the symbol assignment expression. ++ ++ The sizes of sections cannot be known until after allocation, so ++assignments dependent upon these are not performed until after ++allocation. ++ ++ Some expressions, such as those depending upon the location counter ++`.', must be evaluated during section allocation. ++ ++ If the result of an expression is required, but the value is not ++available, then an error results. For example, a script like the ++following ++ SECTIONS ++ { ++ .text 9+this_isnt_constant : ++ { *(.text) } ++ } ++will cause the error message `non constant expression for initial ++address'. ++ ++ ++File: ld.info, Node: Expression Section, Next: Builtin Functions, Prev: Evaluation, Up: Expressions ++ ++3.10.7 The Section of an Expression ++----------------------------------- ++ ++When the linker evaluates an expression, the result is either absolute ++or relative to some section. A relative expression is expressed as a ++fixed offset from the base of a section. ++ ++ The position of the expression within the linker script determines ++whether it is absolute or relative. An expression which appears within ++an output section definition is relative to the base of the output ++section. An expression which appears elsewhere will be absolute. ++ ++ A symbol set to a relative expression will be relocatable if you ++request relocatable output using the `-r' option. That means that a ++further link operation may change the value of the symbol. The symbol's ++section will be the section of the relative expression. ++ ++ A symbol set to an absolute expression will retain the same value ++through any further link operation. The symbol will be absolute, and ++will not have any particular associated section. ++ ++ You can use the builtin function `ABSOLUTE' to force an expression ++to be absolute when it would otherwise be relative. For example, to ++create an absolute symbol set to the address of the end of the output ++section `.data': ++ SECTIONS ++ { ++ .data : { *(.data) _edata = ABSOLUTE(.); } ++ } ++ If `ABSOLUTE' were not used, `_edata' would be relative to the ++`.data' section. ++ ++ ++File: ld.info, Node: Builtin Functions, Prev: Expression Section, Up: Expressions ++ ++3.10.8 Builtin Functions ++------------------------ ++ ++The linker script language includes a number of builtin functions for ++use in linker script expressions. ++ ++`ABSOLUTE(EXP)' ++ Return the absolute (non-relocatable, as opposed to non-negative) ++ value of the expression EXP. Primarily useful to assign an ++ absolute value to a symbol within a section definition, where ++ symbol values are normally section relative. *Note Expression ++ Section::. ++ ++`ADDR(SECTION)' ++ Return the absolute address (the VMA) of the named SECTION. Your ++ script must previously have defined the location of that section. ++ In the following example, `symbol_1' and `symbol_2' are assigned ++ identical values: ++ SECTIONS { ... ++ .output1 : ++ { ++ start_of_output_1 = ABSOLUTE(.); ++ ... ++ } ++ .output : ++ { ++ symbol_1 = ADDR(.output1); ++ symbol_2 = start_of_output_1; ++ } ++ ... } ++ ++`ALIGN(ALIGN)' ++`ALIGN(EXP,ALIGN)' ++ Return the location counter (`.') or arbitrary expression aligned ++ to the next ALIGN boundary. The single operand `ALIGN' doesn't ++ change the value of the location counter--it just does arithmetic ++ on it. The two operand `ALIGN' allows an arbitrary expression to ++ be aligned upwards (`ALIGN(ALIGN)' is equivalent to `ALIGN(., ++ ALIGN)'). ++ ++ Here is an example which aligns the output `.data' section to the ++ next `0x2000' byte boundary after the preceding section and sets a ++ variable within the section to the next `0x8000' boundary after the ++ input sections: ++ SECTIONS { ... ++ .data ALIGN(0x2000): { ++ *(.data) ++ variable = ALIGN(0x8000); ++ } ++ ... } ++ The first use of `ALIGN' in this example specifies the ++ location of a section because it is used as the optional ADDRESS ++ attribute of a section definition (*note Output Section ++ Address::). The second use of `ALIGN' is used to defines the ++ value of a symbol. ++ ++ The builtin function `NEXT' is closely related to `ALIGN'. ++ ++`BLOCK(EXP)' ++ This is a synonym for `ALIGN', for compatibility with older linker ++ scripts. It is most often seen when setting the address of an ++ output section. ++ ++`DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE)' ++ This is equivalent to either ++ (ALIGN(MAXPAGESIZE) + (. & (MAXPAGESIZE - 1))) ++ or ++ (ALIGN(MAXPAGESIZE) + (. & (MAXPAGESIZE - COMMONPAGESIZE))) ++ depending on whether the latter uses fewer COMMONPAGESIZE sized ++ pages for the data segment (area between the result of this ++ expression and `DATA_SEGMENT_END') than the former or not. If the ++ latter form is used, it means COMMONPAGESIZE bytes of runtime ++ memory will be saved at the expense of up to COMMONPAGESIZE wasted ++ bytes in the on-disk file. ++ ++ This expression can only be used directly in `SECTIONS' commands, ++ not in any output section descriptions and only once in the linker ++ script. COMMONPAGESIZE should be less or equal to MAXPAGESIZE and ++ should be the system page size the object wants to be optimized ++ for (while still working on system page sizes up to MAXPAGESIZE). ++ ++ Example: ++ . = DATA_SEGMENT_ALIGN(0x10000, 0x2000); ++ ++`DATA_SEGMENT_END(EXP)' ++ This defines the end of data segment for `DATA_SEGMENT_ALIGN' ++ evaluation purposes. ++ ++ . = DATA_SEGMENT_END(.); ++ ++`DATA_SEGMENT_RELRO_END(OFFSET, EXP)' ++ This defines the end of the `PT_GNU_RELRO' segment when `-z relro' ++ option is used. Second argument is returned. When `-z relro' ++ option is not present, `DATA_SEGMENT_RELRO_END' does nothing, ++ otherwise `DATA_SEGMENT_ALIGN' is padded so that EXP + OFFSET is ++ aligned to the most commonly used page boundary for particular ++ target. If present in the linker script, it must always come in ++ between `DATA_SEGMENT_ALIGN' and `DATA_SEGMENT_END'. ++ ++ . = DATA_SEGMENT_RELRO_END(24, .); ++ ++`DEFINED(SYMBOL)' ++ Return 1 if SYMBOL is in the linker global symbol table and is ++ defined before the statement using DEFINED in the script, otherwise ++ return 0. You can use this function to provide default values for ++ symbols. For example, the following script fragment shows how to ++ set a global symbol `begin' to the first location in the `.text' ++ section--but if a symbol called `begin' already existed, its value ++ is preserved: ++ ++ SECTIONS { ... ++ .text : { ++ begin = DEFINED(begin) ? begin : . ; ++ ... ++ } ++ ... ++ } ++ ++`LENGTH(MEMORY)' ++ Return the length of the memory region named MEMORY. ++ ++`LOADADDR(SECTION)' ++ Return the absolute LMA of the named SECTION. This is normally ++ the same as `ADDR', but it may be different if the `AT' attribute ++ is used in the output section definition (*note Output Section ++ LMA::). ++ ++`MAX(EXP1, EXP2)' ++ Returns the maximum of EXP1 and EXP2. ++ ++`MIN(EXP1, EXP2)' ++ Returns the minimum of EXP1 and EXP2. ++ ++`NEXT(EXP)' ++ Return the next unallocated address that is a multiple of EXP. ++ This function is closely related to `ALIGN(EXP)'; unless you use ++ the `MEMORY' command to define discontinuous memory for the output ++ file, the two functions are equivalent. ++ ++`ORIGIN(MEMORY)' ++ Return the origin of the memory region named MEMORY. ++ ++`SEGMENT_START(SEGMENT, DEFAULT)' ++ Return the base address of the named SEGMENT. If an explicit ++ value has been given for this segment (with a command-line `-T' ++ option) that value will be returned; otherwise the value will be ++ DEFAULT. At present, the `-T' command-line option can only be ++ used to set the base address for the "text", "data", and "bss" ++ sections, but you use `SEGMENT_START' with any segment name. ++ ++`SIZEOF(SECTION)' ++ Return the size in bytes of the named SECTION, if that section has ++ been allocated. If the section has not been allocated when this is ++ evaluated, the linker will report an error. In the following ++ example, `symbol_1' and `symbol_2' are assigned identical values: ++ SECTIONS{ ... ++ .output { ++ .start = . ; ++ ... ++ .end = . ; ++ } ++ symbol_1 = .end - .start ; ++ symbol_2 = SIZEOF(.output); ++ ... } ++ ++`SIZEOF_HEADERS' ++`sizeof_headers' ++ Return the size in bytes of the output file's headers. This is ++ information which appears at the start of the output file. You ++ can use this number when setting the start address of the first ++ section, if you choose, to facilitate paging. ++ ++ When producing an ELF output file, if the linker script uses the ++ `SIZEOF_HEADERS' builtin function, the linker must compute the ++ number of program headers before it has determined all the section ++ addresses and sizes. If the linker later discovers that it needs ++ additional program headers, it will report an error `not enough ++ room for program headers'. To avoid this error, you must avoid ++ using the `SIZEOF_HEADERS' function, or you must rework your linker ++ script to avoid forcing the linker to use additional program ++ headers, or you must define the program headers yourself using the ++ `PHDRS' command (*note PHDRS::). ++ ++ ++File: ld.info, Node: Implicit Linker Scripts, Prev: Expressions, Up: Scripts ++ ++3.11 Implicit Linker Scripts ++============================ ++ ++If you specify a linker input file which the linker can not recognize as ++an object file or an archive file, it will try to read the file as a ++linker script. If the file can not be parsed as a linker script, the ++linker will report an error. ++ ++ An implicit linker script will not replace the default linker script. ++ ++ Typically an implicit linker script would contain only symbol ++assignments, or the `INPUT', `GROUP', or `VERSION' commands. ++ ++ Any input files read because of an implicit linker script will be ++read at the position in the command line where the implicit linker ++script was read. This can affect archive searching. ++ ++ ++File: ld.info, Node: Machine Dependent, Next: BFD, Prev: Scripts, Up: Top ++ ++4 Machine Dependent Features ++**************************** ++ ++`ld' has additional features on some platforms; the following sections ++describe them. Machines where `ld' has no additional functionality are ++not listed. ++ ++* Menu: ++ ++ ++* H8/300:: `ld' and the H8/300 ++ ++* i960:: `ld' and the Intel 960 family ++ ++* ARM:: `ld' and the ARM family ++ ++* AVR32:: `ld' and AVR32 processors ++ ++* HPPA ELF32:: `ld' and HPPA 32-bit ELF ++ ++* MMIX:: `ld' and MMIX ++ ++* MSP430:: `ld' and MSP430 ++ ++* PowerPC ELF32:: `ld' and PowerPC 32-bit ELF Support ++ ++* PowerPC64 ELF64:: `ld' and PowerPC64 64-bit ELF Support ++ ++* TI COFF:: `ld' and TI COFF ++ ++* WIN32:: `ld' and WIN32 (cygwin/mingw) ++ ++* Xtensa:: `ld' and Xtensa Processors ++ ++ ++File: ld.info, Node: H8/300, Next: i960, Up: Machine Dependent ++ ++4.1 `ld' and the H8/300 ++======================= ++ ++For the H8/300, `ld' can perform these global optimizations when you ++specify the `--relax' command-line option. ++ ++_relaxing address modes_ ++ `ld' finds all `jsr' and `jmp' instructions whose targets are ++ within eight bits, and turns them into eight-bit program-counter ++ relative `bsr' and `bra' instructions, respectively. ++ ++_synthesizing instructions_ ++ `ld' finds all `mov.b' instructions which use the sixteen-bit ++ absolute address form, but refer to the top page of memory, and ++ changes them to use the eight-bit address form. (That is: the ++ linker turns `mov.b `@'AA:16' into `mov.b `@'AA:8' whenever the ++ address AA is in the top page of memory). ++ ++_bit manipulation instructions_ ++ `ld' finds all bit manipulation instructions like `band, bclr, ++ biand, bild, bior, bist, bixor, bld, bnot, bor, bset, bst, btst, ++ bxor' which use 32 bit and 16 bit absolute address form, but refer ++ to the top page of memory, and changes them to use the 8 bit ++ address form. (That is: the linker turns `bset #xx:3,`@'AA:32' ++ into `bset #xx:3,`@'AA:8' whenever the address AA is in the top ++ page of memory). ++ ++_system control instructions_ ++ `ld' finds all `ldc.w, stc.w' instrcutions which use the 32 bit ++ absolute address form, but refer to the top page of memory, and ++ changes them to use 16 bit address form. (That is: the linker ++ turns `ldc.w `@'AA:32,ccr' into `ldc.w `@'AA:16,ccr' whenever the ++ address AA is in the top page of memory). ++ ++ ++File: ld.info, Node: i960, Next: ARM, Prev: H8/300, Up: Machine Dependent ++ ++4.2 `ld' and the Intel 960 Family ++================================= ++ ++You can use the `-AARCHITECTURE' command line option to specify one of ++the two-letter names identifying members of the 960 family; the option ++specifies the desired output target, and warns of any incompatible ++instructions in the input files. It also modifies the linker's search ++strategy for archive libraries, to support the use of libraries ++specific to each particular architecture, by including in the search ++loop names suffixed with the string identifying the architecture. ++ ++ For example, if your `ld' command line included `-ACA' as well as ++`-ltry', the linker would look (in its built-in search paths, and in ++any paths you specify with `-L') for a library with the names ++ ++ try ++ libtry.a ++ tryca ++ libtryca.a ++ ++The first two possibilities would be considered in any event; the last ++two are due to the use of `-ACA'. ++ ++ You can meaningfully use `-A' more than once on a command line, since ++the 960 architecture family allows combination of target architectures; ++each use will add another pair of name variants to search for when `-l' ++specifies a library. ++ ++ `ld' supports the `--relax' option for the i960 family. If you ++specify `--relax', `ld' finds all `balx' and `calx' instructions whose ++targets are within 24 bits, and turns them into 24-bit program-counter ++relative `bal' and `cal' instructions, respectively. `ld' also turns ++`cal' instructions into `bal' instructions when it determines that the ++target subroutine is a leaf routine (that is, the target subroutine does ++not itself call any subroutines). ++ ++ +++File: ld.info, Node: ARM, Next: AVR32, Prev: i960, Up: Machine Dependent ++ ++4.3 `ld' and the ARM family ++=========================== ++ ++For the ARM, `ld' will generate code stubs to allow functions calls ++betweem ARM and Thumb code. These stubs only work with code that has ++been compiled and assembled with the `-mthumb-interwork' command line ++option. If it is necessary to link with old ARM object files or ++libraries, which have not been compiled with the -mthumb-interwork ++option then the `--support-old-code' command line switch should be ++given to the linker. This will make it generate larger stub functions ++which will work with non-interworking aware ARM code. Note, however, ++the linker does not support generating stubs for function calls to ++non-interworking aware Thumb code. ++ ++ The `--thumb-entry' switch is a duplicate of the generic `--entry' ++switch, in that it sets the program's starting address. But it also ++sets the bottom bit of the address, so that it can be branched to using ++a BX instruction, and the program will start executing in Thumb mode ++straight away. ++ ++ The `--be8' switch instructs `ld' to generate BE8 format ++executables. This option is only valid when linking big-endian objects. ++The resulting image will contain big-endian data and little-endian code. ++ ++ The `R_ARM_TARGET1' relocation is typically used for entries in the ++`.init_array' section. It is interpreted as either `R_ARM_REL32' or ++`R_ARM_ABS32', depending on the target. The `--target1-rel' and ++`--target1-abs' switches override the default. ++ ++ The `--target2=type' switch overrides the default definition of the ++`R_ARM_TARGET2' relocation. Valid values for `type', their meanings, ++and target defaults are as follows: ++`rel' ++ `R_ARM_REL32' (arm*-*-elf, arm*-*-eabi) ++ ++`abs' ++ `R_ARM_ABS32' (arm*-*-symbianelf) ++ ++`got-rel' ++ `R_ARM_GOT_PREL' (arm*-*-linux, arm*-*-*bsd) ++ ++ The `R_ARM_V4BX' relocation (defined by the ARM AAELF specification) ++enables objects compiled for the ARMv4 architecture to be ++interworking-safe when linked with other objects compiled for ARMv4t, ++but also allows pure ARMv4 binaries to be built from the same ARMv4 ++objects. ++ ++ In the latter case, the switch `--fix-v4bx' must be passed to the ++linker, which causes v4t `BX rM' instructions to be rewritten as `MOV ++PC,rM', since v4 processors do not have a `BX' instruction. ++ ++ In the former case, the switch should not be used, and `R_ARM_V4BX' ++relocations are ignored. ++ ++ The `--use-blx' switch enables the linker to use ARM/Thumb BLX ++instructions (available on ARMv5t and above) in various situations. ++Currently it is used to perform calls via the PLT from Thumb code using ++BLX rather than using BX and a mode-switching stub before each PLT ++entry. This should lead to such calls executing slightly faster. ++ ++ This option is enabled implicitly for SymbianOS, so there is no need ++to specify it if you are using that target. ++ ++ ++File: ld.info, Node: AVR32, Next: HPPA ELF32, Prev: ARM, Up: Machine Dependent ++ ++4.4 `ld' and AVR32 processors ++============================= ++ ++`--direct-data' ++ ++`--no-direct-data' ++ Taking the address of a symbol can often be done by using a direct ++ `mov' or pc-relative `sub' instruction, which is faster than using ++ a PC- or GOT-relative load, especially on the uC3 processors. ++ However, this does not always work when dealing with symbols in ++ the `.data' section so this optimization is disabled by default. ++ ++ Specifying `--direct-data' will enable this optimization. Note ++ that this may cause `relocation truncated to fit' errors for ++ certain large programs. If this happens, the optimization can be ++ turned off by specifying `--no-direct-data'. ++ ++ All known issues with direct data optimizations are detected at ++ link time, so if the linker doesn't complain, the result should ++ run just fine. ++ ++ ++File: ld.info, Node: HPPA ELF32, Next: MMIX, Prev: AVR32, Up: Machine Dependent ++ ++4.5 `ld' and HPPA 32-bit ELF Support ++==================================== ++ ++When generating a shared library, `ld' will by default generate import ++stubs suitable for use with a single sub-space application. The ++`--multi-subspace' switch causes `ld' to generate export stubs, and ++different (larger) import stubs suitable for use with multiple ++sub-spaces. ++ ++ Long branch stubs and import/export stubs are placed by `ld' in stub ++sections located between groups of input sections. `--stub-group-size' ++specifies the maximum size of a group of input sections handled by one ++stub section. Since branch offsets are signed, a stub section may ++serve two groups of input sections, one group before the stub section, ++and one group after it. However, when using conditional branches that ++require stubs, it may be better (for branch prediction) that stub ++sections only serve one group of input sections. A negative value for ++`N' chooses this scheme, ensuring that branches to stubs always use a ++negative offset. Two special values of `N' are recognized, `1' and ++`-1'. These both instruct `ld' to automatically size input section ++groups for the branch types detected, with the same behaviour regarding ++stub placement as other positive or negative values of `N' respectively. ++ ++ Note that `--stub-group-size' does not split input sections. A ++single input section larger than the group size specified will of course ++create a larger group (of one section). If input sections are too ++large, it may not be possible for a branch to reach its stub. ++ ++ ++File: ld.info, Node: MMIX, Next: MSP430, Prev: HPPA ELF32, Up: Machine Dependent ++ ++4.6 `ld' and MMIX ++================= ++ ++For MMIX, there is a choice of generating `ELF' object files or `mmo' ++object files when linking. The simulator `mmix' understands the `mmo' ++format. The binutils `objcopy' utility can translate between the two ++formats. ++ ++ There is one special section, the `.MMIX.reg_contents' section. ++Contents in this section is assumed to correspond to that of global ++registers, and symbols referring to it are translated to special ++symbols, equal to registers. In a final link, the start address of the ++`.MMIX.reg_contents' section corresponds to the first allocated global ++register multiplied by 8. Register `$255' is not included in this ++section; it is always set to the program entry, which is at the symbol ++`Main' for `mmo' files. ++ ++ Symbols with the prefix `__.MMIX.start.', for example ++`__.MMIX.start..text' and `__.MMIX.start..data' are special; there must ++be only one each, even if they are local. The default linker script ++uses these to set the default start address of a section. ++ ++ Initial and trailing multiples of zero-valued 32-bit words in a ++section, are left out from an mmo file. ++ ++ ++File: ld.info, Node: MSP430, Next: PowerPC ELF32, Prev: MMIX, Up: Machine Dependent ++ ++4.7 `ld' and MSP430 ++=================== ++ ++For the MSP430 it is possible to select the MPU architecture. The flag ++`-m [mpu type]' will select an appropriate linker script for selected ++MPU type. (To get a list of known MPUs just pass `-m help' option to ++the linker). ++ ++ The linker will recognize some extra sections which are MSP430 ++specific: ++ ++``.vectors'' ++ Defines a portion of ROM where interrupt vectors located. ++ ++``.bootloader'' ++ Defines the bootloader portion of the ROM (if applicable). Any ++ code in this section will be uploaded to the MPU. ++ ++``.infomem'' ++ Defines an information memory section (if applicable). Any code in ++ this section will be uploaded to the MPU. ++ ++``.infomemnobits'' ++ This is the same as the `.infomem' section except that any code in ++ this section will not be uploaded to the MPU. ++ ++``.noinit'' ++ Denotes a portion of RAM located above `.bss' section. ++ ++ The last two sections are used by gcc. ++ ++ ++File: ld.info, Node: PowerPC ELF32, Next: PowerPC64 ELF64, Prev: MSP430, Up: Machine Dependent ++ ++4.8 `ld' and PowerPC 32-bit ELF Support ++======================================= ++ ++Branches on PowerPC processors are limited to a signed 26-bit ++displacement, which may result in `ld' giving `relocation truncated to ++fit' errors with very large programs. `--relax' enables the generation ++of trampolines that can access the entire 32-bit address space. These ++trampolines are inserted at section boundaries, so may not themselves ++be reachable if an input section exceeds 33M in size. ++ ++`--bss-plt' ++ Current PowerPC GCC accepts a `-msecure-plt' option that generates ++ code capable of using a newer PLT and GOT layout that has the ++ security advantage of no executable section ever needing to be ++ writable and no writable section ever being executable. PowerPC ++ `ld' will generate this layout, including stubs to access the PLT, ++ if all input files (including startup and static libraries) were ++ compiled with `-msecure-plt'. `--bss-plt' forces the old BSS PLT ++ (and GOT layout) which can give slightly better performance. ++ ++`--sdata-got' ++ The new secure PLT and GOT are placed differently relative to other ++ sections compared to older BSS PLT and GOT placement. The ++ location of `.plt' must change because the new secure PLT is an ++ initialized section while the old PLT is uninitialized. The ++ reason for the `.got' change is more subtle: The new placement ++ allows `.got' to be read-only in applications linked with `-z ++ relro -z now'. However, this placement means that `.sdata' cannot ++ always be used in shared libraries, because the PowerPC ABI ++ accesses `.sdata' in shared libraries from the GOT pointer. ++ `--sdata-got' forces the old GOT placement. PowerPC GCC doesn't ++ use `.sdata' in shared libraries, so this option is really only ++ useful for other compilers that may do so. ++ ++`--emit-stub-syms' ++ This option causes `ld' to label linker stubs with a local symbol ++ that encodes the stub type and destination. ++ ++`--no-tls-optimize' ++ PowerPC `ld' normally performs some optimization of code sequences ++ used to access Thread-Local Storage. Use this option to disable ++ the optimization. ++ ++ ++File: ld.info, Node: PowerPC64 ELF64, Next: TI COFF, Prev: PowerPC ELF32, Up: Machine Dependent ++ ++4.8 `ld' and PowerPC64 64-bit ELF Support ++========================================= ++ ++`--stub-group-size' ++ Long branch stubs, PLT call stubs and TOC adjusting stubs are ++ placed by `ld' in stub sections located between groups of input ++ sections. `--stub-group-size' specifies the maximum size of a ++ group of input sections handled by one stub section. Since branch ++ offsets are signed, a stub section may serve two groups of input ++ sections, one group before the stub section, and one group after ++ it. However, when using conditional branches that require stubs, ++ it may be better (for branch prediction) that stub sections only ++ serve one group of input sections. A negative value for `N' ++ chooses this scheme, ensuring that branches to stubs always use a ++ negative offset. Two special values of `N' are recognized, `1' ++ and `-1'. These both instruct `ld' to automatically size input ++ section groups for the branch types detected, with the same ++ behaviour regarding stub placement as other positive or negative ++ values of `N' respectively. ++ ++ Note that `--stub-group-size' does not split input sections. A ++ single input section larger than the group size specified will of ++ course create a larger group (of one section). If input sections ++ are too large, it may not be possible for a branch to reach its ++ stub. ++ ++`--emit-stub-syms' ++ This option causes `ld' to label linker stubs with a local symbol ++ that encodes the stub type and destination. ++ ++`--dotsyms, --no-dotsyms' ++ These two options control how `ld' interprets version patterns in ++ a version script. Older PowerPC64 compilers emitted both a ++ function descriptor symbol with the same name as the function, and ++ a code entry symbol with the name prefixed by a dot (`.'). To ++ properly version a function `foo', the version script thus needs ++ to control both `foo' and `.foo'. The option `--dotsyms', on by ++ default, automatically adds the required dot-prefixed patterns. ++ Use `--no-dotsyms' to disable this feature. ++ ++`--no-tls-optimize' ++ PowerPC64 `ld' normally performs some optimization of code ++ sequences used to access Thread-Local Storage. Use this option to ++ disable the optimization. ++ ++`--no-opd-optimize' ++ PowerPC64 `ld' normally removes `.opd' section entries ++ corresponding to deleted link-once functions, or functions removed ++ by the action of `--gc-sections' or linker scrip `/DISCARD/'. Use ++ this option to disable `.opd' optimization. ++ ++`--non-overlapping-opd' ++ Some PowerPC64 compilers have an option to generate compressed ++ `.opd' entries spaced 16 bytes apart, overlapping the third word, ++ the static chain pointer (unused in C) with the first word of the ++ next entry. This option expands such entries to the full 24 bytes. ++ ++`--no-toc-optimize' ++ PowerPC64 `ld' normally removes unused `.toc' section entries. ++ Such entries are detected by examining relocations that reference ++ the TOC in code sections. A reloc in a deleted code section marks ++ a TOC word as unneeded, while a reloc in a kept code section marks ++ a TOC word as needed. Since the TOC may reference itself, TOC ++ relocs are also examined. TOC words marked as both needed and ++ unneeded will of course be kept. TOC words without any referencing ++ reloc are assumed to be part of a multi-word entry, and are kept or ++ discarded as per the nearest marked preceding word. This works ++ reliably for compiler generated code, but may be incorrect if ++ assembly code is used to insert TOC entries. Use this option to ++ disable the optimization. ++ ++`--no-multi-toc' ++ By default, PowerPC64 GCC generates code for a TOC model where TOC ++ entries are accessed with a 16-bit offset from r2. This limits the ++ total TOC size to 64K. PowerPC64 `ld' extends this limit by ++ grouping code sections such that each group uses less than 64K for ++ its TOC entries, then inserts r2 adjusting stubs between ++ inter-group calls. `ld' does not split apart input sections, so ++ cannot help if a single input file has a `.toc' section that ++ exceeds 64K, most likely from linking multiple files with `ld -r'. ++ Use this option to turn off this feature. ++ ++ ++File: ld.info, Node: TI COFF, Next: WIN32, Prev: PowerPC64 ELF64, Up: Machine Dependent ++ ++4.10 `ld''s Support for Various TI COFF Versions ++=============================================== ++ ++The `--format' switch allows selection of one of the various TI COFF ++versions. The latest of this writing is 2; versions 0 and 1 are also ++supported. The TI COFF versions also vary in header byte-order format; ++`ld' will read any version or byte order, but the output header format ++depends on the default specified by the specific target. ++ ++ ++File: ld.info, Node: WIN32, Next: Xtensa, Prev: TI COFF, Up: Machine Dependent ++ ++4.11 `ld' and WIN32 (cygwin/mingw) ++================================== ++ ++This section describes some of the win32 specific `ld' issues. See ++*Note Command Line Options: Options. for detailed decription of the ++command line options mentioned here. ++ ++_import libraries_ ++ The standard Windows linker creates and uses so-called import ++ libraries, which contains information for linking to dll's. They ++ are regular static archives and are handled as any other static ++ archive. The cygwin and mingw ports of `ld' have specific support ++ for creating such libraries provided with the `--out-implib' ++ command line option. ++ ++_exporting DLL symbols_ ++ The cygwin/mingw `ld' has several ways to export symbols for dll's. ++ ++ _using auto-export functionality_ ++ By default `ld' exports symbols with the auto-export ++ functionality, which is controlled by the following command ++ line options: ++ ++ * -export-all-symbols [This is the default] ++ ++ * -exclude-symbols ++ ++ * -exclude-libs ++ ++ If, however, `--export-all-symbols' is not given explicitly ++ on the command line, then the default auto-export behavior ++ will be _disabled_ if either of the following are true: ++ ++ * A DEF file is used. ++ ++ * Any symbol in any object file was marked with the ++ __declspec(dllexport) attribute. ++ ++ _using a DEF file_ ++ Another way of exporting symbols is using a DEF file. A DEF ++ file is an ASCII file containing definitions of symbols which ++ should be exported when a dll is created. Usually it is ++ named `.def' and is added as any other object file ++ to the linker's command line. The file's name must end in ++ `.def' or `.DEF'. ++ ++ gcc -o .def ++ ++ Using a DEF file turns off the normal auto-export behavior, ++ unless the `--export-all-symbols' option is also used. ++ ++ Here is an example of a DEF file for a shared library called ++ `xyz.dll': ++ ++ LIBRARY "xyz.dll" BASE=0x20000000 ++ ++ EXPORTS ++ foo ++ bar ++ _bar = bar ++ another_foo = abc.dll.afoo ++ var1 DATA ++ ++ This example defines a DLL with a non-default base address ++ and five symbols in the export table. The third exported ++ symbol `_bar' is an alias for the second. The fourth symbol, ++ `another_foo' is resolved by "forwarding" to another module ++ and treating it as an alias for `afoo' exported from the DLL ++ `abc.dll'. The final symbol `var1' is declared to be a data ++ object. ++ ++ The optional `LIBRARY ' command indicates the _internal_ ++ name of the output DLL. If `' does not include a suffix, ++ the default library suffix, `.DLL' is appended. ++ ++ When the .DEF file is used to build an application. rather ++ than a library, the `NAME ' command shoud be used ++ instead of `LIBRARY'. If `' does not include a suffix, ++ the default executable suffix, `.EXE' is appended. ++ ++ With either `LIBRARY ' or `NAME ' the optional ++ specification `BASE = ' may be used to specify a ++ non-default base address for the image. ++ ++ If neither `LIBRARY ' nor `NAME ' is specified, ++ or they specify an empty string, the internal name is the ++ same as the filename specified on the command line. ++ ++ The complete specification of an export symbol is: ++ ++ EXPORTS ++ ( ( ( [ = ] ) ++ | ( = . )) ++ [ @ ] [NONAME] [DATA] [CONSTANT] [PRIVATE] ) * ++ ++ Declares `' as an exported symbol from the DLL, or ++ declares `' as an exported alias for `'; or ++ declares `' as a "forward" alias for the symbol ++ `' in the DLL `'. Optionally, ++ the symbol may be exported by the specified ordinal ++ `' alias. ++ ++ The optional keywords that follow the declaration indicate: ++ ++ `NONAME': Do not put the symbol name in the DLL's export ++ table. It will still be exported by its ordinal alias ++ (either the value specified by the .def specification or, ++ otherwise, the value assigned by the linker). The symbol ++ name, however, does remain visible in the import library (if ++ any), unless `PRIVATE' is also specified. ++ ++ `DATA': The symbol is a variable or object, rather than a ++ function. The import lib will export only an indirect ++ reference to `foo' as the symbol `_imp__foo' (ie, `foo' must ++ be resolved as `*_imp__foo'). ++ ++ `CONSTANT': Like `DATA', but put the undecorated `foo' as ++ well as `_imp__foo' into the import library. Both refer to the ++ read-only import address table's pointer to the variable, not ++ to the variable itself. This can be dangerous. If the user ++ code fails to add the `dllimport' attribute and also fails to ++ explicitly add the extra indirection that the use of the ++ attribute enforces, the application will behave unexpectedly. ++ ++ `PRIVATE': Put the symbol in the DLL's export table, but do ++ not put it into the static import library used to resolve ++ imports at link time. The symbol can still be imported using ++ the `LoadLibrary/GetProcAddress' API at runtime or by by ++ using the GNU ld extension of linking directly to the DLL ++ without an import library. ++ ++ See ld/deffilep.y in the binutils sources for the full ++ specification of other DEF file statements ++ ++ While linking a shared dll, `ld' is able to create a DEF file ++ with the `--output-def ' command line option. ++ ++ _Using decorations_ ++ Another way of marking symbols for export is to modify the ++ source code itself, so that when building the DLL each symbol ++ to be exported is declared as: ++ ++ __declspec(dllexport) int a_variable ++ __declspec(dllexport) void a_function(int with_args) ++ ++ All such symbols will be exported from the DLL. If, however, ++ any of the object files in the DLL contain symbols decorated ++ in this way, then the normal auto-export behavior is ++ disabled, unless the `--export-all-symbols' option is also ++ used. ++ ++ Note that object files that wish to access these symbols must ++ _not_ decorate them with dllexport. Instead, they should use ++ dllimport, instead: ++ ++ __declspec(dllimport) int a_variable ++ __declspec(dllimport) void a_function(int with_args) ++ ++ This complicates the structure of library header files, ++ because when included by the library itself the header must ++ declare the variables and functions as dllexport, but when ++ included by client code the header must declare them as ++ dllimport. There are a number of idioms that are typically ++ used to do this; often client code can omit the __declspec() ++ declaration completely. See `--enable-auto-import' and ++ `automatic data imports' for more imformation. ++ ++_automatic data imports_ ++ The standard Windows dll format supports data imports from dlls ++ only by adding special decorations (dllimport/dllexport), which ++ let the compiler produce specific assembler instructions to deal ++ with this issue. This increases the effort necessary to port ++ existing Un*x code to these platforms, especially for large c++ ++ libraries and applications. The auto-import feature, which was ++ initially provided by Paul Sokolovsky, allows one to omit the ++ decorations to archieve a behavior that conforms to that on ++ POSIX/Un*x platforms. This feature is enabled with the ++ `--enable-auto-import' command-line option, although it is enabled ++ by default on cygwin/mingw. The `--enable-auto-import' option ++ itself now serves mainly to suppress any warnings that are ++ ordinarily emitted when linked objects trigger the feature's use. ++ ++ auto-import of variables does not always work flawlessly without ++ additional assistance. Sometimes, you will see this message ++ ++ "variable '' can't be auto-imported. Please read the ++ documentation for ld's `--enable-auto-import' for details." ++ ++ The `--enable-auto-import' documentation explains why this error ++ occurs, and several methods that can be used to overcome this ++ difficulty. One of these methods is the _runtime pseudo-relocs_ ++ feature, described below. ++ ++ For complex variables imported from DLLs (such as structs or ++ classes), object files typically contain a base address for the ++ variable and an offset (_addend_) within the variable-to specify a ++ particular field or public member, for instance. Unfortunately, ++ the runtime loader used in win32 environments is incapable of ++ fixing these references at runtime without the additional ++ information supplied by dllimport/dllexport decorations. The ++ standard auto-import feature described above is unable to resolve ++ these references. ++ ++ The `--enable-runtime-pseudo-relocs' switch allows these ++ references to be resolved without error, while leaving the task of ++ adjusting the references themselves (with their non-zero addends) ++ to specialized code provided by the runtime environment. Recent ++ versions of the cygwin and mingw environments and compilers ++ provide this runtime support; older versions do not. However, the ++ support is only necessary on the developer's platform; the ++ compiled result will run without error on an older system. ++ ++ `--enable-runtime-pseudo-relocs' is not the default; it must be ++ explicitly enabled as needed. ++ ++_direct linking to a dll_ ++ The cygwin/mingw ports of `ld' support the direct linking, ++ including data symbols, to a dll without the usage of any import ++ libraries. This is much faster and uses much less memory than ++ does the traditional import library method, expecially when ++ linking large libraries or applications. When `ld' creates an ++ import lib, each function or variable exported from the dll is ++ stored in its own bfd, even though a single bfd could contain many ++ exports. The overhead involved in storing, loading, and ++ processing so many bfd's is quite large, and explains the ++ tremendous time, memory, and storage needed to link against ++ particularly large or complex libraries when using import libs. ++ ++ Linking directly to a dll uses no extra command-line switches ++ other than `-L' and `-l', because `ld' already searches for a ++ number of names to match each library. All that is needed from ++ the developer's perspective is an understanding of this search, in ++ order to force ld to select the dll instead of an import library. ++ ++ For instance, when ld is called with the argument `-lxxx' it will ++ attempt to find, in the first directory of its search path, ++ ++ libxxx.dll.a ++ xxx.dll.a ++ libxxx.a ++ cygxxx.dll (*) ++ libxxx.dll ++ xxx.dll ++ ++ before moving on to the next directory in the search path. ++ ++ (*) Actually, this is not `cygxxx.dll' but in fact is ++ `xxx.dll', where `' is set by the `ld' option ++ `--dll-search-prefix='. In the case of cygwin, the ++ standard gcc spec file includes `--dll-search-prefix=cyg', so in ++ effect we actually search for `cygxxx.dll'. ++ ++ Other win32-based unix environments, such as mingw or pw32, may ++ use other `'es, although at present only cygwin makes use ++ of this feature. It was originally intended to help avoid name ++ conflicts among dll's built for the various win32/un*x ++ environments, so that (for example) two versions of a zlib dll ++ could coexist on the same machine. ++ ++ The generic cygwin/mingw path layout uses a `bin' directory for ++ applications and dll's and a `lib' directory for the import ++ libraries (using cygwin nomenclature): ++ ++ bin/ ++ cygxxx.dll ++ lib/ ++ libxxx.dll.a (in case of dll's) ++ libxxx.a (in case of static archive) ++ ++ Linking directly to a dll without using the import library can be ++ done two ways: ++ ++ 1. Use the dll directly by adding the `bin' path to the link line ++ gcc -Wl,-verbose -o a.exe -L../bin/ -lxxx ++ ++ However, as the dll's often have version numbers appended to their ++ names (`cygncurses-5.dll') this will often fail, unless one ++ specifies `-L../bin -lncurses-5' to include the version. Import ++ libs are generally not versioned, and do not have this difficulty. ++ ++ 2. Create a symbolic link from the dll to a file in the `lib' ++ directory according to the above mentioned search pattern. This ++ should be used to avoid unwanted changes in the tools needed for ++ making the app/dll. ++ ++ ln -s bin/cygxxx.dll lib/[cyg|lib|]xxx.dll[.a] ++ ++ Then you can link without any make environment changes. ++ ++ gcc -Wl,-verbose -o a.exe -L../lib/ -lxxx ++ ++ This technique also avoids the version number problems, because ++ the following is perfectly legal ++ ++ bin/ ++ cygxxx-5.dll ++ lib/ ++ libxxx.dll.a -> ../bin/cygxxx-5.dll ++ ++ Linking directly to a dll without using an import lib will work ++ even when auto-import features are exercised, and even when ++ `--enable-runtime-pseudo-relocs' is used. ++ ++ Given the improvements in speed and memory usage, one might ++ justifiably wonder why import libraries are used at all. There ++ are two reasons: ++ ++ 1. Until recently, the link-directly-to-dll functionality did _not_ ++ work with auto-imported data. ++ ++ 2. Sometimes it is necessary to include pure static objects within ++ the import library (which otherwise contains only bfd's for ++ indirection symbols that point to the exports of a dll). Again, ++ the import lib for the cygwin kernel makes use of this ability, ++ and it is not possible to do this without an import lib. ++ ++ So, import libs are not going away. But the ability to replace ++ true import libs with a simple symbolic link to (or a copy of) a ++ dll, in most cases, is a useful addition to the suite of tools ++ binutils makes available to the win32 developer. Given the ++ massive improvements in memory requirements during linking, storage ++ requirements, and linking speed, we expect that many developers ++ will soon begin to use this feature whenever possible. ++ ++_symbol aliasing_ ++ ++ _adding additional names_ ++ Sometimes, it is useful to export symbols with additional ++ names. A symbol `foo' will be exported as `foo', but it can ++ also be exported as `_foo' by using special directives in the ++ DEF file when creating the dll. This will affect also the ++ optional created import library. Consider the following DEF ++ file: ++ ++ LIBRARY "xyz.dll" BASE=0x61000000 ++ ++ EXPORTS ++ foo ++ _foo = foo ++ ++ The line `_foo = foo' maps the symbol `foo' to `_foo'. ++ ++ Another method for creating a symbol alias is to create it in ++ the source code using the "weak" attribute: ++ ++ void foo () { /* Do something. */; } ++ void _foo () __attribute__ ((weak, alias ("foo"))); ++ ++ See the gcc manual for more information about attributes and ++ weak symbols. ++ ++ _renaming symbols_ ++ Sometimes it is useful to rename exports. For instance, the ++ cygwin kernel does this regularly. A symbol `_foo' can be ++ exported as `foo' but not as `_foo' by using special ++ directives in the DEF file. (This will also affect the import ++ library, if it is created). In the following example: ++ ++ LIBRARY "xyz.dll" BASE=0x61000000 ++ ++ EXPORTS ++ _foo = foo ++ ++ The line `_foo = foo' maps the exported symbol `foo' to ++ `_foo'. ++ ++ Note: using a DEF file disables the default auto-export behavior, ++ unless the `--export-all-symbols' command line option is used. ++ If, however, you are trying to rename symbols, then you should list ++ _all_ desired exports in the DEF file, including the symbols that ++ are not being renamed, and do _not_ use the `--export-all-symbols' ++ option. If you list only the renamed symbols in the DEF file, and ++ use `--export-all-symbols' to handle the other symbols, then the ++ both the new names _and_ the original names for the renamed ++ symbols will be exported. In effect, you'd be aliasing those ++ symbols, not renaming them, which is probably not what you wanted. ++ ++_weak externals_ ++ The Windows object format, PE, specifies a form of weak symbols ++ called weak externals. When a weak symbol is linked and the ++ symbol is not defined, the weak symbol becomes an alias for some ++ other symbol. There are three variants of weak externals: ++ * Definition is searched for in objects and libraries, ++ historically called lazy externals. ++ ++ * Definition is searched for only in other objects, not in ++ libraries. This form is not presently implemented. ++ ++ * No search; the symbol is an alias. This form is not presently ++ implemented. ++ As a GNU extension, weak symbols that do not specify an alternate ++ symbol are supported. If the symbol is undefined when linking, ++ the symbol uses a default value. ++ ++ ++File: ld.info, Node: Xtensa, Prev: WIN32, Up: Machine Dependent ++ ++4.12 `ld' and Xtensa Processors ++=============================== ++ ++The default `ld' behavior for Xtensa processors is to interpret ++`SECTIONS' commands so that lists of explicitly named sections in a ++specification with a wildcard file will be interleaved when necessary to ++keep literal pools within the range of PC-relative load offsets. For ++example, with the command: ++ ++ SECTIONS ++ { ++ .text : { ++ *(.literal .text) ++ } ++ } ++ ++`ld' may interleave some of the `.literal' and `.text' sections from ++different object files to ensure that the literal pools are within the ++range of PC-relative load offsets. A valid interleaving might place ++the `.literal' sections from an initial group of files followed by the ++`.text' sections of that group of files. Then, the `.literal' sections ++from the rest of the files and the `.text' sections from the rest of ++the files would follow. ++ ++ Relaxation is enabled by default for the Xtensa version of `ld' and ++provides two important link-time optimizations. The first optimization ++is to combine identical literal values to reduce code size. A redundant ++literal will be removed and all the `L32R' instructions that use it ++will be changed to reference an identical literal, as long as the ++location of the replacement literal is within the offset range of all ++the `L32R' instructions. The second optimization is to remove ++unnecessary overhead from assembler-generated "longcall" sequences of ++`L32R'/`CALLXN' when the target functions are within range of direct ++`CALLN' instructions. ++ ++ For each of these cases where an indirect call sequence can be ++optimized to a direct call, the linker will change the `CALLXN' ++instruction to a `CALLN' instruction, remove the `L32R' instruction, ++and remove the literal referenced by the `L32R' instruction if it is ++not used for anything else. Removing the `L32R' instruction always ++reduces code size but can potentially hurt performance by changing the ++alignment of subsequent branch targets. By default, the linker will ++always preserve alignments, either by switching some instructions ++between 24-bit encodings and the equivalent density instructions or by ++inserting a no-op in place of the `L32R' instruction that was removed. ++If code size is more important than performance, the `--size-opt' ++option can be used to prevent the linker from widening density ++instructions or inserting no-ops, except in a few cases where no-ops ++are required for correctness. ++ ++ The following Xtensa-specific command-line options can be used to ++control the linker: ++ ++`--no-relax' ++ Since the Xtensa version of `ld' enables the `--relax' option by ++ default, the `--no-relax' option is provided to disable relaxation. ++ ++`--size-opt' ++ When optimizing indirect calls to direct calls, optimize for code ++ size more than performance. With this option, the linker will not ++ insert no-ops or widen density instructions to preserve branch ++ target alignment. There may still be some cases where no-ops are ++ required to preserve the correctness of the code. ++ ++ ++File: ld.info, Node: BFD, Next: Reporting Bugs, Prev: Machine Dependent, Up: Top ++ ++5 BFD ++***** ++ ++The linker accesses object and archive files using the BFD libraries. ++These libraries allow the linker to use the same routines to operate on ++object files whatever the object file format. A different object file ++format can be supported simply by creating a new BFD back end and adding ++it to the library. To conserve runtime memory, however, the linker and ++associated tools are usually configured to support only a subset of the ++object file formats available. You can use `objdump -i' (*note ++objdump: (binutils.info)objdump.) to list all the formats available for ++your configuration. ++ ++ As with most implementations, BFD is a compromise between several ++conflicting requirements. The major factor influencing BFD design was ++efficiency: any time used converting between formats is time which ++would not have been spent had BFD not been involved. This is partly ++offset by abstraction payback; since BFD simplifies applications and ++back ends, more time and care may be spent optimizing algorithms for a ++greater speed. ++ ++ One minor artifact of the BFD solution which you should bear in mind ++is the potential for information loss. There are two places where ++useful information can be lost using the BFD mechanism: during ++conversion and during output. *Note BFD information loss::. ++ ++* Menu: ++ ++* BFD outline:: How it works: an outline of BFD ++ ++ ++File: ld.info, Node: BFD outline, Up: BFD ++ ++5.1 How It Works: An Outline of BFD ++=================================== ++ ++When an object file is opened, BFD subroutines automatically determine ++the format of the input object file. They then build a descriptor in ++memory with pointers to routines that will be used to access elements of ++the object file's data structures. ++ ++ As different information from the object files is required, BFD ++reads from different sections of the file and processes them. For ++example, a very common operation for the linker is processing symbol ++tables. Each BFD back end provides a routine for converting between ++the object file's representation of symbols and an internal canonical ++format. When the linker asks for the symbol table of an object file, it ++calls through a memory pointer to the routine from the relevant BFD ++back end which reads and converts the table into a canonical form. The ++linker then operates upon the canonical form. When the link is finished ++and the linker writes the output file's symbol table, another BFD back ++end routine is called to take the newly created symbol table and ++convert it into the chosen output format. ++ ++* Menu: ++ ++* BFD information loss:: Information Loss ++* Canonical format:: The BFD canonical object-file format ++ ++ ++File: ld.info, Node: BFD information loss, Next: Canonical format, Up: BFD outline ++ ++5.1.1 Information Loss ++---------------------- ++ ++_Information can be lost during output._ The output formats supported ++by BFD do not provide identical facilities, and information which can ++be described in one form has nowhere to go in another format. One ++example of this is alignment information in `b.out'. There is nowhere ++in an `a.out' format file to store alignment information on the ++contained data, so when a file is linked from `b.out' and an `a.out' ++image is produced, alignment information will not propagate to the ++output file. (The linker will still use the alignment information ++internally, so the link is performed correctly). ++ ++ Another example is COFF section names. COFF files may contain an ++unlimited number of sections, each one with a textual section name. If ++the target of the link is a format which does not have many sections ++(e.g., `a.out') or has sections without names (e.g., the Oasys format), ++the link cannot be done simply. You can circumvent this problem by ++describing the desired input-to-output section mapping with the linker ++command language. ++ ++ _Information can be lost during canonicalization._ The BFD internal ++canonical form of the external formats is not exhaustive; there are ++structures in input formats for which there is no direct representation ++internally. This means that the BFD back ends cannot maintain all ++possible data richness through the transformation between external to ++internal and back to external formats. ++ ++ This limitation is only a problem when an application reads one ++format and writes another. Each BFD back end is responsible for ++maintaining as much data as possible, and the internal BFD canonical ++form has structures which are opaque to the BFD core, and exported only ++to the back ends. When a file is read in one format, the canonical form ++is generated for BFD and the application. At the same time, the back ++end saves away any information which may otherwise be lost. If the data ++is then written back in the same format, the back end routine will be ++able to use the canonical form provided by the BFD core as well as the ++information it prepared earlier. Since there is a great deal of ++commonality between back ends, there is no information lost when ++linking or copying big endian COFF to little endian COFF, or `a.out' to ++`b.out'. When a mixture of formats is linked, the information is only ++lost from the files whose format differs from the destination. ++ ++ ++File: ld.info, Node: Canonical format, Prev: BFD information loss, Up: BFD outline ++ ++5.1.2 The BFD canonical object-file format ++------------------------------------------ ++ ++The greatest potential for loss of information occurs when there is the ++least overlap between the information provided by the source format, ++that stored by the canonical format, and that needed by the destination ++format. A brief description of the canonical form may help you ++understand which kinds of data you can count on preserving across ++conversions. ++ ++_files_ ++ Information stored on a per-file basis includes target machine ++ architecture, particular implementation format type, a demand ++ pageable bit, and a write protected bit. Information like Unix ++ magic numbers is not stored here--only the magic numbers' meaning, ++ so a `ZMAGIC' file would have both the demand pageable bit and the ++ write protected text bit set. The byte order of the target is ++ stored on a per-file basis, so that big- and little-endian object ++ files may be used with one another. ++ ++_sections_ ++ Each section in the input file contains the name of the section, ++ the section's original address in the object file, size and ++ alignment information, various flags, and pointers into other BFD ++ data structures. ++ ++_symbols_ ++ Each symbol contains a pointer to the information for the object ++ file which originally defined it, its name, its value, and various ++ flag bits. When a BFD back end reads in a symbol table, it ++ relocates all symbols to make them relative to the base of the ++ section where they were defined. Doing this ensures that each ++ symbol points to its containing section. Each symbol also has a ++ varying amount of hidden private data for the BFD back end. Since ++ the symbol points to the original file, the private data format ++ for that symbol is accessible. `ld' can operate on a collection ++ of symbols of wildly different formats without problems. ++ ++ Normal global and simple local symbols are maintained on output, ++ so an output file (no matter its format) will retain symbols ++ pointing to functions and to global, static, and common variables. ++ Some symbol information is not worth retaining; in `a.out', type ++ information is stored in the symbol table as long symbol names. ++ This information would be useless to most COFF debuggers; the ++ linker has command line switches to allow users to throw it away. ++ ++ There is one word of type information within the symbol, so if the ++ format supports symbol type information within symbols (for ++ example, COFF, IEEE, Oasys) and the type is simple enough to fit ++ within one word (nearly everything but aggregates), the ++ information will be preserved. ++ ++_relocation level_ ++ Each canonical BFD relocation record contains a pointer to the ++ symbol to relocate to, the offset of the data to relocate, the ++ section the data is in, and a pointer to a relocation type ++ descriptor. Relocation is performed by passing messages through ++ the relocation type descriptor and the symbol pointer. Therefore, ++ relocations can be performed on output data using a relocation ++ method that is only available in one of the input formats. For ++ instance, Oasys provides a byte relocation format. A relocation ++ record requesting this relocation type would point indirectly to a ++ routine to perform this, so the relocation may be performed on a ++ byte being written to a 68k COFF file, even though 68k COFF has no ++ such relocation type. ++ ++_line numbers_ ++ Object formats can contain, for debugging purposes, some form of ++ mapping between symbols, source line numbers, and addresses in the ++ output file. These addresses have to be relocated along with the ++ symbol information. Each symbol with an associated list of line ++ number records points to the first record of the list. The head ++ of a line number list consists of a pointer to the symbol, which ++ allows finding out the address of the function whose line number ++ is being described. The rest of the list is made up of pairs: ++ offsets into the section and line numbers. Any format which can ++ simply derive this information can pass it successfully between ++ formats (COFF, IEEE and Oasys). ++ ++ ++File: ld.info, Node: Reporting Bugs, Next: MRI, Prev: BFD, Up: Top ++ ++6 Reporting Bugs ++**************** ++ ++Your bug reports play an essential role in making `ld' reliable. ++ ++ Reporting a bug may help you by bringing a solution to your problem, ++or it may not. But in any case the principal function of a bug report ++is to help the entire community by making the next version of `ld' work ++better. Bug reports are your contribution to the maintenance of `ld'. ++ ++ In order for a bug report to serve its purpose, you must include the ++information that enables us to fix the bug. ++ ++* Menu: ++ ++* Bug Criteria:: Have you found a bug? ++* Bug Reporting:: How to report bugs ++ ++ ++File: ld.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs ++ ++6.1 Have You Found a Bug? ++========================= ++ ++If you are not sure whether you have found a bug, here are some ++guidelines: ++ ++ * If the linker gets a fatal signal, for any input whatever, that is ++ a `ld' bug. Reliable linkers never crash. ++ ++ * If `ld' produces an error message for valid input, that is a bug. ++ ++ * If `ld' does not produce an error message for invalid input, that ++ may be a bug. In the general case, the linker can not verify that ++ object files are correct. ++ ++ * If you are an experienced user of linkers, your suggestions for ++ improvement of `ld' are welcome in any case. ++ ++ ++File: ld.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs ++ ++6.2 How to Report Bugs ++====================== ++ ++A number of companies and individuals offer support for GNU products. ++If you obtained `ld' from a support organization, we recommend you ++contact that organization first. ++ ++ You can find contact information for many support companies and ++individuals in the file `etc/SERVICE' in the GNU Emacs distribution. ++ ++ Otherwise, send bug reports for `ld' to `bug-binutils@gnu.org'. ++ ++ The fundamental principle of reporting bugs usefully is this: ++*report all the facts*. If you are not sure whether to state a fact or ++leave it out, state it! ++ ++ Often people omit facts because they think they know what causes the ++problem and assume that some details do not matter. Thus, you might ++assume that the name of a symbol you use in an example does not matter. ++Well, probably it does not, but one cannot be sure. Perhaps the bug ++is a stray memory reference which happens to fetch from the location ++where that name is stored in memory; perhaps, if the name were ++different, the contents of that location would fool the linker into ++doing the right thing despite the bug. Play it safe and give a ++specific, complete example. That is the easiest thing for you to do, ++and the most helpful. ++ ++ Keep in mind that the purpose of a bug report is to enable us to fix ++the bug if it is new to us. Therefore, always write your bug reports ++on the assumption that the bug has not been reported previously. ++ ++ Sometimes people give a few sketchy facts and ask, "Does this ring a ++bell?" This cannot help us fix a bug, so it is basically useless. We ++respond by asking for enough details to enable us to investigate. You ++might as well expedite matters by sending them to begin with. ++ ++ To enable us to fix the bug, you should include all these things: ++ ++ * The version of `ld'. `ld' announces it if you start it with the ++ `--version' argument. ++ ++ Without this, we will not know whether there is any point in ++ looking for the bug in the current version of `ld'. ++ ++ * Any patches you may have applied to the `ld' source, including any ++ patches made to the `BFD' library. ++ ++ * The type of machine you are using, and the operating system name ++ and version number. ++ ++ * What compiler (and its version) was used to compile `ld'--e.g. ++ "`gcc-2.7'". ++ ++ * The command arguments you gave the linker to link your example and ++ observe the bug. To guarantee you will not omit something ++ important, list them all. A copy of the Makefile (or the output ++ from make) is sufficient. ++ ++ If we were to try to guess the arguments, we would probably guess ++ wrong and then we might not encounter the bug. ++ ++ * A complete input file, or set of input files, that will reproduce ++ the bug. It is generally most helpful to send the actual object ++ files provided that they are reasonably small. Say no more than ++ 10K. For bigger files you can either make them available by FTP ++ or HTTP or else state that you are willing to send the object ++ file(s) to whomever requests them. (Note - your email will be ++ going to a mailing list, so we do not want to clog it up with ++ large attachments). But small attachments are best. ++ ++ If the source files were assembled using `gas' or compiled using ++ `gcc', then it may be OK to send the source files rather than the ++ object files. In this case, be sure to say exactly what version of ++ `gas' or `gcc' was used to produce the object files. Also say how ++ `gas' or `gcc' were configured. ++ ++ * A description of what behavior you observe that you believe is ++ incorrect. For example, "It gets a fatal signal." ++ ++ Of course, if the bug is that `ld' gets a fatal signal, then we ++ will certainly notice it. But if the bug is incorrect output, we ++ might not notice unless it is glaringly wrong. You might as well ++ not give us a chance to make a mistake. ++ ++ Even if the problem you experience is a fatal signal, you should ++ still say so explicitly. Suppose something strange is going on, ++ such as, your copy of `ld' is out of synch, or you have ++ encountered a bug in the C library on your system. (This has ++ happened!) Your copy might crash and ours would not. If you told ++ us to expect a crash, then when ours fails to crash, we would know ++ that the bug was not happening for us. If you had not told us to ++ expect a crash, then we would not be able to draw any conclusion ++ from our observations. ++ ++ * If you wish to suggest changes to the `ld' source, send us context ++ diffs, as generated by `diff' with the `-u', `-c', or `-p' option. ++ Always send diffs from the old file to the new file. If you even ++ discuss something in the `ld' source, refer to it by context, not ++ by line number. ++ ++ The line numbers in our development sources will not match those ++ in your sources. Your line numbers would convey no useful ++ information to us. ++ ++ Here are some things that are not necessary: ++ ++ * A description of the envelope of the bug. ++ ++ Often people who encounter a bug spend a lot of time investigating ++ which changes to the input file will make the bug go away and which ++ changes will not affect it. ++ ++ This is often time consuming and not very useful, because the way ++ we will find the bug is by running a single example under the ++ debugger with breakpoints, not by pure deduction from a series of ++ examples. We recommend that you save your time for something else. ++ ++ Of course, if you can find a simpler example to report _instead_ ++ of the original one, that is a convenience for us. Errors in the ++ output will be easier to spot, running under the debugger will take ++ less time, and so on. ++ ++ However, simplification is not vital; if you do not want to do ++ this, report the bug anyway and send us the entire test case you ++ used. ++ ++ * A patch for the bug. ++ ++ A patch for the bug does help us if it is a good one. But do not ++ omit the necessary information, such as the test case, on the ++ assumption that a patch is all we need. We might see problems ++ with your patch and decide to fix the problem another way, or we ++ might not understand it at all. ++ ++ Sometimes with a program as complicated as `ld' it is very hard to ++ construct an example that will make the program follow a certain ++ path through the code. If you do not send us the example, we will ++ not be able to construct one, so we will not be able to verify ++ that the bug is fixed. ++ ++ And if we cannot understand what bug you are trying to fix, or why ++ your patch should be an improvement, we will not install it. A ++ test case will help us to understand. ++ ++ * A guess about what the bug is or what it depends on. ++ ++ Such guesses are usually wrong. Even we cannot guess right about ++ such things without first using the debugger to find the facts. ++ ++ ++File: ld.info, Node: MRI, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top ++ ++Appendix A MRI Compatible Script Files ++************************************** ++ ++To aid users making the transition to GNU `ld' from the MRI linker, ++`ld' can use MRI compatible linker scripts as an alternative to the ++more general-purpose linker scripting language described in *Note ++Scripts::. MRI compatible linker scripts have a much simpler command ++set than the scripting language otherwise used with `ld'. GNU `ld' ++supports the most commonly used MRI linker commands; these commands are ++described here. ++ ++ In general, MRI scripts aren't of much use with the `a.out' object ++file format, since it only has three sections and MRI scripts lack some ++features to make use of them. ++ ++ You can specify a file containing an MRI-compatible script using the ++`-c' command-line option. ++ ++ Each command in an MRI-compatible script occupies its own line; each ++command line starts with the keyword that identifies the command (though ++blank lines are also allowed for punctuation). If a line of an ++MRI-compatible script begins with an unrecognized keyword, `ld' issues ++a warning message, but continues processing the script. ++ ++ Lines beginning with `*' are comments. ++ ++ You can write these commands using all upper-case letters, or all ++lower case; for example, `chip' is the same as `CHIP'. The following ++list shows only the upper-case form of each command. ++ ++`ABSOLUTE SECNAME' ++`ABSOLUTE SECNAME, SECNAME, ... SECNAME' ++ Normally, `ld' includes in the output file all sections from all ++ the input files. However, in an MRI-compatible script, you can ++ use the `ABSOLUTE' command to restrict the sections that will be ++ present in your output program. If the `ABSOLUTE' command is used ++ at all in a script, then only the sections named explicitly in ++ `ABSOLUTE' commands will appear in the linker output. You can ++ still use other input sections (whatever you select on the command ++ line, or using `LOAD') to resolve addresses in the output file. ++ ++`ALIAS OUT-SECNAME, IN-SECNAME' ++ Use this command to place the data from input section IN-SECNAME ++ in a section called OUT-SECNAME in the linker output file. ++ ++ IN-SECNAME may be an integer. ++ ++`ALIGN SECNAME = EXPRESSION' ++ Align the section called SECNAME to EXPRESSION. The EXPRESSION ++ should be a power of two. ++ ++`BASE EXPRESSION' ++ Use the value of EXPRESSION as the lowest address (other than ++ absolute addresses) in the output file. ++ ++`CHIP EXPRESSION' ++`CHIP EXPRESSION, EXPRESSION' ++ This command does nothing; it is accepted only for compatibility. ++ ++`END' ++ This command does nothing whatever; it's only accepted for ++ compatibility. ++ ++`FORMAT OUTPUT-FORMAT' ++ Similar to the `OUTPUT_FORMAT' command in the more general linker ++ language, but restricted to one of these output formats: ++ ++ 1. S-records, if OUTPUT-FORMAT is `S' ++ ++ 2. IEEE, if OUTPUT-FORMAT is `IEEE' ++ ++ 3. COFF (the `coff-m68k' variant in BFD), if OUTPUT-FORMAT is ++ `COFF' ++ ++`LIST ANYTHING...' ++ Print (to the standard output file) a link map, as produced by the ++ `ld' command-line option `-M'. ++ ++ The keyword `LIST' may be followed by anything on the same line, ++ with no change in its effect. ++ ++`LOAD FILENAME' ++`LOAD FILENAME, FILENAME, ... FILENAME' ++ Include one or more object file FILENAME in the link; this has the ++ same effect as specifying FILENAME directly on the `ld' command ++ line. ++ ++`NAME OUTPUT-NAME' ++ OUTPUT-NAME is the name for the program produced by `ld'; the ++ MRI-compatible command `NAME' is equivalent to the command-line ++ option `-o' or the general script language command `OUTPUT'. ++ ++`ORDER SECNAME, SECNAME, ... SECNAME' ++`ORDER SECNAME SECNAME SECNAME' ++ Normally, `ld' orders the sections in its output file in the order ++ in which they first appear in the input files. In an ++ MRI-compatible script, you can override this ordering with the ++ `ORDER' command. The sections you list with `ORDER' will appear ++ first in your output file, in the order specified. ++ ++`PUBLIC NAME=EXPRESSION' ++`PUBLIC NAME,EXPRESSION' ++`PUBLIC NAME EXPRESSION' ++ Supply a value (EXPRESSION) for external symbol NAME used in the ++ linker input files. ++ ++`SECT SECNAME, EXPRESSION' ++`SECT SECNAME=EXPRESSION' ++`SECT SECNAME EXPRESSION' ++ You can use any of these three forms of the `SECT' command to ++ specify the start address (EXPRESSION) for section SECNAME. If ++ you have more than one `SECT' statement for the same SECNAME, only ++ the _first_ sets the start address. ++ ++ ++File: ld.info, Node: GNU Free Documentation License, Next: Index, Prev: MRI, Up: Top ++ ++Appendix B GNU Free Documentation License ++***************************************** ++ ++ Version 1.1, March 2000 ++ ++ Copyright (C) 2000, 2003 Free Software Foundation, Inc. ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ ++ Everyone is permitted to copy and distribute verbatim copies ++ of this license document, but changing it is not allowed. ++ ++ ++ 0. PREAMBLE ++ ++ The purpose of this License is to make a manual, textbook, or other ++ written document "free" in the sense of freedom: to assure everyone ++ the effective freedom to copy and redistribute it, with or without ++ modifying it, either commercially or noncommercially. Secondarily, ++ this License preserves for the author and publisher a way to get ++ credit for their work, while not being considered responsible for ++ modifications made by others. ++ ++ This License is a kind of "copyleft", which means that derivative ++ works of the document must themselves be free in the same sense. ++ It complements the GNU General Public License, which is a copyleft ++ license designed for free software. ++ ++ We have designed this License in order to use it for manuals for ++ free software, because free software needs free documentation: a ++ free program should come with manuals providing the same freedoms ++ that the software does. But this License is not limited to ++ software manuals; it can be used for any textual work, regardless ++ of subject matter or whether it is published as a printed book. ++ We recommend this License principally for works whose purpose is ++ instruction or reference. ++ ++ ++ 1. APPLICABILITY AND DEFINITIONS ++ ++ This License applies to any manual or other work that contains a ++ notice placed by the copyright holder saying it can be distributed ++ under the terms of this License. The "Document", below, refers to ++ any such manual or work. Any member of the public is a licensee, ++ and is addressed as "you." ++ ++ A "Modified Version" of the Document means any work containing the ++ Document or a portion of it, either copied verbatim, or with ++ modifications and/or translated into another language. ++ ++ A "Secondary Section" is a named appendix or a front-matter ++ section of the Document that deals exclusively with the ++ relationship of the publishers or authors of the Document to the ++ Document's overall subject (or to related matters) and contains ++ nothing that could fall directly within that overall subject. ++ (For example, if the Document is in part a textbook of ++ mathematics, a Secondary Section may not explain any mathematics.) ++ The relationship could be a matter of historical connection with ++ the subject or with related matters, or of legal, commercial, ++ philosophical, ethical or political position regarding them. ++ ++ The "Invariant Sections" are certain Secondary Sections whose ++ titles are designated, as being those of Invariant Sections, in ++ the notice that says that the Document is released under this ++ License. ++ ++ The "Cover Texts" are certain short passages of text that are ++ listed, as Front-Cover Texts or Back-Cover Texts, in the notice ++ that says that the Document is released under this License. ++ ++ A "Transparent" copy of the Document means a machine-readable copy, ++ represented in a format whose specification is available to the ++ general public, whose contents can be viewed and edited directly ++ and straightforwardly with generic text editors or (for images ++ composed of pixels) generic paint programs or (for drawings) some ++ widely available drawing editor, and that is suitable for input to ++ text formatters or for automatic translation to a variety of ++ formats suitable for input to text formatters. A copy made in an ++ otherwise Transparent file format whose markup has been designed ++ to thwart or discourage subsequent modification by readers is not ++ Transparent. A copy that is not "Transparent" is called "Opaque." ++ ++ Examples of suitable formats for Transparent copies include plain ++ ASCII without markup, Texinfo input format, LaTeX input format, ++ SGML or XML using a publicly available DTD, and ++ standard-conforming simple HTML designed for human modification. ++ Opaque formats include PostScript, PDF, proprietary formats that ++ can be read and edited only by proprietary word processors, SGML ++ or XML for which the DTD and/or processing tools are not generally ++ available, and the machine-generated HTML produced by some word ++ processors for output purposes only. ++ ++ The "Title Page" means, for a printed book, the title page itself, ++ plus such following pages as are needed to hold, legibly, the ++ material this License requires to appear in the title page. For ++ works in formats which do not have any title page as such, "Title ++ Page" means the text near the most prominent appearance of the ++ work's title, preceding the beginning of the body of the text. ++ ++ 2. VERBATIM COPYING ++ ++ You may copy and distribute the Document in any medium, either ++ commercially or noncommercially, provided that this License, the ++ copyright notices, and the license notice saying this License ++ applies to the Document are reproduced in all copies, and that you ++ add no other conditions whatsoever to those of this License. You ++ may not use technical measures to obstruct or control the reading ++ or further copying of the copies you make or distribute. However, ++ you may accept compensation in exchange for copies. If you ++ distribute a large enough number of copies you must also follow ++ the conditions in section 3. ++ ++ You may also lend copies, under the same conditions stated above, ++ and you may publicly display copies. ++ ++ 3. COPYING IN QUANTITY ++ ++ If you publish printed copies of the Document numbering more than ++ 100, and the Document's license notice requires Cover Texts, you ++ must enclose the copies in covers that carry, clearly and legibly, ++ all these Cover Texts: Front-Cover Texts on the front cover, and ++ Back-Cover Texts on the back cover. Both covers must also clearly ++ and legibly identify you as the publisher of these copies. The ++ front cover must present the full title with all words of the ++ title equally prominent and visible. You may add other material ++ on the covers in addition. Copying with changes limited to the ++ covers, as long as they preserve the title of the Document and ++ satisfy these conditions, can be treated as verbatim copying in ++ other respects. ++ ++ If the required texts for either cover are too voluminous to fit ++ legibly, you should put the first ones listed (as many as fit ++ reasonably) on the actual cover, and continue the rest onto ++ adjacent pages. ++ ++ If you publish or distribute Opaque copies of the Document ++ numbering more than 100, you must either include a ++ machine-readable Transparent copy along with each Opaque copy, or ++ state in or with each Opaque copy a publicly-accessible ++ computer-network location containing a complete Transparent copy ++ of the Document, free of added material, which the general ++ network-using public has access to download anonymously at no ++ charge using public-standard network protocols. If you use the ++ latter option, you must take reasonably prudent steps, when you ++ begin distribution of Opaque copies in quantity, to ensure that ++ this Transparent copy will remain thus accessible at the stated ++ location until at least one year after the last time you ++ distribute an Opaque copy (directly or through your agents or ++ retailers) of that edition to the public. ++ ++ It is requested, but not required, that you contact the authors of ++ the Document well before redistributing any large number of ++ copies, to give them a chance to provide you with an updated ++ version of the Document. ++ ++ 4. MODIFICATIONS ++ ++ You may copy and distribute a Modified Version of the Document ++ under the conditions of sections 2 and 3 above, provided that you ++ release the Modified Version under precisely this License, with ++ the Modified Version filling the role of the Document, thus ++ licensing distribution and modification of the Modified Version to ++ whoever possesses a copy of it. In addition, you must do these ++ things in the Modified Version: ++ ++ A. Use in the Title Page (and on the covers, if any) a title ++ distinct from that of the Document, and from those of previous ++ versions (which should, if there were any, be listed in the ++ History section of the Document). You may use the same title ++ as a previous version if the original publisher of that version ++ gives permission. ++ B. List on the Title Page, as authors, one or more persons or ++ entities responsible for authorship of the modifications in the ++ Modified Version, together with at least five of the principal ++ authors of the Document (all of its principal authors, if it ++ has less than five). ++ C. State on the Title page the name of the publisher of the ++ Modified Version, as the publisher. ++ D. Preserve all the copyright notices of the Document. ++ E. Add an appropriate copyright notice for your modifications ++ adjacent to the other copyright notices. ++ F. Include, immediately after the copyright notices, a license ++ notice giving the public permission to use the Modified Version ++ under the terms of this License, in the form shown in the ++ Addendum below. ++ G. Preserve in that license notice the full lists of Invariant ++ Sections and required Cover Texts given in the Document's ++ license notice. ++ H. Include an unaltered copy of this License. ++ I. Preserve the section entitled "History", and its title, and add ++ to it an item stating at least the title, year, new authors, and ++ publisher of the Modified Version as given on the Title Page. ++ If there is no section entitled "History" in the Document, ++ create one stating the title, year, authors, and publisher of ++ the Document as given on its Title Page, then add an item ++ describing the Modified Version as stated in the previous ++ sentence. ++ J. Preserve the network location, if any, given in the Document for ++ public access to a Transparent copy of the Document, and ++ likewise the network locations given in the Document for ++ previous versions it was based on. These may be placed in the ++ "History" section. You may omit a network location for a work ++ that was published at least four years before the Document ++ itself, or if the original publisher of the version it refers ++ to gives permission. ++ K. In any section entitled "Acknowledgements" or "Dedications", ++ preserve the section's title, and preserve in the section all the ++ substance and tone of each of the contributor acknowledgements ++ and/or dedications given therein. ++ L. Preserve all the Invariant Sections of the Document, ++ unaltered in their text and in their titles. Section numbers ++ or the equivalent are not considered part of the section titles. ++ M. Delete any section entitled "Endorsements." Such a section ++ may not be included in the Modified Version. ++ N. Do not retitle any existing section as "Endorsements" or to ++ conflict in title with any Invariant Section. ++ ++ If the Modified Version includes new front-matter sections or ++ appendices that qualify as Secondary Sections and contain no ++ material copied from the Document, you may at your option ++ designate some or all of these sections as invariant. To do this, ++ add their titles to the list of Invariant Sections in the Modified ++ Version's license notice. These titles must be distinct from any ++ other section titles. ++ ++ You may add a section entitled "Endorsements", provided it contains ++ nothing but endorsements of your Modified Version by various ++ parties-for example, statements of peer review or that the text has ++ been approved by an organization as the authoritative definition ++ of a standard. ++ ++ You may add a passage of up to five words as a Front-Cover Text, ++ and a passage of up to 25 words as a Back-Cover Text, to the end ++ of the list of Cover Texts in the Modified Version. Only one ++ passage of Front-Cover Text and one of Back-Cover Text may be ++ added by (or through arrangements made by) any one entity. If the ++ Document already includes a cover text for the same cover, ++ previously added by you or by arrangement made by the same entity ++ you are acting on behalf of, you may not add another; but you may ++ replace the old one, on explicit permission from the previous ++ publisher that added the old one. ++ ++ The author(s) and publisher(s) of the Document do not by this ++ License give permission to use their names for publicity for or to ++ assert or imply endorsement of any Modified Version. ++ ++ 5. COMBINING DOCUMENTS ++ ++ You may combine the Document with other documents released under ++ this License, under the terms defined in section 4 above for ++ modified versions, provided that you include in the combination ++ all of the Invariant Sections of all of the original documents, ++ unmodified, and list them all as Invariant Sections of your ++ combined work in its license notice. ++ ++ The combined work need only contain one copy of this License, and ++ multiple identical Invariant Sections may be replaced with a single ++ copy. If there are multiple Invariant Sections with the same name ++ but different contents, make the title of each such section unique ++ by adding at the end of it, in parentheses, the name of the ++ original author or publisher of that section if known, or else a ++ unique number. Make the same adjustment to the section titles in ++ the list of Invariant Sections in the license notice of the ++ combined work. ++ ++ In the combination, you must combine any sections entitled ++ "History" in the various original documents, forming one section ++ entitled "History"; likewise combine any sections entitled ++ "Acknowledgements", and any sections entitled "Dedications." You ++ must delete all sections entitled "Endorsements." ++ ++ 6. COLLECTIONS OF DOCUMENTS ++ ++ You may make a collection consisting of the Document and other ++ documents released under this License, and replace the individual ++ copies of this License in the various documents with a single copy ++ that is included in the collection, provided that you follow the ++ rules of this License for verbatim copying of each of the ++ documents in all other respects. ++ ++ You may extract a single document from such a collection, and ++ distribute it individually under this License, provided you insert ++ a copy of this License into the extracted document, and follow ++ this License in all other respects regarding verbatim copying of ++ that document. ++ ++ 7. AGGREGATION WITH INDEPENDENT WORKS ++ ++ A compilation of the Document or its derivatives with other ++ separate and independent documents or works, in or on a volume of ++ a storage or distribution medium, does not as a whole count as a ++ Modified Version of the Document, provided no compilation ++ copyright is claimed for the compilation. Such a compilation is ++ called an "aggregate", and this License does not apply to the ++ other self-contained works thus compiled with the Document, on ++ account of their being thus compiled, if they are not themselves ++ derivative works of the Document. ++ ++ If the Cover Text requirement of section 3 is applicable to these ++ copies of the Document, then if the Document is less than one ++ quarter of the entire aggregate, the Document's Cover Texts may be ++ placed on covers that surround only the Document within the ++ aggregate. Otherwise they must appear on covers around the whole ++ aggregate. ++ ++ 8. TRANSLATION ++ ++ Translation is considered a kind of modification, so you may ++ distribute translations of the Document under the terms of section ++ 4. Replacing Invariant Sections with translations requires special ++ permission from their copyright holders, but you may include ++ translations of some or all Invariant Sections in addition to the ++ original versions of these Invariant Sections. You may include a ++ translation of this License provided that you also include the ++ original English version of this License. In case of a ++ disagreement between the translation and the original English ++ version of this License, the original English version will prevail. ++ ++ 9. TERMINATION ++ ++ You may not copy, modify, sublicense, or distribute the Document ++ except as expressly provided for under this License. Any other ++ attempt to copy, modify, sublicense or distribute the Document is ++ void, and will automatically terminate your rights under this ++ License. However, parties who have received copies, or rights, ++ from you under this License will not have their licenses ++ terminated so long as such parties remain in full compliance. ++ ++ 10. FUTURE REVISIONS OF THIS LICENSE ++ ++ The Free Software Foundation may publish new, revised versions of ++ the GNU Free Documentation License from time to time. Such new ++ versions will be similar in spirit to the present version, but may ++ differ in detail to address new problems or concerns. See ++ http://www.gnu.org/copyleft/. ++ ++ Each version of the License is given a distinguishing version ++ number. If the Document specifies that a particular numbered ++ version of this License "or any later version" applies to it, you ++ have the option of following the terms and conditions either of ++ that specified version or of any later version that has been ++ published (not as a draft) by the Free Software Foundation. If ++ the Document does not specify a version number of this License, ++ you may choose any version ever published (not as a draft) by the ++ Free Software Foundation. ++ ++ ++ADDENDUM: How to use this License for your documents ++==================================================== ++ ++To use this License in a document you have written, include a copy of ++the License in the document and put the following copyright and license ++notices just after the title page: ++ ++ Copyright (C) YEAR YOUR NAME. ++ Permission is granted to copy, distribute and/or modify this document ++ under the terms of the GNU Free Documentation License, Version 1.1 ++ or any later version published by the Free Software Foundation; ++ with the Invariant Sections being LIST THEIR TITLES, with the ++ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. ++ A copy of the license is included in the section entitled "GNU ++ Free Documentation License." ++ ++ If you have no Invariant Sections, write "with no Invariant Sections" ++instead of saying which ones are invariant. If you have no Front-Cover ++Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being ++LIST"; likewise for Back-Cover Texts. ++ ++ If your document contains nontrivial examples of program code, we ++recommend releasing these examples in parallel under your choice of ++free software license, such as the GNU General Public License, to ++permit their use in free software. ++ ++ ++File: ld.info, Node: Index, Prev: GNU Free Documentation License, Up: Top ++ ++Index ++***** ++ ++[index] ++* Menu: ++ ++* ": Symbols. (line 6) ++* -(: Options. (line 609) ++* --accept-unknown-input-arch: Options. (line 627) ++* --add-needed: Options. (line 649) ++* --add-stdcall-alias: Options. (line 1343) ++* --allow-multiple-definition: Options. (line 819) ++* --allow-shlib-undefined: Options. (line 825) ++* --architecture=ARCH: Options. (line 104) ++* --as-needed: Options. (line 637) ++* --auxiliary: Options. (line 205) ++* --base-file: Options. (line 1348) ++* --be8: ARM. (line 23) ++* --bss-plt: PowerPC ELF32. (line 13) ++* --check-sections: Options. (line 701) ++* --cref: Options. (line 711) ++* --default-imported-symver: Options. (line 853) ++* --default-symver: Options. (line 849) ++* --defsym SYMBOL=EXP: Options. (line 739) ++* --demangle[=STYLE]: Options. (line 752) ++* --direct-data: AVR32. (line 6) ++* --disable-auto-image-base: Options. (line 1495) ++* --disable-auto-import: Options. (line 1624) ++* --disable-new-dtags: Options. (line 1295) ++* --disable-runtime-pseudo-reloc: Options. (line 1637) ++* --disable-stdcall-fixup: Options. (line 1358) ++* --discard-all: Options. (line 513) ++* --discard-locals: Options. (line 517) ++* --dll: Options. (line 1353) ++* --dll-search-prefix: Options. (line 1501) ++* --dotsyms: PowerPC64 ELF64. (line 33) ++* --dynamic-linker FILE: Options. (line 765) ++* --eh-frame-hdr: Options. (line 1291) ++* --emit-relocs: Options. (line 415) ++* --emit-stub-syms <1>: PowerPC64 ELF64. (line 29) ++* --emit-stub-syms: PowerPC ELF32. (line 37) ++* --enable-auto-image-base: Options. (line 1487) ++* --enable-auto-import: Options. (line 1510) ++* --enable-extra-pe-debug: Options. (line 1642) ++* --enable-new-dtags: Options. (line 1295) ++* --enable-runtime-pseudo-reloc: Options. (line 1629) ++* --enable-stdcall-fixup: Options. (line 1358) ++* --entry=ENTRY: Options. (line 158) ++* --error-unresolved-symbols: Options. (line 1244) ++* --exclude-libs: Options. (line 168) ++* --exclude-symbols: Options. (line 1400) ++* --export-all-symbols: Options. (line 1376) ++* --export-dynamic: Options. (line 179) ++* --fatal-warnings: Options. (line 771) ++* --file-alignment: Options. (line 1406) ++* --filter: Options. (line 226) ++* --fix-v4bx: ARM. (line 44) ++* --force-dynamic: Options. (line 424) ++* --force-exe-suffix: Options. (line 774) ++* --format=FORMAT: Options. (line 115) ++* --format=VERSION: TI COFF. (line 6) ++* --gc-sections: Options. (line 784) ++* --gpsize: Options. (line 259) ++* --hash-size=NUMBER: Options. (line 1304) ++* --heap: Options. (line 1412) ++* --help: Options. (line 792) ++* --image-base: Options. (line 1419) ++* --just-symbols=FILE: Options. (line 447) ++* --kill-at: Options. (line 1428) ++* --large-address-aware: Options. (line 1433) ++* --library-path=DIR: Options. (line 315) ++* --library=ARCHIVE: Options. (line 285) ++* --major-image-version: Options. (line 1442) ++* --major-os-version: Options. (line 1447) ++* --major-subsystem-version: Options. (line 1451) ++* --minor-image-version: Options. (line 1456) ++* --minor-os-version: Options. (line 1461) ++* --minor-subsystem-version: Options. (line 1465) ++* --mri-script=MRI-CMDFILE: Options. (line 139) ++* --multi-subspace: HPPA ELF32. (line 6) ++* --nmagic: Options. (line 384) ++* --no-accept-unknown-input-arch: Options. (line 627) ++* --no-add-needed: Options. (line 649) ++* --no-allow-shlib-undefined: Options. (line 825) ++* --no-as-needed: Options. (line 637) ++* --no-check-sections: Options. (line 701) ++* --no-define-common: Options. (line 723) ++* --no-demangle: Options. (line 752) ++* --no-direct-data: AVR32. (line 6) ++* --no-dotsyms: PowerPC64 ELF64. (line 33) ++* --no-gc-sections: Options. (line 784) ++* --no-keep-memory: Options. (line 804) ++* --no-multi-toc: PowerPC64 ELF64. (line 74) ++* --no-omagic: Options. (line 398) ++* --no-opd-optimize: PowerPC64 ELF64. (line 48) ++* --no-relax: Xtensa. (line 56) ++* --no-tls-optimize <1>: PowerPC64 ELF64. (line 43) ++* --no-tls-optimize: PowerPC ELF32. (line 41) ++* --no-toc-optimize: PowerPC64 ELF64. (line 60) ++* --no-undefined: Options. (line 811) ++* --no-undefined-version: Options. (line 844) ++* --no-warn-mismatch: Options. (line 857) ++* --no-whole-archive: Options. (line 866) ++* --noinhibit-exec: Options. (line 870) ++* --non-overlapping-opd: PowerPC64 ELF64. (line 54) ++* --oformat: Options. (line 882) ++* --omagic: Options. (line 389) ++* --out-implib: Options. (line 1478) ++* --output-def: Options. (line 1470) ++* --output=OUTPUT: Options. (line 404) ++* --pic-executable: Options. (line 895) ++* --print-map: Options. (line 347) ++* --reduce-memory-overheads: Options. (line 1312) ++* --relax: Options. (line 911) ++* --relax on i960: i960. (line 31) ++* --relax on PowerPC: PowerPC ELF32. (line 6) ++* --relax on Xtensa: Xtensa. (line 27) ++* --relocatable: Options. (line 428) ++* --script=SCRIPT: Options. (line 471) ++* --sdata-got: PowerPC ELF32. (line 23) ++* --section-alignment: Options. (line 1647) ++* --section-start SECTIONNAME=ORG: Options. (line 1081) ++* --sort-common: Options. (line 1028) ++* --sort-section alignment: Options. (line 1038) ++* --sort-section name: Options. (line 1034) ++* --split-by-file: Options. (line 1042) ++* --split-by-reloc: Options. (line 1047) ++* --stack: Options. (line 1653) ++* --stats: Options. (line 1060) ++* --strip-all: Options. (line 458) ++* --strip-debug: Options. (line 462) ++* --stub-group-size: PowerPC64 ELF64. (line 6) ++* --stub-group-size=N: HPPA ELF32. (line 12) ++* --subsystem: Options. (line 1660) ++* --support-old-code: ARM. (line 6) ++* --sysroot: Options. (line 1064) ++* --target-help: Options. (line 796) ++* --target1-abs: ARM. (line 27) ++* --target1-rel: ARM. (line 27) ++* --target2=TYPE: ARM. (line 32) ++* --thumb-entry=ENTRY: ARM. (line 17) ++* --trace: Options. (line 467) ++* --trace-symbol=SYMBOL: Options. (line 522) ++* --traditional-format: Options. (line 1069) ++* --undefined=SYMBOL: Options. (line 480) ++* --unique[=SECTION]: Options. (line 498) ++* --unresolved-symbols: Options. (line 1096) ++* --use-blx: ARM. (line 57) ++* --verbose: Options. (line 1125) ++* --version: Options. (line 507) ++* --version-script=VERSION-SCRIPTFILE: Options. (line 1131) ++* --warn-common: Options. (line 1138) ++* --warn-constructors: Options. (line 1206) ++* --warn-multiple-gp: Options. (line 1211) ++* --warn-once: Options. (line 1225) ++* --warn-section-align: Options. (line 1229) ++* --warn-shared-textrel: Options. (line 1236) ++* --warn-unresolved-symbols: Options. (line 1239) ++* --whole-archive: Options. (line 1248) ++* --wrap: Options. (line 1262) ++* -AARCH: Options. (line 103) ++* -aKEYWORD: Options. (line 96) ++* -assert KEYWORD: Options. (line 659) ++* -b FORMAT: Options. (line 115) ++* -Bdynamic: Options. (line 662) ++* -Bgroup: Options. (line 672) ++* -Bshareable: Options. (line 1020) ++* -Bstatic: Options. (line 679) ++* -Bsymbolic: Options. (line 694) ++* -c MRI-CMDFILE: Options. (line 139) ++* -call_shared: Options. (line 662) ++* -d: Options. (line 149) ++* -dc: Options. (line 149) ++* -dn: Options. (line 679) ++* -dp: Options. (line 149) ++* -dy: Options. (line 662) ++* -E: Options. (line 179) ++* -e ENTRY: Options. (line 158) ++* -EB: Options. (line 198) ++* -EL: Options. (line 201) ++* -F: Options. (line 226) ++* -f: Options. (line 205) ++* -fini: Options. (line 250) ++* -G: Options. (line 259) ++* -g: Options. (line 256) ++* -hNAME: Options. (line 267) ++* -i: Options. (line 276) ++* -IFILE: Options. (line 765) ++* -init: Options. (line 279) ++* -lARCHIVE: Options. (line 285) ++* -LDIR: Options. (line 315) ++* -M: Options. (line 347) ++* -m EMULATION: Options. (line 337) ++* -Map: Options. (line 800) ++* -N: Options. (line 389) ++* -n: Options. (line 384) ++* -non_shared: Options. (line 679) ++* -nostdlib: Options. (line 876) ++* -O LEVEL: Options. (line 410) ++* -o OUTPUT: Options. (line 404) ++* -pie: Options. (line 895) ++* -q: Options. (line 415) ++* -qmagic: Options. (line 905) ++* -Qy: Options. (line 908) ++* -r: Options. (line 428) ++* -R FILE: Options. (line 447) ++* -rpath: Options. (line 945) ++* -rpath-link: Options. (line 967) ++* -S: Options. (line 462) ++* -s: Options. (line 458) ++* -shared: Options. (line 1020) ++* -soname=NAME: Options. (line 267) ++* -static: Options. (line 679) ++* -t: Options. (line 467) ++* -T SCRIPT: Options. (line 471) ++* -Tbss ORG: Options. (line 1090) ++* -Tdata ORG: Options. (line 1090) ++* -Ttext ORG: Options. (line 1090) ++* -u SYMBOL: Options. (line 480) ++* -Ur: Options. (line 488) ++* -V: Options. (line 507) ++* -v: Options. (line 507) ++* -X: Options. (line 517) ++* -x: Options. (line 513) ++* -Y PATH: Options. (line 531) ++* -y SYMBOL: Options. (line 522) ++* -z defs: Options. (line 811) ++* -z KEYWORD: Options. (line 535) ++* -z muldefs: Options. (line 819) ++* .: Location Counter. (line 6) ++* /DISCARD/: Output Section Discarding. ++ (line 18) ++* :PHDR: Output Section Phdr. ++ (line 6) ++* =FILLEXP: Output Section Fill. ++ (line 6) ++* >REGION: Output Section Region. ++ (line 6) ++* [COMMON]: Input Section Common. ++ (line 29) ++* ABSOLUTE (MRI): MRI. (line 33) ++* absolute and relocatable symbols: Expression Section. (line 6) ++* absolute expressions: Expression Section. (line 6) ++* ABSOLUTE(EXP): Builtin Functions. (line 10) ++* ADDR(SECTION): Builtin Functions. (line 17) ++* address, section: Output Section Address. ++ (line 6) ++* ALIAS (MRI): MRI. (line 44) ++* ALIGN (MRI): MRI. (line 50) ++* align expression: Builtin Functions. (line 36) ++* align location counter: Builtin Functions. (line 36) ++* ALIGN(ALIGN): Builtin Functions. (line 36) ++* ALIGN(EXP,ALIGN): Builtin Functions. (line 36) ++* ALIGN(SECTION_ALIGN): Forced Output Alignment. ++ (line 6) ++* allocating memory: MEMORY. (line 6) ++* architecture: Miscellaneous Commands. ++ (line 46) ++* architectures: Options. (line 103) ++* archive files, from cmd line: Options. (line 285) ++* archive search path in linker script: File Commands. (line 71) ++* arithmetic: Expressions. (line 6) ++* arithmetic operators: Operators. (line 6) ++* ARM interworking support: ARM. (line 6) ++* AS_NEEDED(FILES): File Commands. (line 51) ++* ASSERT: Miscellaneous Commands. ++ (line 9) ++* assertion in linker script: Miscellaneous Commands. ++ (line 9) ++* assignment in scripts: Assignments. (line 6) ++* AT(LMA): Output Section LMA. (line 6) ++* AT>LMA_REGION: Output Section LMA. (line 6) ++* automatic data imports: WIN32. (line 170) ++* AVR32 options: AVR32. (line 6) ++* back end: BFD. (line 6) ++* BASE (MRI): MRI. (line 54) ++* BE8: ARM. (line 23) ++* BFD canonical format: Canonical format. (line 11) ++* BFD requirements: BFD. (line 16) ++* big-endian objects: Options. (line 198) ++* binary input format: Options. (line 115) ++* BLOCK(EXP): Builtin Functions. (line 62) ++* bug criteria: Bug Criteria. (line 6) ++* bug reports: Bug Reporting. (line 6) ++* bugs in ld: Reporting Bugs. (line 6) ++* BYTE(EXPRESSION): Output Section Data. ++ (line 6) ++* C++ constructors, arranging in link: Output Section Keywords. ++ (line 19) ++* CHIP (MRI): MRI. (line 58) ++* COLLECT_NO_DEMANGLE: Environment. (line 29) ++* combining symbols, warnings on: Options. (line 1138) ++* command files: Scripts. (line 6) ++* command line: Options. (line 6) ++* common allocation: Options. (line 149) ++* common allocation in linker script: Miscellaneous Commands. ++ (line 20) ++* common symbol placement: Input Section Common. ++ (line 6) ++* compatibility, MRI: Options. (line 139) ++* constants in linker scripts: Constants. (line 6) ++* CONSTRUCTORS: Output Section Keywords. ++ (line 19) ++* constructors: Options. (line 488) ++* constructors, arranging in link: Output Section Keywords. ++ (line 19) ++* crash of linker: Bug Criteria. (line 9) ++* CREATE_OBJECT_SYMBOLS: Output Section Keywords. ++ (line 9) ++* creating a DEF file: WIN32. (line 137) ++* cross reference table: Options. (line 711) ++* cross references: Miscellaneous Commands. ++ (line 30) ++* current output location: Location Counter. (line 6) ++* data: Output Section Data. ++ (line 6) ++* DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE): Builtin Functions. ++ (line 67) ++* DATA_SEGMENT_END(EXP): Builtin Functions. (line 88) ++* DATA_SEGMENT_RELRO_END(OFFSET, EXP): Builtin Functions. (line 94) ++* dbx: Options. (line 1074) ++* DEF files, creating: Options. (line 1470) ++* default emulation: Environment. (line 21) ++* default input format: Environment. (line 9) ++* DEFINED(SYMBOL): Builtin Functions. (line 105) ++* deleting local symbols: Options. (line 513) ++* demangling, default: Environment. (line 29) ++* demangling, from command line: Options. (line 752) ++* direct linking to a dll: WIN32. (line 218) ++* discarding sections: Output Section Discarding. ++ (line 6) ++* discontinuous memory: MEMORY. (line 6) ++* DLLs, creating: Options. (line 1376) ++* DLLs, linking to: Options. (line 1501) ++* dot: Location Counter. (line 6) ++* dot inside sections: Location Counter. (line 34) ++* dot outside sections: Location Counter. (line 64) ++* dynamic linker, from command line: Options. (line 765) ++* dynamic symbol table: Options. (line 179) ++* ELF program headers: PHDRS. (line 6) ++* emulation: Options. (line 337) ++* emulation, default: Environment. (line 21) ++* END (MRI): MRI. (line 62) ++* endianness: Options. (line 198) ++* entry point: Entry Point. (line 6) ++* entry point, from command line: Options. (line 158) ++* entry point, thumb: ARM. (line 17) ++* ENTRY(SYMBOL): Entry Point. (line 6) ++* error on valid input: Bug Criteria. (line 12) ++* example of linker script: Simple Example. (line 6) ++* exporting DLL symbols: WIN32. (line 19) ++* expression evaluation order: Evaluation. (line 6) ++* expression sections: Expression Section. (line 6) ++* expression, absolute: Builtin Functions. (line 10) ++* expressions: Expressions. (line 6) ++* EXTERN: Miscellaneous Commands. ++ (line 13) ++* fatal signal: Bug Criteria. (line 9) ++* file name wildcard patterns: Input Section Wildcards. ++ (line 6) ++* FILEHDR: PHDRS. (line 61) ++* filename symbols: Output Section Keywords. ++ (line 9) ++* fill pattern, entire section: Output Section Fill. ++ (line 6) ++* FILL(EXPRESSION): Output Section Data. ++ (line 39) ++* finalization function: Options. (line 250) ++* first input file: File Commands. (line 79) ++* first instruction: Entry Point. (line 6) ++* FIX_V4BX: ARM. (line 44) ++* FORCE_COMMON_ALLOCATION: Miscellaneous Commands. ++ (line 20) ++* forcing input section alignment: Forced Input Alignment. ++ (line 6) ++* forcing output section alignment: Forced Output Alignment. ++ (line 6) ++* forcing the creation of dynamic sections: Options. (line 424) ++* FORMAT (MRI): MRI. (line 66) ++* functions in expressions: Builtin Functions. (line 6) ++* garbage collection <1>: Input Section Keep. (line 6) ++* garbage collection: Options. (line 784) ++* generating optimized output: Options. (line 410) ++* GNU linker: Overview. (line 6) ++* GNUTARGET: Environment. (line 9) ++* GROUP(FILES): File Commands. (line 44) ++* grouping input files: File Commands. (line 44) ++* groups of archives: Options. (line 609) ++* H8/300 support: H8/300. (line 6) ++* header size: Builtin Functions. (line 170) ++* heap size: Options. (line 1412) ++* help: Options. (line 792) ++* holes: Location Counter. (line 12) ++* holes, filling: Output Section Data. ++ (line 39) ++* HPPA multiple sub-space stubs: HPPA ELF32. (line 6) ++* HPPA stub grouping: HPPA ELF32. (line 12) ++* i960 support: i960. (line 6) ++* image base: Options. (line 1419) ++* implicit linker scripts: Implicit Linker Scripts. ++ (line 6) ++* import libraries: WIN32. (line 10) ++* INCLUDE FILENAME: File Commands. (line 9) ++* including a linker script: File Commands. (line 9) ++* including an entire archive: Options. (line 1248) ++* incremental link: Options. (line 276) ++* INHIBIT_COMMON_ALLOCATION: Miscellaneous Commands. ++ (line 25) ++* initialization function: Options. (line 279) ++* initialized data in ROM: Output Section LMA. (line 21) ++* input file format in linker script: Format Commands. (line 35) ++* input filename symbols: Output Section Keywords. ++ (line 9) ++* input files in linker scripts: File Commands. (line 16) ++* input files, displaying: Options. (line 467) ++* input format: Options. (line 115) ++* input object files in linker scripts: File Commands. (line 16) ++* input section alignment: Forced Input Alignment. ++ (line 6) ++* input section basics: Input Section Basics. ++ (line 6) ++* input section wildcards: Input Section Wildcards. ++ (line 6) ++* input sections: Input Section. (line 6) ++* INPUT(FILES): File Commands. (line 16) ++* integer notation: Constants. (line 6) ++* integer suffixes: Constants. (line 12) ++* internal object-file format: Canonical format. (line 11) ++* invalid input: Bug Criteria. (line 14) ++* K and M integer suffixes: Constants. (line 12) ++* KEEP: Input Section Keep. (line 6) ++* l =: MEMORY. (line 72) ++* L, deleting symbols beginning: Options. (line 517) ++* lazy evaluation: Evaluation. (line 6) ++* ld bugs, reporting: Bug Reporting. (line 6) ++* LDEMULATION: Environment. (line 21) ++* len =: MEMORY. (line 72) ++* LENGTH =: MEMORY. (line 72) ++* LENGTH(MEMORY): Builtin Functions. (line 122) ++* library search path in linker script: File Commands. (line 71) ++* link map: Options. (line 347) ++* link-time runtime library search path: Options. (line 967) ++* linker crash: Bug Criteria. (line 9) ++* linker script concepts: Basic Script Concepts. ++ (line 6) ++* linker script example: Simple Example. (line 6) ++* linker script file commands: File Commands. (line 6) ++* linker script format: Script Format. (line 6) ++* linker script input object files: File Commands. (line 16) ++* linker script simple commands: Simple Commands. (line 6) ++* linker scripts: Scripts. (line 6) ++* LIST (MRI): MRI. (line 77) ++* little-endian objects: Options. (line 201) ++* LOAD (MRI): MRI. (line 84) ++* load address: Output Section LMA. (line 6) ++* LOADADDR(SECTION): Builtin Functions. (line 125) ++* loading, preventing: Output Section Type. ++ (line 22) ++* local symbols, deleting: Options. (line 517) ++* location counter: Location Counter. (line 6) ++* LONG(EXPRESSION): Output Section Data. ++ (line 6) ++* M and K integer suffixes: Constants. (line 12) ++* machine architecture: Miscellaneous Commands. ++ (line 46) ++* machine dependencies: Machine Dependent. (line 6) ++* mapping input sections to output sections: Input Section. (line 6) ++* MAX: Builtin Functions. (line 130) ++* MEMORY: MEMORY. (line 6) ++* memory region attributes: MEMORY. (line 32) ++* memory regions: MEMORY. (line 6) ++* memory regions and sections: Output Section Region. ++ (line 6) ++* memory usage: Options. (line 804) ++* MIN: Builtin Functions. (line 133) ++* MRI compatibility: MRI. (line 6) ++* MSP430 extra sections: MSP430. (line 11) ++* NAME (MRI): MRI. (line 90) ++* name, section: Output Section Name. ++ (line 6) ++* names: Symbols. (line 6) ++* naming the output file: Options. (line 404) ++* NEXT(EXP): Builtin Functions. (line 137) ++* NMAGIC: Options. (line 384) ++* NOCROSSREFS(SECTIONS): Miscellaneous Commands. ++ (line 30) ++* NOLOAD: Output Section Type. ++ (line 22) ++* not enough room for program headers: Builtin Functions. (line 175) ++* o =: MEMORY. (line 67) ++* objdump -i: BFD. (line 6) ++* object file management: BFD. (line 6) ++* object files: Options. (line 29) ++* object formats available: BFD. (line 6) ++* object size: Options. (line 259) ++* OMAGIC: Options. (line 389) ++* opening object files: BFD outline. (line 6) ++* operators for arithmetic: Operators. (line 6) ++* options: Options. (line 6) ++* ORDER (MRI): MRI. (line 95) ++* org =: MEMORY. (line 67) ++* ORIGIN =: MEMORY. (line 67) ++* ORIGIN(MEMORY): Builtin Functions. (line 143) ++* orphan: Orphan Sections. (line 6) ++* output file after errors: Options. (line 870) ++* output file format in linker script: Format Commands. (line 10) ++* output file name in linker scripot: File Commands. (line 61) ++* output section alignment: Forced Output Alignment. ++ (line 6) ++* output section attributes: Output Section Attributes. ++ (line 6) ++* output section data: Output Section Data. ++ (line 6) ++* OUTPUT(FILENAME): File Commands. (line 61) ++* OUTPUT_ARCH(BFDARCH): Miscellaneous Commands. ++ (line 46) ++* OUTPUT_FORMAT(BFDNAME): Format Commands. (line 10) ++* OVERLAY: Overlay Description. ++ (line 6) ++* overlays: Overlay Description. ++ (line 6) ++* partial link: Options. (line 428) ++* PHDRS: PHDRS. (line 6) ++* position independent executables: Options. (line 897) ++* PowerPC ELF32 options: PowerPC ELF32. (line 13) ++* PowerPC GOT: PowerPC ELF32. (line 23) ++* PowerPC long branches: PowerPC ELF32. (line 6) ++* PowerPC PLT: PowerPC ELF32. (line 13) ++* PowerPC stub symbols: PowerPC ELF32. (line 37) ++* PowerPC TLS optimization: PowerPC ELF32. (line 41) ++* PowerPC64 dot symbols: PowerPC64 ELF64. (line 33) ++* PowerPC64 ELF64 options: PowerPC64 ELF64. (line 6) ++* PowerPC64 multi-TOC: PowerPC64 ELF64. (line 74) ++* PowerPC64 OPD optimization: PowerPC64 ELF64. (line 48) ++* PowerPC64 OPD spacing: PowerPC64 ELF64. (line 54) ++* PowerPC64 stub grouping: PowerPC64 ELF64. (line 6) ++* PowerPC64 stub symbols: PowerPC64 ELF64. (line 29) ++* PowerPC64 TLS optimization: PowerPC64 ELF64. (line 43) ++* PowerPC64 TOC optimization: PowerPC64 ELF64. (line 60) ++* precedence in expressions: Operators. (line 6) ++* prevent unnecessary loading: Output Section Type. ++ (line 22) ++* program headers: PHDRS. (line 6) ++* program headers and sections: Output Section Phdr. ++ (line 6) ++* program headers, not enough room: Builtin Functions. (line 175) ++* program segments: PHDRS. (line 6) ++* PROVIDE: PROVIDE. (line 6) ++* PROVIDE_HIDDEN: PROVIDE_HIDDEN. (line 6) ++* PUBLIC (MRI): MRI. (line 103) ++* QUAD(EXPRESSION): Output Section Data. ++ (line 6) ++* quoted symbol names: Symbols. (line 6) ++* read-only text: Options. (line 384) ++* read/write from cmd line: Options. (line 389) ++* regions of memory: MEMORY. (line 6) ++* relative expressions: Expression Section. (line 6) ++* relaxing addressing modes: Options. (line 911) ++* relaxing on H8/300: H8/300. (line 9) ++* relaxing on i960: i960. (line 31) ++* relaxing on Xtensa: Xtensa. (line 27) ++* relocatable and absolute symbols: Expression Section. (line 6) ++* relocatable output: Options. (line 428) ++* removing sections: Output Section Discarding. ++ (line 6) ++* reporting bugs in ld: Reporting Bugs. (line 6) ++* requirements for BFD: BFD. (line 16) ++* retain relocations in final executable: Options. (line 415) ++* retaining specified symbols: Options. (line 931) ++* ROM initialized data: Output Section LMA. (line 21) ++* round up expression: Builtin Functions. (line 36) ++* round up location counter: Builtin Functions. (line 36) ++* runtime library name: Options. (line 267) ++* runtime library search path: Options. (line 945) ++* runtime pseudo-relocation: WIN32. (line 196) ++* scaled integers: Constants. (line 12) ++* scommon section: Input Section Common. ++ (line 20) ++* script files: Options. (line 471) ++* scripts: Scripts. (line 6) ++* search directory, from cmd line: Options. (line 315) ++* search path in linker script: File Commands. (line 71) ++* SEARCH_DIR(PATH): File Commands. (line 71) ++* SECT (MRI): MRI. (line 109) ++* section address: Output Section Address. ++ (line 6) ++* section address in expression: Builtin Functions. (line 17) ++* section alignment, warnings on: Options. (line 1229) ++* section data: Output Section Data. ++ (line 6) ++* section fill pattern: Output Section Fill. ++ (line 6) ++* section load address: Output Section LMA. (line 6) ++* section load address in expression: Builtin Functions. (line 125) ++* section name: Output Section Name. ++ (line 6) ++* section name wildcard patterns: Input Section Wildcards. ++ (line 6) ++* section size: Builtin Functions. (line 154) ++* section, assigning to memory region: Output Section Region. ++ (line 6) ++* section, assigning to program header: Output Section Phdr. ++ (line 6) ++* SECTIONS: SECTIONS. (line 6) ++* sections, discarding: Output Section Discarding. ++ (line 6) ++* segment origins, cmd line: Options. (line 1090) ++* SEGMENT_START(SEGMENT, DEFAULT): Builtin Functions. (line 146) ++* segments, ELF: PHDRS. (line 6) ++* shared libraries: Options. (line 1022) ++* SHORT(EXPRESSION): Output Section Data. ++ (line 6) ++* SIZEOF(SECTION): Builtin Functions. (line 154) ++* SIZEOF_HEADERS: Builtin Functions. (line 170) ++* small common symbols: Input Section Common. ++ (line 20) ++* SORT: Input Section Wildcards. ++ (line 58) ++* SORT_BY_ALIGNMENT: Input Section Wildcards. ++ (line 54) ++* SORT_BY_NAME: Input Section Wildcards. ++ (line 46) ++* SQUAD(EXPRESSION): Output Section Data. ++ (line 6) ++* stack size: Options. (line 1653) ++* standard Unix system: Options. (line 7) ++* start of execution: Entry Point. (line 6) ++* STARTUP(FILENAME): File Commands. (line 79) ++* strip all symbols: Options. (line 458) ++* strip debugger symbols: Options. (line 462) ++* stripping all but some symbols: Options. (line 931) ++* SUBALIGN(SUBSECTION_ALIGN): Forced Input Alignment. ++ (line 6) ++* suffixes for integers: Constants. (line 12) ++* symbol defaults: Builtin Functions. (line 105) ++* symbol definition, scripts: Assignments. (line 6) ++* symbol names: Symbols. (line 6) ++* symbol tracing: Options. (line 522) ++* symbol versions: VERSION. (line 6) ++* symbol-only input: Options. (line 447) ++* symbols, from command line: Options. (line 739) ++* symbols, relocatable and absolute: Expression Section. (line 6) ++* symbols, retaining selectively: Options. (line 931) ++* synthesizing linker: Options. (line 911) ++* synthesizing on H8/300: H8/300. (line 14) ++* TARGET(BFDNAME): Format Commands. (line 35) ++* TARGET1: ARM. (line 27) ++* TARGET2: ARM. (line 32) ++* thumb entry point: ARM. (line 17) ++* TI COFF versions: TI COFF. (line 6) ++* traditional format: Options. (line 1069) ++* unallocated address, next: Builtin Functions. (line 137) ++* undefined symbol: Options. (line 480) ++* undefined symbol in linker script: Miscellaneous Commands. ++ (line 13) ++* undefined symbols, warnings on: Options. (line 1225) ++* uninitialized data placement: Input Section Common. ++ (line 6) ++* unspecified memory: Output Section Data. ++ (line 39) ++* usage: Options. (line 792) ++* USE_BLX: ARM. (line 57) ++* using a DEF file: WIN32. (line 42) ++* using auto-export functionality: WIN32. (line 22) ++* Using decorations: WIN32. (line 141) ++* variables, defining: Assignments. (line 6) ++* verbose: Options. (line 1125) ++* version: Options. (line 507) ++* version script: VERSION. (line 6) ++* version script, symbol versions: Options. (line 1131) ++* VERSION {script text}: VERSION. (line 6) ++* versions of symbols: VERSION. (line 6) ++* warnings, on combining symbols: Options. (line 1138) ++* warnings, on section alignment: Options. (line 1229) ++* warnings, on undefined symbols: Options. (line 1225) ++* weak externals: WIN32. (line 380) ++* what is this?: Overview. (line 6) ++* wildcard file name patterns: Input Section Wildcards. ++ (line 6) ++* Xtensa options: Xtensa. (line 56) ++* Xtensa processors: Xtensa. (line 6) ++ ++ ++ ++Tag Table: ++Node: Top331 ++Node: Overview1093 ++Node: Invocation2207 ++Node: Options2615 ++Node: Environment77270 ++Node: Scripts79030 ++Node: Basic Script Concepts80764 ++Node: Script Format83471 ++Node: Simple Example84334 ++Node: Simple Commands87430 ++Node: Entry Point87881 ++Node: File Commands88640 ++Node: Format Commands92506 ++Node: Miscellaneous Commands94472 ++Node: Assignments96702 ++Node: Simple Assignments97193 ++Node: PROVIDE98929 ++Node: PROVIDE_HIDDEN100134 ++Node: Source Code Reference100378 ++Node: SECTIONS103958 ++Node: Output Section Description105849 ++Node: Output Section Name106902 ++Node: Output Section Address107778 ++Node: Input Section109427 ++Node: Input Section Basics110228 ++Node: Input Section Wildcards112580 ++Node: Input Section Common117313 ++Node: Input Section Keep118795 ++Node: Input Section Example119285 ++Node: Output Section Data120253 ++Node: Output Section Keywords123030 ++Node: Output Section Discarding126599 ++Node: Output Section Attributes127555 ++Node: Output Section Type128559 ++Node: Output Section LMA129713 ++Node: Forced Output Alignment131984 ++Node: Forced Input Alignment132252 ++Node: Output Section Region132637 ++Node: Output Section Phdr133067 ++Node: Output Section Fill133731 ++Node: Overlay Description134873 ++Node: MEMORY139121 ++Node: PHDRS143321 ++Node: VERSION148360 ++Node: Expressions156151 ++Node: Constants157029 ++Node: Symbols157590 ++Node: Orphan Sections158328 ++Node: Location Counter159091 ++Node: Operators163395 ++Node: Evaluation164317 ++Node: Expression Section165681 ++Node: Builtin Functions167170 ++Node: Implicit Linker Scripts174662 ++Node: Machine Dependent175437 ++Node: H8/300176357 ++Node: i960177982 ++Node: ARM179667 ++Node: AVR32182578 ++Node: HPPA ELF32183526 ++Node: MMIX185151 ++Node: MSP430186368 ++Node: PowerPC ELF32187416 ++Node: PowerPC64 ELF64189707 ++Node: TI COFF194121 ++Node: WIN32194655 ++Node: Xtensa212729 ++Node: BFD215851 ++Node: BFD outline217306 ++Node: BFD information loss218592 ++Node: Canonical format221109 ++Node: Reporting Bugs225466 ++Node: Bug Criteria226160 ++Node: Bug Reporting226859 ++Node: MRI233884 ++Node: GNU Free Documentation License238527 ++Node: Index258241 ++ ++End Tag Table +diff -Nrup binutils-2.17/ld/ld.texinfo binutils-2.17.atmel.1.3.0/ld/ld.texinfo +--- binutils-2.17/ld/ld.texinfo 2006-05-10 15:43:47.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/ld/ld.texinfo 2007-09-28 10:30:45.000000000 +0200 +@@ -22,6 +22,7 @@ + @set GENERIC + @set ARC + @set ARM ++@set AVR32 + @set D10V + @set D30V + @set H8/300 +@@ -152,6 +153,9 @@ section entitled ``GNU Free Documentatio + @ifset ARM + * ARM:: ld and the ARM family + @end ifset ++@ifset AVR32 ++* AVR32:: ld and AVR32 processors ++@end ifset + @ifset HPPA + * HPPA ELF32:: ld and HPPA 32-bit ELF + @end ifset +@@ -5110,6 +5114,9 @@ functionality are not listed. + @ifset ARM + * ARM:: @command{ld} and the ARM family + @end ifset ++@ifset AVR32 ++* AVR32:: @command{ld} and AVR32 processors ++@end ifset + @ifset HPPA + * HPPA ELF32:: @command{ld} and HPPA 32-bit ELF + @end ifset +@@ -5402,6 +5409,41 @@ specify it if you are using that target. + @end ifclear + @end ifset + ++@ifset AVR32 ++@ifclear GENERIC ++@raisesections ++@end ifclear ++ ++@node AVR32 ++@section @command{ld} and AVR32 processors ++@cindex AVR32 options ++@table @option ++@kindex --direct-data ++@kindex --no-direct-data ++@item --direct-data ++@item --no-direct-data ++Taking the address of a symbol can often be done by using a direct ++@code{mov} or pc-relative @code{sub} instruction, which is faster than ++using a PC- or GOT-relative load, especially on the uC3 ++processors. However, this does not always work when dealing with ++symbols in the @code{.data} section so this optimization is disabled ++by default. ++ ++Specifying @option{--direct-data} will enable this optimization. Note ++that this may cause @samp{relocation truncated to fit} errors for ++certain large programs. If this happens, the optimization can be ++turned off by specifying @option{--no-direct-data}. ++ ++All known issues with direct data optimizations are detected at link ++time, so if the linker doesn't complain, the result should run just ++fine. ++@end table ++ ++@ifclear GENERIC ++@lowersections ++@end ifclear ++@end ifset ++ + @ifset HPPA + @ifclear GENERIC + @raisesections +diff -Nrup binutils-2.17/ld/Makefile.am binutils-2.17.atmel.1.3.0/ld/Makefile.am --- binutils-2.17/ld/Makefile.am 2006-06-03 06:45:50.000000000 +0200 -+++ binutils-2.17-atmel/ld/Makefile.am 2007-02-12 15:37:09.000000000 +0100 -@@ -133,6 +133,9 @@ ALL_EMULATIONS = \ ++++ binutils-2.17.atmel.1.3.0/ld/Makefile.am 2007-09-28 10:30:45.000000000 +0200 +@@ -133,6 +133,20 @@ ALL_EMULATIONS = \ eavr3.o \ eavr4.o \ eavr5.o \ + eavr32elf_ap7000.o \ ++ eavr32elf_uc3a0128.o \ ++ eavr32elf_uc3a0256.o \ + eavr32elf_uc3a0512.o \ ++ eavr32elf_uc3a1128.o \ ++ eavr32elf_uc3a1256.o \ ++ eavr32elf_uc3a1512.o \ ++ eavr32elf_uc3b064.o \ ++ eavr32elf_uc3b0128.o \ ++ eavr32elf_uc3b0256.o \ ++ eavr32elf_uc3b164.o \ ++ eavr32elf_uc3b1128.o \ ++ eavr32elf_uc3b1256.o \ + eavr32linux.o \ ecoff_i860.o \ ecoff_sparc.o \ ecrisaout.o \ -@@ -595,6 +598,15 @@ eavr5.c: $(srcdir)/emulparams/avr5.sh \ +@@ -595,6 +609,62 @@ eavr5.c: $(srcdir)/emulparams/avr5.sh \ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \ ${GEN_DEPENDS} ${GENSCRIPTS} avr5 "$(tdir_avr2)" +eavr32elf_ap7000.c: $(srcdir)/emulparams/avr32elf_ap7000.sh \ -+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} + ${GENSCRIPTS} avr32elf_ap7000 "$(tdir_avr32)" ++eavr32elf_uc3a0128.c: $(srcdir)/emulparams/avr32elf_uc3a0128.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3a0128 "$(tdir_avr32)" ++eavr32elf_uc3a0256.c: $(srcdir)/emulparams/avr32elf_uc3a0256.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3a0256 "$(tdir_avr32)" +eavr32elf_uc3a0512.c: $(srcdir)/emulparams/avr32elf_uc3a0512.sh \ -+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} + ${GENSCRIPTS} avr32elf_uc3a0512 "$(tdir_avr32)" ++eavr32elf_uc3a1128.c: $(srcdir)/emulparams/avr32elf_uc3a1128.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3a1128 "$(tdir_avr32)" ++eavr32elf_uc3a1256.c: $(srcdir)/emulparams/avr32elf_uc3a1256.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3a1256 "$(tdir_avr32)" ++eavr32elf_uc3a1512.c: $(srcdir)/emulparams/avr32elf_uc3a1512.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3a1512 "$(tdir_avr32)" ++eavr32elf_uc3b064.c: $(srcdir)/emulparams/avr32elf_uc3b064.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3b064 "$(tdir_avr32)" ++eavr32elf_uc3b0128.c: $(srcdir)/emulparams/avr32elf_uc3b0128.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3b0128 "$(tdir_avr32)" ++eavr32elf_uc3b0256.c: $(srcdir)/emulparams/avr32elf_uc3b0256.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3b0256 "$(tdir_avr32)" ++eavr32elf_uc3b164.c: $(srcdir)/emulparams/avr32elf_uc3b164.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3b164 "$(tdir_avr32)" ++eavr32elf_uc3b1128.c: $(srcdir)/emulparams/avr32elf_uc3b1128.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3b1128 "$(tdir_avr32)" ++eavr32elf_uc3b1256.c: $(srcdir)/emulparams/avr32elf_uc3b1256.sh \ ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} avr32elf_uc3b1256 "$(tdir_avr32)" +eavr32linux.c: $(srcdir)/emulparams/avr32linux.sh \ -+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ++ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ ++ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} avr32linux "$(tdir_avr32)" ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS} ${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)" -@@ -1800,7 +1812,9 @@ install-exec-local: ld-new$(EXEEXT) +@@ -1800,7 +1870,9 @@ install-exec-local: ld-new$(EXEEXT) || $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT); \ fi @@ -79071,9 +89590,9 @@ diff -Nrup binutils-2.17/ld/Makefile.am binutils-2.17-atmel/ld/Makefile.am $(mkinstalldirs) $(DESTDIR)$(scriptdir)/ldscripts for f in ldscripts/*; do \ $(INSTALL_DATA) $$f $(DESTDIR)$(scriptdir)/$$f ; \ -diff -Nrup binutils-2.17/ld/Makefile.in binutils-2.17-atmel/ld/Makefile.in +diff -Nrup binutils-2.17/ld/Makefile.in binutils-2.17.atmel.1.3.0/ld/Makefile.in --- binutils-2.17/ld/Makefile.in 2006-06-03 06:45:50.000000000 +0200 -+++ binutils-2.17-atmel/ld/Makefile.in 2007-02-20 16:07:38.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/ld/Makefile.in 2007-03-26 10:32:23.000000000 +0200 @@ -145,6 +145,7 @@ EMUL_EXTRA_OFILES = @EMUL_EXTRA_OFILES@ EXEEXT = @EXEEXT@ GMOFILES = @GMOFILES@ @@ -79180,9 +89699,9 @@ diff -Nrup binutils-2.17/ld/Makefile.in binutils-2.17-atmel/ld/Makefile.in $(mkinstalldirs) $(DESTDIR)$(scriptdir)/ldscripts for f in ldscripts/*; do \ $(INSTALL_DATA) $$f $(DESTDIR)$(scriptdir)/$$f ; \ -diff -Nrup binutils-2.17/ld/scripttempl/elf_xip.sc binutils-2.17-atmel/ld/scripttempl/elf_xip.sc +diff -Nrup binutils-2.17/ld/scripttempl/elf_xip.sc binutils-2.17.atmel.1.3.0/ld/scripttempl/elf_xip.sc --- binutils-2.17/ld/scripttempl/elf_xip.sc 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/ld/scripttempl/elf_xip.sc 2006-08-04 14:51:49.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/ld/scripttempl/elf_xip.sc 2007-03-26 10:19:40.000000000 +0200 @@ -0,0 +1,456 @@ +# +# Unusual variables checked by this code: @@ -79640,9 +90159,9 @@ diff -Nrup binutils-2.17/ld/scripttempl/elf_xip.sc binutils-2.17-atmel/ld/script + ${RELOCATING+${STACKNOTE}} +} +EOF -diff -Nrup binutils-2.17/ld/testsuite/ld-auto-import/client.c binutils-2.17-atmel/ld/testsuite/ld-auto-import/client.c +diff -Nrup binutils-2.17/ld/testsuite/ld-auto-import/client.c binutils-2.17.atmel.1.3.0/ld/testsuite/ld-auto-import/client.c --- binutils-2.17/ld/testsuite/ld-auto-import/client.c 2002-12-18 17:05:10.000000000 +0100 -+++ binutils-2.17-atmel/ld/testsuite/ld-auto-import/client.c 2006-08-04 14:21:01.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/ld/testsuite/ld-auto-import/client.c 2007-03-26 10:19:37.000000000 +0200 @@ -1,55 +1,55 @@ -#include - @@ -79754,9 +90273,9 @@ diff -Nrup binutils-2.17/ld/testsuite/ld-auto-import/client.c binutils-2.17-atme + + return 0; +} -diff -Nrup binutils-2.17/ld/testsuite/ld-auto-import/dll.c binutils-2.17-atmel/ld/testsuite/ld-auto-import/dll.c +diff -Nrup binutils-2.17/ld/testsuite/ld-auto-import/dll.c binutils-2.17.atmel.1.3.0/ld/testsuite/ld-auto-import/dll.c --- binutils-2.17/ld/testsuite/ld-auto-import/dll.c 2002-12-18 17:05:10.000000000 +0100 -+++ binutils-2.17-atmel/ld/testsuite/ld-auto-import/dll.c 2006-08-04 14:21:01.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/ld/testsuite/ld-auto-import/dll.c 2007-03-26 10:19:37.000000000 +0200 @@ -1,20 +1,20 @@ -int var = 123; -int foo = 121; @@ -79798,9 +90317,9 @@ diff -Nrup binutils-2.17/ld/testsuite/ld-auto-import/dll.c binutils-2.17-atmel/l +} + +void (* func_ptr)(void) = print_foo; -diff -Nrup binutils-2.17/ld/testsuite/ld-avr32/avr32.exp binutils-2.17-atmel/ld/testsuite/ld-avr32/avr32.exp +diff -Nrup binutils-2.17/ld/testsuite/ld-avr32/avr32.exp binutils-2.17.atmel.1.3.0/ld/testsuite/ld-avr32/avr32.exp --- binutils-2.17/ld/testsuite/ld-avr32/avr32.exp 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/ld/testsuite/ld-avr32/avr32.exp 2006-08-04 14:51:39.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/ld/testsuite/ld-avr32/avr32.exp 2007-03-26 10:19:30.000000000 +0200 @@ -0,0 +1,25 @@ +# Expect script for AVR32 ELF linker tests. +# Copyright 2004-2006 Atmel Corporation. @@ -79827,9 +90346,9 @@ diff -Nrup binutils-2.17/ld/testsuite/ld-avr32/avr32.exp binutils-2.17-atmel/ld/ +} + +run_dump_test "pcrel" -diff -Nrup binutils-2.17/ld/testsuite/ld-avr32/pcrel.d binutils-2.17-atmel/ld/testsuite/ld-avr32/pcrel.d +diff -Nrup binutils-2.17/ld/testsuite/ld-avr32/pcrel.d binutils-2.17.atmel.1.3.0/ld/testsuite/ld-avr32/pcrel.d --- binutils-2.17/ld/testsuite/ld-avr32/pcrel.d 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/ld/testsuite/ld-avr32/pcrel.d 2006-08-04 14:51:39.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/ld/testsuite/ld-avr32/pcrel.d 2007-03-26 10:19:30.000000000 +0200 @@ -0,0 +1,74 @@ +#name: AVR32 ELF PC-relative external relocs +#source: symbols.s @@ -79905,9 +90424,9 @@ diff -Nrup binutils-2.17/ld/testsuite/ld-avr32/pcrel.d binutils-2.17-atmel/ld/te +Disassembly of section \.text\.pcrel21: +a0200000 : +a0200000: d7 03 nop -diff -Nrup binutils-2.17/ld/testsuite/ld-avr32/pcrel.ld binutils-2.17-atmel/ld/testsuite/ld-avr32/pcrel.ld +diff -Nrup binutils-2.17/ld/testsuite/ld-avr32/pcrel.ld binutils-2.17.atmel.1.3.0/ld/testsuite/ld-avr32/pcrel.ld --- binutils-2.17/ld/testsuite/ld-avr32/pcrel.ld 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/ld/testsuite/ld-avr32/pcrel.ld 2006-08-04 14:51:39.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/ld/testsuite/ld-avr32/pcrel.ld 2007-03-26 10:19:30.000000000 +0200 @@ -0,0 +1,23 @@ +ENTRY(_start) +SECTIONS @@ -79932,9 +90451,9 @@ diff -Nrup binutils-2.17/ld/testsuite/ld-avr32/pcrel.ld binutils-2.17-atmel/ld/t + *(.text.pcrel21) + } +} -diff -Nrup binutils-2.17/ld/testsuite/ld-avr32/symbols.s binutils-2.17-atmel/ld/testsuite/ld-avr32/symbols.s +diff -Nrup binutils-2.17/ld/testsuite/ld-avr32/symbols.s binutils-2.17.atmel.1.3.0/ld/testsuite/ld-avr32/symbols.s --- binutils-2.17/ld/testsuite/ld-avr32/symbols.s 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/ld/testsuite/ld-avr32/symbols.s 2006-08-04 14:51:39.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/ld/testsuite/ld-avr32/symbols.s 2007-03-26 10:19:30.000000000 +0200 @@ -0,0 +1,20 @@ + .text + .global _start @@ -79956,9 +90475,9 @@ diff -Nrup binutils-2.17/ld/testsuite/ld-avr32/symbols.s binutils-2.17-atmel/ld/ + .global extsym21 +extsym21: + nop -diff -Nrup binutils-2.17/opcodes/aclocal.m4 binutils-2.17-atmel/opcodes/aclocal.m4 +diff -Nrup binutils-2.17/opcodes/aclocal.m4 binutils-2.17.atmel.1.3.0/opcodes/aclocal.m4 --- binutils-2.17/opcodes/aclocal.m4 2005-09-30 20:05:59.000000000 +0200 -+++ binutils-2.17-atmel/opcodes/aclocal.m4 2007-02-20 16:07:44.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/opcodes/aclocal.m4 2007-03-26 10:31:34.000000000 +0200 @@ -1,4 +1,4 @@ -# generated automatically by aclocal 1.9.5 -*- Autoconf -*- +# generated automatically by aclocal 1.9.6 -*- Autoconf -*- @@ -79974,9 +90493,9 @@ diff -Nrup binutils-2.17/opcodes/aclocal.m4 binutils-2.17-atmel/opcodes/aclocal. # AM_AUX_DIR_EXPAND -*- Autoconf -*- -diff -Nrup binutils-2.17/opcodes/avr32-asm.c binutils-2.17-atmel/opcodes/avr32-asm.c +diff -Nrup binutils-2.17/opcodes/avr32-asm.c binutils-2.17.atmel.1.3.0/opcodes/avr32-asm.c --- binutils-2.17/opcodes/avr32-asm.c 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/opcodes/avr32-asm.c 2006-10-03 17:19:02.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/opcodes/avr32-asm.c 2007-03-26 10:20:34.000000000 +0200 @@ -0,0 +1,264 @@ +/* Assembler interface for AVR32. + Copyright 2005, 2006 Atmel Corporation. @@ -80242,9 +90761,9 @@ diff -Nrup binutils-2.17/opcodes/avr32-asm.c binutils-2.17-atmel/opcodes/avr32-a + { cr_table, AVR32_NR_CPREGS, NULL, N_("coprocessor register expected") }, + }; +#endif -diff -Nrup binutils-2.17/opcodes/avr32-asm.h binutils-2.17-atmel/opcodes/avr32-asm.h +diff -Nrup binutils-2.17/opcodes/avr32-asm.h binutils-2.17.atmel.1.3.0/opcodes/avr32-asm.h --- binutils-2.17/opcodes/avr32-asm.h 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/opcodes/avr32-asm.h 2006-10-03 17:19:02.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/opcodes/avr32-asm.h 2007-03-26 10:20:34.000000000 +0200 @@ -0,0 +1,42 @@ +/* Assembler interface for AVR32. + Copyright 2005, 2006 Atmel Corporation. @@ -80288,9 +90807,9 @@ diff -Nrup binutils-2.17/opcodes/avr32-asm.h binutils-2.17-atmel/opcodes/avr32-a +avr32_make_regmask8(unsigned long regmask16, unsigned long *regmask8); + +#endif /* __OPCODES_AVR32_ASM_H */ -diff -Nrup binutils-2.17/opcodes/avr32-dis.c binutils-2.17-atmel/opcodes/avr32-dis.c +diff -Nrup binutils-2.17/opcodes/avr32-dis.c binutils-2.17.atmel.1.3.0/opcodes/avr32-dis.c --- binutils-2.17/opcodes/avr32-dis.c 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/opcodes/avr32-dis.c 2006-08-04 14:50:49.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/opcodes/avr32-dis.c 2007-09-28 10:30:46.000000000 +0200 @@ -0,0 +1,891 @@ +/* Print AVR32 instructions for GDB and objdump. + Copyright 2005, 2006 Atmel Corporation. @@ -81063,7 +91582,7 @@ diff -Nrup binutils-2.17/opcodes/avr32-dis.c binutils-2.17-atmel/opcodes/avr32-d + if (i) + info->fprintf_func(info->stream, ","); + else -+ info->fprintf_func(info->stream, " "); ++ info->fprintf_func(info->stream, "\t"); + next_field += op->print(op, info, &fields[next_field]); + } +} @@ -81183,9 +91702,9 @@ diff -Nrup binutils-2.17/opcodes/avr32-dis.c binutils-2.17-atmel/opcodes/avr32-d +{ + +} -diff -Nrup binutils-2.17/opcodes/avr32-opc.c binutils-2.17-atmel/opcodes/avr32-opc.c +diff -Nrup binutils-2.17/opcodes/avr32-opc.c binutils-2.17.atmel.1.3.0/opcodes/avr32-opc.c --- binutils-2.17/opcodes/avr32-opc.c 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/opcodes/avr32-opc.c 2007-01-29 12:21:57.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/opcodes/avr32-opc.c 2007-03-26 10:20:34.000000000 +0200 @@ -0,0 +1,6140 @@ +/* Opcode tables for AVR32. + Copyright 2005, 2006 Atmel Corporation. @@ -87327,9 +97846,9 @@ diff -Nrup binutils-2.17/opcodes/avr32-opc.c binutils-2.17-atmel/opcodes/avr32-o +#undef NORMAL_MNEMONIC +#undef ALIAS_MNEMONIC +#undef FP_MNEMONIC -diff -Nrup binutils-2.17/opcodes/avr32-opc.h binutils-2.17-atmel/opcodes/avr32-opc.h +diff -Nrup binutils-2.17/opcodes/avr32-opc.h binutils-2.17.atmel.1.3.0/opcodes/avr32-opc.h --- binutils-2.17/opcodes/avr32-opc.h 1970-01-01 01:00:00.000000000 +0100 -+++ binutils-2.17-atmel/opcodes/avr32-opc.h 2007-01-29 12:21:57.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/opcodes/avr32-opc.h 2007-03-26 10:20:34.000000000 +0200 @@ -0,0 +1,1655 @@ +/* Opcode tables for AVR32. + Copyright 2005, 2006 Atmel Corporation. @@ -88986,9 +99505,9 @@ diff -Nrup binutils-2.17/opcodes/avr32-opc.h binutils-2.17-atmel/opcodes/avr32-o + AVR32_PARSER__END_ + }; +#define AVR32_NR_PARSERS AVR32_PARSER__END_ -diff -Nrup binutils-2.17/opcodes/config.in binutils-2.17-atmel/opcodes/config.in +diff -Nrup binutils-2.17/opcodes/config.in binutils-2.17.atmel.1.3.0/opcodes/config.in --- binutils-2.17/opcodes/config.in 2005-03-31 18:52:53.000000000 +0200 -+++ binutils-2.17-atmel/opcodes/config.in 2007-02-20 16:07:47.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/opcodes/config.in 2007-03-26 10:31:37.000000000 +0200 @@ -138,7 +138,7 @@ /* If using the C implementation of alloca, define if you know the @@ -89009,9 +99528,9 @@ diff -Nrup binutils-2.17/opcodes/config.in binutils-2.17-atmel/opcodes/config.in -/* Define to `unsigned' if does not define. */ +/* Define to `unsigned int' if does not define. */ #undef size_t -diff -Nrup binutils-2.17/opcodes/configure binutils-2.17-atmel/opcodes/configure +diff -Nrup binutils-2.17/opcodes/configure binutils-2.17.atmel.1.3.0/opcodes/configure --- binutils-2.17/opcodes/configure 2006-02-17 15:36:28.000000000 +0100 -+++ binutils-2.17-atmel/opcodes/configure 2007-02-20 16:07:46.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/opcodes/configure 2007-03-26 10:31:36.000000000 +0200 @@ -1,25 +1,54 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. @@ -100375,9 +110894,9 @@ diff -Nrup binutils-2.17/opcodes/configure binutils-2.17-atmel/opcodes/configure { (exit 0); exit 0; } _ACEOF -diff -Nrup binutils-2.17/opcodes/configure.in binutils-2.17-atmel/opcodes/configure.in +diff -Nrup binutils-2.17/opcodes/configure.in binutils-2.17.atmel.1.3.0/opcodes/configure.in --- binutils-2.17/opcodes/configure.in 2006-02-17 15:36:28.000000000 +0100 -+++ binutils-2.17-atmel/opcodes/configure.in 2007-02-12 15:37:09.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/opcodes/configure.in 2007-03-26 10:20:33.000000000 +0200 @@ -157,6 +157,7 @@ if test x${all_targets} = xfalse ; then bfd_arc_arch) ta="$ta arc-dis.lo arc-opc.lo arc-ext.lo" ;; bfd_arm_arch) ta="$ta arm-dis.lo" ;; @@ -100386,9 +110905,9 @@ diff -Nrup binutils-2.17/opcodes/configure.in binutils-2.17-atmel/opcodes/config bfd_bfin_arch) ta="$ta bfin-dis.lo" ;; bfd_cris_arch) ta="$ta cris-dis.lo cris-opc.lo cgen-bitset.lo" ;; bfd_crx_arch) ta="$ta crx-dis.lo crx-opc.lo" ;; -diff -Nrup binutils-2.17/opcodes/disassemble.c binutils-2.17-atmel/opcodes/disassemble.c +diff -Nrup binutils-2.17/opcodes/disassemble.c binutils-2.17.atmel.1.3.0/opcodes/disassemble.c --- binutils-2.17/opcodes/disassemble.c 2006-02-17 15:36:28.000000000 +0100 -+++ binutils-2.17-atmel/opcodes/disassemble.c 2007-02-12 15:37:09.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/opcodes/disassemble.c 2007-03-26 10:20:34.000000000 +0200 @@ -24,6 +24,7 @@ #define ARCH_arc #define ARCH_arm @@ -100419,9 +110938,9 @@ diff -Nrup binutils-2.17/opcodes/disassemble.c binutils-2.17-atmel/opcodes/disas return; } -diff -Nrup binutils-2.17/opcodes/Makefile.am binutils-2.17-atmel/opcodes/Makefile.am +diff -Nrup binutils-2.17/opcodes/Makefile.am binutils-2.17.atmel.1.3.0/opcodes/Makefile.am --- binutils-2.17/opcodes/Makefile.am 2006-04-06 23:49:35.000000000 +0200 -+++ binutils-2.17-atmel/opcodes/Makefile.am 2007-02-12 15:37:09.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/opcodes/Makefile.am 2007-03-26 10:20:34.000000000 +0200 @@ -29,6 +29,7 @@ LIBIBERTY = ../libiberty/libiberty.a # Header files. HFILES = \ @@ -100466,9 +110985,9 @@ diff -Nrup binutils-2.17/opcodes/Makefile.am binutils-2.17-atmel/opcodes/Makefil bfin-dis.lo: bfin-dis.c $(INCDIR)/opcode/bfin.h $(INCDIR)/dis-asm.h \ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h cgen-asm.lo: cgen-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \ -diff -Nrup binutils-2.17/opcodes/Makefile.in binutils-2.17-atmel/opcodes/Makefile.in +diff -Nrup binutils-2.17/opcodes/Makefile.in binutils-2.17.atmel.1.3.0/opcodes/Makefile.in --- binutils-2.17/opcodes/Makefile.in 2006-04-06 23:49:35.000000000 +0200 -+++ binutils-2.17-atmel/opcodes/Makefile.in 2007-02-20 16:07:47.000000000 +0100 ++++ binutils-2.17.atmel.1.3.0/opcodes/Makefile.in 2007-03-26 10:31:36.000000000 +0200 @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.9.5 from Makefile.am. +# Makefile.in generated by automake 1.9.6 from Makefile.am. @@ -100580,23 +111099,14 @@ diff -Nrup binutils-2.17/opcodes/Makefile.in binutils-2.17-atmel/opcodes/Makefil bfin-dis.lo: bfin-dis.c $(INCDIR)/opcode/bfin.h $(INCDIR)/dis-asm.h \ $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h cgen-asm.lo: cgen-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \ -diff -Nur binutils-2.17/config.sub binutils-2.17-owrt/config.sub ---- binutils-2.17/config.sub 2006-01-16 18:34:37.000000000 +0100 -+++ binutils-2.17-owrt/config.sub 2007-06-04 16:30:34.000000000 +0200 -@@ -241,6 +241,7 @@ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ -+ | avr32 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ -@@ -317,7 +318,7 @@ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ -- | avr-* \ -+ | avr-* | avr32-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ +diff -Nrup binutils-2.17/bfd/configure.in binutils-2.17.atmel.1.3.0/bfd/configure.in +--- binutils-2.17/bfd/configure.in 2006-06-23 20:17:07.000000000 +0200 ++++ binutils-2.17.atmel.1.3.0/bfd/configure.in 2007-09-28 10:30:44.000000000 +0200 +@@ -583,6 +583,7 @@ do + bfd_efi_app_ia64_vec) tb="$tb efi-app-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;; + bfd_elf32_am33lin_vec) tb="$tb elf32-am33lin.lo elf32.lo $elf" ;; + bfd_elf32_avr_vec) tb="$tb elf32-avr.lo elf32.lo $elf" ;; ++ bfd_elf32_avr32_vec) tb="$tb elf32-avr32.lo elf32.lo $elf" ;; + bfd_elf32_bfin_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; + bfd_elf32_bfinfdpic_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; + bfd_elf32_big_generic_vec) tb="$tb elf32-gen.lo elf32.lo $elf" ;;