mgl@1371: --- a/bfd/archures.c mgl@1371: +++ b/bfd/archures.c mgl@1371: @@ -346,6 +346,11 @@ DESCRIPTION mgl@1371: .#define bfd_mach_avr4 4 mgl@1371: .#define bfd_mach_avr5 5 mgl@1371: .#define bfd_mach_avr6 6 mgl@1371: +. bfd_arch_avr32, {* Atmel AVR32 *} mgl@1371: +.#define bfd_mach_avr32_ap 7000 mgl@1371: +.#define bfd_mach_avr32_uc 3000 mgl@1371: +.#define bfd_mach_avr32_ucr1 3001 mgl@1371: +.#define bfd_mach_avr32_ucr2 3002 mgl@1371: . bfd_arch_bfin, {* ADI Blackfin *} mgl@1371: .#define bfd_mach_bfin 1 mgl@1371: . bfd_arch_cr16, {* National Semiconductor CompactRISC (ie CR16). *} mgl@1371: @@ -438,6 +443,7 @@ extern const bfd_arch_info_type bfd_alph mgl@1371: extern const bfd_arch_info_type bfd_arc_arch; mgl@1371: extern const bfd_arch_info_type bfd_arm_arch; mgl@1371: extern const bfd_arch_info_type bfd_avr_arch; mgl@1371: +extern const bfd_arch_info_type bfd_avr32_arch; mgl@1371: extern const bfd_arch_info_type bfd_bfin_arch; mgl@1371: extern const bfd_arch_info_type bfd_cr16_arch; mgl@1371: extern const bfd_arch_info_type bfd_cr16c_arch; mgl@1371: @@ -509,6 +515,7 @@ static const bfd_arch_info_type * const mgl@1371: &bfd_arc_arch, mgl@1371: &bfd_arm_arch, mgl@1371: &bfd_avr_arch, mgl@1371: + &bfd_avr32_arch, mgl@1371: &bfd_bfin_arch, mgl@1371: &bfd_cr16_arch, mgl@1371: &bfd_cr16c_arch, mgl@1371: --- a/bfd/config.bfd mgl@1371: +++ b/bfd/config.bfd mgl@1371: @@ -335,6 +335,10 @@ case "${targ}" in mgl@1371: targ_underscore=yes mgl@1371: ;; mgl@1371: mgl@1371: + avr32-*-*) mgl@1371: + targ_defvec=bfd_elf32_avr32_vec mgl@1371: + ;; mgl@1371: + mgl@1371: c30-*-*aout* | tic30-*-*aout*) mgl@1371: targ_defvec=tic30_aout_vec mgl@1371: ;; mgl@1371: --- a/bfd/configure.in mgl@1371: +++ b/bfd/configure.in mgl@1371: @@ -8,7 +8,7 @@ AC_CONFIG_SRCDIR([libbfd.c]) mgl@1371: AC_CANONICAL_TARGET mgl@1371: AC_ISC_POSIX mgl@1371: mgl@1371: -AM_INIT_AUTOMAKE(bfd, 2.18) mgl@1371: +AM_INIT_AUTOMAKE(bfd, 2.18.atmel.1.0.1.avr32linux.1) mgl@1371: mgl@1371: dnl These must be called before AM_PROG_LIBTOOL, because it may want mgl@1371: dnl to call AC_CHECK_PROG. mgl@1371: @@ -619,6 +619,7 @@ do mgl@1371: bfd_efi_app_ia64_vec) tb="$tb efi-app-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;; mgl@1371: bfd_elf32_am33lin_vec) tb="$tb elf32-am33lin.lo elf32.lo $elf" ;; mgl@1371: bfd_elf32_avr_vec) tb="$tb elf32-avr.lo elf32.lo $elf" ;; mgl@1371: + bfd_elf32_avr32_vec) tb="$tb elf32-avr32.lo elf32.lo $elf" ;; mgl@1371: bfd_elf32_bfin_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; mgl@1371: bfd_elf32_bfinfdpic_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; mgl@1371: bfd_elf32_big_generic_vec) tb="$tb elf32-gen.lo elf32.lo $elf" ;; mgl@1371: --- /dev/null mgl@1371: +++ b/bfd/cpu-avr32.c mgl@1371: @@ -0,0 +1,51 @@ mgl@1371: +/* BFD library support routines for AVR32. mgl@1371: + Copyright 2003-2006 Atmel Corporation. mgl@1371: + mgl@1371: + Written by Haavard Skinnemoen, Atmel Norway, mgl@1371: + mgl@1371: + This is part of BFD, the Binary File Descriptor library. mgl@1371: + mgl@1371: + This program is free software; you can redistribute it and/or modify mgl@1371: + it under the terms of the GNU General Public License as published by mgl@1371: + the Free Software Foundation; either version 2 of the License, or mgl@1371: + (at your option) any later version. mgl@1371: + mgl@1371: + This program is distributed in the hope that it will be useful, mgl@1371: + but WITHOUT ANY WARRANTY; without even the implied warranty of mgl@1371: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the mgl@1371: + GNU General Public License for more details. mgl@1371: + mgl@1371: + You should have received a copy of the GNU General Public License mgl@1371: + along with this program; if not, write to the Free Software mgl@1371: + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ mgl@1371: + mgl@1371: +#include "bfd.h" mgl@1371: +#include "sysdep.h" mgl@1371: +#include "libbfd.h" mgl@1371: + mgl@1371: +#define N(machine, print, default, next) \ mgl@1371: + { \ mgl@1371: + 32, /* 32 bits in a word */ \ mgl@1371: + 32, /* 32 bits in an address */ \ mgl@1371: + 8, /* 8 bits in a byte */ \ mgl@1371: + bfd_arch_avr32, /* architecture */ \ mgl@1371: + machine, /* machine */ \ mgl@1371: + "avr32", /* arch name */ \ mgl@1371: + print, /* printable name */ \ mgl@1371: + 1, /* section align power */ \ mgl@1371: + default, /* the default machine? */ \ mgl@1371: + bfd_default_compatible, \ mgl@1371: + bfd_default_scan, \ mgl@1371: + next, \ mgl@1371: + } mgl@1371: + mgl@1371: +static const bfd_arch_info_type cpu_info[] = mgl@1371: +{ mgl@1371: + N(bfd_mach_avr32_ap, "avr32:ap", FALSE, &cpu_info[1]), mgl@1371: + N(bfd_mach_avr32_uc, "avr32:uc", FALSE, &cpu_info[2]), mgl@1371: + N(bfd_mach_avr32_ucr1, "avr32:ucr1", FALSE, &cpu_info[3]), mgl@1371: + N(bfd_mach_avr32_ucr2, "avr32:ucr2", FALSE, NULL), mgl@1371: +}; mgl@1371: + mgl@1371: +const bfd_arch_info_type bfd_avr32_arch = mgl@1371: + N(bfd_mach_avr32_ap, "avr32", TRUE, &cpu_info[0]); mgl@1371: --- /dev/null mgl@1371: +++ b/bfd/elf32-avr32.c mgl@1371: @@ -0,0 +1,3915 @@ mgl@1371: +/* AVR32-specific support for 32-bit ELF. mgl@1371: + Copyright 2003-2006 Atmel Corporation. mgl@1371: + mgl@1371: + Written by Haavard Skinnemoen, Atmel Norway, mgl@1371: + mgl@1371: + This file is part of BFD, the Binary File Descriptor library. mgl@1371: + mgl@1371: + This program is free software; you can redistribute it and/or modify mgl@1371: + it under the terms of the GNU General Public License as published by mgl@1371: + the Free Software Foundation; either version 2 of the License, or mgl@1371: + (at your option) any later version. mgl@1371: + mgl@1371: + This program is distributed in the hope that it will be useful, mgl@1371: + but WITHOUT ANY WARRANTY; without even the implied warranty of mgl@1371: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the mgl@1371: + GNU General Public License for more details. mgl@1371: + mgl@1371: + You should have received a copy of the GNU General Public License mgl@1371: + along with this program; if not, write to the Free Software mgl@1371: + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ mgl@1371: + mgl@1371: +#include "bfd.h" mgl@1371: +#include "sysdep.h" mgl@1371: +#include "bfdlink.h" mgl@1371: +#include "libbfd.h" mgl@1371: +#include "elf-bfd.h" mgl@1371: +#include "elf/avr32.h" mgl@1371: +#include "elf32-avr32.h" mgl@1371: + mgl@1371: +#define xDEBUG mgl@1371: +#define xRELAX_DEBUG mgl@1371: + mgl@1371: +#ifdef DEBUG mgl@1371: +# define pr_debug(fmt, args...) fprintf(stderr, fmt, ##args) mgl@1371: +#else mgl@1371: +# define pr_debug(fmt, args...) do { } while (0) mgl@1371: +#endif mgl@1371: + mgl@1371: +#ifdef RELAX_DEBUG mgl@1371: +# define RDBG(fmt, args...) fprintf(stderr, fmt, ##args) mgl@1371: +#else mgl@1371: +# define RDBG(fmt, args...) do { } while (0) mgl@1371: +#endif mgl@1371: + mgl@1371: +/* When things go wrong, we want it to blow up, damnit! */ mgl@1371: +#undef BFD_ASSERT mgl@1371: +#undef abort mgl@1371: +#define BFD_ASSERT(expr) \ mgl@1371: + do \ mgl@1371: + { \ mgl@1371: + if (!(expr)) \ mgl@1371: + { \ mgl@1371: + bfd_assert(__FILE__, __LINE__); \ mgl@1371: + abort(); \ mgl@1371: + } \ mgl@1371: + } \ mgl@1371: + while (0) mgl@1371: + mgl@1371: +/* The name of the dynamic interpreter. This is put in the .interp section. */ mgl@1371: +#define ELF_DYNAMIC_INTERPRETER "/lib/ld.so.1" mgl@1371: + mgl@1371: +#define AVR32_GOT_HEADER_SIZE 8 mgl@1371: +#define AVR32_FUNCTION_STUB_SIZE 8 mgl@1371: + mgl@1371: +#define ELF_R_INFO(x, y) ELF32_R_INFO(x, y) mgl@1371: +#define ELF_R_TYPE(x) ELF32_R_TYPE(x) mgl@1371: +#define ELF_R_SYM(x) ELF32_R_SYM(x) mgl@1371: + mgl@1371: +#define NOP_OPCODE 0xd703 mgl@1371: + mgl@1371: + mgl@1371: +/* Mapping between BFD relocations and ELF relocations */ mgl@1371: + mgl@1371: +static reloc_howto_type * mgl@1371: +bfd_elf32_bfd_reloc_type_lookup(bfd *abfd, bfd_reloc_code_real_type code); mgl@1371: + mgl@1371: +static reloc_howto_type * mgl@1371: +bfd_elf32_bfd_reloc_name_lookup(bfd *abfd, const char *r_name); mgl@1371: + mgl@1371: +static void mgl@1371: +avr32_info_to_howto (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst); mgl@1371: + mgl@1371: +/* Generic HOWTO */ mgl@1371: +#define GENH(name, align, size, bitsize, pcrel, bitpos, complain, mask) \ mgl@1371: + HOWTO(name, align, size, bitsize, pcrel, bitpos, \ mgl@1371: + complain_overflow_##complain, bfd_elf_generic_reloc, #name, \ mgl@1371: + FALSE, 0, mask, pcrel) mgl@1371: + mgl@1371: +static reloc_howto_type elf_avr32_howto_table[] = { mgl@1371: + /* NAME ALN SZ BSZ PCREL BP COMPLAIN MASK */ mgl@1371: + GENH(R_AVR32_NONE, 0, 0, 0, FALSE, 0, dont, 0x00000000), mgl@1371: + mgl@1371: + GENH(R_AVR32_32, 0, 2, 32, FALSE, 0, dont, 0xffffffff), mgl@1371: + GENH(R_AVR32_16, 0, 1, 16, FALSE, 0, bitfield, 0x0000ffff), mgl@1371: + GENH(R_AVR32_8, 0, 0, 8, FALSE, 0, bitfield, 0x000000ff), mgl@1371: + GENH(R_AVR32_32_PCREL, 0, 2, 32, TRUE, 0, signed, 0xffffffff), mgl@1371: + GENH(R_AVR32_16_PCREL, 0, 1, 16, TRUE, 0, signed, 0x0000ffff), mgl@1371: + GENH(R_AVR32_8_PCREL, 0, 0, 8, TRUE, 0, signed, 0x000000ff), mgl@1371: + mgl@1371: + /* Difference between two symbol (sym2 - sym1). The reloc encodes mgl@1371: + the value of sym1. The field contains the difference before any mgl@1371: + relaxing is done. */ mgl@1371: + GENH(R_AVR32_DIFF32, 0, 2, 32, FALSE, 0, dont, 0xffffffff), mgl@1371: + GENH(R_AVR32_DIFF16, 0, 1, 16, FALSE, 0, signed, 0x0000ffff), mgl@1371: + GENH(R_AVR32_DIFF8, 0, 0, 8, FALSE, 0, signed, 0x000000ff), mgl@1371: + mgl@1371: + GENH(R_AVR32_GOT32, 0, 2, 32, FALSE, 0, signed, 0xffffffff), mgl@1371: + GENH(R_AVR32_GOT16, 0, 1, 16, FALSE, 0, signed, 0x0000ffff), mgl@1371: + GENH(R_AVR32_GOT8, 0, 0, 8, FALSE, 0, signed, 0x000000ff), mgl@1371: + mgl@1371: + GENH(R_AVR32_21S, 0, 2, 21, FALSE, 0, signed, 0x1e10ffff), mgl@1371: + GENH(R_AVR32_16U, 0, 2, 16, FALSE, 0, unsigned, 0x0000ffff), mgl@1371: + GENH(R_AVR32_16S, 0, 2, 16, FALSE, 0, signed, 0x0000ffff), mgl@1371: + GENH(R_AVR32_8S, 0, 1, 8, FALSE, 4, signed, 0x00000ff0), mgl@1371: + GENH(R_AVR32_8S_EXT, 0, 2, 8, FALSE, 0, signed, 0x000000ff), mgl@1371: + mgl@1371: + GENH(R_AVR32_22H_PCREL, 1, 2, 21, TRUE, 0, signed, 0x1e10ffff), mgl@1371: + GENH(R_AVR32_18W_PCREL, 2, 2, 16, TRUE, 0, signed, 0x0000ffff), mgl@1371: + GENH(R_AVR32_16B_PCREL, 0, 2, 16, TRUE, 0, signed, 0x0000ffff), mgl@1371: + GENH(R_AVR32_16N_PCREL, 0, 2, 16, TRUE, 0, signed, 0x0000ffff), mgl@1371: + GENH(R_AVR32_14UW_PCREL, 2, 2, 12, TRUE, 0, unsigned, 0x0000f0ff), mgl@1371: + GENH(R_AVR32_11H_PCREL, 1, 1, 10, TRUE, 4, signed, 0x00000ff3), mgl@1371: + GENH(R_AVR32_10UW_PCREL, 2, 2, 8, TRUE, 0, unsigned, 0x000000ff), mgl@1371: + GENH(R_AVR32_9H_PCREL, 1, 1, 8, TRUE, 4, signed, 0x00000ff0), mgl@1371: + GENH(R_AVR32_9UW_PCREL, 2, 1, 7, TRUE, 4, unsigned, 0x000007f0), mgl@1371: + mgl@1371: + GENH(R_AVR32_HI16, 16, 2, 16, FALSE, 0, dont, 0x0000ffff), mgl@1371: + GENH(R_AVR32_LO16, 0, 2, 16, FALSE, 0, dont, 0x0000ffff), mgl@1371: + mgl@1371: + GENH(R_AVR32_GOTPC, 0, 2, 32, FALSE, 0, dont, 0xffffffff), mgl@1371: + GENH(R_AVR32_GOTCALL, 2, 2, 21, FALSE, 0, signed, 0x1e10ffff), mgl@1371: + GENH(R_AVR32_LDA_GOT, 2, 2, 21, FALSE, 0, signed, 0x1e10ffff), mgl@1371: + GENH(R_AVR32_GOT21S, 0, 2, 21, FALSE, 0, signed, 0x1e10ffff), mgl@1371: + GENH(R_AVR32_GOT18SW, 2, 2, 16, FALSE, 0, signed, 0x0000ffff), mgl@1371: + GENH(R_AVR32_GOT16S, 0, 2, 16, FALSE, 0, signed, 0x0000ffff), mgl@1371: + GENH(R_AVR32_GOT7UW, 2, 1, 5, FALSE, 4, unsigned, 0x000001f0), mgl@1371: + mgl@1371: + GENH(R_AVR32_32_CPENT, 0, 2, 32, FALSE, 0, dont, 0xffffffff), mgl@1371: + GENH(R_AVR32_CPCALL, 2, 2, 16, TRUE, 0, signed, 0x0000ffff), mgl@1371: + GENH(R_AVR32_16_CP, 0, 2, 16, TRUE, 0, signed, 0x0000ffff), mgl@1371: + GENH(R_AVR32_9W_CP, 2, 1, 7, TRUE, 4, unsigned, 0x000007f0), mgl@1371: + mgl@1371: + GENH(R_AVR32_RELATIVE, 0, 2, 32, FALSE, 0, signed, 0xffffffff), mgl@1371: + GENH(R_AVR32_GLOB_DAT, 0, 2, 32, FALSE, 0, dont, 0xffffffff), mgl@1371: + GENH(R_AVR32_JMP_SLOT, 0, 2, 32, FALSE, 0, dont, 0xffffffff), mgl@1371: + mgl@1371: + GENH(R_AVR32_ALIGN, 0, 1, 0, FALSE, 0, unsigned, 0x00000000), mgl@1371: + mgl@1371: + GENH(R_AVR32_15S, 2, 2, 15, FALSE, 0, signed, 0x00007fff), mgl@1371: +}; mgl@1371: + mgl@1371: +struct elf_reloc_map mgl@1371: +{ mgl@1371: + bfd_reloc_code_real_type bfd_reloc_val; mgl@1371: + unsigned char elf_reloc_val; mgl@1371: +}; mgl@1371: + mgl@1371: +static const struct elf_reloc_map avr32_reloc_map[] = mgl@1371: +{ mgl@1371: + { BFD_RELOC_NONE, R_AVR32_NONE }, mgl@1371: + mgl@1371: + { BFD_RELOC_32, R_AVR32_32 }, mgl@1371: + { BFD_RELOC_16, R_AVR32_16 }, mgl@1371: + { BFD_RELOC_8, R_AVR32_8 }, mgl@1371: + { BFD_RELOC_32_PCREL, R_AVR32_32_PCREL }, mgl@1371: + { BFD_RELOC_16_PCREL, R_AVR32_16_PCREL }, mgl@1371: + { BFD_RELOC_8_PCREL, R_AVR32_8_PCREL }, mgl@1371: + { BFD_RELOC_AVR32_DIFF32, R_AVR32_DIFF32 }, mgl@1371: + { BFD_RELOC_AVR32_DIFF16, R_AVR32_DIFF16 }, mgl@1371: + { BFD_RELOC_AVR32_DIFF8, R_AVR32_DIFF8 }, mgl@1371: + { BFD_RELOC_AVR32_GOT32, R_AVR32_GOT32 }, mgl@1371: + { BFD_RELOC_AVR32_GOT16, R_AVR32_GOT16 }, mgl@1371: + { BFD_RELOC_AVR32_GOT8, R_AVR32_GOT8 }, mgl@1371: + mgl@1371: + { BFD_RELOC_AVR32_21S, R_AVR32_21S }, mgl@1371: + { BFD_RELOC_AVR32_16U, R_AVR32_16U }, mgl@1371: + { BFD_RELOC_AVR32_16S, R_AVR32_16S }, mgl@1371: + { BFD_RELOC_AVR32_SUB5, R_AVR32_16S }, mgl@1371: + { BFD_RELOC_AVR32_8S_EXT, R_AVR32_8S_EXT }, mgl@1371: + { BFD_RELOC_AVR32_8S, R_AVR32_8S }, mgl@1371: + mgl@1371: + { BFD_RELOC_AVR32_22H_PCREL, R_AVR32_22H_PCREL }, mgl@1371: + { BFD_RELOC_AVR32_18W_PCREL, R_AVR32_18W_PCREL }, mgl@1371: + { BFD_RELOC_AVR32_16B_PCREL, R_AVR32_16B_PCREL }, mgl@1371: + { BFD_RELOC_AVR32_16N_PCREL, R_AVR32_16N_PCREL }, mgl@1371: + { BFD_RELOC_AVR32_11H_PCREL, R_AVR32_11H_PCREL }, mgl@1371: + { BFD_RELOC_AVR32_10UW_PCREL, R_AVR32_10UW_PCREL }, mgl@1371: + { BFD_RELOC_AVR32_9H_PCREL, R_AVR32_9H_PCREL }, mgl@1371: + { BFD_RELOC_AVR32_9UW_PCREL, R_AVR32_9UW_PCREL }, mgl@1371: + mgl@1371: + { BFD_RELOC_HI16, R_AVR32_HI16 }, mgl@1371: + { BFD_RELOC_LO16, R_AVR32_LO16 }, mgl@1371: + mgl@1371: + { BFD_RELOC_AVR32_GOTPC, R_AVR32_GOTPC }, mgl@1371: + { BFD_RELOC_AVR32_GOTCALL, R_AVR32_GOTCALL }, mgl@1371: + { BFD_RELOC_AVR32_LDA_GOT, R_AVR32_LDA_GOT }, mgl@1371: + { BFD_RELOC_AVR32_GOT21S, R_AVR32_GOT21S }, mgl@1371: + { BFD_RELOC_AVR32_GOT18SW, R_AVR32_GOT18SW }, mgl@1371: + { BFD_RELOC_AVR32_GOT16S, R_AVR32_GOT16S }, mgl@1371: + /* GOT7UW should never be generated by the assembler */ mgl@1371: + mgl@1371: + { BFD_RELOC_AVR32_32_CPENT, R_AVR32_32_CPENT }, mgl@1371: + { BFD_RELOC_AVR32_CPCALL, R_AVR32_CPCALL }, mgl@1371: + { BFD_RELOC_AVR32_16_CP, R_AVR32_16_CP }, mgl@1371: + { BFD_RELOC_AVR32_9W_CP, R_AVR32_9W_CP }, mgl@1371: + mgl@1371: + { BFD_RELOC_AVR32_ALIGN, R_AVR32_ALIGN }, mgl@1371: + mgl@1371: + { BFD_RELOC_AVR32_15S, R_AVR32_15S }, mgl@1371: +}; mgl@1371: + mgl@1371: +static reloc_howto_type * mgl@1371: +bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, mgl@1371: + bfd_reloc_code_real_type code) mgl@1371: +{ mgl@1371: + unsigned int i; mgl@1371: + mgl@1371: + for (i = 0; i < sizeof(avr32_reloc_map) / sizeof(struct elf_reloc_map); i++) mgl@1371: + { mgl@1371: + if (avr32_reloc_map[i].bfd_reloc_val == code) mgl@1371: + return &elf_avr32_howto_table[avr32_reloc_map[i].elf_reloc_val]; mgl@1371: + } mgl@1371: + mgl@1371: + return NULL; mgl@1371: +} mgl@1371: + mgl@1371: +static reloc_howto_type * mgl@1371: +bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, mgl@1371: + const char *r_name) mgl@1371: +{ mgl@1371: + unsigned int i; mgl@1371: + mgl@1371: + for (i = 0; mgl@1371: + i < sizeof (elf_avr32_howto_table) / sizeof (elf_avr32_howto_table[0]); mgl@1371: + i++) mgl@1371: + if (elf_avr32_howto_table[i].name != NULL mgl@1371: + && strcasecmp (elf_avr32_howto_table[i].name, r_name) == 0) mgl@1371: + return &elf_avr32_howto_table[i]; mgl@1371: + mgl@1371: + return NULL; mgl@1371: +} mgl@1371: + mgl@1371: +/* Set the howto pointer for an AVR32 ELF reloc. */ mgl@1371: +static void mgl@1371: +avr32_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, mgl@1371: + arelent *cache_ptr, mgl@1371: + Elf_Internal_Rela *dst) mgl@1371: +{ mgl@1371: + unsigned int r_type; mgl@1371: + mgl@1371: + r_type = ELF32_R_TYPE (dst->r_info); mgl@1371: + BFD_ASSERT (r_type < (unsigned int) R_AVR32_max); mgl@1371: + cache_ptr->howto = &elf_avr32_howto_table[r_type]; mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +/* AVR32 ELF linker hash table and associated hash entries. */ mgl@1371: + mgl@1371: +static struct bfd_hash_entry * mgl@1371: +avr32_elf_link_hash_newfunc(struct bfd_hash_entry *entry, mgl@1371: + struct bfd_hash_table *table, mgl@1371: + const char *string); mgl@1371: +static void mgl@1371: +avr32_elf_copy_indirect_symbol(struct bfd_link_info *info, mgl@1371: + struct elf_link_hash_entry *dir, mgl@1371: + struct elf_link_hash_entry *ind); mgl@1371: +static struct bfd_link_hash_table * mgl@1371: +avr32_elf_link_hash_table_create(bfd *abfd); mgl@1371: + mgl@1371: +/* mgl@1371: + Try to limit memory usage to something reasonable when sorting the mgl@1371: + GOT. If just a couple of entries end up getting more references mgl@1371: + than this, it won't affect performance at all, but if there are many mgl@1371: + of them, we could end up with the wrong symbols being assigned the mgl@1371: + first GOT entries. mgl@1371: +*/ mgl@1371: +#define MAX_NR_GOT_HOLES 2048 mgl@1371: + mgl@1371: +/* mgl@1371: + AVR32 GOT entry. We need to keep track of refcounts and offsets mgl@1371: + simultaneously, since we need the offsets during relaxation, and we mgl@1371: + also want to be able to drop GOT entries during relaxation. In mgl@1371: + addition to this, we want to keep the list of GOT entries sorted so mgl@1371: + that we can keep the most-used entries at the lowest offsets. mgl@1371: +*/ mgl@1371: +struct got_entry mgl@1371: +{ mgl@1371: + struct got_entry *next; mgl@1371: + struct got_entry **pprev; mgl@1371: + int refcount; mgl@1371: + bfd_signed_vma offset; mgl@1371: +}; mgl@1371: + mgl@1371: +struct elf_avr32_link_hash_entry mgl@1371: +{ mgl@1371: + struct elf_link_hash_entry root; mgl@1371: + mgl@1371: + /* Number of runtime relocations against this symbol. */ mgl@1371: + unsigned int possibly_dynamic_relocs; mgl@1371: + mgl@1371: + /* If there are anything but R_AVR32_GOT18 relocations against this mgl@1371: + symbol, it means that someone may be taking the address of the mgl@1371: + function, and we should therefore not create a stub. */ mgl@1371: + bfd_boolean no_fn_stub; mgl@1371: + mgl@1371: + /* If there is a R_AVR32_32 relocation in a read-only section mgl@1371: + against this symbol, we could be in trouble. If we're linking a mgl@1371: + shared library or this symbol is defined in one, it means we must mgl@1371: + emit a run-time reloc for it and that's not allowed in read-only mgl@1371: + sections. */ mgl@1371: + asection *readonly_reloc_sec; mgl@1371: + bfd_vma readonly_reloc_offset; mgl@1371: + mgl@1371: + /* Record which frag (if any) contains the symbol. This is used mgl@1371: + during relaxation in order to avoid having to update all symbols mgl@1371: + whenever we move something. For local symbols, this information mgl@1371: + is in the local_sym_frag member of struct elf_obj_tdata. */ mgl@1371: + struct fragment *sym_frag; mgl@1371: +}; mgl@1371: +#define avr32_elf_hash_entry(ent) ((struct elf_avr32_link_hash_entry *)(ent)) mgl@1371: + mgl@1371: +struct elf_avr32_link_hash_table mgl@1371: +{ mgl@1371: + struct elf_link_hash_table root; mgl@1371: + mgl@1371: + /* Shortcuts to get to dynamic linker sections. */ mgl@1371: + asection *sgot; mgl@1371: + asection *srelgot; mgl@1371: + asection *sstub; mgl@1371: + mgl@1371: + /* We use a variation of Pigeonhole Sort to sort the GOT. After the mgl@1371: + initial refcounts have been determined, we initialize mgl@1371: + nr_got_holes to the highest refcount ever seen and allocate an mgl@1371: + array of nr_got_holes entries for got_hole. Each GOT entry is mgl@1371: + then stored in this array at the index given by its refcount. mgl@1371: + mgl@1371: + When a GOT entry has its refcount decremented during relaxation, mgl@1371: + it is moved to a lower index in the got_hole array. mgl@1371: + */ mgl@1371: + struct got_entry **got_hole; mgl@1371: + int nr_got_holes; mgl@1371: + mgl@1371: + /* Dynamic relocations to local symbols. Only used when linking a mgl@1371: + shared library and -Bsymbolic is not given. */ mgl@1371: + unsigned int local_dynamic_relocs; mgl@1371: + mgl@1371: + bfd_boolean relocations_analyzed; mgl@1371: + bfd_boolean symbols_adjusted; mgl@1371: + bfd_boolean repeat_pass; mgl@1371: + bfd_boolean direct_data_refs; mgl@1371: + unsigned int relax_iteration; mgl@1371: + unsigned int relax_pass; mgl@1371: +}; mgl@1371: +#define avr32_elf_hash_table(p) \ mgl@1371: + ((struct elf_avr32_link_hash_table *)((p)->hash)) mgl@1371: + mgl@1371: +static struct bfd_hash_entry * mgl@1371: +avr32_elf_link_hash_newfunc(struct bfd_hash_entry *entry, mgl@1371: + struct bfd_hash_table *table, mgl@1371: + const char *string) mgl@1371: +{ mgl@1371: + struct elf_avr32_link_hash_entry *ret = avr32_elf_hash_entry(entry); mgl@1371: + mgl@1371: + /* Allocate the structure if it hasn't already been allocated by a mgl@1371: + subclass */ mgl@1371: + if (ret == NULL) mgl@1371: + ret = (struct elf_avr32_link_hash_entry *) mgl@1371: + bfd_hash_allocate(table, sizeof(struct elf_avr32_link_hash_entry)); mgl@1371: + mgl@1371: + if (ret == NULL) mgl@1371: + return NULL; mgl@1371: + mgl@1371: + memset(ret, 0, sizeof(struct elf_avr32_link_hash_entry)); mgl@1371: + mgl@1371: + /* Give the superclass a chance */ mgl@1371: + ret = (struct elf_avr32_link_hash_entry *) mgl@1371: + _bfd_elf_link_hash_newfunc((struct bfd_hash_entry *)ret, table, string); mgl@1371: + mgl@1371: + return (struct bfd_hash_entry *)ret; mgl@1371: +} mgl@1371: + mgl@1371: +/* Copy data from an indirect symbol to its direct symbol, hiding the mgl@1371: + old indirect symbol. Process additional relocation information. mgl@1371: + Also called for weakdefs, in which case we just let mgl@1371: + _bfd_elf_link_hash_copy_indirect copy the flags for us. */ mgl@1371: + mgl@1371: +static void mgl@1371: +avr32_elf_copy_indirect_symbol(struct bfd_link_info *info, mgl@1371: + struct elf_link_hash_entry *dir, mgl@1371: + struct elf_link_hash_entry *ind) mgl@1371: +{ mgl@1371: + struct elf_avr32_link_hash_entry *edir, *eind; mgl@1371: + mgl@1371: + _bfd_elf_link_hash_copy_indirect (info, dir, ind); mgl@1371: + mgl@1371: + if (ind->root.type != bfd_link_hash_indirect) mgl@1371: + return; mgl@1371: + mgl@1371: + edir = (struct elf_avr32_link_hash_entry *)dir; mgl@1371: + eind = (struct elf_avr32_link_hash_entry *)ind; mgl@1371: + mgl@1371: + edir->possibly_dynamic_relocs += eind->possibly_dynamic_relocs; mgl@1371: + edir->no_fn_stub = edir->no_fn_stub || eind->no_fn_stub; mgl@1371: +} mgl@1371: + mgl@1371: +static struct bfd_link_hash_table * mgl@1371: +avr32_elf_link_hash_table_create(bfd *abfd) mgl@1371: +{ mgl@1371: + struct elf_avr32_link_hash_table *ret; mgl@1371: + mgl@1371: + ret = bfd_zmalloc(sizeof(*ret)); mgl@1371: + if (ret == NULL) mgl@1371: + return NULL; mgl@1371: + mgl@1371: + if (! _bfd_elf_link_hash_table_init(&ret->root, abfd, mgl@1371: + avr32_elf_link_hash_newfunc, mgl@1371: + sizeof (struct elf_avr32_link_hash_entry))) mgl@1371: + { mgl@1371: + free(ret); mgl@1371: + return NULL; mgl@1371: + } mgl@1371: + mgl@1371: + /* Prevent the BFD core from creating bogus got_entry pointers */ mgl@1371: + ret->root.init_got_refcount.glist = NULL; mgl@1371: + ret->root.init_plt_refcount.glist = NULL; mgl@1371: + ret->root.init_got_offset.glist = NULL; mgl@1371: + ret->root.init_plt_offset.glist = NULL; mgl@1371: + mgl@1371: + return &ret->root.root; mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +/* Initial analysis and creation of dynamic sections and symbols */ mgl@1371: + mgl@1371: +static asection * mgl@1371: +create_dynamic_section(bfd *dynobj, const char *name, flagword flags, mgl@1371: + unsigned int align_power); mgl@1371: +static struct elf_link_hash_entry * mgl@1371: +create_dynamic_symbol(bfd *dynobj, struct bfd_link_info *info, mgl@1371: + const char *name, asection *sec, mgl@1371: + bfd_vma offset); mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_create_got_section (bfd *dynobj, struct bfd_link_info *info); mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info); mgl@1371: +static bfd_boolean mgl@1371: +avr32_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, mgl@1371: + const Elf_Internal_Rela *relocs); mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_adjust_dynamic_symbol(struct bfd_link_info *info, mgl@1371: + struct elf_link_hash_entry *h); mgl@1371: + mgl@1371: +static asection * mgl@1371: +create_dynamic_section(bfd *dynobj, const char *name, flagword flags, mgl@1371: + unsigned int align_power) mgl@1371: +{ mgl@1371: + asection *sec; mgl@1371: + mgl@1371: + sec = bfd_make_section(dynobj, name); mgl@1371: + if (!sec mgl@1371: + || !bfd_set_section_flags(dynobj, sec, flags) mgl@1371: + || !bfd_set_section_alignment(dynobj, sec, align_power)) mgl@1371: + return NULL; mgl@1371: + mgl@1371: + return sec; mgl@1371: +} mgl@1371: + mgl@1371: +static struct elf_link_hash_entry * mgl@1371: +create_dynamic_symbol(bfd *dynobj, struct bfd_link_info *info, mgl@1371: + const char *name, asection *sec, mgl@1371: + bfd_vma offset) mgl@1371: +{ mgl@1371: + struct bfd_link_hash_entry *bh = NULL; mgl@1371: + struct elf_link_hash_entry *h; mgl@1371: + const struct elf_backend_data *bed = get_elf_backend_data (dynobj); mgl@1371: + mgl@1371: + if (!(_bfd_generic_link_add_one_symbol mgl@1371: + (info, dynobj, name, BSF_GLOBAL, sec, offset, NULL, FALSE, mgl@1371: + bed->collect, &bh))) mgl@1371: + return NULL; mgl@1371: + mgl@1371: + h = (struct elf_link_hash_entry *)bh; mgl@1371: + h->def_regular = 1; mgl@1371: + h->type = STT_OBJECT; mgl@1371: + h->other = STV_HIDDEN; mgl@1371: + mgl@1371: + return h; mgl@1371: +} mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_create_got_section (bfd *dynobj, struct bfd_link_info *info) mgl@1371: +{ mgl@1371: + struct elf_avr32_link_hash_table *htab; mgl@1371: + flagword flags; mgl@1371: + const struct elf_backend_data *bed = get_elf_backend_data (dynobj); mgl@1371: + mgl@1371: + htab = avr32_elf_hash_table(info); mgl@1371: + flags = bed->dynamic_sec_flags; mgl@1371: + mgl@1371: + if (htab->sgot) mgl@1371: + return TRUE; mgl@1371: + mgl@1371: + htab->sgot = create_dynamic_section(dynobj, ".got", flags, 2); mgl@1371: + if (!htab->srelgot) mgl@1371: + htab->srelgot = create_dynamic_section(dynobj, ".rela.got", mgl@1371: + flags | SEC_READONLY, 2); mgl@1371: + mgl@1371: + if (!htab->sgot || !htab->srelgot) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + htab->root.hgot = create_dynamic_symbol(dynobj, info, "_GLOBAL_OFFSET_TABLE_", mgl@1371: + htab->sgot, 0); mgl@1371: + if (!htab->root.hgot) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + /* Make room for the GOT header */ mgl@1371: + htab->sgot->size += bed->got_header_size; mgl@1371: + mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: +/* (1) Create all dynamic (i.e. linker generated) sections that we may mgl@1371: + need during the link */ mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) mgl@1371: +{ mgl@1371: + struct elf_avr32_link_hash_table *htab; mgl@1371: + flagword flags; mgl@1371: + const struct elf_backend_data *bed = get_elf_backend_data (dynobj); mgl@1371: + mgl@1371: + pr_debug("(1) create dynamic sections\n"); mgl@1371: + mgl@1371: + htab = avr32_elf_hash_table(info); mgl@1371: + flags = bed->dynamic_sec_flags; mgl@1371: + mgl@1371: + if (!avr32_elf_create_got_section (dynobj, info)) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + if (!htab->sstub) mgl@1371: + htab->sstub = create_dynamic_section(dynobj, ".stub", mgl@1371: + flags | SEC_READONLY | SEC_CODE, 2); mgl@1371: + mgl@1371: + if (!htab->sstub) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: +/* (2) Go through all the relocs and count any potential GOT- or mgl@1371: + PLT-references to each symbol */ mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, mgl@1371: + const Elf_Internal_Rela *relocs) mgl@1371: +{ mgl@1371: + Elf_Internal_Shdr *symtab_hdr; mgl@1371: + struct elf_avr32_link_hash_table *htab; mgl@1371: + struct elf_link_hash_entry **sym_hashes; mgl@1371: + const Elf_Internal_Rela *rel, *rel_end; mgl@1371: + struct got_entry **local_got_ents; mgl@1371: + struct got_entry *got; mgl@1371: + const struct elf_backend_data *bed = get_elf_backend_data (abfd); mgl@1371: + asection *sgot; mgl@1371: + bfd *dynobj; mgl@1371: + mgl@1371: + pr_debug("(2) check relocs for %s:<%s> (size 0x%lx)\n", mgl@1371: + abfd->filename, sec->name, sec->size); mgl@1371: + mgl@1371: + if (info->relocatable) mgl@1371: + return TRUE; mgl@1371: + mgl@1371: + dynobj = elf_hash_table(info)->dynobj; mgl@1371: + symtab_hdr = &elf_tdata(abfd)->symtab_hdr; mgl@1371: + sym_hashes = elf_sym_hashes(abfd); mgl@1371: + htab = avr32_elf_hash_table(info); mgl@1371: + local_got_ents = elf_local_got_ents(abfd); mgl@1371: + sgot = htab->sgot; mgl@1371: + mgl@1371: + rel_end = relocs + sec->reloc_count; mgl@1371: + for (rel = relocs; rel < rel_end; rel++) mgl@1371: + { mgl@1371: + unsigned long r_symndx, r_type; mgl@1371: + struct elf_avr32_link_hash_entry *h; mgl@1371: + mgl@1371: + r_symndx = ELF32_R_SYM(rel->r_info); mgl@1371: + r_type = ELF32_R_TYPE(rel->r_info); mgl@1371: + mgl@1371: + /* Local symbols use local_got_ents, while others store the same mgl@1371: + information in the hash entry */ mgl@1371: + if (r_symndx < symtab_hdr->sh_info) mgl@1371: + { mgl@1371: + pr_debug(" (2a) processing local symbol %lu\n", r_symndx); mgl@1371: + h = NULL; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + h = (struct elf_avr32_link_hash_entry *) mgl@1371: + sym_hashes[r_symndx - symtab_hdr->sh_info]; mgl@1371: + while (h->root.type == bfd_link_hash_indirect mgl@1371: + || h->root.type == bfd_link_hash_warning) mgl@1371: + h = (struct elf_avr32_link_hash_entry *)h->root.root.u.i.link; mgl@1371: + pr_debug(" (2a) processing symbol %s\n", h->root.root.root.string); mgl@1371: + } mgl@1371: + mgl@1371: + /* Some relocs require special sections to be created. */ mgl@1371: + switch (r_type) mgl@1371: + { mgl@1371: + case R_AVR32_GOT32: mgl@1371: + case R_AVR32_GOT16: mgl@1371: + case R_AVR32_GOT8: mgl@1371: + case R_AVR32_GOT21S: mgl@1371: + case R_AVR32_GOT18SW: mgl@1371: + case R_AVR32_GOT16S: mgl@1371: + case R_AVR32_GOT7UW: mgl@1371: + case R_AVR32_LDA_GOT: mgl@1371: + case R_AVR32_GOTCALL: mgl@1371: + if (rel->r_addend) mgl@1371: + { mgl@1371: + if (info->callbacks->reloc_dangerous mgl@1371: + (info, _("Non-zero addend on GOT-relative relocation"), mgl@1371: + abfd, sec, rel->r_offset) == FALSE) mgl@1371: + return FALSE; mgl@1371: + } mgl@1371: + /* fall through */ mgl@1371: + case R_AVR32_GOTPC: mgl@1371: + if (dynobj == NULL) mgl@1371: + elf_hash_table(info)->dynobj = dynobj = abfd; mgl@1371: + if (sgot == NULL && !avr32_elf_create_got_section(dynobj, info)) mgl@1371: + return FALSE; mgl@1371: + break; mgl@1371: + case R_AVR32_32: mgl@1371: + /* We may need to create .rela.dyn later on. */ mgl@1371: + if (dynobj == NULL mgl@1371: + && (info->shared || h != NULL) mgl@1371: + && (sec->flags & SEC_ALLOC)) mgl@1371: + elf_hash_table(info)->dynobj = dynobj = abfd; mgl@1371: + break; mgl@1371: + } mgl@1371: + mgl@1371: + if (h != NULL && r_type != R_AVR32_GOT18SW) mgl@1371: + h->no_fn_stub = TRUE; mgl@1371: + mgl@1371: + switch (r_type) mgl@1371: + { mgl@1371: + case R_AVR32_GOT32: mgl@1371: + case R_AVR32_GOT16: mgl@1371: + case R_AVR32_GOT8: mgl@1371: + case R_AVR32_GOT21S: mgl@1371: + case R_AVR32_GOT18SW: mgl@1371: + case R_AVR32_GOT16S: mgl@1371: + case R_AVR32_GOT7UW: mgl@1371: + case R_AVR32_LDA_GOT: mgl@1371: + case R_AVR32_GOTCALL: mgl@1371: + if (h != NULL) mgl@1371: + { mgl@1371: + got = h->root.got.glist; mgl@1371: + if (!got) mgl@1371: + { mgl@1371: + got = bfd_zalloc(abfd, sizeof(struct got_entry)); mgl@1371: + if (!got) mgl@1371: + return FALSE; mgl@1371: + h->root.got.glist = got; mgl@1371: + } mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + if (!local_got_ents) mgl@1371: + { mgl@1371: + bfd_size_type size; mgl@1371: + bfd_size_type i; mgl@1371: + struct got_entry *tmp_entry; mgl@1371: + mgl@1371: + size = symtab_hdr->sh_info; mgl@1371: + size *= sizeof(struct got_entry *) + sizeof(struct got_entry); mgl@1371: + local_got_ents = bfd_zalloc(abfd, size); mgl@1371: + if (!local_got_ents) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + elf_local_got_ents(abfd) = local_got_ents; mgl@1371: + mgl@1371: + tmp_entry = (struct got_entry *)(local_got_ents mgl@1371: + + symtab_hdr->sh_info); mgl@1371: + for (i = 0; i < symtab_hdr->sh_info; i++) mgl@1371: + local_got_ents[i] = &tmp_entry[i]; mgl@1371: + } mgl@1371: + mgl@1371: + got = local_got_ents[r_symndx]; mgl@1371: + } mgl@1371: + mgl@1371: + got->refcount++; mgl@1371: + if (got->refcount > htab->nr_got_holes) mgl@1371: + htab->nr_got_holes = got->refcount; mgl@1371: + break; mgl@1371: + mgl@1371: + case R_AVR32_32: mgl@1371: + if ((info->shared || h != NULL) mgl@1371: + && (sec->flags & SEC_ALLOC)) mgl@1371: + { mgl@1371: + if (htab->srelgot == NULL) mgl@1371: + { mgl@1371: + htab->srelgot = create_dynamic_section(dynobj, ".rela.got", mgl@1371: + bed->dynamic_sec_flags mgl@1371: + | SEC_READONLY, 2); mgl@1371: + if (htab->srelgot == NULL) mgl@1371: + return FALSE; mgl@1371: + } mgl@1371: + mgl@1371: + if (sec->flags & SEC_READONLY mgl@1371: + && !h->readonly_reloc_sec) mgl@1371: + { mgl@1371: + h->readonly_reloc_sec = sec; mgl@1371: + h->readonly_reloc_offset = rel->r_offset; mgl@1371: + } mgl@1371: + mgl@1371: + if (h != NULL) mgl@1371: + { mgl@1371: + pr_debug("Non-GOT reference to symbol %s\n", mgl@1371: + h->root.root.root.string); mgl@1371: + h->possibly_dynamic_relocs++; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + pr_debug("Non-GOT reference to local symbol %lu\n", mgl@1371: + r_symndx); mgl@1371: + htab->local_dynamic_relocs++; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + break; mgl@1371: + mgl@1371: + /* TODO: GNU_VTINHERIT and GNU_VTENTRY */ mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: +/* (3) Adjust a symbol defined by a dynamic object and referenced by a mgl@1371: + regular object. The current definition is in some section of the mgl@1371: + dynamic object, but we're not including those sections. We have to mgl@1371: + change the definition to something the rest of the link can mgl@1371: + understand. */ mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_adjust_dynamic_symbol(struct bfd_link_info *info, mgl@1371: + struct elf_link_hash_entry *h) mgl@1371: +{ mgl@1371: + struct elf_avr32_link_hash_table *htab; mgl@1371: + struct elf_avr32_link_hash_entry *havr; mgl@1371: + bfd *dynobj; mgl@1371: + mgl@1371: + pr_debug("(3) adjust dynamic symbol %s\n", h->root.root.string); mgl@1371: + mgl@1371: + htab = avr32_elf_hash_table(info); mgl@1371: + havr = (struct elf_avr32_link_hash_entry *)h; mgl@1371: + dynobj = elf_hash_table(info)->dynobj; mgl@1371: + mgl@1371: + /* Make sure we know what is going on here. */ mgl@1371: + BFD_ASSERT (dynobj != NULL mgl@1371: + && (h->u.weakdef != NULL mgl@1371: + || (h->def_dynamic mgl@1371: + && h->ref_regular mgl@1371: + && !h->def_regular))); mgl@1371: + mgl@1371: + /* We don't want dynamic relocations in read-only sections. */ mgl@1371: + if (havr->readonly_reloc_sec) mgl@1371: + { mgl@1371: + if (info->callbacks->reloc_dangerous mgl@1371: + (info, _("dynamic relocation in read-only section"), mgl@1371: + havr->readonly_reloc_sec->owner, havr->readonly_reloc_sec, mgl@1371: + havr->readonly_reloc_offset) == FALSE) mgl@1371: + return FALSE; mgl@1371: + } mgl@1371: + mgl@1371: + /* If this is a function, create a stub if possible and set the mgl@1371: + symbol to the stub location. */ mgl@1371: + if (0 && !havr->no_fn_stub) mgl@1371: + { mgl@1371: + if (!h->def_regular) mgl@1371: + { mgl@1371: + asection *s = htab->sstub; mgl@1371: + mgl@1371: + BFD_ASSERT(s != NULL); mgl@1371: + mgl@1371: + h->root.u.def.section = s; mgl@1371: + h->root.u.def.value = s->size; mgl@1371: + h->plt.offset = s->size; mgl@1371: + s->size += AVR32_FUNCTION_STUB_SIZE; mgl@1371: + mgl@1371: + return TRUE; mgl@1371: + } mgl@1371: + } mgl@1371: + else if (h->type == STT_FUNC) mgl@1371: + { mgl@1371: + /* This will set the entry for this symbol in the GOT to 0, and mgl@1371: + the dynamic linker will take care of this. */ mgl@1371: + h->root.u.def.value = 0; mgl@1371: + return TRUE; mgl@1371: + } mgl@1371: + mgl@1371: + /* If this is a weak symbol, and there is a real definition, the mgl@1371: + processor independent code will have arranged for us to see the mgl@1371: + real definition first, and we can just use the same value. */ mgl@1371: + if (h->u.weakdef != NULL) mgl@1371: + { mgl@1371: + BFD_ASSERT(h->u.weakdef->root.type == bfd_link_hash_defined mgl@1371: + || h->u.weakdef->root.type == bfd_link_hash_defweak); mgl@1371: + h->root.u.def.section = h->u.weakdef->root.u.def.section; mgl@1371: + h->root.u.def.value = h->u.weakdef->root.u.def.value; mgl@1371: + return TRUE; mgl@1371: + } mgl@1371: + mgl@1371: + /* This is a reference to a symbol defined by a dynamic object which mgl@1371: + is not a function. */ mgl@1371: + mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +/* Garbage-collection of unused sections */ mgl@1371: + mgl@1371: +static asection * mgl@1371: +avr32_elf_gc_mark_hook(asection *sec, mgl@1371: + struct bfd_link_info *info ATTRIBUTE_UNUSED, mgl@1371: + Elf_Internal_Rela *rel, mgl@1371: + struct elf_link_hash_entry *h, mgl@1371: + Elf_Internal_Sym *sym) mgl@1371: +{ mgl@1371: + if (h) mgl@1371: + { mgl@1371: + switch (ELF32_R_TYPE(rel->r_info)) mgl@1371: + { mgl@1371: + /* TODO: VTINHERIT/VTENTRY */ mgl@1371: + default: mgl@1371: + switch (h->root.type) mgl@1371: + { mgl@1371: + case bfd_link_hash_defined: mgl@1371: + case bfd_link_hash_defweak: mgl@1371: + return h->root.u.def.section; mgl@1371: + mgl@1371: + case bfd_link_hash_common: mgl@1371: + return h->root.u.c.p->section; mgl@1371: + mgl@1371: + default: mgl@1371: + break; mgl@1371: + } mgl@1371: + } mgl@1371: + } mgl@1371: + else mgl@1371: + return bfd_section_from_elf_index(sec->owner, sym->st_shndx); mgl@1371: + mgl@1371: + return NULL; mgl@1371: +} mgl@1371: + mgl@1371: +/* Update the GOT entry reference counts for the section being removed. */ mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_gc_sweep_hook(bfd *abfd, mgl@1371: + struct bfd_link_info *info ATTRIBUTE_UNUSED, mgl@1371: + asection *sec, mgl@1371: + const Elf_Internal_Rela *relocs) mgl@1371: +{ mgl@1371: + Elf_Internal_Shdr *symtab_hdr; mgl@1371: + struct elf_avr32_link_hash_entry **sym_hashes; mgl@1371: + struct got_entry **local_got_ents; mgl@1371: + const Elf_Internal_Rela *rel, *relend; mgl@1371: + mgl@1371: + if (!(sec->flags & SEC_ALLOC)) mgl@1371: + return TRUE; mgl@1371: + mgl@1371: + symtab_hdr = &elf_tdata(abfd)->symtab_hdr; mgl@1371: + sym_hashes = (struct elf_avr32_link_hash_entry **)elf_sym_hashes(abfd); mgl@1371: + local_got_ents = elf_local_got_ents(abfd); mgl@1371: + mgl@1371: + relend = relocs + sec->reloc_count; mgl@1371: + for (rel = relocs; rel < relend; rel++) mgl@1371: + { mgl@1371: + unsigned long r_symndx; mgl@1371: + unsigned int r_type; mgl@1371: + struct elf_avr32_link_hash_entry *h = NULL; mgl@1371: + mgl@1371: + r_symndx = ELF32_R_SYM(rel->r_info); mgl@1371: + if (r_symndx >= symtab_hdr->sh_info) mgl@1371: + { mgl@1371: + h = sym_hashes[r_symndx - symtab_hdr->sh_info]; mgl@1371: + while (h->root.root.type == bfd_link_hash_indirect mgl@1371: + || h->root.root.type == bfd_link_hash_warning) mgl@1371: + h = (struct elf_avr32_link_hash_entry *)h->root.root.u.i.link; mgl@1371: + } mgl@1371: + mgl@1371: + r_type = ELF32_R_TYPE(rel->r_info); mgl@1371: + mgl@1371: + switch (r_type) mgl@1371: + { mgl@1371: + case R_AVR32_GOT32: mgl@1371: + case R_AVR32_GOT16: mgl@1371: + case R_AVR32_GOT8: mgl@1371: + case R_AVR32_GOT21S: mgl@1371: + case R_AVR32_GOT18SW: mgl@1371: + case R_AVR32_GOT16S: mgl@1371: + case R_AVR32_GOT7UW: mgl@1371: + case R_AVR32_LDA_GOT: mgl@1371: + case R_AVR32_GOTCALL: mgl@1371: + if (h) mgl@1371: + h->root.got.glist->refcount--; mgl@1371: + else mgl@1371: + local_got_ents[r_symndx]->refcount--; mgl@1371: + break; mgl@1371: + mgl@1371: + case R_AVR32_32: mgl@1371: + if (info->shared || h) mgl@1371: + { mgl@1371: + if (h) mgl@1371: + h->possibly_dynamic_relocs--; mgl@1371: + else mgl@1371: + avr32_elf_hash_table(info)->local_dynamic_relocs--; mgl@1371: + } mgl@1371: + mgl@1371: + default: mgl@1371: + break; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: +/* Sizing and refcounting of dynamic sections */ mgl@1371: + mgl@1371: +static void mgl@1371: +insert_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got); mgl@1371: +static void mgl@1371: +unref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got); mgl@1371: +static void mgl@1371: +ref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got); mgl@1371: +static bfd_boolean mgl@1371: +assign_got_offsets(struct elf_avr32_link_hash_table *htab); mgl@1371: +static bfd_boolean mgl@1371: +allocate_dynrelocs(struct elf_link_hash_entry *h, void *_info); mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_size_dynamic_sections (bfd *output_bfd, mgl@1371: + struct bfd_link_info *info); mgl@1371: + mgl@1371: +static void mgl@1371: +insert_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got) mgl@1371: +{ mgl@1371: + /* Any entries with got_refcount > htab->nr_got_holes end up in the mgl@1371: + * last pigeonhole without any sorting. We expect the number of such mgl@1371: + * entries to be small, so it is very unlikely to affect mgl@1371: + * performance. */ mgl@1371: + int entry = got->refcount; mgl@1371: + mgl@1371: + if (entry > htab->nr_got_holes) mgl@1371: + entry = htab->nr_got_holes; mgl@1371: + mgl@1371: + got->pprev = &htab->got_hole[entry]; mgl@1371: + got->next = htab->got_hole[entry]; mgl@1371: + mgl@1371: + if (got->next) mgl@1371: + got->next->pprev = &got->next; mgl@1371: + mgl@1371: + htab->got_hole[entry] = got; mgl@1371: +} mgl@1371: + mgl@1371: +/* Decrement the refcount of a GOT entry and update its position in mgl@1371: + the pigeonhole array. */ mgl@1371: +static void mgl@1371: +unref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got) mgl@1371: +{ mgl@1371: + BFD_ASSERT(got->refcount > 0); mgl@1371: + mgl@1371: + if (got->next) mgl@1371: + got->next->pprev = got->pprev; mgl@1371: + mgl@1371: + *(got->pprev) = got->next; mgl@1371: + got->refcount--; mgl@1371: + insert_got_entry(htab, got); mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +ref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got) mgl@1371: +{ mgl@1371: + if (got->next) mgl@1371: + got->next->pprev = got->pprev; mgl@1371: + mgl@1371: + *(got->pprev) = got->next; mgl@1371: + got->refcount++; mgl@1371: + insert_got_entry(htab, got); mgl@1371: + mgl@1371: + BFD_ASSERT(got->refcount > 0); mgl@1371: +} mgl@1371: + mgl@1371: +/* Assign offsets to all GOT entries we intend to keep. The entries mgl@1371: + that are referenced most often are placed at low offsets so that we mgl@1371: + can use compact instructions as much as possible. mgl@1371: + mgl@1371: + Returns TRUE if any offsets or the total size of the GOT changed. */ mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +assign_got_offsets(struct elf_avr32_link_hash_table *htab) mgl@1371: +{ mgl@1371: + struct got_entry *got; mgl@1371: + bfd_size_type got_size = 0; mgl@1371: + bfd_boolean changed = FALSE; mgl@1371: + bfd_signed_vma offset; mgl@1371: + int i; mgl@1371: + mgl@1371: + /* The GOT header provides the address of the DYNAMIC segment, so mgl@1371: + we need that even if the GOT is otherwise empty. */ mgl@1371: + if (htab->root.dynamic_sections_created) mgl@1371: + got_size = AVR32_GOT_HEADER_SIZE; mgl@1371: + mgl@1371: + for (i = htab->nr_got_holes; i > 0; i--) mgl@1371: + { mgl@1371: + got = htab->got_hole[i]; mgl@1371: + while (got) mgl@1371: + { mgl@1371: + if (got->refcount > 0) mgl@1371: + { mgl@1371: + offset = got_size; mgl@1371: + if (got->offset != offset) mgl@1371: + { mgl@1371: + RDBG("GOT offset changed: %ld -> %ld\n", mgl@1371: + got->offset, offset); mgl@1371: + changed = TRUE; mgl@1371: + } mgl@1371: + got->offset = offset; mgl@1371: + got_size += 4; mgl@1371: + } mgl@1371: + got = got->next; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + if (htab->sgot->size != got_size) mgl@1371: + { mgl@1371: + RDBG("GOT size changed: %lu -> %lu\n", htab->sgot->size, mgl@1371: + got_size); mgl@1371: + changed = TRUE; mgl@1371: + } mgl@1371: + htab->sgot->size = got_size; mgl@1371: + mgl@1371: + RDBG("assign_got_offsets: total size %lu (%s)\n", mgl@1371: + got_size, changed ? "changed" : "no change"); mgl@1371: + mgl@1371: + return changed; mgl@1371: +} mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +allocate_dynrelocs(struct elf_link_hash_entry *h, void *_info) mgl@1371: +{ mgl@1371: + struct bfd_link_info *info = _info; mgl@1371: + struct elf_avr32_link_hash_table *htab; mgl@1371: + struct elf_avr32_link_hash_entry *havr; mgl@1371: + struct got_entry *got; mgl@1371: + mgl@1371: + pr_debug(" (4b) allocate_dynrelocs: %s\n", h->root.root.string); mgl@1371: + mgl@1371: + if (h->root.type == bfd_link_hash_indirect) mgl@1371: + return TRUE; mgl@1371: + mgl@1371: + if (h->root.type == bfd_link_hash_warning) mgl@1371: + /* When warning symbols are created, they **replace** the "real" mgl@1371: + entry in the hash table, thus we never get to see the real mgl@1371: + symbol in a hash traversal. So look at it now. */ mgl@1371: + h = (struct elf_link_hash_entry *) h->root.u.i.link; mgl@1371: + mgl@1371: + htab = avr32_elf_hash_table(info); mgl@1371: + havr = (struct elf_avr32_link_hash_entry *)h; mgl@1371: + mgl@1371: + got = h->got.glist; mgl@1371: + mgl@1371: + /* If got is NULL, the symbol is never referenced through the GOT */ mgl@1371: + if (got && got->refcount > 0) mgl@1371: + { mgl@1371: + insert_got_entry(htab, got); mgl@1371: + mgl@1371: + /* Shared libraries need relocs for all GOT entries unless the mgl@1371: + symbol is forced local or -Bsymbolic is used. Others need mgl@1371: + relocs for everything that is not guaranteed to be defined in mgl@1371: + a regular object. */ mgl@1371: + if ((info->shared mgl@1371: + && !info->symbolic mgl@1371: + && h->dynindx != -1) mgl@1371: + || (htab->root.dynamic_sections_created mgl@1371: + && h->def_dynamic mgl@1371: + && !h->def_regular)) mgl@1371: + htab->srelgot->size += sizeof(Elf32_External_Rela); mgl@1371: + } mgl@1371: + mgl@1371: + if (havr->possibly_dynamic_relocs mgl@1371: + && (info->shared mgl@1371: + || (elf_hash_table(info)->dynamic_sections_created mgl@1371: + && h->def_dynamic mgl@1371: + && !h->def_regular))) mgl@1371: + { mgl@1371: + pr_debug("Allocating %d dynamic reloc against symbol %s...\n", mgl@1371: + havr->possibly_dynamic_relocs, h->root.root.string); mgl@1371: + htab->srelgot->size += (havr->possibly_dynamic_relocs mgl@1371: + * sizeof(Elf32_External_Rela)); mgl@1371: + } mgl@1371: + mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: +/* (4) Calculate the sizes of the linker-generated sections and mgl@1371: + allocate memory for them. */ mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_size_dynamic_sections (bfd *output_bfd, mgl@1371: + struct bfd_link_info *info) mgl@1371: +{ mgl@1371: + struct elf_avr32_link_hash_table *htab; mgl@1371: + bfd *dynobj; mgl@1371: + asection *s; mgl@1371: + bfd *ibfd; mgl@1371: + bfd_boolean relocs; mgl@1371: + mgl@1371: + pr_debug("(4) size dynamic sections\n"); mgl@1371: + mgl@1371: + htab = avr32_elf_hash_table(info); mgl@1371: + dynobj = htab->root.dynobj; mgl@1371: + BFD_ASSERT(dynobj != NULL); mgl@1371: + mgl@1371: + if (htab->root.dynamic_sections_created) mgl@1371: + { mgl@1371: + /* Initialize the contents of the .interp section to the name of mgl@1371: + the dynamic loader */ mgl@1371: + if (info->executable) mgl@1371: + { mgl@1371: + s = bfd_get_section_by_name(dynobj, ".interp"); mgl@1371: + BFD_ASSERT(s != NULL); mgl@1371: + s->size = sizeof(ELF_DYNAMIC_INTERPRETER); mgl@1371: + s->contents = (unsigned char *)ELF_DYNAMIC_INTERPRETER; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + if (htab->nr_got_holes > 0) mgl@1371: + { mgl@1371: + /* Allocate holes for the pigeonhole sort algorithm */ mgl@1371: + pr_debug("Highest GOT refcount: %d\n", htab->nr_got_holes); mgl@1371: + mgl@1371: + /* Limit the memory usage by clipping the number of pigeonholes mgl@1371: + * at a predefined maximum. All entries with a higher refcount mgl@1371: + * will end up in the last pigeonhole. */ mgl@1371: + if (htab->nr_got_holes >= MAX_NR_GOT_HOLES) mgl@1371: + { mgl@1371: + htab->nr_got_holes = MAX_NR_GOT_HOLES - 1; mgl@1371: + mgl@1371: + pr_debug("Limiting maximum number of GOT pigeonholes to %u\n", mgl@1371: + htab->nr_got_holes); mgl@1371: + } mgl@1371: + htab->got_hole = bfd_zalloc(output_bfd, mgl@1371: + sizeof(struct got_entry *) mgl@1371: + * (htab->nr_got_holes + 1)); mgl@1371: + if (!htab->got_hole) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + /* Set up .got offsets for local syms. */ mgl@1371: + for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) mgl@1371: + { mgl@1371: + struct got_entry **local_got; mgl@1371: + struct got_entry **end_local_got; mgl@1371: + Elf_Internal_Shdr *symtab_hdr; mgl@1371: + bfd_size_type locsymcount; mgl@1371: + mgl@1371: + pr_debug(" (4a) processing file %s...\n", ibfd->filename); mgl@1371: + mgl@1371: + BFD_ASSERT(bfd_get_flavour(ibfd) == bfd_target_elf_flavour); mgl@1371: + mgl@1371: + local_got = elf_local_got_ents(ibfd); mgl@1371: + if (!local_got) mgl@1371: + continue; mgl@1371: + mgl@1371: + symtab_hdr = &elf_tdata(ibfd)->symtab_hdr; mgl@1371: + locsymcount = symtab_hdr->sh_info; mgl@1371: + end_local_got = local_got + locsymcount; mgl@1371: + mgl@1371: + for (; local_got < end_local_got; ++local_got) mgl@1371: + insert_got_entry(htab, *local_got); mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + /* Allocate global sym .got entries and space for global sym mgl@1371: + dynamic relocs */ mgl@1371: + elf_link_hash_traverse(&htab->root, allocate_dynrelocs, info); mgl@1371: + mgl@1371: + /* Now that we have sorted the GOT entries, we are ready to mgl@1371: + assign offsets and determine the initial size of the GOT. */ mgl@1371: + if (htab->sgot) mgl@1371: + assign_got_offsets(htab); mgl@1371: + mgl@1371: + /* Allocate space for local sym dynamic relocs */ mgl@1371: + BFD_ASSERT(htab->local_dynamic_relocs == 0 || info->shared); mgl@1371: + if (htab->local_dynamic_relocs) mgl@1371: + htab->srelgot->size += (htab->local_dynamic_relocs mgl@1371: + * sizeof(Elf32_External_Rela)); mgl@1371: + mgl@1371: + /* We now have determined the sizes of the various dynamic mgl@1371: + sections. Allocate memory for them. */ mgl@1371: + relocs = FALSE; mgl@1371: + for (s = dynobj->sections; s; s = s->next) mgl@1371: + { mgl@1371: + if ((s->flags & SEC_LINKER_CREATED) == 0) mgl@1371: + continue; mgl@1371: + mgl@1371: + if (s == htab->sgot mgl@1371: + || s == htab->sstub) mgl@1371: + { mgl@1371: + /* Strip this section if we don't need it */ mgl@1371: + } mgl@1371: + else if (strncmp (bfd_get_section_name(dynobj, s), ".rela", 5) == 0) mgl@1371: + { mgl@1371: + if (s->size != 0) mgl@1371: + relocs = TRUE; mgl@1371: + mgl@1371: + s->reloc_count = 0; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + /* It's not one of our sections */ mgl@1371: + continue; mgl@1371: + } mgl@1371: + mgl@1371: + if (s->size == 0) mgl@1371: + { mgl@1371: + /* Strip unneeded sections */ mgl@1371: + pr_debug("Stripping section %s from output...\n", s->name); mgl@1371: + /* deleted function in 2.17 mgl@1371: + _bfd_strip_section_from_output(info, s); mgl@1371: + */ mgl@1371: + continue; mgl@1371: + } mgl@1371: + mgl@1371: + s->contents = bfd_zalloc(dynobj, s->size); mgl@1371: + if (s->contents == NULL) mgl@1371: + return FALSE; mgl@1371: + } mgl@1371: + mgl@1371: + if (htab->root.dynamic_sections_created) mgl@1371: + { mgl@1371: + /* Add some entries to the .dynamic section. We fill in the mgl@1371: + values later, in sh_elf_finish_dynamic_sections, but we mgl@1371: + must add the entries now so that we get the correct size for mgl@1371: + the .dynamic section. The DT_DEBUG entry is filled in by the mgl@1371: + dynamic linker and used by the debugger. */ mgl@1371: +#define add_dynamic_entry(TAG, VAL) _bfd_elf_add_dynamic_entry(info, TAG, VAL) mgl@1371: + mgl@1371: + if (!add_dynamic_entry(DT_PLTGOT, 0)) mgl@1371: + return FALSE; mgl@1371: + if (!add_dynamic_entry(DT_AVR32_GOTSZ, 0)) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + if (info->executable) mgl@1371: + { mgl@1371: + if (!add_dynamic_entry(DT_DEBUG, 0)) mgl@1371: + return FALSE; mgl@1371: + } mgl@1371: + if (relocs) mgl@1371: + { mgl@1371: + if (!add_dynamic_entry(DT_RELA, 0) mgl@1371: + || !add_dynamic_entry(DT_RELASZ, 0) mgl@1371: + || !add_dynamic_entry(DT_RELAENT, mgl@1371: + sizeof(Elf32_External_Rela))) mgl@1371: + return FALSE; mgl@1371: + } mgl@1371: + } mgl@1371: +#undef add_dynamic_entry mgl@1371: + mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +/* Access to internal relocations, section contents and symbols. mgl@1371: + (stolen from the xtensa port) */ mgl@1371: + mgl@1371: +static Elf_Internal_Rela * mgl@1371: +retrieve_internal_relocs (bfd *abfd, asection *sec, bfd_boolean keep_memory); mgl@1371: +static void mgl@1371: +pin_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs); mgl@1371: +static void mgl@1371: +release_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs); mgl@1371: +static bfd_byte * mgl@1371: +retrieve_contents (bfd *abfd, asection *sec, bfd_boolean keep_memory); mgl@1371: +/* mgl@1371: +static void mgl@1371: +pin_contents (asection *sec, bfd_byte *contents); mgl@1371: +*/ mgl@1371: +static void mgl@1371: +release_contents (asection *sec, bfd_byte *contents); mgl@1371: +static Elf_Internal_Sym * mgl@1371: +retrieve_local_syms (bfd *input_bfd, bfd_boolean keep_memory); mgl@1371: +/* mgl@1371: +static void mgl@1371: +pin_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf); mgl@1371: +*/ mgl@1371: +static void mgl@1371: +release_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf); mgl@1371: + mgl@1371: +/* During relaxation, we need to modify relocations, section contents, mgl@1371: + and symbol definitions, and we need to keep the original values from mgl@1371: + being reloaded from the input files, i.e., we need to "pin" the mgl@1371: + modified values in memory. We also want to continue to observe the mgl@1371: + setting of the "keep-memory" flag. The following functions wrap the mgl@1371: + standard BFD functions to take care of this for us. */ mgl@1371: + mgl@1371: +static Elf_Internal_Rela * mgl@1371: +retrieve_internal_relocs (bfd *abfd, asection *sec, bfd_boolean keep_memory) mgl@1371: +{ mgl@1371: + /* _bfd_elf_link_read_relocs knows about caching, so no need for us mgl@1371: + to be clever here. */ mgl@1371: + return _bfd_elf_link_read_relocs(abfd, sec, NULL, NULL, keep_memory); mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +pin_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs) mgl@1371: +{ mgl@1371: + elf_section_data (sec)->relocs = internal_relocs; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +release_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs) mgl@1371: +{ mgl@1371: + if (internal_relocs mgl@1371: + && elf_section_data (sec)->relocs != internal_relocs) mgl@1371: + free (internal_relocs); mgl@1371: +} mgl@1371: + mgl@1371: +static bfd_byte * mgl@1371: +retrieve_contents (bfd *abfd, asection *sec, bfd_boolean keep_memory) mgl@1371: +{ mgl@1371: + bfd_byte *contents; mgl@1371: + bfd_size_type sec_size; mgl@1371: + mgl@1371: + sec_size = bfd_get_section_limit (abfd, sec); mgl@1371: + contents = elf_section_data (sec)->this_hdr.contents; mgl@1371: + mgl@1371: + if (contents == NULL && sec_size != 0) mgl@1371: + { mgl@1371: + if (!bfd_malloc_and_get_section (abfd, sec, &contents)) mgl@1371: + { mgl@1371: + if (contents) mgl@1371: + free (contents); mgl@1371: + return NULL; mgl@1371: + } mgl@1371: + if (keep_memory) mgl@1371: + elf_section_data (sec)->this_hdr.contents = contents; mgl@1371: + } mgl@1371: + return contents; mgl@1371: +} mgl@1371: + mgl@1371: +/* mgl@1371: +static void mgl@1371: +pin_contents (asection *sec, bfd_byte *contents) mgl@1371: +{ mgl@1371: + elf_section_data (sec)->this_hdr.contents = contents; mgl@1371: +} mgl@1371: +*/ mgl@1371: +static void mgl@1371: +release_contents (asection *sec, bfd_byte *contents) mgl@1371: +{ mgl@1371: + if (contents && elf_section_data (sec)->this_hdr.contents != contents) mgl@1371: + free (contents); mgl@1371: +} mgl@1371: + mgl@1371: +static Elf_Internal_Sym * mgl@1371: +retrieve_local_syms (bfd *input_bfd, bfd_boolean keep_memory) mgl@1371: +{ mgl@1371: + Elf_Internal_Shdr *symtab_hdr; mgl@1371: + Elf_Internal_Sym *isymbuf; mgl@1371: + size_t locsymcount; mgl@1371: + mgl@1371: + symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; mgl@1371: + locsymcount = symtab_hdr->sh_info; mgl@1371: + mgl@1371: + isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; mgl@1371: + if (isymbuf == NULL && locsymcount != 0) mgl@1371: + { mgl@1371: + isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0, mgl@1371: + NULL, NULL, NULL); mgl@1371: + if (isymbuf && keep_memory) mgl@1371: + symtab_hdr->contents = (unsigned char *) isymbuf; mgl@1371: + } mgl@1371: + mgl@1371: + return isymbuf; mgl@1371: +} mgl@1371: + mgl@1371: +/* mgl@1371: +static void mgl@1371: +pin_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf) mgl@1371: +{ mgl@1371: + elf_tdata (input_bfd)->symtab_hdr.contents = (unsigned char *)isymbuf; mgl@1371: +} mgl@1371: + mgl@1371: +*/ mgl@1371: +static void mgl@1371: +release_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf) mgl@1371: +{ mgl@1371: + if (isymbuf && (elf_tdata (input_bfd)->symtab_hdr.contents mgl@1371: + != (unsigned char *)isymbuf)) mgl@1371: + free (isymbuf); mgl@1371: +} mgl@1371: + mgl@1371: + /* Data structures used during relaxation. */ mgl@1371: + mgl@1371: +enum relax_state_id { mgl@1371: + RS_ERROR = -1, mgl@1371: + RS_NONE = 0, mgl@1371: + RS_ALIGN, mgl@1371: + RS_CPENT, mgl@1371: + RS_PIC_CALL, mgl@1371: + RS_PIC_MCALL, mgl@1371: + RS_PIC_RCALL2, mgl@1371: + RS_PIC_RCALL1, mgl@1371: + RS_PIC_LDA, mgl@1371: + RS_PIC_LDW4, mgl@1371: + RS_PIC_LDW3, mgl@1371: + RS_PIC_SUB5, mgl@1371: + RS_NOPIC_MCALL, mgl@1371: + RS_NOPIC_RCALL2, mgl@1371: + RS_NOPIC_RCALL1, mgl@1371: + RS_NOPIC_LDW4, mgl@1371: + RS_NOPIC_LDDPC, mgl@1371: + RS_NOPIC_SUB5, mgl@1371: + RS_NOPIC_MOV2, mgl@1371: + RS_NOPIC_MOV1, mgl@1371: + RS_RCALL2, mgl@1371: + RS_RCALL1, mgl@1371: + RS_BRC2, mgl@1371: + RS_BRC1, mgl@1371: + RS_BRAL, mgl@1371: + RS_RJMP, mgl@1371: + RS_MAX, mgl@1371: +}; mgl@1371: + mgl@1371: +enum reference_type { mgl@1371: + REF_ABSOLUTE, mgl@1371: + REF_PCREL, mgl@1371: + REF_CPOOL, mgl@1371: + REF_GOT, mgl@1371: +}; mgl@1371: + mgl@1371: +struct relax_state mgl@1371: +{ mgl@1371: + const char *name; mgl@1371: + enum relax_state_id id; mgl@1371: + enum relax_state_id direct; mgl@1371: + enum relax_state_id next; mgl@1371: + enum relax_state_id prev; mgl@1371: + mgl@1371: + enum reference_type reftype; mgl@1371: + mgl@1371: + unsigned int r_type; mgl@1371: + mgl@1371: + bfd_vma opcode; mgl@1371: + bfd_vma opcode_mask; mgl@1371: + mgl@1371: + bfd_signed_vma range_min; mgl@1371: + bfd_signed_vma range_max; mgl@1371: + mgl@1371: + bfd_size_type size; mgl@1371: +}; mgl@1371: + mgl@1371: +/* mgl@1371: + * This is for relocs that mgl@1371: + * a) has an addend or is of type R_AVR32_DIFF32, and mgl@1371: + * b) references a different section than it's in, and mgl@1371: + * c) references a section that is relaxable mgl@1371: + * mgl@1371: + * as well as relocs that references the constant pool, in which case mgl@1371: + * the add_frag member points to the frag containing the constant pool mgl@1371: + * entry. mgl@1371: + * mgl@1371: + * Such relocs must be fixed up whenever we delete any code. Sections mgl@1371: + * that don't have any relocs with all of the above properties don't mgl@1371: + * have any additional reloc data, but sections that do will have mgl@1371: + * additional data for all its relocs. mgl@1371: + */ mgl@1371: +struct avr32_reloc_data mgl@1371: +{ mgl@1371: + struct fragment *add_frag; mgl@1371: + struct fragment *sub_frag; mgl@1371: +}; mgl@1371: + mgl@1371: +/* mgl@1371: + * A 'fragment' is a relaxable entity, that is, code may be added or mgl@1371: + * deleted at the end of a fragment. When this happens, all subsequent mgl@1371: + * fragments in the list will have their offsets updated. mgl@1371: + */ mgl@1371: +struct fragment mgl@1371: +{ mgl@1371: + enum relax_state_id state; mgl@1371: + enum relax_state_id initial_state; mgl@1371: + mgl@1371: + Elf_Internal_Rela *rela; mgl@1371: + bfd_size_type size; mgl@1371: + bfd_vma offset; mgl@1371: + int size_adjust; mgl@1371: + int offset_adjust; mgl@1371: + bfd_boolean has_grown; mgl@1371: + mgl@1371: + /* Only used by constant pool entries. When this drops to zero, the mgl@1371: + frag is discarded (i.e. size_adjust is set to -4.) */ mgl@1371: + int refcount; mgl@1371: +}; mgl@1371: + mgl@1371: +struct avr32_relax_data mgl@1371: +{ mgl@1371: + unsigned int frag_count; mgl@1371: + struct fragment *frag; mgl@1371: + struct avr32_reloc_data *reloc_data; mgl@1371: + mgl@1371: + /* TRUE if this section has one or more relaxable relocations */ mgl@1371: + bfd_boolean is_relaxable; mgl@1371: + unsigned int iteration; mgl@1371: +}; mgl@1371: + mgl@1371: +struct avr32_section_data mgl@1371: +{ mgl@1371: + struct bfd_elf_section_data elf; mgl@1371: + struct avr32_relax_data relax_data; mgl@1371: +}; mgl@1371: + mgl@1371: + /* Relax state definitions */ mgl@1371: + mgl@1371: +#define PIC_MOV2_OPCODE 0xe0600000 mgl@1371: +#define PIC_MOV2_MASK 0xe1e00000 mgl@1371: +#define PIC_MOV2_RANGE_MIN (-1048576 * 4) mgl@1371: +#define PIC_MOV2_RANGE_MAX (1048575 * 4) mgl@1371: +#define PIC_MCALL_OPCODE 0xf0160000 mgl@1371: +#define PIC_MCALL_MASK 0xffff0000 mgl@1371: +#define PIC_MCALL_RANGE_MIN (-131072) mgl@1371: +#define PIC_MCALL_RANGE_MAX (131068) mgl@1371: +#define RCALL2_OPCODE 0xe0a00000 mgl@1371: +#define RCALL2_MASK 0xe1ef0000 mgl@1371: +#define RCALL2_RANGE_MIN (-2097152) mgl@1371: +#define RCALL2_RANGE_MAX (2097150) mgl@1371: +#define RCALL1_OPCODE 0xc00c0000 mgl@1371: +#define RCALL1_MASK 0xf00c0000 mgl@1371: +#define RCALL1_RANGE_MIN (-1024) mgl@1371: +#define RCALL1_RANGE_MAX (1022) mgl@1371: +#define PIC_LDW4_OPCODE 0xecf00000 mgl@1371: +#define PIC_LDW4_MASK 0xfff00000 mgl@1371: +#define PIC_LDW4_RANGE_MIN (-32768) mgl@1371: +#define PIC_LDW4_RANGE_MAX (32767) mgl@1371: +#define PIC_LDW3_OPCODE 0x6c000000 mgl@1371: +#define PIC_LDW3_MASK 0xfe000000 mgl@1371: +#define PIC_LDW3_RANGE_MIN (0) mgl@1371: +#define PIC_LDW3_RANGE_MAX (124) mgl@1371: +#define SUB5_PC_OPCODE 0xfec00000 mgl@1371: +#define SUB5_PC_MASK 0xfff00000 mgl@1371: +#define SUB5_PC_RANGE_MIN (-32768) mgl@1371: +#define SUB5_PC_RANGE_MAX (32767) mgl@1371: +#define NOPIC_MCALL_OPCODE 0xf01f0000 mgl@1371: +#define NOPIC_MCALL_MASK 0xffff0000 mgl@1371: +#define NOPIC_MCALL_RANGE_MIN PIC_MCALL_RANGE_MIN mgl@1371: +#define NOPIC_MCALL_RANGE_MAX PIC_MCALL_RANGE_MAX mgl@1371: +#define NOPIC_LDW4_OPCODE 0xfef00000 mgl@1371: +#define NOPIC_LDW4_MASK 0xfff00000 mgl@1371: +#define NOPIC_LDW4_RANGE_MIN PIC_LDW4_RANGE_MIN mgl@1371: +#define NOPIC_LDW4_RANGE_MAX PIC_LDW4_RANGE_MAX mgl@1371: +#define LDDPC_OPCODE 0x48000000 mgl@1371: +#define LDDPC_MASK 0xf8000000 mgl@1371: +#define LDDPC_RANGE_MIN 0 mgl@1371: +#define LDDPC_RANGE_MAX 508 mgl@1371: + mgl@1371: +#define NOPIC_MOV2_OPCODE 0xe0600000 mgl@1371: +#define NOPIC_MOV2_MASK 0xe1e00000 mgl@1371: +#define NOPIC_MOV2_RANGE_MIN (-1048576) mgl@1371: +#define NOPIC_MOV2_RANGE_MAX (1048575) mgl@1371: +#define NOPIC_MOV1_OPCODE 0x30000000 mgl@1371: +#define NOPIC_MOV1_MASK 0xf0000000 mgl@1371: +#define NOPIC_MOV1_RANGE_MIN (-128) mgl@1371: +#define NOPIC_MOV1_RANGE_MAX (127) mgl@1371: + mgl@1371: +/* Only brc2 variants with cond[3] == 0 is considered, since the mgl@1371: + others are not relaxable. bral is a special case and is handled mgl@1371: + separately. */ mgl@1371: +#define BRC2_OPCODE 0xe0800000 mgl@1371: +#define BRC2_MASK 0xe1e80000 mgl@1371: +#define BRC2_RANGE_MIN (-2097152) mgl@1371: +#define BRC2_RANGE_MAX (2097150) mgl@1371: +#define BRC1_OPCODE 0xc0000000 mgl@1371: +#define BRC1_MASK 0xf0080000 mgl@1371: +#define BRC1_RANGE_MIN (-256) mgl@1371: +#define BRC1_RANGE_MAX (254) mgl@1371: +#define BRAL_OPCODE 0xe08f0000 mgl@1371: +#define BRAL_MASK 0xe1ef0000 mgl@1371: +#define BRAL_RANGE_MIN BRC2_RANGE_MIN mgl@1371: +#define BRAL_RANGE_MAX BRC2_RANGE_MAX mgl@1371: +#define RJMP_OPCODE 0xc0080000 mgl@1371: +#define RJMP_MASK 0xf00c0000 mgl@1371: +#define RJMP_RANGE_MIN (-1024) mgl@1371: +#define RJMP_RANGE_MAX (1022) mgl@1371: + mgl@1371: +/* Define a relax state using the GOT */ mgl@1371: +#define RG(id, dir, next, prev, r_type, opc, size) \ mgl@1371: + { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_GOT, \ mgl@1371: + R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ mgl@1371: + opc##_RANGE_MIN, opc##_RANGE_MAX, size } mgl@1371: +/* Define a relax state using the Constant Pool */ mgl@1371: +#define RC(id, dir, next, prev, r_type, opc, size) \ mgl@1371: + { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_CPOOL, \ mgl@1371: + R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ mgl@1371: + opc##_RANGE_MIN, opc##_RANGE_MAX, size } mgl@1371: + mgl@1371: +/* Define a relax state using pc-relative direct reference */ mgl@1371: +#define RP(id, dir, next, prev, r_type, opc, size) \ mgl@1371: + { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_PCREL, \ mgl@1371: + R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ mgl@1371: + opc##_RANGE_MIN, opc##_RANGE_MAX, size } mgl@1371: + mgl@1371: +/* Define a relax state using non-pc-relative direct reference */ mgl@1371: +#define RD(id, dir, next, prev, r_type, opc, size) \ mgl@1371: + { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_ABSOLUTE, \ mgl@1371: + R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ mgl@1371: + opc##_RANGE_MIN, opc##_RANGE_MAX, size } mgl@1371: + mgl@1371: +/* Define a relax state that will be handled specially */ mgl@1371: +#define RS(id, r_type, size) \ mgl@1371: + { "RS_"#id, RS_##id, RS_NONE, RS_NONE, RS_NONE, REF_ABSOLUTE, \ mgl@1371: + R_AVR32_##r_type, 0, 0, 0, 0, size } mgl@1371: + mgl@1371: +const struct relax_state relax_state[RS_MAX] = { mgl@1371: + RS(NONE, NONE, 0), mgl@1371: + RS(ALIGN, ALIGN, 0), mgl@1371: + RS(CPENT, 32_CPENT, 4), mgl@1371: + mgl@1371: + RG(PIC_CALL, PIC_RCALL1, PIC_MCALL, NONE, GOTCALL, PIC_MOV2, 10), mgl@1371: + RG(PIC_MCALL, PIC_RCALL1, NONE, PIC_CALL, GOT18SW, PIC_MCALL, 4), mgl@1371: + RP(PIC_RCALL2, NONE, PIC_RCALL1, PIC_MCALL, 22H_PCREL, RCALL2, 4), mgl@1371: + RP(PIC_RCALL1, NONE, NONE, PIC_RCALL2, 11H_PCREL, RCALL1, 2), mgl@1371: + mgl@1371: + RG(PIC_LDA, PIC_SUB5, PIC_LDW4, NONE, LDA_GOT, PIC_MOV2, 8), mgl@1371: + RG(PIC_LDW4, PIC_SUB5, PIC_LDW3, PIC_LDA, GOT16S, PIC_LDW4, 4), mgl@1371: + RG(PIC_LDW3, PIC_SUB5, NONE, PIC_LDW4, GOT7UW, PIC_LDW3, 2), mgl@1371: + RP(PIC_SUB5, NONE, NONE, PIC_LDW3, 16N_PCREL, SUB5_PC, 4), mgl@1371: + mgl@1371: + RC(NOPIC_MCALL, NOPIC_RCALL1, NONE, NONE, CPCALL, NOPIC_MCALL, 4), mgl@1371: + RP(NOPIC_RCALL2, NONE, NOPIC_RCALL1, NOPIC_MCALL, 22H_PCREL, RCALL2, 4), mgl@1371: + RP(NOPIC_RCALL1, NONE, NONE, NOPIC_RCALL2, 11H_PCREL, RCALL1, 2), mgl@1371: + mgl@1371: + RC(NOPIC_LDW4, NOPIC_MOV1, NOPIC_LDDPC, NONE, 16_CP, NOPIC_LDW4, 4), mgl@1371: + RC(NOPIC_LDDPC, NOPIC_MOV1, NONE, NOPIC_LDW4, 9W_CP, LDDPC, 2), mgl@1371: + RP(NOPIC_SUB5, NOPIC_MOV1, NONE, NOPIC_LDDPC, 16N_PCREL, SUB5_PC, 4), mgl@1371: + RD(NOPIC_MOV2, NONE, NOPIC_MOV1, NOPIC_SUB5, 21S, NOPIC_MOV2, 4), mgl@1371: + RD(NOPIC_MOV1, NONE, NONE, NOPIC_MOV2, 8S, NOPIC_MOV1, 2), mgl@1371: + mgl@1371: + RP(RCALL2, NONE, RCALL1, NONE, 22H_PCREL, RCALL2, 4), mgl@1371: + RP(RCALL1, NONE, NONE, RCALL2, 11H_PCREL, RCALL1, 2), mgl@1371: + RP(BRC2, NONE, BRC1, NONE, 22H_PCREL, BRC2, 4), mgl@1371: + RP(BRC1, NONE, NONE, BRC2, 9H_PCREL, BRC1, 2), mgl@1371: + RP(BRAL, NONE, RJMP, NONE, 22H_PCREL, BRAL, 4), mgl@1371: + RP(RJMP, NONE, NONE, BRAL, 11H_PCREL, RJMP, 2), mgl@1371: +}; mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_new_section_hook(bfd *abfd, asection *sec) mgl@1371: +{ mgl@1371: + struct avr32_section_data *sdata; mgl@1371: + mgl@1371: + sdata = bfd_zalloc(abfd, sizeof(struct avr32_section_data)); mgl@1371: + if (!sdata) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + sec->used_by_bfd = sdata; mgl@1371: + return _bfd_elf_new_section_hook(abfd, sec); mgl@1371: +} mgl@1371: + mgl@1371: +static struct avr32_relax_data * mgl@1371: +avr32_relax_data(asection *sec) mgl@1371: +{ mgl@1371: + struct avr32_section_data *sdata; mgl@1371: + mgl@1371: + BFD_ASSERT(sec->used_by_bfd); mgl@1371: + mgl@1371: + sdata = (struct avr32_section_data *)elf_section_data(sec); mgl@1371: + return &sdata->relax_data; mgl@1371: +} mgl@1371: + mgl@1371: + /* Link-time relaxation */ mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_relax_section(bfd *abfd, asection *sec, mgl@1371: + struct bfd_link_info *info, bfd_boolean *again); mgl@1371: + mgl@1371: +enum relax_pass_id { mgl@1371: + RELAX_PASS_SIZE_FRAGS, mgl@1371: + RELAX_PASS_MOVE_DATA, mgl@1371: +}; mgl@1371: + mgl@1371: +/* Stolen from the xtensa port */ mgl@1371: +static int mgl@1371: +internal_reloc_compare (const void *ap, const void *bp) mgl@1371: +{ mgl@1371: + const Elf_Internal_Rela *a = (const Elf_Internal_Rela *) ap; mgl@1371: + const Elf_Internal_Rela *b = (const Elf_Internal_Rela *) bp; mgl@1371: + mgl@1371: + if (a->r_offset != b->r_offset) mgl@1371: + return (a->r_offset - b->r_offset); mgl@1371: + mgl@1371: + /* We don't need to sort on these criteria for correctness, mgl@1371: + but enforcing a more strict ordering prevents unstable qsort mgl@1371: + from behaving differently with different implementations. mgl@1371: + Without the code below we get correct but different results mgl@1371: + on Solaris 2.7 and 2.8. We would like to always produce the mgl@1371: + same results no matter the host. */ mgl@1371: + mgl@1371: + if (a->r_info != b->r_info) mgl@1371: + return (a->r_info - b->r_info); mgl@1371: + mgl@1371: + return (a->r_addend - b->r_addend); mgl@1371: +} mgl@1371: + mgl@1371: +static enum relax_state_id mgl@1371: +get_pcrel22_relax_state(bfd *abfd, asection *sec, struct bfd_link_info *info, mgl@1371: + const Elf_Internal_Rela *rela) mgl@1371: +{ mgl@1371: + bfd_byte *contents; mgl@1371: + bfd_vma insn; mgl@1371: + enum relax_state_id rs = RS_NONE; mgl@1371: + mgl@1371: + contents = retrieve_contents(abfd, sec, info->keep_memory); mgl@1371: + if (!contents) mgl@1371: + return RS_ERROR; mgl@1371: + mgl@1371: + insn = bfd_get_32(abfd, contents + rela->r_offset); mgl@1371: + if ((insn & RCALL2_MASK) == RCALL2_OPCODE) mgl@1371: + rs = RS_RCALL2; mgl@1371: + else if ((insn & BRAL_MASK) == BRAL_OPCODE) mgl@1371: + /* Optimizing bral -> rjmp gets us into all kinds of mgl@1371: + trouble with jump tables. Better not do it. */ mgl@1371: + rs = RS_NONE; mgl@1371: + else if ((insn & BRC2_MASK) == BRC2_OPCODE) mgl@1371: + rs = RS_BRC2; mgl@1371: + mgl@1371: + release_contents(sec, contents); mgl@1371: + mgl@1371: + return rs; mgl@1371: +} mgl@1371: + mgl@1371: +static enum relax_state_id mgl@1371: +get_initial_relax_state(bfd *abfd, asection *sec, struct bfd_link_info *info, mgl@1371: + const Elf_Internal_Rela *rela) mgl@1371: +{ mgl@1371: + switch (ELF_R_TYPE(rela->r_info)) mgl@1371: + { mgl@1371: + case R_AVR32_GOTCALL: mgl@1371: + return RS_PIC_CALL; mgl@1371: + case R_AVR32_GOT18SW: mgl@1371: + return RS_PIC_MCALL; mgl@1371: + case R_AVR32_LDA_GOT: mgl@1371: + return RS_PIC_LDA; mgl@1371: + case R_AVR32_GOT16S: mgl@1371: + return RS_PIC_LDW4; mgl@1371: + case R_AVR32_CPCALL: mgl@1371: + return RS_NOPIC_MCALL; mgl@1371: + case R_AVR32_16_CP: mgl@1371: + return RS_NOPIC_LDW4; mgl@1371: + case R_AVR32_9W_CP: mgl@1371: + return RS_NOPIC_LDDPC; mgl@1371: + case R_AVR32_ALIGN: mgl@1371: + return RS_ALIGN; mgl@1371: + case R_AVR32_32_CPENT: mgl@1371: + return RS_CPENT; mgl@1371: + case R_AVR32_22H_PCREL: mgl@1371: + return get_pcrel22_relax_state(abfd, sec, info, rela); mgl@1371: + case R_AVR32_9H_PCREL: mgl@1371: + return RS_BRC1; mgl@1371: + default: mgl@1371: + return RS_NONE; mgl@1371: + } mgl@1371: +} mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +reloc_is_cpool_ref(const Elf_Internal_Rela *rela) mgl@1371: +{ mgl@1371: + switch (ELF_R_TYPE(rela->r_info)) mgl@1371: + { mgl@1371: + case R_AVR32_CPCALL: mgl@1371: + case R_AVR32_16_CP: mgl@1371: + case R_AVR32_9W_CP: mgl@1371: + return TRUE; mgl@1371: + default: mgl@1371: + return FALSE; mgl@1371: + } mgl@1371: +} mgl@1371: + mgl@1371: +static struct fragment * mgl@1371: +new_frag(bfd *abfd ATTRIBUTE_UNUSED, asection *sec, mgl@1371: + struct avr32_relax_data *rd, enum relax_state_id state, mgl@1371: + Elf_Internal_Rela *rela) mgl@1371: +{ mgl@1371: + struct fragment *frag; mgl@1371: + bfd_size_type r_size; mgl@1371: + bfd_vma r_offset; mgl@1371: + unsigned int i = rd->frag_count; mgl@1371: + mgl@1371: + BFD_ASSERT(state >= RS_NONE && state < RS_MAX); mgl@1371: + mgl@1371: + rd->frag_count++; mgl@1371: + frag = bfd_realloc(rd->frag, sizeof(struct fragment) * rd->frag_count); mgl@1371: + if (!frag) mgl@1371: + return NULL; mgl@1371: + rd->frag = frag; mgl@1371: + mgl@1371: + frag += i; mgl@1371: + memset(frag, 0, sizeof(struct fragment)); mgl@1371: + mgl@1371: + if (state == RS_ALIGN) mgl@1371: + r_size = (((rela->r_offset + (1 << rela->r_addend) - 1) mgl@1371: + & ~((1 << rela->r_addend) - 1)) - rela->r_offset); mgl@1371: + else mgl@1371: + r_size = relax_state[state].size; mgl@1371: + mgl@1371: + if (rela) mgl@1371: + r_offset = rela->r_offset; mgl@1371: + else mgl@1371: + r_offset = sec->size; mgl@1371: + mgl@1371: + if (i == 0) mgl@1371: + { mgl@1371: + frag->offset = 0; mgl@1371: + frag->size = r_offset + r_size; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + frag->offset = rd->frag[i - 1].offset + rd->frag[i - 1].size; mgl@1371: + frag->size = r_offset + r_size - frag->offset; mgl@1371: + } mgl@1371: + mgl@1371: + if (state != RS_CPENT) mgl@1371: + /* Make sure we don't discard this frag */ mgl@1371: + frag->refcount = 1; mgl@1371: + mgl@1371: + frag->initial_state = frag->state = state; mgl@1371: + frag->rela = rela; mgl@1371: + mgl@1371: + return frag; mgl@1371: +} mgl@1371: + mgl@1371: +static struct fragment * mgl@1371: +find_frag(asection *sec, bfd_vma offset) mgl@1371: +{ mgl@1371: + struct fragment *first, *last; mgl@1371: + struct avr32_relax_data *rd = avr32_relax_data(sec); mgl@1371: + mgl@1371: + if (rd->frag_count == 0) mgl@1371: + return NULL; mgl@1371: + mgl@1371: + first = &rd->frag[0]; mgl@1371: + last = &rd->frag[rd->frag_count - 1]; mgl@1371: + mgl@1371: + /* This may be a reloc referencing the end of a section. The last mgl@1371: + frag will never have a reloc associated with it, so its size will mgl@1371: + never change, thus the offset adjustment of the last frag will mgl@1371: + always be the same as the offset adjustment of the end of the mgl@1371: + section. */ mgl@1371: + if (offset == sec->size) mgl@1371: + { mgl@1371: + BFD_ASSERT(last->offset + last->size == sec->size); mgl@1371: + BFD_ASSERT(!last->rela); mgl@1371: + return last; mgl@1371: + } mgl@1371: + mgl@1371: + while (first <= last) mgl@1371: + { mgl@1371: + struct fragment *mid; mgl@1371: + mgl@1371: + mid = (last - first) / 2 + first; mgl@1371: + if ((mid->offset + mid->size) <= offset) mgl@1371: + first = mid + 1; mgl@1371: + else if (mid->offset > offset) mgl@1371: + last = mid - 1; mgl@1371: + else mgl@1371: + return mid; mgl@1371: + } mgl@1371: + mgl@1371: + return NULL; mgl@1371: +} mgl@1371: + mgl@1371: +/* Look through all relocs in a section and determine if any relocs mgl@1371: + may be affected by relaxation in other sections. If so, allocate mgl@1371: + an array of additional relocation data which links the affected mgl@1371: + relocations to the frag(s) where the relaxation may occur. mgl@1371: + mgl@1371: + This function also links cpool references to cpool entries and mgl@1371: + increments the refcount of the latter when this happens. */ mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +allocate_reloc_data(bfd *abfd, asection *sec, Elf_Internal_Rela *relocs, mgl@1371: + struct bfd_link_info *info) mgl@1371: +{ mgl@1371: + Elf_Internal_Shdr *symtab_hdr; mgl@1371: + Elf_Internal_Sym *isymbuf = NULL; mgl@1371: + struct avr32_relax_data *rd; mgl@1371: + unsigned int i; mgl@1371: + bfd_boolean ret = FALSE; mgl@1371: + mgl@1371: + symtab_hdr = &elf_tdata(abfd)->symtab_hdr; mgl@1371: + rd = avr32_relax_data(sec); mgl@1371: + mgl@1371: + RDBG("%s<%s>: allocate_reloc_data\n", abfd->filename, sec->name); mgl@1371: + mgl@1371: + for (i = 0; i < sec->reloc_count; i++) mgl@1371: + { mgl@1371: + Elf_Internal_Rela *rel = &relocs[i]; mgl@1371: + asection *sym_sec; mgl@1371: + unsigned long r_symndx; mgl@1371: + bfd_vma sym_value; mgl@1371: + mgl@1371: + if (!rel->r_addend && ELF_R_TYPE(rel->r_info) != R_AVR32_DIFF32 mgl@1371: + && !reloc_is_cpool_ref(rel)) mgl@1371: + continue; mgl@1371: + mgl@1371: + r_symndx = ELF_R_SYM(rel->r_info); mgl@1371: + mgl@1371: + if (r_symndx < symtab_hdr->sh_info) mgl@1371: + { mgl@1371: + Elf_Internal_Sym *isym; mgl@1371: + mgl@1371: + if (!isymbuf) mgl@1371: + isymbuf = retrieve_local_syms(abfd, info->keep_memory); mgl@1371: + if (!isymbuf) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + isym = &isymbuf[r_symndx]; mgl@1371: + sym_sec = bfd_section_from_elf_index(abfd, isym->st_shndx); mgl@1371: + sym_value = isym->st_value; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + struct elf_link_hash_entry *h; mgl@1371: + mgl@1371: + h = elf_sym_hashes(abfd)[r_symndx - symtab_hdr->sh_info]; mgl@1371: + mgl@1371: + while (h->root.type == bfd_link_hash_indirect mgl@1371: + || h->root.type == bfd_link_hash_warning) mgl@1371: + h = (struct elf_link_hash_entry *)h->root.u.i.link; mgl@1371: + mgl@1371: + if (h->root.type != bfd_link_hash_defined mgl@1371: + && h->root.type != bfd_link_hash_defweak) mgl@1371: + continue; mgl@1371: + mgl@1371: + sym_sec = h->root.u.def.section; mgl@1371: + sym_value = h->root.u.def.value; mgl@1371: + } mgl@1371: + mgl@1371: + if (sym_sec && avr32_relax_data(sym_sec)->is_relaxable) mgl@1371: + { mgl@1371: + bfd_size_type size; mgl@1371: + struct fragment *frag; mgl@1371: + mgl@1371: + if (!rd->reloc_data) mgl@1371: + { mgl@1371: + size = sizeof(struct avr32_reloc_data) * sec->reloc_count; mgl@1371: + rd->reloc_data = bfd_zalloc(abfd, size); mgl@1371: + if (!rd->reloc_data) mgl@1371: + goto out; mgl@1371: + } mgl@1371: + mgl@1371: + RDBG("[%3d] 0x%04lx: target: 0x%lx + 0x%lx", mgl@1371: + i, rel->r_offset, sym_value, rel->r_addend); mgl@1371: + mgl@1371: + frag = find_frag(sym_sec, sym_value + rel->r_addend); mgl@1371: + BFD_ASSERT(frag); mgl@1371: + rd->reloc_data[i].add_frag = frag; mgl@1371: + mgl@1371: + RDBG(" -> %s<%s>:%04lx\n", sym_sec->owner->filename, sym_sec->name, mgl@1371: + frag->rela ? frag->rela->r_offset : sym_sec->size); mgl@1371: + mgl@1371: + if (reloc_is_cpool_ref(rel)) mgl@1371: + { mgl@1371: + BFD_ASSERT(ELF_R_TYPE(frag->rela->r_info) == R_AVR32_32_CPENT); mgl@1371: + frag->refcount++; mgl@1371: + } mgl@1371: + mgl@1371: + if (ELF_R_TYPE(rel->r_info) == R_AVR32_DIFF32) mgl@1371: + { mgl@1371: + bfd_byte *contents; mgl@1371: + bfd_signed_vma diff; mgl@1371: + mgl@1371: + contents = retrieve_contents(abfd, sec, info->keep_memory); mgl@1371: + if (!contents) mgl@1371: + goto out; mgl@1371: + mgl@1371: + diff = bfd_get_signed_32(abfd, contents + rel->r_offset); mgl@1371: + frag = find_frag(sym_sec, sym_value + rel->r_addend + diff); mgl@1371: + BFD_ASSERT(frag); mgl@1371: + rd->reloc_data[i].sub_frag = frag; mgl@1371: + mgl@1371: + release_contents(sec, contents); mgl@1371: + } mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + ret = TRUE; mgl@1371: + mgl@1371: + out: mgl@1371: + release_local_syms(abfd, isymbuf); mgl@1371: + return ret; mgl@1371: +} mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +global_sym_set_frag(struct elf_avr32_link_hash_entry *havr, mgl@1371: + struct bfd_link_info *info ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + struct fragment *frag; mgl@1371: + asection *sec; mgl@1371: + mgl@1371: + if (havr->root.root.type != bfd_link_hash_defined mgl@1371: + && havr->root.root.type != bfd_link_hash_defweak) mgl@1371: + return TRUE; mgl@1371: + mgl@1371: + sec = havr->root.root.u.def.section; mgl@1371: + if (bfd_is_const_section(sec) mgl@1371: + || !avr32_relax_data(sec)->is_relaxable) mgl@1371: + return TRUE; mgl@1371: + mgl@1371: + frag = find_frag(sec, havr->root.root.u.def.value); mgl@1371: + if (!frag) mgl@1371: + { mgl@1371: + unsigned int i; mgl@1371: + struct avr32_relax_data *rd = avr32_relax_data(sec); mgl@1371: + mgl@1371: + RDBG("In %s: No frag for %s <%s+%lu> (limit %lu)\n", mgl@1371: + sec->owner->filename, havr->root.root.root.string, mgl@1371: + sec->name, havr->root.root.u.def.value, sec->size); mgl@1371: + for (i = 0; i < rd->frag_count; i++) mgl@1371: + RDBG(" %8lu - %8lu\n", rd->frag[i].offset, mgl@1371: + rd->frag[i].offset + rd->frag[i].size); mgl@1371: + } mgl@1371: + BFD_ASSERT(frag); mgl@1371: + mgl@1371: + havr->sym_frag = frag; mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +analyze_relocations(struct bfd_link_info *info) mgl@1371: +{ mgl@1371: + bfd *abfd; mgl@1371: + asection *sec; mgl@1371: + mgl@1371: + /* Divide all relaxable sections into fragments */ mgl@1371: + for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) mgl@1371: + { mgl@1371: + if (!(elf_elfheader(abfd)->e_flags & EF_AVR32_LINKRELAX)) mgl@1371: + { mgl@1371: + if (!(*info->callbacks->warning) mgl@1371: + (info, _("input is not relaxable"), NULL, abfd, NULL, 0)) mgl@1371: + return FALSE; mgl@1371: + continue; mgl@1371: + } mgl@1371: + mgl@1371: + for (sec = abfd->sections; sec; sec = sec->next) mgl@1371: + { mgl@1371: + struct avr32_relax_data *rd; mgl@1371: + struct fragment *frag; mgl@1371: + Elf_Internal_Rela *relocs; mgl@1371: + unsigned int i; mgl@1371: + bfd_boolean ret = TRUE; mgl@1371: + mgl@1371: + if (!(sec->flags & SEC_RELOC) || sec->reloc_count == 0) mgl@1371: + continue; mgl@1371: + mgl@1371: + rd = avr32_relax_data(sec); mgl@1371: + mgl@1371: + relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); mgl@1371: + if (!relocs) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + qsort(relocs, sec->reloc_count, sizeof(Elf_Internal_Rela), mgl@1371: + internal_reloc_compare); mgl@1371: + mgl@1371: + for (i = 0; i < sec->reloc_count; i++) mgl@1371: + { mgl@1371: + enum relax_state_id state; mgl@1371: + mgl@1371: + ret = FALSE; mgl@1371: + state = get_initial_relax_state(abfd, sec, info, &relocs[i]); mgl@1371: + if (state == RS_ERROR) mgl@1371: + break; mgl@1371: + mgl@1371: + if (state) mgl@1371: + { mgl@1371: + frag = new_frag(abfd, sec, rd, state, &relocs[i]); mgl@1371: + if (!frag) mgl@1371: + break; mgl@1371: + mgl@1371: + pin_internal_relocs(sec, relocs); mgl@1371: + rd->is_relaxable = TRUE; mgl@1371: + } mgl@1371: + mgl@1371: + ret = TRUE; mgl@1371: + } mgl@1371: + mgl@1371: + release_internal_relocs(sec, relocs); mgl@1371: + if (!ret) mgl@1371: + return ret; mgl@1371: + mgl@1371: + if (rd->is_relaxable) mgl@1371: + { mgl@1371: + frag = new_frag(abfd, sec, rd, RS_NONE, NULL); mgl@1371: + if (!frag) mgl@1371: + return FALSE; mgl@1371: + } mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + /* Link each global symbol to the fragment where it's defined. */ mgl@1371: + elf_link_hash_traverse(elf_hash_table(info), global_sym_set_frag, info); mgl@1371: + mgl@1371: + /* Do the same for local symbols. */ mgl@1371: + for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) mgl@1371: + { mgl@1371: + Elf_Internal_Sym *isymbuf, *isym; mgl@1371: + struct fragment **local_sym_frag; mgl@1371: + unsigned int i, sym_count; mgl@1371: + mgl@1371: + sym_count = elf_tdata(abfd)->symtab_hdr.sh_info; mgl@1371: + if (sym_count == 0) mgl@1371: + continue; mgl@1371: + mgl@1371: + local_sym_frag = bfd_zalloc(abfd, sym_count * sizeof(struct fragment *)); mgl@1371: + if (!local_sym_frag) mgl@1371: + return FALSE; mgl@1371: + elf_tdata(abfd)->local_sym_frag = local_sym_frag; mgl@1371: + mgl@1371: + isymbuf = retrieve_local_syms(abfd, info->keep_memory); mgl@1371: + if (!isymbuf) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + for (i = 0; i < sym_count; i++) mgl@1371: + { mgl@1371: + struct avr32_relax_data *rd; mgl@1371: + struct fragment *frag; mgl@1371: + asection *sec; mgl@1371: + mgl@1371: + isym = &isymbuf[i]; mgl@1371: + mgl@1371: + sec = bfd_section_from_elf_index(abfd, isym->st_shndx); mgl@1371: + if (!sec) mgl@1371: + continue; mgl@1371: + mgl@1371: + rd = avr32_relax_data(sec); mgl@1371: + if (!rd->is_relaxable) mgl@1371: + continue; mgl@1371: + mgl@1371: + frag = find_frag(sec, isym->st_value); mgl@1371: + BFD_ASSERT(frag); mgl@1371: + mgl@1371: + local_sym_frag[i] = frag; mgl@1371: + } mgl@1371: + mgl@1371: + release_local_syms(abfd, isymbuf); mgl@1371: + } mgl@1371: + mgl@1371: + /* And again for relocs with addends and constant pool references */ mgl@1371: + for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) mgl@1371: + for (sec = abfd->sections; sec; sec = sec->next) mgl@1371: + { mgl@1371: + Elf_Internal_Rela *relocs; mgl@1371: + bfd_boolean ret; mgl@1371: + mgl@1371: + if (!(sec->flags & SEC_RELOC) || sec->reloc_count == 0) mgl@1371: + continue; mgl@1371: + mgl@1371: + relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); mgl@1371: + if (!relocs) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + ret = allocate_reloc_data(abfd, sec, relocs, info); mgl@1371: + mgl@1371: + release_internal_relocs(sec, relocs); mgl@1371: + if (ret == FALSE) mgl@1371: + return ret; mgl@1371: + } mgl@1371: + mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +rs_is_good_enough(const struct relax_state *rs, struct fragment *frag, mgl@1371: + bfd_vma symval, bfd_vma addr, struct got_entry *got, mgl@1371: + struct avr32_reloc_data *ind_data, mgl@1371: + bfd_signed_vma offset_adjust) mgl@1371: +{ mgl@1371: + bfd_signed_vma target = 0; mgl@1371: + mgl@1371: + switch (rs->reftype) mgl@1371: + { mgl@1371: + case REF_ABSOLUTE: mgl@1371: + target = symval; mgl@1371: + break; mgl@1371: + case REF_PCREL: mgl@1371: + target = symval - addr; mgl@1371: + break; mgl@1371: + case REF_CPOOL: mgl@1371: + /* cpool frags are always in the same section and always after mgl@1371: + all frags referring to it. So it's always correct to add in mgl@1371: + offset_adjust here. */ mgl@1371: + target = (ind_data->add_frag->offset + ind_data->add_frag->offset_adjust mgl@1371: + + offset_adjust - frag->offset - frag->offset_adjust); mgl@1371: + break; mgl@1371: + case REF_GOT: mgl@1371: + target = got->offset; mgl@1371: + break; mgl@1371: + default: mgl@1371: + abort(); mgl@1371: + } mgl@1371: + mgl@1371: + if (target >= rs->range_min && target <= rs->range_max) mgl@1371: + return TRUE; mgl@1371: + else mgl@1371: + return FALSE; mgl@1371: +} mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_size_frags(bfd *abfd, asection *sec, struct bfd_link_info *info) mgl@1371: +{ mgl@1371: + struct elf_avr32_link_hash_table *htab; mgl@1371: + struct avr32_relax_data *rd; mgl@1371: + Elf_Internal_Shdr *symtab_hdr; mgl@1371: + Elf_Internal_Rela *relocs = NULL; mgl@1371: + Elf_Internal_Sym *isymbuf = NULL; mgl@1371: + struct got_entry **local_got_ents; mgl@1371: + struct fragment **local_sym_frag; mgl@1371: + bfd_boolean ret = FALSE; mgl@1371: + bfd_signed_vma delta = 0; mgl@1371: + unsigned int i; mgl@1371: + mgl@1371: + htab = avr32_elf_hash_table(info); mgl@1371: + rd = avr32_relax_data(sec); mgl@1371: + mgl@1371: + if (sec == htab->sgot) mgl@1371: + { mgl@1371: + RDBG("Relaxing GOT section (vma: 0x%lx)\n", mgl@1371: + sec->output_section->vma + sec->output_offset); mgl@1371: + if (assign_got_offsets(htab)) mgl@1371: + htab->repeat_pass = TRUE; mgl@1371: + return TRUE; mgl@1371: + } mgl@1371: + mgl@1371: + if (!rd->is_relaxable) mgl@1371: + return TRUE; mgl@1371: + mgl@1371: + if (!sec->rawsize) mgl@1371: + sec->rawsize = sec->size; mgl@1371: + mgl@1371: + symtab_hdr = &elf_tdata(abfd)->symtab_hdr; mgl@1371: + relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); mgl@1371: + if (!relocs) mgl@1371: + goto out; mgl@1371: + mgl@1371: + isymbuf = retrieve_local_syms(abfd, info->keep_memory); mgl@1371: + if (!isymbuf) mgl@1371: + goto out; mgl@1371: + mgl@1371: + local_got_ents = elf_local_got_ents(abfd); mgl@1371: + local_sym_frag = elf_tdata(abfd)->local_sym_frag; mgl@1371: + mgl@1371: + RDBG("size_frags: %s<%s>\n vma: 0x%08lx, size: 0x%08lx\n", mgl@1371: + abfd->filename, sec->name, mgl@1371: + sec->output_section->vma + sec->output_offset, sec->size); mgl@1371: + mgl@1371: + for (i = 0; i < rd->frag_count; i++) mgl@1371: + { mgl@1371: + struct fragment *frag = &rd->frag[i]; mgl@1371: + struct avr32_reloc_data *r_data = NULL, *ind_data = NULL; mgl@1371: + const struct relax_state *state, *next_state; mgl@1371: + struct fragment *target_frag = NULL; mgl@1371: + asection *sym_sec = NULL; mgl@1371: + Elf_Internal_Rela *rela; mgl@1371: + struct got_entry *got; mgl@1371: + bfd_vma symval, r_offset, addend, addr; mgl@1371: + bfd_signed_vma size_adjust = 0, distance; mgl@1371: + unsigned long r_symndx; mgl@1371: + bfd_boolean defined = TRUE, dynamic = FALSE; mgl@1371: + unsigned char sym_type; mgl@1371: + mgl@1371: + frag->offset_adjust += delta; mgl@1371: + state = next_state = &relax_state[frag->state]; mgl@1371: + rela = frag->rela; mgl@1371: + mgl@1371: + BFD_ASSERT(state->id == frag->state); mgl@1371: + mgl@1371: + RDBG(" 0x%04lx%c%d: %s [size %ld]", rela ? rela->r_offset : sec->rawsize, mgl@1371: + (frag->offset_adjust < 0)?'-':'+', mgl@1371: + abs(frag->offset_adjust), state->name, state->size); mgl@1371: + mgl@1371: + if (!rela) mgl@1371: + { mgl@1371: + RDBG(": no reloc, ignoring\n"); mgl@1371: + continue; mgl@1371: + } mgl@1371: + mgl@1371: + BFD_ASSERT((unsigned int)(rela - relocs) < sec->reloc_count); mgl@1371: + BFD_ASSERT(state != RS_NONE); mgl@1371: + mgl@1371: + r_offset = rela->r_offset + frag->offset_adjust; mgl@1371: + addr = sec->output_section->vma + sec->output_offset + r_offset; mgl@1371: + mgl@1371: + switch (frag->state) mgl@1371: + { mgl@1371: + case RS_ALIGN: mgl@1371: + size_adjust = ((addr + (1 << rela->r_addend) - 1) mgl@1371: + & ~((1 << rela->r_addend) - 1)); mgl@1371: + size_adjust -= (sec->output_section->vma + sec->output_offset mgl@1371: + + frag->offset + frag->offset_adjust mgl@1371: + + frag->size + frag->size_adjust); mgl@1371: + mgl@1371: + RDBG(": adjusting size %lu -> %lu\n", frag->size + frag->size_adjust, mgl@1371: + frag->size + frag->size_adjust + size_adjust); mgl@1371: + break; mgl@1371: + mgl@1371: + case RS_CPENT: mgl@1371: + if (frag->refcount == 0 && frag->size_adjust == 0) mgl@1371: + { mgl@1371: + RDBG(": discarding frag\n"); mgl@1371: + size_adjust = -4; mgl@1371: + } mgl@1371: + else if (frag->refcount > 0 && frag->size_adjust < 0) mgl@1371: + { mgl@1371: + RDBG(": un-discarding frag\n"); mgl@1371: + size_adjust = 4; mgl@1371: + } mgl@1371: + break; mgl@1371: + mgl@1371: + default: mgl@1371: + if (rd->reloc_data) mgl@1371: + r_data = &rd->reloc_data[frag->rela - relocs]; mgl@1371: + mgl@1371: + /* If this is a cpool reference, we want the symbol that the mgl@1371: + cpool entry refers to, not the symbol for the cpool entry mgl@1371: + itself, as we already know what frag it's in. */ mgl@1371: + if (relax_state[frag->initial_state].reftype == REF_CPOOL) mgl@1371: + { mgl@1371: + Elf_Internal_Rela *irela = r_data->add_frag->rela; mgl@1371: + mgl@1371: + r_symndx = ELF_R_SYM(irela->r_info); mgl@1371: + addend = irela->r_addend; mgl@1371: + mgl@1371: + /* The constant pool must be in the same section as the mgl@1371: + reloc referring to it. */ mgl@1371: + BFD_ASSERT((unsigned long)(irela - relocs) < sec->reloc_count); mgl@1371: + mgl@1371: + ind_data = r_data; mgl@1371: + r_data = &rd->reloc_data[irela - relocs]; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + r_symndx = ELF_R_SYM(rela->r_info); mgl@1371: + addend = rela->r_addend; mgl@1371: + } mgl@1371: + mgl@1371: + /* Get the value of the symbol referred to by the reloc. */ mgl@1371: + if (r_symndx < symtab_hdr->sh_info) mgl@1371: + { mgl@1371: + Elf_Internal_Sym *isym; mgl@1371: + mgl@1371: + isym = isymbuf + r_symndx; mgl@1371: + symval = 0; mgl@1371: + mgl@1371: + RDBG(" local sym %lu: ", r_symndx); mgl@1371: + mgl@1371: + if (isym->st_shndx == SHN_UNDEF) mgl@1371: + defined = FALSE; mgl@1371: + else if (isym->st_shndx == SHN_ABS) mgl@1371: + sym_sec = bfd_abs_section_ptr; mgl@1371: + else if (isym->st_shndx == SHN_COMMON) mgl@1371: + sym_sec = bfd_com_section_ptr; mgl@1371: + else mgl@1371: + sym_sec = bfd_section_from_elf_index(abfd, isym->st_shndx); mgl@1371: + mgl@1371: + symval = isym->st_value; mgl@1371: + sym_type = ELF_ST_TYPE(isym->st_info); mgl@1371: + target_frag = local_sym_frag[r_symndx]; mgl@1371: + mgl@1371: + if (local_got_ents) mgl@1371: + got = local_got_ents[r_symndx]; mgl@1371: + else mgl@1371: + got = NULL; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + /* Global symbol */ mgl@1371: + unsigned long index; mgl@1371: + struct elf_link_hash_entry *h; mgl@1371: + struct elf_avr32_link_hash_entry *havr; mgl@1371: + mgl@1371: + index = r_symndx - symtab_hdr->sh_info; mgl@1371: + h = elf_sym_hashes(abfd)[index]; mgl@1371: + BFD_ASSERT(h != NULL); mgl@1371: + mgl@1371: + while (h->root.type == bfd_link_hash_indirect mgl@1371: + || h->root.type == bfd_link_hash_warning) mgl@1371: + h = (struct elf_link_hash_entry *)h->root.u.i.link; mgl@1371: + mgl@1371: + havr = (struct elf_avr32_link_hash_entry *)h; mgl@1371: + got = h->got.glist; mgl@1371: + mgl@1371: + symval = 0; mgl@1371: + mgl@1371: + RDBG(" %s: ", h->root.root.string); mgl@1371: + mgl@1371: + if (h->root.type != bfd_link_hash_defined mgl@1371: + && h->root.type != bfd_link_hash_defweak) mgl@1371: + { mgl@1371: + RDBG("(undef)"); mgl@1371: + defined = FALSE; mgl@1371: + } mgl@1371: + else if ((info->shared && !info->symbolic && h->dynindx != -1) mgl@1371: + || (htab->root.dynamic_sections_created mgl@1371: + && h->def_dynamic && !h->def_regular)) mgl@1371: + { mgl@1371: + RDBG("(dynamic)"); mgl@1371: + dynamic = TRUE; mgl@1371: + sym_sec = h->root.u.def.section; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + sym_sec = h->root.u.def.section; mgl@1371: + symval = h->root.u.def.value; mgl@1371: + target_frag = havr->sym_frag; mgl@1371: + } mgl@1371: + mgl@1371: + sym_type = h->type; mgl@1371: + } mgl@1371: + mgl@1371: + /* Thanks to elf32-ppc for this one. */ mgl@1371: + if (sym_sec && sym_sec->sec_info_type == ELF_INFO_TYPE_MERGE) mgl@1371: + { mgl@1371: + /* At this stage in linking, no SEC_MERGE symbol has been mgl@1371: + adjusted, so all references to such symbols need to be mgl@1371: + passed through _bfd_merged_section_offset. (Later, in mgl@1371: + relocate_section, all SEC_MERGE symbols *except* for mgl@1371: + section symbols have been adjusted.) mgl@1371: + mgl@1371: + SEC_MERGE sections are not relaxed by us, as they mgl@1371: + shouldn't contain any code. */ mgl@1371: + mgl@1371: + BFD_ASSERT(!target_frag && !(r_data && r_data->add_frag)); mgl@1371: + mgl@1371: + /* gas may reduce relocations against symbols in SEC_MERGE mgl@1371: + sections to a relocation against the section symbol when mgl@1371: + the original addend was zero. When the reloc is against mgl@1371: + a section symbol we should include the addend in the mgl@1371: + offset passed to _bfd_merged_section_offset, since the mgl@1371: + location of interest is the original symbol. On the mgl@1371: + other hand, an access to "sym+addend" where "sym" is not mgl@1371: + a section symbol should not include the addend; Such an mgl@1371: + access is presumed to be an offset from "sym"; The mgl@1371: + location of interest is just "sym". */ mgl@1371: + RDBG("\n MERGE: %s: 0x%lx+0x%lx+0x%lx -> ", mgl@1371: + (sym_type == STT_SECTION)?"section":"not section", mgl@1371: + sym_sec->output_section->vma + sym_sec->output_offset, mgl@1371: + symval, addend); mgl@1371: + mgl@1371: + if (sym_type == STT_SECTION) mgl@1371: + symval += addend; mgl@1371: + mgl@1371: + symval = (_bfd_merged_section_offset mgl@1371: + (abfd, &sym_sec, mgl@1371: + elf_section_data(sym_sec)->sec_info, symval)); mgl@1371: + mgl@1371: + if (sym_type != STT_SECTION) mgl@1371: + symval += addend; mgl@1371: + } mgl@1371: + else mgl@1371: + symval += addend; mgl@1371: + mgl@1371: + if (defined && !dynamic) mgl@1371: + { mgl@1371: + RDBG("0x%lx+0x%lx", mgl@1371: + sym_sec->output_section->vma + sym_sec->output_offset, mgl@1371: + symval); mgl@1371: + symval += sym_sec->output_section->vma + sym_sec->output_offset; mgl@1371: + } mgl@1371: + mgl@1371: + if (r_data && r_data->add_frag) mgl@1371: + /* If the add_frag pointer is set, it means that this reloc mgl@1371: + has an addend that may be affected by relaxation. */ mgl@1371: + target_frag = r_data->add_frag; mgl@1371: + mgl@1371: + if (target_frag) mgl@1371: + { mgl@1371: + symval += target_frag->offset_adjust; mgl@1371: + mgl@1371: + /* If target_frag comes after this frag in the same mgl@1371: + section, we should assume that it will be moved by mgl@1371: + the same amount we are. */ mgl@1371: + if ((target_frag - rd->frag) < (int)rd->frag_count mgl@1371: + && target_frag > frag) mgl@1371: + symval += delta; mgl@1371: + } mgl@1371: + mgl@1371: + distance = symval - addr; mgl@1371: + mgl@1371: + /* First, try to make a direct reference. If the symbol is mgl@1371: + dynamic or undefined, we must take care not to change its mgl@1371: + reference type, that is, we can't make it direct. mgl@1371: + mgl@1371: + Also, it seems like some sections may actually be resized mgl@1371: + after the relaxation code is done, so we can't really mgl@1371: + trust that our "distance" is correct. There's really no mgl@1371: + easy solution to this problem, so we'll just disallow mgl@1371: + direct references to SEC_DATA sections. mgl@1371: + mgl@1371: + Oh, and .bss isn't actually SEC_DATA, so we disallow mgl@1371: + !SEC_HAS_CONTENTS as well. */ mgl@1371: + if (!dynamic && defined mgl@1371: + && (htab->direct_data_refs mgl@1371: + || (!(sym_sec->flags & SEC_DATA) mgl@1371: + && (sym_sec->flags & SEC_HAS_CONTENTS))) mgl@1371: + && next_state->direct) mgl@1371: + { mgl@1371: + next_state = &relax_state[next_state->direct]; mgl@1371: + RDBG(" D-> %s", next_state->name); mgl@1371: + } mgl@1371: + mgl@1371: + /* Iterate backwards until we find a state that fits. */ mgl@1371: + while (next_state->prev mgl@1371: + && !rs_is_good_enough(next_state, frag, symval, addr, mgl@1371: + got, ind_data, delta)) mgl@1371: + { mgl@1371: + next_state = &relax_state[next_state->prev]; mgl@1371: + RDBG(" P-> %s", next_state->name); mgl@1371: + } mgl@1371: + mgl@1371: + /* Then try to find the best possible state. */ mgl@1371: + while (next_state->next) mgl@1371: + { mgl@1371: + const struct relax_state *candidate; mgl@1371: + mgl@1371: + candidate = &relax_state[next_state->next]; mgl@1371: + if (!rs_is_good_enough(candidate, frag, symval, addr, got, mgl@1371: + ind_data, delta)) mgl@1371: + break; mgl@1371: + mgl@1371: + next_state = candidate; mgl@1371: + RDBG(" N-> %s", next_state->name); mgl@1371: + } mgl@1371: + mgl@1371: + RDBG(" [size %ld]\n", next_state->size); mgl@1371: + mgl@1371: + BFD_ASSERT(next_state->id); mgl@1371: + BFD_ASSERT(!dynamic || next_state->reftype == REF_GOT); mgl@1371: + mgl@1371: + size_adjust = next_state->size - state->size; mgl@1371: + mgl@1371: + /* There's a theoretical possibility that shrinking one frag mgl@1371: + may cause another to grow, which may cause the first one to mgl@1371: + grow as well, and we're back where we started. Avoid this mgl@1371: + scenario by disallowing a frag that has grown to ever mgl@1371: + shrink again. */ mgl@1371: + if (state->reftype == REF_GOT && next_state->reftype != REF_GOT) mgl@1371: + { mgl@1371: + if (frag->has_grown) mgl@1371: + next_state = state; mgl@1371: + else mgl@1371: + unref_got_entry(htab, got); mgl@1371: + } mgl@1371: + else if (state->reftype != REF_GOT && next_state->reftype == REF_GOT) mgl@1371: + { mgl@1371: + ref_got_entry(htab, got); mgl@1371: + frag->has_grown = TRUE; mgl@1371: + } mgl@1371: + else if (state->reftype == REF_CPOOL mgl@1371: + && next_state->reftype != REF_CPOOL) mgl@1371: + { mgl@1371: + if (frag->has_grown) mgl@1371: + next_state = state; mgl@1371: + else mgl@1371: + ind_data->add_frag->refcount--; mgl@1371: + } mgl@1371: + else if (state->reftype != REF_CPOOL mgl@1371: + && next_state->reftype == REF_CPOOL) mgl@1371: + { mgl@1371: + ind_data->add_frag->refcount++; mgl@1371: + frag->has_grown = TRUE; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + if (frag->has_grown && size_adjust < 0) mgl@1371: + next_state = state; mgl@1371: + else if (size_adjust > 0) mgl@1371: + frag->has_grown = TRUE; mgl@1371: + } mgl@1371: + mgl@1371: + size_adjust = next_state->size - state->size; mgl@1371: + frag->state = next_state->id; mgl@1371: + mgl@1371: + break; mgl@1371: + } mgl@1371: + mgl@1371: + if (size_adjust) mgl@1371: + htab->repeat_pass = TRUE; mgl@1371: + mgl@1371: + frag->size_adjust += size_adjust; mgl@1371: + sec->size += size_adjust; mgl@1371: + delta += size_adjust; mgl@1371: + mgl@1371: + BFD_ASSERT((frag->offset + frag->offset_adjust mgl@1371: + + frag->size + frag->size_adjust) mgl@1371: + == (frag[1].offset + frag[1].offset_adjust + delta)); mgl@1371: + } mgl@1371: + mgl@1371: + ret = TRUE; mgl@1371: + mgl@1371: + out: mgl@1371: + release_local_syms(abfd, isymbuf); mgl@1371: + release_internal_relocs(sec, relocs); mgl@1371: + return ret; mgl@1371: +} mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +adjust_global_symbol(struct elf_avr32_link_hash_entry *havr, mgl@1371: + struct bfd_link_info *info ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + struct elf_link_hash_entry *h = &havr->root; mgl@1371: + mgl@1371: + if (havr->sym_frag && (h->root.type == bfd_link_hash_defined mgl@1371: + || h->root.type == bfd_link_hash_defweak)) mgl@1371: + { mgl@1371: + RDBG("adjust_global_symbol: %s 0x%08lx -> 0x%08lx\n", mgl@1371: + h->root.root.string, h->root.u.def.value, mgl@1371: + h->root.u.def.value + havr->sym_frag->offset_adjust); mgl@1371: + h->root.u.def.value += havr->sym_frag->offset_adjust; mgl@1371: + } mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +adjust_syms(struct bfd_link_info *info) mgl@1371: +{ mgl@1371: + struct elf_avr32_link_hash_table *htab; mgl@1371: + bfd *abfd; mgl@1371: + mgl@1371: + htab = avr32_elf_hash_table(info); mgl@1371: + elf_link_hash_traverse(&htab->root, adjust_global_symbol, info); mgl@1371: + mgl@1371: + for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) mgl@1371: + { mgl@1371: + Elf_Internal_Sym *isymbuf; mgl@1371: + struct fragment **local_sym_frag, *frag; mgl@1371: + unsigned int i, sym_count; mgl@1371: + mgl@1371: + sym_count = elf_tdata(abfd)->symtab_hdr.sh_info; mgl@1371: + if (sym_count == 0) mgl@1371: + continue; mgl@1371: + mgl@1371: + isymbuf = retrieve_local_syms(abfd, info->keep_memory); mgl@1371: + if (!isymbuf) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + local_sym_frag = elf_tdata(abfd)->local_sym_frag; mgl@1371: + mgl@1371: + for (i = 0; i < sym_count; i++) mgl@1371: + { mgl@1371: + frag = local_sym_frag[i]; mgl@1371: + if (frag) mgl@1371: + { mgl@1371: + RDBG("adjust_local_symbol: %s[%u] 0x%08lx -> 0x%08lx\n", mgl@1371: + abfd->filename, i, isymbuf[i].st_value, mgl@1371: + isymbuf[i].st_value + frag->offset_adjust); mgl@1371: + isymbuf[i].st_value += frag->offset_adjust; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + release_local_syms(abfd, isymbuf); mgl@1371: + } mgl@1371: + mgl@1371: + htab->symbols_adjusted = TRUE; mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +adjust_relocs(bfd *abfd, asection *sec, struct bfd_link_info *info) mgl@1371: +{ mgl@1371: + struct avr32_relax_data *rd; mgl@1371: + Elf_Internal_Rela *relocs; mgl@1371: + Elf_Internal_Shdr *symtab_hdr; mgl@1371: + unsigned int i; mgl@1371: + bfd_boolean ret = FALSE; mgl@1371: + mgl@1371: + rd = avr32_relax_data(sec); mgl@1371: + if (!rd->reloc_data) mgl@1371: + return TRUE; mgl@1371: + mgl@1371: + RDBG("adjust_relocs: %s<%s> (count: %u)\n", abfd->filename, sec->name, mgl@1371: + sec->reloc_count); mgl@1371: + mgl@1371: + relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); mgl@1371: + if (!relocs) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + symtab_hdr = &elf_tdata(abfd)->symtab_hdr; mgl@1371: + mgl@1371: + for (i = 0; i < sec->reloc_count; i++) mgl@1371: + { mgl@1371: + Elf_Internal_Rela *rela = &relocs[i]; mgl@1371: + struct avr32_reloc_data *r_data = &rd->reloc_data[i]; mgl@1371: + struct fragment *sym_frag; mgl@1371: + unsigned long r_symndx; mgl@1371: + mgl@1371: + if (r_data->add_frag) mgl@1371: + { mgl@1371: + r_symndx = ELF_R_SYM(rela->r_info); mgl@1371: + mgl@1371: + if (r_symndx < symtab_hdr->sh_info) mgl@1371: + sym_frag = elf_tdata(abfd)->local_sym_frag[r_symndx]; mgl@1371: + else mgl@1371: + { mgl@1371: + struct elf_link_hash_entry *h; mgl@1371: + mgl@1371: + h = elf_sym_hashes(abfd)[r_symndx - symtab_hdr->sh_info]; mgl@1371: + mgl@1371: + while (h->root.type == bfd_link_hash_indirect mgl@1371: + || h->root.type == bfd_link_hash_warning) mgl@1371: + h = (struct elf_link_hash_entry *)h->root.u.i.link; mgl@1371: + mgl@1371: + BFD_ASSERT(h->root.type == bfd_link_hash_defined mgl@1371: + || h->root.type == bfd_link_hash_defweak); mgl@1371: + mgl@1371: + sym_frag = ((struct elf_avr32_link_hash_entry *)h)->sym_frag; mgl@1371: + } mgl@1371: + mgl@1371: + RDBG(" addend: 0x%08lx -> 0x%08lx\n", mgl@1371: + rela->r_addend, mgl@1371: + rela->r_addend + r_data->add_frag->offset_adjust mgl@1371: + - (sym_frag ? sym_frag->offset_adjust : 0)); mgl@1371: + mgl@1371: + /* If this is against a section symbol, we won't find any mgl@1371: + sym_frag, so we'll just adjust the addend. */ mgl@1371: + rela->r_addend += r_data->add_frag->offset_adjust; mgl@1371: + if (sym_frag) mgl@1371: + rela->r_addend -= sym_frag->offset_adjust; mgl@1371: + mgl@1371: + if (r_data->sub_frag) mgl@1371: + { mgl@1371: + bfd_byte *contents; mgl@1371: + bfd_signed_vma diff; mgl@1371: + mgl@1371: + contents = retrieve_contents(abfd, sec, info->keep_memory); mgl@1371: + if (!contents) mgl@1371: + goto out; mgl@1371: + mgl@1371: + /* I realize now that sub_frag is misnamed. It's mgl@1371: + actually add_frag which is subtracted in this mgl@1371: + case... */ mgl@1371: + diff = bfd_get_signed_32(abfd, contents + rela->r_offset); mgl@1371: + diff += (r_data->sub_frag->offset_adjust mgl@1371: + - r_data->add_frag->offset_adjust); mgl@1371: + bfd_put_32(abfd, diff, contents + rela->r_offset); mgl@1371: + mgl@1371: + RDBG(" 0x%lx: DIFF32 updated: 0x%lx\n", rela->r_offset, diff); mgl@1371: + mgl@1371: + release_contents(sec, contents); mgl@1371: + } mgl@1371: + } mgl@1371: + else mgl@1371: + BFD_ASSERT(!r_data->sub_frag); mgl@1371: + } mgl@1371: + mgl@1371: + ret = TRUE; mgl@1371: + mgl@1371: + out: mgl@1371: + release_internal_relocs(sec, relocs); mgl@1371: + return ret; mgl@1371: +} mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_move_data(bfd *abfd, asection *sec, struct bfd_link_info *info) mgl@1371: +{ mgl@1371: + struct elf_avr32_link_hash_table *htab; mgl@1371: + struct avr32_relax_data *rd; mgl@1371: + struct fragment *frag, *fragend; mgl@1371: + Elf_Internal_Rela *relocs = NULL; mgl@1371: + bfd_byte *contents = NULL; mgl@1371: + unsigned int i; mgl@1371: + bfd_boolean ret = FALSE; mgl@1371: + mgl@1371: + htab = avr32_elf_hash_table(info); mgl@1371: + rd = avr32_relax_data(sec); mgl@1371: + mgl@1371: + if (!htab->symbols_adjusted) mgl@1371: + if (!adjust_syms(info)) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + if (rd->is_relaxable) mgl@1371: + { mgl@1371: + /* Resize the section first, so that we can be sure that enough mgl@1371: + memory is allocated in case the section has grown. */ mgl@1371: + if (sec->size > sec->rawsize mgl@1371: + && elf_section_data(sec)->this_hdr.contents) mgl@1371: + { mgl@1371: + /* We must not use cached data if the section has grown. */ mgl@1371: + free(elf_section_data(sec)->this_hdr.contents); mgl@1371: + elf_section_data(sec)->this_hdr.contents = NULL; mgl@1371: + } mgl@1371: + mgl@1371: + relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); mgl@1371: + if (!relocs) mgl@1371: + goto out; mgl@1371: + contents = retrieve_contents(abfd, sec, info->keep_memory); mgl@1371: + if (!contents) mgl@1371: + goto out; mgl@1371: + mgl@1371: + fragend = rd->frag + rd->frag_count; mgl@1371: + mgl@1371: + RDBG("move_data: %s<%s>: relocs=%p, contents=%p\n", mgl@1371: + abfd->filename, sec->name, relocs, contents); mgl@1371: + mgl@1371: + /* First, move the data into place. We must take care to move mgl@1371: + frags in the right order so that we don't accidentally mgl@1371: + overwrite parts of the next frag. */ mgl@1371: + for (frag = rd->frag; frag < fragend; frag++) mgl@1371: + { mgl@1371: + RDBG(" 0x%08lx%c0x%x: size 0x%lx%c0x%x\n", mgl@1371: + frag->offset, frag->offset_adjust >= 0 ? '+' : '-', mgl@1371: + abs(frag->offset_adjust), mgl@1371: + frag->size, frag->size_adjust >= 0 ? '+' : '-', mgl@1371: + abs(frag->size_adjust)); mgl@1371: + if (frag->offset_adjust > 0) mgl@1371: + { mgl@1371: + struct fragment *prev = frag - 1; mgl@1371: + struct fragment *last; mgl@1371: + mgl@1371: + for (last = frag; last < fragend && last->offset_adjust > 0; mgl@1371: + last++) ; mgl@1371: + mgl@1371: + if (last == fragend) mgl@1371: + last--; mgl@1371: + mgl@1371: + for (frag = last; frag != prev; frag--) mgl@1371: + { mgl@1371: + if (frag->offset_adjust mgl@1371: + && frag->size + frag->size_adjust > 0) mgl@1371: + { mgl@1371: + RDBG("memmove 0x%lx -> 0x%lx (size %lu)\n", mgl@1371: + frag->offset, frag->offset + frag->offset_adjust, mgl@1371: + frag->size + frag->size_adjust); mgl@1371: + memmove(contents + frag->offset + frag->offset_adjust, mgl@1371: + contents + frag->offset, mgl@1371: + frag->size + frag->size_adjust); mgl@1371: + } mgl@1371: + } mgl@1371: + frag = last; mgl@1371: + } mgl@1371: + else if (frag->offset_adjust && frag->size + frag->size_adjust > 0) mgl@1371: + { mgl@1371: + RDBG("memmove 0x%lx -> 0x%lx (size %lu)\n", mgl@1371: + frag->offset, frag->offset + frag->offset_adjust, mgl@1371: + frag->size + frag->size_adjust); mgl@1371: + memmove(contents + frag->offset + frag->offset_adjust, mgl@1371: + contents + frag->offset, mgl@1371: + frag->size + frag->size_adjust); mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + i = 0; mgl@1371: + mgl@1371: + for (frag = rd->frag; frag < fragend; frag++) mgl@1371: + { mgl@1371: + const struct relax_state *state, *istate; mgl@1371: + struct avr32_reloc_data *r_data = NULL; mgl@1371: + mgl@1371: + istate = &relax_state[frag->initial_state]; mgl@1371: + state = &relax_state[frag->state]; mgl@1371: + mgl@1371: + if (rd->reloc_data) mgl@1371: + r_data = &rd->reloc_data[frag->rela - relocs]; mgl@1371: + mgl@1371: + BFD_ASSERT((long)(frag->size + frag->size_adjust) >= 0); mgl@1371: + BFD_ASSERT(state->reftype != REF_CPOOL mgl@1371: + || r_data->add_frag->refcount > 0); mgl@1371: + mgl@1371: + if (istate->reftype == REF_CPOOL && state->reftype != REF_CPOOL) mgl@1371: + { mgl@1371: + struct fragment *ifrag; mgl@1371: + mgl@1371: + /* An indirect reference through the cpool has been mgl@1371: + converted to a direct reference. We must update the mgl@1371: + reloc to point to the symbol itself instead of the mgl@1371: + constant pool entry. The reloc type will be updated mgl@1371: + later. */ mgl@1371: + ifrag = r_data->add_frag; mgl@1371: + frag->rela->r_info = ifrag->rela->r_info; mgl@1371: + frag->rela->r_addend = ifrag->rela->r_addend; mgl@1371: + mgl@1371: + /* Copy the reloc data so the addend will be adjusted mgl@1371: + correctly later. */ mgl@1371: + *r_data = rd->reloc_data[ifrag->rela - relocs]; mgl@1371: + } mgl@1371: + mgl@1371: + /* Move all relocs covered by this frag. */ mgl@1371: + if (frag->rela) mgl@1371: + BFD_ASSERT(&relocs[i] <= frag->rela); mgl@1371: + else mgl@1371: + BFD_ASSERT((frag + 1) == fragend && frag->state == RS_NONE); mgl@1371: + mgl@1371: + if (frag == rd->frag) mgl@1371: + BFD_ASSERT(i == 0); mgl@1371: + else mgl@1371: + BFD_ASSERT(&relocs[i] > frag[-1].rela); mgl@1371: + mgl@1371: + /* If non-null, frag->rela is the last relocation in the mgl@1371: + fragment. frag->rela can only be null in the last mgl@1371: + fragment, so in that case, we'll just do the rest. */ mgl@1371: + for (; (i < sec->reloc_count mgl@1371: + && (!frag->rela || &relocs[i] <= frag->rela)); i++) mgl@1371: + { mgl@1371: + RDBG("[%4u] r_offset 0x%08lx -> 0x%08lx\n", i, relocs[i].r_offset, mgl@1371: + relocs[i].r_offset + frag->offset_adjust); mgl@1371: + relocs[i].r_offset += frag->offset_adjust; mgl@1371: + } mgl@1371: + mgl@1371: + if (frag->refcount == 0) mgl@1371: + { mgl@1371: + /* If this frag is to be discarded, make sure we won't mgl@1371: + relocate it later on. */ mgl@1371: + BFD_ASSERT(frag->state == RS_CPENT); mgl@1371: + frag->rela->r_info = ELF_R_INFO(ELF_R_SYM(frag->rela->r_info), mgl@1371: + R_AVR32_NONE); mgl@1371: + } mgl@1371: + else if (frag->state == RS_ALIGN) mgl@1371: + { mgl@1371: + bfd_vma addr, addr_end; mgl@1371: + mgl@1371: + addr = frag->rela->r_offset; mgl@1371: + addr_end = (frag->offset + frag->offset_adjust mgl@1371: + + frag->size + frag->size_adjust); mgl@1371: + mgl@1371: + /* If the section is executable, insert NOPs. mgl@1371: + Otherwise, insert zeroes. */ mgl@1371: + if (sec->flags & SEC_CODE) mgl@1371: + { mgl@1371: + if (addr & 1) mgl@1371: + { mgl@1371: + bfd_put_8(abfd, 0, contents + addr); mgl@1371: + addr++; mgl@1371: + } mgl@1371: + mgl@1371: + BFD_ASSERT(!((addr_end - addr) & 1)); mgl@1371: + mgl@1371: + while (addr < addr_end) mgl@1371: + { mgl@1371: + bfd_put_16(abfd, NOP_OPCODE, contents + addr); mgl@1371: + addr += 2; mgl@1371: + } mgl@1371: + } mgl@1371: + else mgl@1371: + memset(contents + addr, 0, addr_end - addr); mgl@1371: + } mgl@1371: + else if (state->opcode_mask) mgl@1371: + { mgl@1371: + bfd_vma insn; mgl@1371: + mgl@1371: + /* Update the opcode and the relocation type unless it's a mgl@1371: + "special" relax state (i.e. RS_NONE, RS_ALIGN or mgl@1371: + RS_CPENT.), in which case the opcode mask is zero. */ mgl@1371: + insn = bfd_get_32(abfd, contents + frag->rela->r_offset); mgl@1371: + insn &= ~state->opcode_mask; mgl@1371: + insn |= state->opcode; mgl@1371: + RDBG(" 0x%lx: inserting insn %08lx\n", mgl@1371: + frag->rela->r_offset, insn); mgl@1371: + bfd_put_32(abfd, insn, contents + frag->rela->r_offset); mgl@1371: + mgl@1371: + frag->rela->r_info = ELF_R_INFO(ELF_R_SYM(frag->rela->r_info), mgl@1371: + state->r_type); mgl@1371: + } mgl@1371: + mgl@1371: + if ((frag + 1) == fragend) mgl@1371: + BFD_ASSERT((frag->offset + frag->size + frag->offset_adjust mgl@1371: + + frag->size_adjust) == sec->size); mgl@1371: + else mgl@1371: + BFD_ASSERT((frag->offset + frag->size + frag->offset_adjust mgl@1371: + + frag->size_adjust) mgl@1371: + == (frag[1].offset + frag[1].offset_adjust)); mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + /* Adjust reloc addends and DIFF32 differences */ mgl@1371: + if (!adjust_relocs(abfd, sec, info)) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + ret = TRUE; mgl@1371: + mgl@1371: + out: mgl@1371: + release_contents(sec, contents); mgl@1371: + release_internal_relocs(sec, relocs); mgl@1371: + return ret; mgl@1371: +} mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_relax_section(bfd *abfd, asection *sec, mgl@1371: + struct bfd_link_info *info, bfd_boolean *again) mgl@1371: +{ mgl@1371: + struct elf_avr32_link_hash_table *htab; mgl@1371: + struct avr32_relax_data *rd; mgl@1371: + mgl@1371: + *again = FALSE; mgl@1371: + if (info->relocatable) mgl@1371: + return TRUE; mgl@1371: + mgl@1371: + htab = avr32_elf_hash_table(info); mgl@1371: + if ((!(sec->flags & SEC_RELOC) || sec->reloc_count == 0) mgl@1371: + && sec != htab->sgot) mgl@1371: + return TRUE; mgl@1371: + mgl@1371: + if (!htab->relocations_analyzed) mgl@1371: + { mgl@1371: + if (!analyze_relocations(info)) mgl@1371: + return FALSE; mgl@1371: + htab->relocations_analyzed = TRUE; mgl@1371: + } mgl@1371: + mgl@1371: + rd = avr32_relax_data(sec); mgl@1371: + mgl@1371: + if (rd->iteration != htab->relax_iteration) mgl@1371: + { mgl@1371: + if (!htab->repeat_pass) mgl@1371: + htab->relax_pass++; mgl@1371: + htab->relax_iteration++; mgl@1371: + htab->repeat_pass = FALSE; mgl@1371: + } mgl@1371: + mgl@1371: + rd->iteration++; mgl@1371: + mgl@1371: + switch (htab->relax_pass) mgl@1371: + { mgl@1371: + case RELAX_PASS_SIZE_FRAGS: mgl@1371: + if (!avr32_size_frags(abfd, sec, info)) mgl@1371: + return FALSE; mgl@1371: + *again = TRUE; mgl@1371: + break; mgl@1371: + case RELAX_PASS_MOVE_DATA: mgl@1371: + if (!avr32_move_data(abfd, sec, info)) mgl@1371: + return FALSE; mgl@1371: + break; mgl@1371: + } mgl@1371: + mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +/* Relocation */ mgl@1371: + mgl@1371: +static bfd_reloc_status_type mgl@1371: +avr32_check_reloc_value(asection *sec, Elf_Internal_Rela *rela, mgl@1371: + bfd_signed_vma relocation, reloc_howto_type *howto); mgl@1371: +static bfd_reloc_status_type mgl@1371: +avr32_final_link_relocate(reloc_howto_type *howto, bfd *input_bfd, mgl@1371: + asection *input_section, bfd_byte *contents, mgl@1371: + Elf_Internal_Rela *rel, bfd_vma value); mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_relocate_section(bfd *output_bfd, struct bfd_link_info *info, mgl@1371: + bfd *input_bfd, asection *input_section, mgl@1371: + bfd_byte *contents, Elf_Internal_Rela *relocs, mgl@1371: + Elf_Internal_Sym *local_syms, mgl@1371: + asection **local_sections); mgl@1371: + mgl@1371: + mgl@1371: +#define symbol_address(symbol) \ mgl@1371: + symbol->value + symbol->section->output_section->vma \ mgl@1371: + + symbol->section->output_offset mgl@1371: + mgl@1371: +#define avr32_elf_insert_field(size, field, abfd, reloc_entry, data) \ mgl@1371: + do \ mgl@1371: + { \ mgl@1371: + unsigned long x; \ mgl@1371: + x = bfd_get_##size (abfd, data + reloc_entry->address); \ mgl@1371: + x &= ~reloc_entry->howto->dst_mask; \ mgl@1371: + x |= field & reloc_entry->howto->dst_mask; \ mgl@1371: + bfd_put_##size (abfd, (bfd_vma) x, data + reloc_entry->address); \ mgl@1371: + } \ mgl@1371: + while(0) mgl@1371: + mgl@1371: +static bfd_reloc_status_type mgl@1371: +avr32_check_reloc_value(asection *sec ATTRIBUTE_UNUSED, mgl@1371: + Elf_Internal_Rela *rela ATTRIBUTE_UNUSED, mgl@1371: + bfd_signed_vma relocation, mgl@1371: + reloc_howto_type *howto) mgl@1371: +{ mgl@1371: + bfd_vma reloc_u; mgl@1371: + mgl@1371: + /* We take "complain_overflow_dont" to mean "don't complain on mgl@1371: + alignment either". This way, we don't have to special-case mgl@1371: + R_AVR32_HI16 */ mgl@1371: + if (howto->complain_on_overflow == complain_overflow_dont) mgl@1371: + return bfd_reloc_ok; mgl@1371: + mgl@1371: + /* Check if the value is correctly aligned */ mgl@1371: + if (relocation & ((1 << howto->rightshift) - 1)) mgl@1371: + { mgl@1371: + RDBG("misaligned: %s<%s+%lx>: %s: 0x%lx (align %u)\n", mgl@1371: + sec->owner->filename, sec->name, rela->r_offset, mgl@1371: + howto->name, relocation, howto->rightshift); mgl@1371: + return bfd_reloc_overflow; mgl@1371: + } mgl@1371: + mgl@1371: + /* Now, get rid of the unnecessary bits */ mgl@1371: + relocation >>= howto->rightshift; mgl@1371: + reloc_u = (bfd_vma)relocation; mgl@1371: + mgl@1371: + switch (howto->complain_on_overflow) mgl@1371: + { mgl@1371: + case complain_overflow_unsigned: mgl@1371: + case complain_overflow_bitfield: mgl@1371: + if (reloc_u > (unsigned long)((1 << howto->bitsize) - 1)) mgl@1371: + { mgl@1371: + RDBG("unsigned overflow: %s<%s+%lx>: %s: 0x%lx (size %u)\n", mgl@1371: + sec->owner->filename, sec->name, rela->r_offset, mgl@1371: + howto->name, reloc_u, howto->bitsize); mgl@1371: + RDBG("reloc vma: 0x%lx\n", mgl@1371: + sec->output_section->vma + sec->output_offset + rela->r_offset); mgl@1371: + mgl@1371: + return bfd_reloc_overflow; mgl@1371: + } mgl@1371: + break; mgl@1371: + case complain_overflow_signed: mgl@1371: + if (relocation > (1 << (howto->bitsize - 1)) - 1) mgl@1371: + { mgl@1371: + RDBG("signed overflow: %s<%s+%lx>: %s: 0x%lx (size %u)\n", mgl@1371: + sec->owner->filename, sec->name, rela->r_offset, mgl@1371: + howto->name, reloc_u, howto->bitsize); mgl@1371: + RDBG("reloc vma: 0x%lx\n", mgl@1371: + sec->output_section->vma + sec->output_offset + rela->r_offset); mgl@1371: + mgl@1371: + return bfd_reloc_overflow; mgl@1371: + } mgl@1371: + if (relocation < -(1 << (howto->bitsize - 1))) mgl@1371: + { mgl@1371: + RDBG("signed overflow: %s<%s+%lx>: %s: -0x%lx (size %u)\n", mgl@1371: + sec->owner->filename, sec->name, rela->r_offset, mgl@1371: + howto->name, -relocation, howto->bitsize); mgl@1371: + RDBG("reloc vma: 0x%lx\n", mgl@1371: + sec->output_section->vma + sec->output_offset + rela->r_offset); mgl@1371: + mgl@1371: + return bfd_reloc_overflow; mgl@1371: + } mgl@1371: + break; mgl@1371: + default: mgl@1371: + abort(); mgl@1371: + } mgl@1371: + mgl@1371: + return bfd_reloc_ok; mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +static bfd_reloc_status_type mgl@1371: +avr32_final_link_relocate(reloc_howto_type *howto, mgl@1371: + bfd *input_bfd, mgl@1371: + asection *input_section, mgl@1371: + bfd_byte *contents, mgl@1371: + Elf_Internal_Rela *rel, mgl@1371: + bfd_vma value) mgl@1371: +{ mgl@1371: + bfd_vma field; mgl@1371: + bfd_vma relocation; mgl@1371: + bfd_reloc_status_type status; mgl@1371: + bfd_byte *p = contents + rel->r_offset; mgl@1371: + unsigned long x; mgl@1371: + mgl@1371: + pr_debug(" (6b) final link relocate\n"); mgl@1371: + mgl@1371: + /* Sanity check the address */ mgl@1371: + if (rel->r_offset > input_section->size) mgl@1371: + { mgl@1371: + (*_bfd_error_handler) mgl@1371: + ("%B: %A+0x%lx: offset out of range (section size: 0x%lx)", mgl@1371: + input_bfd, input_section, rel->r_offset, input_section->size); mgl@1371: + return bfd_reloc_outofrange; mgl@1371: + } mgl@1371: + mgl@1371: + relocation = value + rel->r_addend; mgl@1371: + mgl@1371: + if (howto->pc_relative) mgl@1371: + { mgl@1371: + bfd_vma addr; mgl@1371: + mgl@1371: + addr = input_section->output_section->vma mgl@1371: + + input_section->output_offset + rel->r_offset; mgl@1371: + addr &= ~0UL << howto->rightshift; mgl@1371: + relocation -= addr; mgl@1371: + } mgl@1371: + mgl@1371: + switch (ELF32_R_TYPE(rel->r_info)) mgl@1371: + { mgl@1371: + case R_AVR32_16N_PCREL: mgl@1371: + /* sub reg, pc, . - (sym + addend) */ mgl@1371: + relocation = -relocation; mgl@1371: + break; mgl@1371: + } mgl@1371: + mgl@1371: + status = avr32_check_reloc_value(input_section, rel, relocation, howto); mgl@1371: + mgl@1371: + relocation >>= howto->rightshift; mgl@1371: + if (howto->bitsize == 21) mgl@1371: + field = (relocation & 0xffff) mgl@1371: + | ((relocation & 0x10000) << 4) mgl@1371: + | ((relocation & 0x1e0000) << 8); mgl@1371: + else if (howto->bitsize == 12) mgl@1371: + field = (relocation & 0xff) | ((relocation & 0xf00) << 4); mgl@1371: + else if (howto->bitsize == 10) mgl@1371: + field = ((relocation & 0xff) << 4) mgl@1371: + | ((relocation & 0x300) >> 8); mgl@1371: + else mgl@1371: + field = relocation << howto->bitpos; mgl@1371: + mgl@1371: + switch (howto->size) mgl@1371: + { mgl@1371: + case 0: mgl@1371: + x = bfd_get_8 (input_bfd, p); mgl@1371: + x &= ~howto->dst_mask; mgl@1371: + x |= field & howto->dst_mask; mgl@1371: + bfd_put_8 (input_bfd, (bfd_vma) x, p); mgl@1371: + break; mgl@1371: + case 1: mgl@1371: + x = bfd_get_16 (input_bfd, p); mgl@1371: + x &= ~howto->dst_mask; mgl@1371: + x |= field & howto->dst_mask; mgl@1371: + bfd_put_16 (input_bfd, (bfd_vma) x, p); mgl@1371: + break; mgl@1371: + case 2: mgl@1371: + x = bfd_get_32 (input_bfd, p); mgl@1371: + x &= ~howto->dst_mask; mgl@1371: + x |= field & howto->dst_mask; mgl@1371: + bfd_put_32 (input_bfd, (bfd_vma) x, p); mgl@1371: + break; mgl@1371: + default: mgl@1371: + abort(); mgl@1371: + } mgl@1371: + mgl@1371: + return status; mgl@1371: +} mgl@1371: + mgl@1371: +/* (6) Apply relocations to the normal (non-dynamic) sections */ mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_relocate_section(bfd *output_bfd, struct bfd_link_info *info, mgl@1371: + bfd *input_bfd, asection *input_section, mgl@1371: + bfd_byte *contents, Elf_Internal_Rela *relocs, mgl@1371: + Elf_Internal_Sym *local_syms, mgl@1371: + asection **local_sections) mgl@1371: +{ mgl@1371: + struct elf_avr32_link_hash_table *htab; mgl@1371: + Elf_Internal_Shdr *symtab_hdr; mgl@1371: + Elf_Internal_Rela *rel, *relend; mgl@1371: + struct elf_link_hash_entry **sym_hashes; mgl@1371: + struct got_entry **local_got_ents; mgl@1371: + asection *sgot; mgl@1371: + asection *srelgot; mgl@1371: + mgl@1371: + pr_debug("(6) relocate section %s:<%s> (size 0x%lx)\n", mgl@1371: + input_bfd->filename, input_section->name, input_section->size); mgl@1371: + mgl@1371: + /* If we're doing a partial link, we don't have to do anything since mgl@1371: + we're using RELA relocations */ mgl@1371: + if (info->relocatable) mgl@1371: + return TRUE; mgl@1371: + mgl@1371: + htab = avr32_elf_hash_table(info); mgl@1371: + symtab_hdr = &elf_tdata(input_bfd)->symtab_hdr; mgl@1371: + sym_hashes = elf_sym_hashes(input_bfd); mgl@1371: + local_got_ents = elf_local_got_ents(input_bfd); mgl@1371: + sgot = htab->sgot; mgl@1371: + srelgot = htab->srelgot; mgl@1371: + mgl@1371: + relend = relocs + input_section->reloc_count; mgl@1371: + for (rel = relocs; rel < relend; rel++) mgl@1371: + { mgl@1371: + unsigned long r_type, r_symndx; mgl@1371: + reloc_howto_type *howto; mgl@1371: + Elf_Internal_Sym *sym = NULL; mgl@1371: + struct elf_link_hash_entry *h = NULL; mgl@1371: + asection *sec = NULL; mgl@1371: + bfd_vma value; mgl@1371: + bfd_vma offset; mgl@1371: + bfd_reloc_status_type status; mgl@1371: + mgl@1371: + r_type = ELF32_R_TYPE(rel->r_info); mgl@1371: + r_symndx = ELF32_R_SYM(rel->r_info); mgl@1371: + mgl@1371: + if (r_type == R_AVR32_NONE mgl@1371: + || r_type == R_AVR32_ALIGN mgl@1371: + || r_type == R_AVR32_DIFF32 mgl@1371: + || r_type == R_AVR32_DIFF16 mgl@1371: + || r_type == R_AVR32_DIFF8) mgl@1371: + continue; mgl@1371: + mgl@1371: + /* Sanity check */ mgl@1371: + if (r_type > R_AVR32_max) mgl@1371: + { mgl@1371: + bfd_set_error(bfd_error_bad_value); mgl@1371: + return FALSE; mgl@1371: + } mgl@1371: + mgl@1371: + howto = &elf_avr32_howto_table[r_type]; mgl@1371: + mgl@1371: + if (r_symndx < symtab_hdr->sh_info) mgl@1371: + { mgl@1371: + sym = local_syms + r_symndx; mgl@1371: + sec = local_sections[r_symndx]; mgl@1371: + mgl@1371: + pr_debug(" (6a) processing %s against local symbol %lu\n", mgl@1371: + howto->name, r_symndx); mgl@1371: + mgl@1371: + /* The following function changes rel->r_addend behind our back. */ mgl@1371: + value = _bfd_elf_rela_local_sym(output_bfd, sym, &sec, rel); mgl@1371: + pr_debug(" => value: %lx, addend: %lx\n", value, rel->r_addend); mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + if (sym_hashes == NULL) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + h = sym_hashes[r_symndx - symtab_hdr->sh_info]; mgl@1371: + while (h->root.type == bfd_link_hash_indirect mgl@1371: + || h->root.type == bfd_link_hash_warning) mgl@1371: + h = (struct elf_link_hash_entry *)h->root.u.i.link; mgl@1371: + mgl@1371: + pr_debug(" (6a) processing %s against symbol %s\n", mgl@1371: + howto->name, h->root.root.string); mgl@1371: + mgl@1371: + if (h->root.type == bfd_link_hash_defined mgl@1371: + || h->root.type == bfd_link_hash_defweak) mgl@1371: + { mgl@1371: + bfd_boolean dyn; mgl@1371: + mgl@1371: + dyn = htab->root.dynamic_sections_created; mgl@1371: + sec = h->root.u.def.section; mgl@1371: + mgl@1371: + if (sec->output_section) mgl@1371: + value = (h->root.u.def.value mgl@1371: + + sec->output_section->vma mgl@1371: + + sec->output_offset); mgl@1371: + else mgl@1371: + value = h->root.u.def.value; mgl@1371: + } mgl@1371: + else if (h->root.type == bfd_link_hash_undefweak) mgl@1371: + value = 0; mgl@1371: + else if (info->unresolved_syms_in_objects == RM_IGNORE mgl@1371: + && ELF_ST_VISIBILITY(h->other) == STV_DEFAULT) mgl@1371: + value = 0; mgl@1371: + else mgl@1371: + { mgl@1371: + bfd_boolean err; mgl@1371: + err = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR mgl@1371: + || ELF_ST_VISIBILITY(h->other) != STV_DEFAULT); mgl@1371: + if (!info->callbacks->undefined_symbol mgl@1371: + (info, h->root.root.string, input_bfd, mgl@1371: + input_section, rel->r_offset, err)) mgl@1371: + return FALSE; mgl@1371: + value = 0; mgl@1371: + } mgl@1371: + mgl@1371: + pr_debug(" => value: %lx, addend: %lx\n", value, rel->r_addend); mgl@1371: + } mgl@1371: + mgl@1371: + switch (r_type) mgl@1371: + { mgl@1371: + case R_AVR32_GOT32: mgl@1371: + case R_AVR32_GOT16: mgl@1371: + case R_AVR32_GOT8: mgl@1371: + case R_AVR32_GOT21S: mgl@1371: + case R_AVR32_GOT18SW: mgl@1371: + case R_AVR32_GOT16S: mgl@1371: + case R_AVR32_GOT7UW: mgl@1371: + case R_AVR32_LDA_GOT: mgl@1371: + case R_AVR32_GOTCALL: mgl@1371: + BFD_ASSERT(sgot != NULL); mgl@1371: + mgl@1371: + if (h != NULL) mgl@1371: + { mgl@1371: + BFD_ASSERT(h->got.glist->refcount > 0); mgl@1371: + offset = h->got.glist->offset; mgl@1371: + mgl@1371: + BFD_ASSERT(offset < sgot->size); mgl@1371: + if (!elf_hash_table(info)->dynamic_sections_created mgl@1371: + || (h->def_regular mgl@1371: + && (!info->shared mgl@1371: + || info->symbolic mgl@1371: + || h->dynindx == -1))) mgl@1371: + { mgl@1371: + /* This is actually a static link, or it is a mgl@1371: + -Bsymbolic link and the symbol is defined mgl@1371: + locally, or the symbol was forced to be local. */ mgl@1371: + bfd_put_32(output_bfd, value, sgot->contents + offset); mgl@1371: + } mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + BFD_ASSERT(local_got_ents && mgl@1371: + local_got_ents[r_symndx]->refcount > 0); mgl@1371: + offset = local_got_ents[r_symndx]->offset; mgl@1371: + mgl@1371: + /* Local GOT entries don't have relocs. If this is a mgl@1371: + shared library, the dynamic linker will add the load mgl@1371: + address to the initial value at startup. */ mgl@1371: + BFD_ASSERT(offset < sgot->size); mgl@1371: + pr_debug("Initializing GOT entry at offset %lu: 0x%lx\n", mgl@1371: + offset, value); mgl@1371: + bfd_put_32 (output_bfd, value, sgot->contents + offset); mgl@1371: + } mgl@1371: + mgl@1371: + value = sgot->output_offset + offset; mgl@1371: + pr_debug("GOT reference: New value %lx\n", value); mgl@1371: + break; mgl@1371: + mgl@1371: + case R_AVR32_GOTPC: mgl@1371: + /* This relocation type is for constant pool entries used in mgl@1371: + the calculation "Rd = PC - (PC - GOT)", where the mgl@1371: + constant pool supplies the constant (PC - GOT) mgl@1371: + offset. The symbol value + addend indicates where the mgl@1371: + value of PC is taken. */ mgl@1371: + value -= sgot->output_section->vma; mgl@1371: + break; mgl@1371: + mgl@1371: + case R_AVR32_32_PCREL: mgl@1371: + /* We must adjust r_offset to account for discarded data in mgl@1371: + the .eh_frame section. This is probably not the right mgl@1371: + way to do this, since AFAICS all other architectures do mgl@1371: + it some other way. I just can't figure out how... */ mgl@1371: + { mgl@1371: + bfd_vma r_offset; mgl@1371: + mgl@1371: + r_offset = _bfd_elf_section_offset(output_bfd, info, mgl@1371: + input_section, mgl@1371: + rel->r_offset); mgl@1371: + if (r_offset == (bfd_vma)-1 mgl@1371: + || r_offset == (bfd_vma)-2) mgl@1371: + continue; mgl@1371: + rel->r_offset = r_offset; mgl@1371: + } mgl@1371: + break; mgl@1371: + mgl@1371: + case R_AVR32_32: mgl@1371: + /* We need to emit a run-time relocation in the following cases: mgl@1371: + - we're creating a shared library mgl@1371: + - the symbol is not defined in any regular objects mgl@1371: + mgl@1371: + Of course, sections that aren't going to be part of the mgl@1371: + run-time image will not get any relocs, and undefined mgl@1371: + symbols won't have any either (only weak undefined mgl@1371: + symbols should get this far). */ mgl@1371: + if ((info->shared mgl@1371: + || (elf_hash_table(info)->dynamic_sections_created mgl@1371: + && h != NULL mgl@1371: + && h->def_dynamic mgl@1371: + && !h->def_regular)) mgl@1371: + && r_symndx != 0 mgl@1371: + && (input_section->flags & SEC_ALLOC)) mgl@1371: + { mgl@1371: + Elf_Internal_Rela outrel; mgl@1371: + bfd_byte *loc; mgl@1371: + bfd_boolean skip, relocate; mgl@1371: + struct elf_avr32_link_hash_entry *avrh; mgl@1371: + mgl@1371: + pr_debug("Going to generate dynamic reloc...\n"); mgl@1371: + mgl@1371: + skip = FALSE; mgl@1371: + relocate = FALSE; mgl@1371: + mgl@1371: + outrel.r_offset = _bfd_elf_section_offset(output_bfd, info, mgl@1371: + input_section, mgl@1371: + rel->r_offset); mgl@1371: + if (outrel.r_offset == (bfd_vma)-1) mgl@1371: + skip = TRUE; mgl@1371: + else if (outrel.r_offset == (bfd_vma)-2) mgl@1371: + skip = TRUE, relocate = TRUE; mgl@1371: + mgl@1371: + outrel.r_offset += (input_section->output_section->vma mgl@1371: + + input_section->output_offset); mgl@1371: + mgl@1371: + pr_debug(" ... offset %lx, dynindx %ld\n", mgl@1371: + outrel.r_offset, h ? h->dynindx : -1); mgl@1371: + mgl@1371: + if (skip) mgl@1371: + memset(&outrel, 0, sizeof(outrel)); mgl@1371: + else mgl@1371: + { mgl@1371: + avrh = (struct elf_avr32_link_hash_entry *)h; mgl@1371: + /* h->dynindx may be -1 if this symbol was marked to mgl@1371: + become local. */ mgl@1371: + if (h == NULL mgl@1371: + || ((info->symbolic || h->dynindx == -1) mgl@1371: + && h->def_regular)) mgl@1371: + { mgl@1371: + relocate = TRUE; mgl@1371: + outrel.r_info = ELF32_R_INFO(0, R_AVR32_RELATIVE); mgl@1371: + outrel.r_addend = value + rel->r_addend; mgl@1371: + pr_debug(" ... R_AVR32_RELATIVE\n"); mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + BFD_ASSERT(h->dynindx != -1); mgl@1371: + relocate = TRUE; mgl@1371: + outrel.r_info = ELF32_R_INFO(h->dynindx, R_AVR32_GLOB_DAT); mgl@1371: + outrel.r_addend = rel->r_addend; mgl@1371: + pr_debug(" ... R_AVR32_GLOB_DAT\n"); mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + pr_debug("srelgot reloc_count: %d, size %lu\n", mgl@1371: + srelgot->reloc_count, srelgot->size); mgl@1371: + mgl@1371: + loc = srelgot->contents; mgl@1371: + loc += srelgot->reloc_count++ * sizeof(Elf32_External_Rela); mgl@1371: + bfd_elf32_swap_reloca_out(output_bfd, &outrel, loc); mgl@1371: + mgl@1371: + BFD_ASSERT(srelgot->reloc_count * sizeof(Elf32_External_Rela) mgl@1371: + <= srelgot->size); mgl@1371: + mgl@1371: + if (!relocate) mgl@1371: + continue; mgl@1371: + } mgl@1371: + break; mgl@1371: + } mgl@1371: + mgl@1371: + status = avr32_final_link_relocate(howto, input_bfd, input_section, mgl@1371: + contents, rel, value); mgl@1371: + mgl@1371: + switch (status) mgl@1371: + { mgl@1371: + case bfd_reloc_ok: mgl@1371: + break; mgl@1371: + mgl@1371: + case bfd_reloc_overflow: mgl@1371: + { mgl@1371: + const char *name; mgl@1371: + mgl@1371: + if (h != NULL) mgl@1371: + name = h->root.root.string; mgl@1371: + else mgl@1371: + { mgl@1371: + name = bfd_elf_string_from_elf_section(input_bfd, mgl@1371: + symtab_hdr->sh_link, mgl@1371: + sym->st_name); mgl@1371: + if (name == NULL) mgl@1371: + return FALSE; mgl@1371: + if (*name == '\0') mgl@1371: + name = bfd_section_name(input_bfd, sec); mgl@1371: + } mgl@1371: + if (!((*info->callbacks->reloc_overflow) mgl@1371: + (info, (h ? &h->root : NULL), name, howto->name, mgl@1371: + rel->r_addend, input_bfd, input_section, rel->r_offset))) mgl@1371: + return FALSE; mgl@1371: + } mgl@1371: + break; mgl@1371: + mgl@1371: + case bfd_reloc_outofrange: mgl@1371: + default: mgl@1371: + abort(); mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +/* Additional processing of dynamic sections after relocation */ mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_finish_dynamic_symbol(bfd *output_bfd, struct bfd_link_info *info, mgl@1371: + struct elf_link_hash_entry *h, mgl@1371: + Elf_Internal_Sym *sym); mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_finish_dynamic_sections(bfd *output_bfd, struct bfd_link_info *info); mgl@1371: + mgl@1371: + mgl@1371: +/* (7) Initialize the contents of a dynamic symbol and/or emit mgl@1371: + relocations for it */ mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_finish_dynamic_symbol(bfd *output_bfd, struct bfd_link_info *info, mgl@1371: + struct elf_link_hash_entry *h, mgl@1371: + Elf_Internal_Sym *sym) mgl@1371: +{ mgl@1371: + struct elf_avr32_link_hash_table *htab; mgl@1371: + struct got_entry *got; mgl@1371: + mgl@1371: + pr_debug("(7) finish dynamic symbol: %s\n", h->root.root.string); mgl@1371: + mgl@1371: + htab = avr32_elf_hash_table(info); mgl@1371: + got = h->got.glist; mgl@1371: + mgl@1371: + if (got && got->refcount > 0) mgl@1371: + { mgl@1371: + asection *sgot; mgl@1371: + asection *srelgot; mgl@1371: + Elf_Internal_Rela rel; mgl@1371: + bfd_byte *loc; mgl@1371: + mgl@1371: + /* This symbol has an entry in the GOT. Set it up. */ mgl@1371: + sgot = htab->sgot; mgl@1371: + srelgot = htab->srelgot; mgl@1371: + BFD_ASSERT(sgot && srelgot); mgl@1371: + mgl@1371: + rel.r_offset = (sgot->output_section->vma mgl@1371: + + sgot->output_offset mgl@1371: + + got->offset); mgl@1371: + mgl@1371: + /* If this is a static link, or it is a -Bsymbolic link and the mgl@1371: + symbol is defined locally or was forced to be local because mgl@1371: + of a version file, we just want to emit a RELATIVE reloc. The mgl@1371: + entry in the global offset table will already have been mgl@1371: + initialized in the relocate_section function. */ mgl@1371: + if ((info->shared mgl@1371: + && !info->symbolic mgl@1371: + && h->dynindx != -1) mgl@1371: + || (htab->root.dynamic_sections_created mgl@1371: + && h->def_dynamic mgl@1371: + && !h->def_regular)) mgl@1371: + { mgl@1371: + bfd_put_32(output_bfd, 0, sgot->contents + got->offset); mgl@1371: + rel.r_info = ELF32_R_INFO(h->dynindx, R_AVR32_GLOB_DAT); mgl@1371: + rel.r_addend = 0; mgl@1371: + mgl@1371: + pr_debug("GOT reloc R_AVR32_GLOB_DAT, dynindx: %ld\n", h->dynindx); mgl@1371: + pr_debug(" srelgot reloc_count: %d, size: %lu\n", mgl@1371: + srelgot->reloc_count, srelgot->size); mgl@1371: + mgl@1371: + loc = (srelgot->contents mgl@1371: + + srelgot->reloc_count++ * sizeof(Elf32_External_Rela)); mgl@1371: + bfd_elf32_swap_reloca_out(output_bfd, &rel, loc); mgl@1371: + mgl@1371: + BFD_ASSERT(srelgot->reloc_count * sizeof(Elf32_External_Rela) mgl@1371: + <= srelgot->size); mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute */ mgl@1371: + if (strcmp(h->root.root.string, "_DYNAMIC") == 0 mgl@1371: + || strcmp(h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0) mgl@1371: + sym->st_shndx = SHN_ABS; mgl@1371: + mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: +/* (8) Do any remaining initialization of the dynamic sections */ mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_finish_dynamic_sections(bfd *output_bfd, struct bfd_link_info *info) mgl@1371: +{ mgl@1371: + struct elf_avr32_link_hash_table *htab; mgl@1371: + asection *sgot, *sdyn; mgl@1371: + mgl@1371: + pr_debug("(8) finish dynamic sections\n"); mgl@1371: + mgl@1371: + htab = avr32_elf_hash_table(info); mgl@1371: + sgot = htab->sgot; mgl@1371: + sdyn = bfd_get_section_by_name(htab->root.dynobj, ".dynamic"); mgl@1371: + mgl@1371: + if (htab->root.dynamic_sections_created) mgl@1371: + { mgl@1371: + Elf32_External_Dyn *dyncon, *dynconend; mgl@1371: + mgl@1371: + BFD_ASSERT(sdyn && sgot && sgot->size >= AVR32_GOT_HEADER_SIZE); mgl@1371: + mgl@1371: + dyncon = (Elf32_External_Dyn *)sdyn->contents; mgl@1371: + dynconend = (Elf32_External_Dyn *)(sdyn->contents + sdyn->size); mgl@1371: + for (; dyncon < dynconend; dyncon++) mgl@1371: + { mgl@1371: + Elf_Internal_Dyn dyn; mgl@1371: + asection *s; mgl@1371: + mgl@1371: + bfd_elf32_swap_dyn_in(htab->root.dynobj, dyncon, &dyn); mgl@1371: + mgl@1371: + switch (dyn.d_tag) mgl@1371: + { mgl@1371: + default: mgl@1371: + break; mgl@1371: + mgl@1371: + case DT_PLTGOT: mgl@1371: + s = sgot->output_section; mgl@1371: + BFD_ASSERT(s != NULL); mgl@1371: + dyn.d_un.d_ptr = s->vma; mgl@1371: + bfd_elf32_swap_dyn_out(output_bfd, &dyn, dyncon); mgl@1371: + break; mgl@1371: + mgl@1371: + case DT_AVR32_GOTSZ: mgl@1371: + s = sgot->output_section; mgl@1371: + BFD_ASSERT(s != NULL); mgl@1371: + dyn.d_un.d_val = s->size; mgl@1371: + bfd_elf32_swap_dyn_out(output_bfd, &dyn, dyncon); mgl@1371: + break; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + /* Fill in the first two entries in the global offset table */ mgl@1371: + bfd_put_32(output_bfd, mgl@1371: + sdyn->output_section->vma + sdyn->output_offset, mgl@1371: + sgot->contents); mgl@1371: + mgl@1371: + /* The runtime linker will fill this one in with the address of mgl@1371: + the run-time link map */ mgl@1371: + bfd_put_32(output_bfd, 0, sgot->contents + 4); mgl@1371: + } mgl@1371: + mgl@1371: + if (sgot) mgl@1371: + elf_section_data(sgot->output_section)->this_hdr.sh_entsize = 4; mgl@1371: + mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +/* AVR32-specific private ELF data */ mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_set_private_flags(bfd *abfd, flagword flags); mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_copy_private_bfd_data(bfd *ibfd, bfd *obfd); mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_merge_private_bfd_data(bfd *ibfd, bfd *obfd); mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_print_private_bfd_data(bfd *abfd, void *ptr); mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_set_private_flags(bfd *abfd, flagword flags) mgl@1371: +{ mgl@1371: + elf_elfheader(abfd)->e_flags = flags; mgl@1371: + elf_flags_init(abfd) = TRUE; mgl@1371: + mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: +/* Copy backend specific data from one object module to another. */ mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_copy_private_bfd_data(bfd *ibfd, bfd *obfd) mgl@1371: +{ mgl@1371: + elf_elfheader(obfd)->e_flags = elf_elfheader(ibfd)->e_flags; mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: +/* Merge backend specific data from an object file to the output mgl@1371: + object file when linking. */ mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_merge_private_bfd_data(bfd *ibfd, bfd *obfd) mgl@1371: +{ mgl@1371: + flagword out_flags, in_flags; mgl@1371: + mgl@1371: + pr_debug("(0) merge_private_bfd_data: %s -> %s\n", mgl@1371: + ibfd->filename, obfd->filename); mgl@1371: + mgl@1371: + in_flags = elf_elfheader(ibfd)->e_flags; mgl@1371: + out_flags = elf_elfheader(obfd)->e_flags; mgl@1371: + mgl@1371: + if (elf_flags_init(obfd)) mgl@1371: + { mgl@1371: + /* If one of the inputs are non-PIC, the output must be mgl@1371: + considered non-PIC. The same applies to linkrelax. */ mgl@1371: + if (!(in_flags & EF_AVR32_PIC)) mgl@1371: + out_flags &= ~EF_AVR32_PIC; mgl@1371: + if (!(in_flags & EF_AVR32_LINKRELAX)) mgl@1371: + out_flags &= ~EF_AVR32_LINKRELAX; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + elf_flags_init(obfd) = TRUE; mgl@1371: + out_flags = in_flags; mgl@1371: + } mgl@1371: + mgl@1371: + elf_elfheader(obfd)->e_flags = out_flags; mgl@1371: + mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_print_private_bfd_data(bfd *abfd, void *ptr) mgl@1371: +{ mgl@1371: + FILE *file = (FILE *)ptr; mgl@1371: + unsigned long flags; mgl@1371: + mgl@1371: + BFD_ASSERT(abfd != NULL && ptr != NULL); mgl@1371: + mgl@1371: + _bfd_elf_print_private_bfd_data(abfd, ptr); mgl@1371: + mgl@1371: + flags = elf_elfheader(abfd)->e_flags; mgl@1371: + mgl@1371: + fprintf(file, _("private flags = %lx:"), elf_elfheader(abfd)->e_flags); mgl@1371: + mgl@1371: + if (flags & EF_AVR32_PIC) mgl@1371: + fprintf(file, " [PIC]"); mgl@1371: + if (flags & EF_AVR32_LINKRELAX) mgl@1371: + fprintf(file, " [linker relaxable]"); mgl@1371: + mgl@1371: + flags &= ~(EF_AVR32_PIC | EF_AVR32_LINKRELAX); mgl@1371: + mgl@1371: + if (flags) mgl@1371: + fprintf(file, _("")); mgl@1371: + mgl@1371: + fputc('\n', file); mgl@1371: + mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: +/* Set avr32-specific linker options. */ mgl@1371: +void bfd_elf32_avr32_set_options(struct bfd_link_info *info, mgl@1371: + int direct_data_refs) mgl@1371: +{ mgl@1371: + struct elf_avr32_link_hash_table *htab; mgl@1371: + mgl@1371: + htab = avr32_elf_hash_table (info); mgl@1371: + htab->direct_data_refs = !!direct_data_refs; mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: + mgl@1371: +/* Understanding core dumps */ mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_grok_prstatus(bfd *abfd, Elf_Internal_Note *note); mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_grok_psinfo(bfd *abfd, Elf_Internal_Note *note); mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_grok_prstatus(bfd *abfd, Elf_Internal_Note *note) mgl@1371: +{ mgl@1371: + /* Linux/AVR32B elf_prstatus */ mgl@1371: + if (note->descsz != 148) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + /* pr_cursig */ mgl@1371: + elf_tdata(abfd)->core_signal = bfd_get_16(abfd, note->descdata + 12); mgl@1371: + mgl@1371: + /* pr_pid */ mgl@1371: + elf_tdata(abfd)->core_pid = bfd_get_32(abfd, note->descdata + 24); mgl@1371: + mgl@1371: + /* Make a ".reg/999" section for pr_reg. The size is for 16 mgl@1371: + general-purpose registers, SR and r12_orig (18 * 4 = 72). */ mgl@1371: + return _bfd_elfcore_make_pseudosection(abfd, ".reg", 72, mgl@1371: + note->descpos + 72); mgl@1371: +} mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +avr32_elf_grok_psinfo(bfd *abfd, Elf_Internal_Note *note) mgl@1371: +{ mgl@1371: + /* Linux/AVR32B elf_prpsinfo */ mgl@1371: + if (note->descsz != 128) mgl@1371: + return FALSE; mgl@1371: + mgl@1371: + elf_tdata(abfd)->core_program mgl@1371: + = _bfd_elfcore_strndup(abfd, note->descdata + 32, 16); mgl@1371: + elf_tdata(abfd)->core_command mgl@1371: + = _bfd_elfcore_strndup(abfd, note->descdata + 48, 80); mgl@1371: + mgl@1371: + /* Note that for some reason, a spurious space is tacked mgl@1371: + onto the end of the args in some (at least one anyway) mgl@1371: + implementations, so strip it off if it exists. */ mgl@1371: + mgl@1371: + { mgl@1371: + char *command = elf_tdata (abfd)->core_command; mgl@1371: + int n = strlen (command); mgl@1371: + mgl@1371: + if (0 < n && command[n - 1] == ' ') mgl@1371: + command[n - 1] = '\0'; mgl@1371: + } mgl@1371: + mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +#define ELF_ARCH bfd_arch_avr32 mgl@1371: +#define ELF_MACHINE_CODE EM_AVR32 mgl@1371: +#define ELF_MAXPAGESIZE 0x1000 mgl@1371: + mgl@1371: +#define TARGET_BIG_SYM bfd_elf32_avr32_vec mgl@1371: +#define TARGET_BIG_NAME "elf32-avr32" mgl@1371: + mgl@1371: +#define elf_backend_grok_prstatus avr32_elf_grok_prstatus mgl@1371: +#define elf_backend_grok_psinfo avr32_elf_grok_psinfo mgl@1371: + mgl@1371: +/* Only RELA relocations are used */ mgl@1371: +#define elf_backend_may_use_rel_p 0 mgl@1371: +#define elf_backend_may_use_rela_p 1 mgl@1371: +#define elf_backend_default_use_rela_p 1 mgl@1371: +#define elf_backend_rela_normal 1 mgl@1371: +#define elf_info_to_howto_rel NULL mgl@1371: +#define elf_info_to_howto avr32_info_to_howto mgl@1371: + mgl@1371: +#define bfd_elf32_bfd_copy_private_bfd_data avr32_elf_copy_private_bfd_data mgl@1371: +#define bfd_elf32_bfd_merge_private_bfd_data avr32_elf_merge_private_bfd_data mgl@1371: +#define bfd_elf32_bfd_set_private_flags avr32_elf_set_private_flags mgl@1371: +#define bfd_elf32_bfd_print_private_bfd_data avr32_elf_print_private_bfd_data mgl@1371: +#define bfd_elf32_new_section_hook avr32_elf_new_section_hook mgl@1371: + mgl@1371: +#define elf_backend_gc_mark_hook avr32_elf_gc_mark_hook mgl@1371: +#define elf_backend_gc_sweep_hook avr32_elf_gc_sweep_hook mgl@1371: +#define elf_backend_relocate_section avr32_elf_relocate_section mgl@1371: +#define elf_backend_copy_indirect_symbol avr32_elf_copy_indirect_symbol mgl@1371: +#define elf_backend_create_dynamic_sections avr32_elf_create_dynamic_sections mgl@1371: +#define bfd_elf32_bfd_link_hash_table_create avr32_elf_link_hash_table_create mgl@1371: +#define elf_backend_adjust_dynamic_symbol avr32_elf_adjust_dynamic_symbol mgl@1371: +#define elf_backend_size_dynamic_sections avr32_elf_size_dynamic_sections mgl@1371: +#define elf_backend_finish_dynamic_symbol avr32_elf_finish_dynamic_symbol mgl@1371: +#define elf_backend_finish_dynamic_sections avr32_elf_finish_dynamic_sections mgl@1371: + mgl@1371: +#define bfd_elf32_bfd_relax_section avr32_elf_relax_section mgl@1371: + mgl@1371: +/* Find out which symbols need an entry in .got. */ mgl@1371: +#define elf_backend_check_relocs avr32_check_relocs mgl@1371: +#define elf_backend_can_refcount 1 mgl@1371: +#define elf_backend_can_gc_sections 1 mgl@1371: +#define elf_backend_plt_readonly 1 mgl@1371: +#define elf_backend_plt_not_loaded 1 mgl@1371: +#define elf_backend_want_plt_sym 0 mgl@1371: +#define elf_backend_plt_alignment 2 mgl@1371: +#define elf_backend_want_dynbss 0 mgl@1371: +#define elf_backend_want_got_plt 0 mgl@1371: +#define elf_backend_want_got_sym 1 mgl@1371: +#define elf_backend_got_header_size AVR32_GOT_HEADER_SIZE mgl@1371: + mgl@1371: +#include "elf32-target.h" mgl@1371: --- /dev/null mgl@1371: +++ b/bfd/elf32-avr32.h mgl@1371: @@ -0,0 +1,23 @@ mgl@1371: +/* AVR32-specific support for 32-bit ELF. mgl@1371: + Copyright 2007 Atmel Corporation. mgl@1371: + mgl@1371: + Written by Haavard Skinnemoen, Atmel Norway, mgl@1371: + mgl@1371: + This file is part of BFD, the Binary File Descriptor library. mgl@1371: + mgl@1371: + This program is free software; you can redistribute it and/or modify mgl@1371: + it under the terms of the GNU General Public License as published by mgl@1371: + the Free Software Foundation; either version 2 of the License, or mgl@1371: + (at your option) any later version. mgl@1371: + mgl@1371: + This program is distributed in the hope that it will be useful, mgl@1371: + but WITHOUT ANY WARRANTY; without even the implied warranty of mgl@1371: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the mgl@1371: + GNU General Public License for more details. mgl@1371: + mgl@1371: + You should have received a copy of the GNU General Public License mgl@1371: + along with this program; if not, write to the Free Software mgl@1371: + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ mgl@1371: + mgl@1371: +void bfd_elf32_avr32_set_options(struct bfd_link_info *info, mgl@1371: + int direct_data_refs); mgl@1371: --- a/bfd/elf-bfd.h mgl@1371: +++ b/bfd/elf-bfd.h mgl@1371: @@ -1400,6 +1400,10 @@ struct elf_obj_tdata mgl@1371: find_nearest_line. */ mgl@1371: struct mips_elf_find_line *find_line_info; mgl@1371: mgl@1371: + /* Used by AVR32 ELF relaxation code. Contains an array of pointers mgl@1371: + for each local symbol to the fragment where it is defined. */ mgl@1371: + struct fragment **local_sym_frag; mgl@1371: + mgl@1371: /* A place to stash dwarf1 info for this bfd. */ mgl@1371: struct dwarf1_debug *dwarf1_find_line_info; mgl@1371: mgl@1371: --- a/bfd/Makefile.am mgl@1371: +++ b/bfd/Makefile.am mgl@1371: @@ -63,6 +63,7 @@ ALL_MACHINES = \ mgl@1371: cpu-arc.lo \ mgl@1371: cpu-arm.lo \ mgl@1371: cpu-avr.lo \ mgl@1371: + cpu-avr32.lo \ mgl@1371: cpu-bfin.lo \ mgl@1371: cpu-cr16.lo \ mgl@1371: cpu-cr16c.lo \ mgl@1371: @@ -243,6 +244,7 @@ BFD32_BACKENDS = \ mgl@1371: elf32-arc.lo \ mgl@1371: elf32-arm.lo \ mgl@1371: elf32-avr.lo \ mgl@1371: + elf32-avr32.lo \ mgl@1371: elf32-bfin.lo \ mgl@1371: elf32-cr16.lo \ mgl@1371: elf32-cr16c.lo \ mgl@1371: @@ -1328,6 +1330,10 @@ elf32-cr16.lo: elf32-cr16.c $(INCDIR)/fi mgl@1371: $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h elf-bfd.h \ mgl@1371: $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ mgl@1371: $(INCDIR)/elf/cr16.h $(INCDIR)/elf/reloc-macros.h elf32-target.h mgl@1371: +elf32-avr32.lo: elf32-avr32.c $(INCDIR)/filenames.h elf-bfd.h \ mgl@1371: + $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ mgl@1371: + $(INCDIR)/bfdlink.h $(INCDIR)/elf/avr32.h $(INCDIR)/elf/reloc-macros.h \ mgl@1371: + elf32-target.h mgl@1371: elf32-cr16c.lo: elf32-cr16c.c $(INCDIR)/filenames.h \ mgl@1371: $(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/cr16c.h \ mgl@1371: $(INCDIR)/elf/reloc-macros.h elf-bfd.h $(INCDIR)/elf/common.h \ mgl@1371: --- a/bfd/reloc.c mgl@1371: +++ b/bfd/reloc.c mgl@1371: @@ -3948,6 +3948,131 @@ ENUMDOC mgl@1371: instructions mgl@1371: mgl@1371: ENUM mgl@1371: + BFD_RELOC_AVR32_DIFF32 mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_DIFF16 mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_DIFF8 mgl@1371: +ENUMDOC mgl@1371: + Difference between two labels: L2 - L1. The value of L1 is encoded mgl@1371: + as sym + addend, while the initial difference after assembly is mgl@1371: + inserted into the object file by the assembler. mgl@1371: +ENUM mgl@1371: + BFD_RELOC_AVR32_GOT32 mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_GOT16 mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_GOT8 mgl@1371: +ENUMDOC mgl@1371: + Reference to a symbol through the Global Offset Table. The linker mgl@1371: + will allocate an entry for symbol in the GOT and insert the offset mgl@1371: + of this entry as the relocation value. mgl@1371: +ENUM mgl@1371: + BFD_RELOC_AVR32_21S mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_16U mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_16S mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_SUB5 mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_8S_EXT mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_8S mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_15S mgl@1371: +ENUMDOC mgl@1371: + Normal (non-pc-relative) code relocations. Alignment and signedness mgl@1371: + is indicated by the suffixes. S means signed, U means unsigned. W mgl@1371: + means word-aligned, H means halfword-aligned, neither means mgl@1371: + byte-aligned (no alignment.) SUB5 is the same relocation as 16S. mgl@1371: +ENUM mgl@1371: + BFD_RELOC_AVR32_22H_PCREL mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_18W_PCREL mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_16B_PCREL mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_16N_PCREL mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_14UW_PCREL mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_11H_PCREL mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_10UW_PCREL mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_9H_PCREL mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_9UW_PCREL mgl@1371: +ENUMDOC mgl@1371: + PC-relative relocations are signed if neither 'U' nor 'S' is mgl@1371: + specified. However, we explicitly tack on a 'B' to indicate no mgl@1371: + alignment, to avoid confusion with data relocs. All of these resolve mgl@1371: + to sym + addend - offset, except the one with 'N' (negated) suffix. mgl@1371: + This particular one resolves to offset - sym - addend. mgl@1371: +ENUM mgl@1371: + BFD_RELOC_AVR32_GOTPC mgl@1371: +ENUMDOC mgl@1371: + Subtract the link-time address of the GOT from (symbol + addend) mgl@1371: + and insert the result. mgl@1371: +ENUM mgl@1371: + BFD_RELOC_AVR32_GOTCALL mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_LDA_GOT mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_GOT21S mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_GOT18SW mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_GOT16S mgl@1371: +ENUMDOC mgl@1371: + Reference to a symbol through the GOT. The linker will allocate an mgl@1371: + entry for symbol in the GOT and insert the offset of this entry as mgl@1371: + the relocation value. addend must be zero. As usual, 'S' means mgl@1371: + signed, 'W' means word-aligned, etc. mgl@1371: +ENUM mgl@1371: + BFD_RELOC_AVR32_32_CPENT mgl@1371: +ENUMDOC mgl@1371: + 32-bit constant pool entry. I don't think 8- and 16-bit entries make mgl@1371: + a whole lot of sense. mgl@1371: +ENUM mgl@1371: + BFD_RELOC_AVR32_CPCALL mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_16_CP mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_9W_CP mgl@1371: +ENUMDOC mgl@1371: + Constant pool references. Some of these relocations are signed, mgl@1371: + others are unsigned. It doesn't really matter, since the constant mgl@1371: + pool always comes after the code that references it. mgl@1371: +ENUM mgl@1371: + BFD_RELOC_AVR32_ALIGN mgl@1371: +ENUMDOC mgl@1371: + sym must be the absolute symbol. The addend specifies the alignment mgl@1371: + order, e.g. if addend is 2, the linker must add padding so that the mgl@1371: + next address is aligned to a 4-byte boundary. mgl@1371: +ENUM mgl@1371: + BFD_RELOC_AVR32_14UW mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_10UW mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_10SW mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_STHH_W mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_7UW mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_6S mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_6UW mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_4UH mgl@1371: +ENUMX mgl@1371: + BFD_RELOC_AVR32_3U mgl@1371: +ENUMDOC mgl@1371: + Code relocations that will never make it to the output file. mgl@1371: + mgl@1371: +ENUM mgl@1371: BFD_RELOC_390_12 mgl@1371: ENUMDOC mgl@1371: Direct 12 bit. mgl@1371: --- a/bfd/targets.c mgl@1371: +++ b/bfd/targets.c mgl@1371: @@ -564,6 +564,7 @@ extern const bfd_target bfd_efi_app_ia32 mgl@1371: extern const bfd_target bfd_efi_app_x86_64_vec; mgl@1371: extern const bfd_target bfd_efi_app_ia64_vec; mgl@1371: extern const bfd_target bfd_elf32_avr_vec; mgl@1371: +extern const bfd_target bfd_elf32_avr32_vec; mgl@1371: extern const bfd_target bfd_elf32_bfin_vec; mgl@1371: extern const bfd_target bfd_elf32_bfinfdpic_vec; mgl@1371: extern const bfd_target bfd_elf32_big_generic_vec; mgl@1371: @@ -884,6 +885,7 @@ static const bfd_target * const _bfd_tar mgl@1371: &bfd_efi_app_ia64_vec, mgl@1371: #endif mgl@1371: &bfd_elf32_avr_vec, mgl@1371: + &bfd_elf32_avr32_vec, mgl@1371: &bfd_elf32_bfin_vec, mgl@1371: &bfd_elf32_bfinfdpic_vec, mgl@1371: mgl@1371: --- a/binutils/Makefile.am mgl@1371: +++ b/binutils/Makefile.am mgl@1371: @@ -577,7 +577,7 @@ readelf.o: readelf.c sysdep.h $(INCDIR)/ mgl@1371: $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h dwarf.h \ mgl@1371: $(INCDIR)/elf/common.h $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h \ mgl@1371: $(INCDIR)/elf/h8.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/elf/alpha.h \ mgl@1371: - $(INCDIR)/elf/arc.h $(INCDIR)/elf/arm.h $(INCDIR)/elf/avr.h \ mgl@1371: + $(INCDIR)/elf/arc.h $(INCDIR)/elf/arm.h $(INCDIR)/elf/avr.h $(INCDIR)/elf/avr32.h\ mgl@1371: $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h $(INCDIR)/elf/crx.h \ mgl@1371: $(INCDIR)/elf/d10v.h $(INCDIR)/elf/d30v.h $(INCDIR)/elf/dlx.h \ mgl@1371: $(INCDIR)/elf/fr30.h $(INCDIR)/elf/frv.h $(INCDIR)/elf/hppa.h \ mgl@1371: --- a/binutils/readelf.c mgl@1371: +++ b/binutils/readelf.c mgl@1371: @@ -21,7 +21,7 @@ mgl@1371: along with this program; if not, write to the Free Software mgl@1371: Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA mgl@1371: 02110-1301, USA. */ mgl@1371: - mgl@1371: + mgl@1371: /* The difference between readelf and objdump: mgl@1371: mgl@1371: Both programs are capable of displaying the contents of ELF format files, mgl@1371: @@ -40,7 +40,7 @@ mgl@1371: There is also the case that readelf can provide more information about an mgl@1371: ELF file than is provided by objdump. In particular it can display DWARF mgl@1371: debugging information which (at the moment) objdump cannot. */ mgl@1371: - mgl@1371: + mgl@1371: #include "sysdep.h" mgl@1371: #include mgl@1371: #include mgl@1371: @@ -109,6 +109,7 @@ mgl@1371: #include "elf/arc.h" mgl@1371: #include "elf/arm.h" mgl@1371: #include "elf/avr.h" mgl@1371: +#include "elf/avr32.h" mgl@1371: #include "elf/bfin.h" mgl@1371: #include "elf/cr16.h" mgl@1371: #include "elf/cris.h" mgl@1371: @@ -303,7 +304,7 @@ static void (*byte_put) (unsigned char * mgl@1371: #define streq(a,b) (strcmp ((a), (b)) == 0) mgl@1371: #define strneq(a,b,n) (strncmp ((a), (b), (n)) == 0) mgl@1371: #define const_strneq(a,b) (strncmp ((a), (b), sizeof (b) - 1) == 0) mgl@1371: - mgl@1371: + mgl@1371: static void * mgl@1371: get_data (void *var, FILE *file, long offset, size_t size, size_t nmemb, mgl@1371: const char *reason) mgl@1371: @@ -614,6 +615,7 @@ guess_is_rela (unsigned long e_machine) mgl@1371: case EM_ALPHA: mgl@1371: case EM_ALTERA_NIOS2: mgl@1371: case EM_AVR: mgl@1371: + case EM_AVR32: mgl@1371: case EM_AVR_OLD: mgl@1371: case EM_BLACKFIN: mgl@1371: case EM_CR16: mgl@1371: @@ -1006,6 +1008,10 @@ dump_relocations (FILE *file, mgl@1371: rtype = elf_avr_reloc_type (type); mgl@1371: break; mgl@1371: mgl@1371: + case EM_AVR32: mgl@1371: + rtype = elf_avr32_reloc_type (type); mgl@1371: + break; mgl@1371: + mgl@1371: case EM_OLD_SPARCV9: mgl@1371: case EM_SPARC32PLUS: mgl@1371: case EM_SPARCV9: mgl@1371: @@ -1763,6 +1769,7 @@ get_machine_name (unsigned e_machine) mgl@1371: case EM_VAX: return "Digital VAX"; mgl@1371: case EM_AVR_OLD: mgl@1371: case EM_AVR: return "Atmel AVR 8-bit microcontroller"; mgl@1371: + case EM_AVR32: return "Atmel AVR32"; mgl@1371: case EM_CRIS: return "Axis Communications 32-bit embedded processor"; mgl@1371: case EM_JAVELIN: return "Infineon Technologies 32-bit embedded cpu"; mgl@1371: case EM_FIREPATH: return "Element 14 64-bit DSP processor"; mgl@1371: --- a/gas/as.c mgl@1371: +++ b/gas/as.c mgl@1371: @@ -441,10 +441,10 @@ parse_args (int * pargc, char *** pargv) mgl@1371: the end of the preceeding line so that it is simpler to mgl@1371: selectively add and remove lines from this list. */ mgl@1371: {"alternate", no_argument, NULL, OPTION_ALTERNATE} mgl@1371: - /* The entry for "a" is here to prevent getopt_long_only() from mgl@1371: - considering that -a is an abbreviation for --alternate. This is mgl@1371: - necessary because -a= is a valid switch but getopt would mgl@1371: - normally reject it since --alternate does not take an argument. */ mgl@1371: + /* The next two entries are here to prevent getopt_long_only() from mgl@1371: + considering that -a or -al is an abbreviation for --alternate. mgl@1371: + This is necessary because -a= is a valid switch but getopt mgl@1371: + would normally reject it since --alternate does not take an argument. */ mgl@1371: ,{"a", optional_argument, NULL, 'a'} mgl@1371: /* Handle -al=. */ mgl@1371: ,{"al", optional_argument, NULL, OPTION_AL} mgl@1371: @@ -803,8 +803,15 @@ This program has absolutely no warranty. mgl@1371: case 'a': mgl@1371: if (optarg) mgl@1371: { mgl@1371: - if (optarg != old_argv[optind] && optarg[-1] == '=') mgl@1371: - --optarg; mgl@1371: + /* If optarg is part of the -a switch and not a separate argument mgl@1371: + in its own right, then scan backwards to the just after the -a. mgl@1371: + This means skipping over both '=' and 'l' which might have been mgl@1371: + taken to be part of the -a switch itself. */ mgl@1371: + if (optarg != old_argv[optind]) mgl@1371: + { mgl@1371: + while (optarg[-1] == '=' || optarg[-1] == 'l') mgl@1371: + --optarg; mgl@1371: + } mgl@1371: mgl@1371: if (md_parse_option (optc, optarg) != 0) mgl@1371: break; mgl@1371: @@ -1234,7 +1241,7 @@ main (int argc, char ** argv) mgl@1371: keep_it = 0; mgl@1371: mgl@1371: if (!keep_it) mgl@1371: - unlink_if_ordinary (out_file_name); mgl@1371: + unlink (out_file_name); mgl@1371: mgl@1371: input_scrub_end (); mgl@1371: mgl@1371: --- /dev/null mgl@1371: +++ b/gas/config/tc-avr32.c mgl@1371: @@ -0,0 +1,4806 @@ mgl@1371: +/* Assembler implementation for AVR32. mgl@1371: + Copyright 2003-2006 Atmel Corporation. mgl@1371: + mgl@1371: + Written by Haavard Skinnemoen, Atmel Norway, mgl@1371: + mgl@1371: + This file is part of GAS, the GNU Assembler. mgl@1371: + mgl@1371: + GAS is free software; you can redistribute it and/or modify it mgl@1371: + under the terms of the GNU General Public License as published by mgl@1371: + the Free Software Foundation; either version 2, or (at your option) mgl@1371: + any later version. mgl@1371: + mgl@1371: + GAS is distributed in the hope that it will be useful, but WITHOUT mgl@1371: + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY mgl@1371: + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public mgl@1371: + License for more details. mgl@1371: + mgl@1371: + You should have received a copy of the GNU General Public License mgl@1371: + along with GAS; see the file COPYING. If not, write to the Free mgl@1371: + Software Foundation, 59 Temple Place - Suite 330, Boston, MA mgl@1371: + 02111-1307, USA. */ mgl@1371: + mgl@1371: +#include mgl@1371: +#include "as.h" mgl@1371: +#include "safe-ctype.h" mgl@1371: +#include "subsegs.h" mgl@1371: +#include "symcat.h" mgl@1371: +#include "opcodes/avr32-opc.h" mgl@1371: +#include "opcodes/avr32-asm.h" mgl@1371: +#include "elf/avr32.h" mgl@1371: +#include "dwarf2dbg.h" mgl@1371: + mgl@1371: +#define xDEBUG mgl@1371: +#define xOPC_CONSISTENCY_CHECK mgl@1371: + mgl@1371: +#ifdef DEBUG mgl@1371: +# define pr_debug(fmt, args...) fprintf(stderr, fmt, ##args) mgl@1371: +#else mgl@1371: +# define pr_debug(fmt, args...) mgl@1371: +#endif mgl@1371: + mgl@1371: +/* 3 MSB of instruction word indicate group. Group 7 -> extended */ mgl@1371: +#define AVR32_COMPACT_P(opcode) ((opcode[0] & 0xe0) != 0xe0) mgl@1371: + mgl@1371: +#define streq(a, b) (strcmp(a, b) == 0) mgl@1371: +#define skip_whitespace(str) do { while(*(str) == ' ') ++(str); } while(0) mgl@1371: + mgl@1371: +/* Flags given on the command line */ mgl@1371: +static int avr32_pic = FALSE; mgl@1371: +int linkrelax = FALSE; mgl@1371: +int avr32_iarcompat = FALSE; mgl@1371: + mgl@1371: +/* This array holds the chars that always start a comment. */ mgl@1371: +const char comment_chars[] = "#"; mgl@1371: + mgl@1371: +/* This array holds the chars that only start a comment at the mgl@1371: + beginning of a line. We must include '#' here because the compiler mgl@1371: + may produce #APP and #NO_APP in its output. */ mgl@1371: +const char line_comment_chars[] = "#"; mgl@1371: + mgl@1371: +/* These may be used instead of newline (same as ';' in C). */ mgl@1371: +const char line_separator_chars[] = ";"; mgl@1371: + mgl@1371: +/* Chars that can be used to separate mantissa from exponent in mgl@1371: + floating point numbers. */ mgl@1371: +const char EXP_CHARS[] = "eE"; mgl@1371: + mgl@1371: +/* Chars that mean this number is a floating point constant. */ mgl@1371: +const char FLT_CHARS[] = "dD"; mgl@1371: + mgl@1371: +/* Pre-defined "_GLOBAL_OFFSET_TABLE_" */ mgl@1371: +symbolS *GOT_symbol; mgl@1371: + mgl@1371: +static struct hash_control *avr32_mnemonic_htab; mgl@1371: + mgl@1371: +struct avr32_ifield_data mgl@1371: +{ mgl@1371: + bfd_vma value; mgl@1371: + /* FIXME: Get rid of align_order and complain. complain is never mgl@1371: + used, align_order is used in one place. Try to use the relax mgl@1371: + table instead. */ mgl@1371: + unsigned int align_order; mgl@1371: +}; mgl@1371: + mgl@1371: +struct avr32_insn mgl@1371: +{ mgl@1371: + const struct avr32_syntax *syntax; mgl@1371: + expressionS immediate; mgl@1371: + int pcrel; mgl@1371: + int force_extended; mgl@1371: + unsigned int next_slot; mgl@1371: + bfd_reloc_code_real_type r_type; mgl@1371: + struct avr32_ifield_data field_value[AVR32_MAX_FIELDS]; mgl@1371: +}; mgl@1371: + mgl@1371: +static struct avr32_insn current_insn; mgl@1371: + mgl@1371: +/* The target specific pseudo-ops we support. */ mgl@1371: +static void s_rseg (int); mgl@1371: +static void s_cpool(int); mgl@1371: + mgl@1371: +const pseudo_typeS md_pseudo_table[] = mgl@1371: +{ mgl@1371: + /* Make sure that .word is 32 bits */ mgl@1371: + { "word", cons, 4 }, mgl@1371: + { "file", (void (*) PARAMS ((int))) dwarf2_directive_file, 0 }, mgl@1371: + { "loc", dwarf2_directive_loc, 0 }, mgl@1371: + mgl@1371: + /* .lcomm requires an explicit alignment parameter */ mgl@1371: + { "lcomm", s_lcomm, 1 }, mgl@1371: + mgl@1371: + /* AVR32-specific pseudo-ops */ mgl@1371: + { "cpool", s_cpool, 0}, mgl@1371: + mgl@1371: + /* IAR compatible pseudo-ops */ mgl@1371: + { "program", s_ignore, 0 }, mgl@1371: + { "public", s_globl, 0 }, mgl@1371: + { "extern", s_ignore, 0 }, mgl@1371: + { "module", s_ignore, 0 }, mgl@1371: + { "rseg", s_rseg, 0 }, mgl@1371: + { "dc8", cons, 1 }, mgl@1371: + { "dc16", cons, 2 }, mgl@1371: + { "dc32", cons, 4 }, mgl@1371: + mgl@1371: + { NULL, NULL, 0 } mgl@1371: +}; mgl@1371: + mgl@1371: +/* Questionable stuff starts here */ mgl@1371: + mgl@1371: +enum avr32_opinfo { mgl@1371: + AVR32_OPINFO_NONE = BFD_RELOC_NONE, mgl@1371: + AVR32_OPINFO_GOT, mgl@1371: + AVR32_OPINFO_TLSGD, mgl@1371: + AVR32_OPINFO_HI, mgl@1371: + AVR32_OPINFO_LO, mgl@1371: +}; mgl@1371: + mgl@1371: +enum avr32_arch { mgl@1371: + ARCH_TYPE_AP, mgl@1371: + ARCH_TYPE_UCR1, mgl@1371: + ARCH_TYPE_UCR2, mgl@1371: +}; mgl@1371: + mgl@1371: +struct arch_type_s mgl@1371: +{ mgl@1371: + /* Architecture name */ mgl@1371: + char *name; mgl@1371: + /* Instruction Set Architecture Flags */ mgl@1371: + unsigned long isa_flags; mgl@1371: +}; mgl@1371: + mgl@1371: +struct part_type_s mgl@1371: +{ mgl@1371: + /* Part name */ mgl@1371: + char *name; mgl@1371: + /* Architecture type */ mgl@1371: + unsigned int arch; mgl@1371: +}; mgl@1371: + mgl@1371: +static struct arch_type_s arch_types[] = mgl@1371: +{ mgl@1371: + {"ap", AVR32_V1 | AVR32_SIMD | AVR32_DSP | AVR32_PICO}, mgl@1371: + {"ucr1", AVR32_V1 | AVR32_DSP | AVR32_RMW}, mgl@1371: + {"ucr2", AVR32_V1 | AVR32_V2 | AVR32_DSP | AVR32_RMW}, mgl@1371: + {"all-insn", AVR32_V1 | AVR32_V2 | AVR32_SIMD | AVR32_DSP | AVR32_RMW | AVR32_FP | AVR32_PICO}, mgl@1371: + {NULL, 0} mgl@1371: +}; mgl@1371: + mgl@1371: +static struct part_type_s part_types[] = { mgl@1371: + {"ap7000", ARCH_TYPE_AP}, mgl@1371: + {"ap7001", ARCH_TYPE_AP}, mgl@1371: + {"ap7002", ARCH_TYPE_AP}, mgl@1371: + {"ap7200", ARCH_TYPE_AP}, mgl@1371: + {"uc3a0128", ARCH_TYPE_UCR2}, mgl@1371: + {"uc3a0256", ARCH_TYPE_UCR2}, mgl@1371: + {"uc3a0512es", ARCH_TYPE_UCR1}, mgl@1371: + {"uc3a0512", ARCH_TYPE_UCR2}, mgl@1371: + {"uc3a1128", ARCH_TYPE_UCR2}, mgl@1371: + {"uc3a1256es", ARCH_TYPE_UCR1}, mgl@1371: + {"uc3a1256", ARCH_TYPE_UCR2}, mgl@1371: + {"uc3a1512es", ARCH_TYPE_UCR1}, mgl@1371: + {"uc3a1512", ARCH_TYPE_UCR2}, mgl@1371: + {"uc3a364", ARCH_TYPE_UCR2}, mgl@1371: + {"uc3a364s", ARCH_TYPE_UCR2}, mgl@1371: + {"uc3a3128", ARCH_TYPE_UCR2}, mgl@1371: + {"uc3a3128s", ARCH_TYPE_UCR2}, mgl@1371: + {"uc3a3256", ARCH_TYPE_UCR2}, mgl@1371: + {"uc3a3256s", ARCH_TYPE_UCR2}, mgl@1371: + {"uc3b064", ARCH_TYPE_UCR1}, mgl@1371: + {"uc3b0128", ARCH_TYPE_UCR1}, mgl@1371: + {"uc3b0256es", ARCH_TYPE_UCR1}, mgl@1371: + {"uc3b0256", ARCH_TYPE_UCR1}, mgl@1371: + {"uc3b164", ARCH_TYPE_UCR1}, mgl@1371: + {"uc3b1128", ARCH_TYPE_UCR1}, mgl@1371: + {"uc3b1256es", ARCH_TYPE_UCR1}, mgl@1371: + {"uc3b1256", ARCH_TYPE_UCR1}, mgl@1371: + {NULL, 0} mgl@1371: +}; mgl@1371: + mgl@1371: +/* Current architecture type. */ mgl@1371: +static struct arch_type_s default_arch = {"all-insn", AVR32_V1 | AVR32_V2 | AVR32_SIMD | AVR32_DSP | AVR32_RMW | AVR32_FP | AVR32_PICO }; mgl@1371: +static struct arch_type_s *avr32_arch = &default_arch; mgl@1371: + mgl@1371: +/* Display nicely formatted list of known part- and architecture names. */ mgl@1371: + mgl@1371: +static void mgl@1371: +show_arch_list (FILE *stream) mgl@1371: +{ mgl@1371: + int i, x; mgl@1371: + mgl@1371: + fprintf (stream, _("Known architecture names:")); mgl@1371: + x = 1000; mgl@1371: + mgl@1371: + for (i = 0; arch_types[i].name; i++) mgl@1371: + { mgl@1371: + int len = strlen (arch_types[i].name); mgl@1371: + mgl@1371: + x += len + 1; mgl@1371: + mgl@1371: + if (x < 75) mgl@1371: + fprintf (stream, " %s", arch_types[i].name); mgl@1371: + else mgl@1371: + { mgl@1371: + fprintf (stream, "\n %s", arch_types[i].name); mgl@1371: + x = len + 2; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + fprintf (stream, "\n"); mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +show_part_list (FILE *stream) mgl@1371: +{ mgl@1371: + int i, x; mgl@1371: + mgl@1371: + fprintf (stream, _("Known part names:")); mgl@1371: + x = 1000; mgl@1371: + mgl@1371: + for (i = 0; part_types[i].name; i++) mgl@1371: + { mgl@1371: + int len = strlen(part_types[i].name); mgl@1371: + mgl@1371: + x += len + 1; mgl@1371: + mgl@1371: + if (x < 75) mgl@1371: + fprintf (stream, " %s", part_types[i].name); mgl@1371: + else mgl@1371: + { mgl@1371: + fprintf(stream, "\n %s", part_types[i].name); mgl@1371: + x = len + 2; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + fprintf (stream, "\n"); mgl@1371: +} mgl@1371: + mgl@1371: +const char *md_shortopts = ""; mgl@1371: +struct option md_longopts[] = mgl@1371: +{ mgl@1371: +#define OPTION_ARCH (OPTION_MD_BASE) mgl@1371: +#define OPTION_PART (OPTION_ARCH + 1) mgl@1371: +#define OPTION_IAR (OPTION_PART + 1) mgl@1371: +#define OPTION_PIC (OPTION_IAR + 1) mgl@1371: +#define OPTION_NOPIC (OPTION_PIC + 1) mgl@1371: +#define OPTION_LINKRELAX (OPTION_NOPIC + 1) mgl@1371: +#define OPTION_NOLINKRELAX (OPTION_LINKRELAX + 1) mgl@1371: +#define OPTION_DIRECT_DATA_REFS (OPTION_NOLINKRELAX + 1) mgl@1371: + {"march", required_argument, NULL, OPTION_ARCH}, mgl@1371: + {"mpart", required_argument, NULL, OPTION_PART}, mgl@1371: + {"iar", no_argument, NULL, OPTION_IAR}, mgl@1371: + {"pic", no_argument, NULL, OPTION_PIC}, mgl@1371: + {"no-pic", no_argument, NULL, OPTION_NOPIC}, mgl@1371: + {"linkrelax", no_argument, NULL, OPTION_LINKRELAX}, mgl@1371: + {"no-linkrelax", no_argument, NULL, OPTION_NOLINKRELAX}, mgl@1371: + /* deprecated alias for -mpart=xxx */ mgl@1371: + {"mcpu", required_argument, NULL, OPTION_PART}, mgl@1371: + {NULL, no_argument, NULL, 0} mgl@1371: +}; mgl@1371: + mgl@1371: +size_t md_longopts_size = sizeof (md_longopts); mgl@1371: + mgl@1371: +void mgl@1371: +md_show_usage (FILE *stream) mgl@1371: +{ mgl@1371: + fprintf (stream, _("\ mgl@1371: +AVR32 options:\n\ mgl@1371: + -march=[arch-name] Select cpu architecture. [Default `all-insn']\n\ mgl@1371: + -mpart=[part-name] Select specific part. [Default `none']\n\ mgl@1371: + --pic Produce Position-Independent Code\n\ mgl@1371: + --no-pic Don't produce Position-Independent Code\n\ mgl@1371: + --linkrelax Produce output suitable for linker relaxing\n\ mgl@1371: + --no-linkrelax Don't produce output suitable for linker relaxing\n")); mgl@1371: + show_arch_list(stream); mgl@1371: +} mgl@1371: + mgl@1371: +int mgl@1371: +md_parse_option (int c, char *arg ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + switch (c) mgl@1371: + { mgl@1371: + case OPTION_ARCH: mgl@1371: + { mgl@1371: + int i; mgl@1371: + char *s = alloca (strlen (arg) + 1); mgl@1371: + mgl@1371: + { mgl@1371: + char *t = s; mgl@1371: + char *arg1 = arg; mgl@1371: + mgl@1371: + do mgl@1371: + *t = TOLOWER (*arg1++); mgl@1371: + while (*t++); mgl@1371: + } mgl@1371: + mgl@1371: + /* Add backward compability */ mgl@1371: + if (strcmp ("uc", s)== 0) mgl@1371: + { mgl@1371: + as_warn("Deprecated arch `%s' specified. " mgl@1371: + "Please use '-march=ucr1' instead. " mgl@1371: + "Converting to arch 'ucr1'\n", mgl@1371: + s); mgl@1371: + s="ucr1"; mgl@1371: + } mgl@1371: + mgl@1371: + for (i = 0; arch_types[i].name; ++i) mgl@1371: + if (strcmp (arch_types[i].name, s) == 0) mgl@1371: + break; mgl@1371: + mgl@1371: + if (!arch_types[i].name) mgl@1371: + { mgl@1371: + show_arch_list (stderr); mgl@1371: + as_fatal (_("unknown architecture: %s\n"), arg); mgl@1371: + } mgl@1371: + mgl@1371: + avr32_arch = &arch_types[i]; mgl@1371: + break; mgl@1371: + } mgl@1371: + case OPTION_PART: mgl@1371: + { mgl@1371: + int i; mgl@1371: + char *s = alloca (strlen (arg) + 1); mgl@1371: + char *t = s; mgl@1371: + char *p = arg; mgl@1371: + mgl@1371: + /* If arch type has already been set, don't bother. mgl@1371: + -march= always overrides -mpart= */ mgl@1371: + if (avr32_arch != &default_arch) mgl@1371: + break; mgl@1371: + mgl@1371: + do mgl@1371: + *t = TOLOWER (*p++); mgl@1371: + while (*t++); mgl@1371: + mgl@1371: + for (i = 0; part_types[i].name; ++i) mgl@1371: + if (strcmp (part_types[i].name, s) == 0) mgl@1371: + break; mgl@1371: + mgl@1371: + if (!part_types[i].name) mgl@1371: + { mgl@1371: + show_part_list (stderr); mgl@1371: + as_fatal (_("unknown part: %s\n"), arg); mgl@1371: + } mgl@1371: + mgl@1371: + avr32_arch = &arch_types[part_types[i].arch]; mgl@1371: + break; mgl@1371: + } mgl@1371: + case OPTION_IAR: mgl@1371: + avr32_iarcompat = 1; mgl@1371: + break; mgl@1371: + case OPTION_PIC: mgl@1371: + avr32_pic = 1; mgl@1371: + break; mgl@1371: + case OPTION_NOPIC: mgl@1371: + avr32_pic = 0; mgl@1371: + break; mgl@1371: + case OPTION_LINKRELAX: mgl@1371: + linkrelax = 1; mgl@1371: + break; mgl@1371: + case OPTION_NOLINKRELAX: mgl@1371: + linkrelax = 0; mgl@1371: + break; mgl@1371: + default: mgl@1371: + return 0; mgl@1371: + } mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +/* Can't use symbol_new here, so have to create a symbol and then at mgl@1371: + a later date assign it a value. Thats what these functions do. mgl@1371: + mgl@1371: + Shamelessly stolen from ARM. */ mgl@1371: + mgl@1371: +static void mgl@1371: +symbol_locate (symbolS * symbolP, mgl@1371: + const char * name, /* It is copied, the caller can modify. */ mgl@1371: + segT segment, /* Segment identifier (SEG_). */ mgl@1371: + valueT valu, /* Symbol value. */ mgl@1371: + fragS * frag) /* Associated fragment. */ mgl@1371: +{ mgl@1371: + unsigned int name_length; mgl@1371: + char * preserved_copy_of_name; mgl@1371: + mgl@1371: + name_length = strlen (name) + 1; /* +1 for \0. */ mgl@1371: + obstack_grow (¬es, name, name_length); mgl@1371: + preserved_copy_of_name = obstack_finish (¬es); mgl@1371: +#ifdef STRIP_UNDERSCORE mgl@1371: + if (preserved_copy_of_name[0] == '_') mgl@1371: + preserved_copy_of_name++; mgl@1371: +#endif mgl@1371: + mgl@1371: +#ifdef tc_canonicalize_symbol_name mgl@1371: + preserved_copy_of_name = mgl@1371: + tc_canonicalize_symbol_name (preserved_copy_of_name); mgl@1371: +#endif mgl@1371: + mgl@1371: + S_SET_NAME (symbolP, preserved_copy_of_name); mgl@1371: + mgl@1371: + S_SET_SEGMENT (symbolP, segment); mgl@1371: + S_SET_VALUE (symbolP, valu); mgl@1371: + symbol_clear_list_pointers (symbolP); mgl@1371: + mgl@1371: + symbol_set_frag (symbolP, frag); mgl@1371: + mgl@1371: + /* Link to end of symbol chain. */ mgl@1371: + { mgl@1371: + extern int symbol_table_frozen; mgl@1371: + mgl@1371: + if (symbol_table_frozen) mgl@1371: + abort (); mgl@1371: + } mgl@1371: + mgl@1371: + symbol_append (symbolP, symbol_lastP, & symbol_rootP, & symbol_lastP); mgl@1371: + mgl@1371: + obj_symbol_new_hook (symbolP); mgl@1371: + mgl@1371: +#ifdef tc_symbol_new_hook mgl@1371: + tc_symbol_new_hook (symbolP); mgl@1371: +#endif mgl@1371: + mgl@1371: +#ifdef DEBUG_SYMS mgl@1371: + verify_symbol_chain (symbol_rootP, symbol_lastP); mgl@1371: +#endif /* DEBUG_SYMS */ mgl@1371: +} mgl@1371: + mgl@1371: +struct cpool_entry mgl@1371: +{ mgl@1371: + int refcount; mgl@1371: + offsetT offset; mgl@1371: + expressionS exp; mgl@1371: +}; mgl@1371: + mgl@1371: +struct cpool mgl@1371: +{ mgl@1371: + struct cpool *next; mgl@1371: + int used; mgl@1371: + struct cpool_entry *literals; mgl@1371: + unsigned int padding; mgl@1371: + unsigned int next_free_entry; mgl@1371: + unsigned int id; mgl@1371: + symbolS *symbol; mgl@1371: + segT section; mgl@1371: + subsegT sub_section; mgl@1371: +}; mgl@1371: + mgl@1371: +struct cpool *cpool_list = NULL; mgl@1371: + mgl@1371: +static struct cpool * mgl@1371: +find_cpool(segT section, subsegT sub_section) mgl@1371: +{ mgl@1371: + struct cpool *pool; mgl@1371: + mgl@1371: + for (pool = cpool_list; pool != NULL; pool = pool->next) mgl@1371: + { mgl@1371: + if (!pool->used mgl@1371: + && pool->section == section mgl@1371: + && pool->sub_section == sub_section) mgl@1371: + break; mgl@1371: + } mgl@1371: + mgl@1371: + return pool; mgl@1371: +} mgl@1371: + mgl@1371: +static struct cpool * mgl@1371: +find_or_make_cpool(segT section, subsegT sub_section) mgl@1371: +{ mgl@1371: + static unsigned int next_cpool_id = 0; mgl@1371: + struct cpool *pool; mgl@1371: + mgl@1371: + pool = find_cpool(section, sub_section); mgl@1371: + mgl@1371: + if (!pool) mgl@1371: + { mgl@1371: + pool = xmalloc(sizeof(*pool)); mgl@1371: + if (!pool) mgl@1371: + return NULL; mgl@1371: + mgl@1371: + pool->used = 0; mgl@1371: + pool->literals = NULL; mgl@1371: + pool->padding = 0; mgl@1371: + pool->next_free_entry = 0; mgl@1371: + pool->section = section; mgl@1371: + pool->sub_section = sub_section; mgl@1371: + pool->next = cpool_list; mgl@1371: + pool->symbol = NULL; mgl@1371: + mgl@1371: + cpool_list = pool; mgl@1371: + } mgl@1371: + mgl@1371: + /* NULL symbol means that the pool is new or has just been emptied. */ mgl@1371: + if (!pool->symbol) mgl@1371: + { mgl@1371: + pool->symbol = symbol_create(FAKE_LABEL_NAME, undefined_section, mgl@1371: + 0, &zero_address_frag); mgl@1371: + pool->id = next_cpool_id++; mgl@1371: + } mgl@1371: + mgl@1371: + return pool; mgl@1371: +} mgl@1371: + mgl@1371: +static struct cpool * mgl@1371: +add_to_cpool(expressionS *exp, unsigned int *index, int ref) mgl@1371: +{ mgl@1371: + struct cpool *pool; mgl@1371: + unsigned int entry; mgl@1371: + mgl@1371: + pool = find_or_make_cpool(now_seg, now_subseg); mgl@1371: + mgl@1371: + /* Check if this constant is already in the pool. */ mgl@1371: + for (entry = 0; entry < pool->next_free_entry; entry++) mgl@1371: + { mgl@1371: + if ((pool->literals[entry].exp.X_op == exp->X_op) mgl@1371: + && (exp->X_op == O_constant) mgl@1371: + && (pool->literals[entry].exp.X_add_number mgl@1371: + == exp->X_add_number) mgl@1371: + && (pool->literals[entry].exp.X_unsigned mgl@1371: + == exp->X_unsigned)) mgl@1371: + break; mgl@1371: + mgl@1371: + if ((pool->literals[entry].exp.X_op == exp->X_op) mgl@1371: + && (exp->X_op == O_symbol) mgl@1371: + && (pool->literals[entry].exp.X_add_number mgl@1371: + == exp->X_add_number) mgl@1371: + && (pool->literals[entry].exp.X_add_symbol mgl@1371: + == exp->X_add_symbol) mgl@1371: + && (pool->literals[entry].exp.X_op_symbol mgl@1371: + == exp->X_op_symbol)) mgl@1371: + break; mgl@1371: + } mgl@1371: + mgl@1371: + /* Create an entry if we didn't find a match */ mgl@1371: + if (entry == pool->next_free_entry) mgl@1371: + { mgl@1371: + pool->literals = xrealloc(pool->literals, mgl@1371: + sizeof(struct cpool_entry) * (entry + 1)); mgl@1371: + pool->literals[entry].exp = *exp; mgl@1371: + pool->literals[entry].refcount = 0; mgl@1371: + pool->next_free_entry++; mgl@1371: + } mgl@1371: + mgl@1371: + if (index) mgl@1371: + *index = entry; mgl@1371: + if (ref) mgl@1371: + pool->literals[entry].refcount++; mgl@1371: + mgl@1371: + return pool; mgl@1371: +} mgl@1371: + mgl@1371: +struct avr32_operand mgl@1371: +{ mgl@1371: + int id; mgl@1371: + int is_signed; mgl@1371: + int is_pcrel; mgl@1371: + int align_order; mgl@1371: + int (*match)(char *str); mgl@1371: + void (*parse)(const struct avr32_operand *op, char *str, int opindex); mgl@1371: +}; mgl@1371: + mgl@1371: +static int mgl@1371: +match_anything(char *str ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +match_intreg(char *str) mgl@1371: +{ mgl@1371: + int regid, ret = 1; mgl@1371: + mgl@1371: + regid = avr32_parse_intreg(str); mgl@1371: + if (regid < 0) mgl@1371: + ret = 0; mgl@1371: + mgl@1371: + pr_debug("match_intreg: `%s': %d\n", str, ret); mgl@1371: + mgl@1371: + return ret; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +match_intreg_predec(char *str) mgl@1371: +{ mgl@1371: + int regid; mgl@1371: + mgl@1371: + if (str[0] != '-' || str[1] != '-') mgl@1371: + return 0; mgl@1371: + mgl@1371: + regid = avr32_parse_intreg(str + 2); mgl@1371: + if (regid < 0) mgl@1371: + return 0; mgl@1371: + mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +match_intreg_postinc(char *str) mgl@1371: +{ mgl@1371: + int regid, ret = 1; mgl@1371: + char *p, c; mgl@1371: + mgl@1371: + for (p = str; *p; p++) mgl@1371: + if (*p == '+') mgl@1371: + break; mgl@1371: + mgl@1371: + if (p[0] != '+' || p[1] != '+') mgl@1371: + return 0; mgl@1371: + mgl@1371: + c = *p, *p = 0; mgl@1371: + regid = avr32_parse_intreg(str); mgl@1371: + if (regid < 0) mgl@1371: + ret = 0; mgl@1371: + mgl@1371: + *p = c; mgl@1371: + return ret; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +match_intreg_lsl(char *str) mgl@1371: +{ mgl@1371: + int regid, ret = 1; mgl@1371: + char *p, c; mgl@1371: + mgl@1371: + for (p = str; *p; p++) mgl@1371: + if (*p == '<') mgl@1371: + break; mgl@1371: + mgl@1371: + if (p[0] && p[1] != '<') mgl@1371: + return 0; mgl@1371: + mgl@1371: + c = *p, *p = 0; mgl@1371: + regid = avr32_parse_intreg(str); mgl@1371: + if (regid < 0) mgl@1371: + ret = 0; mgl@1371: + mgl@1371: + *p = c; mgl@1371: + return ret; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +match_intreg_lsr(char *str) mgl@1371: +{ mgl@1371: + int regid, ret = 1; mgl@1371: + char *p, c; mgl@1371: + mgl@1371: + for (p = str; *p; p++) mgl@1371: + if (*p == '>') mgl@1371: + break; mgl@1371: + mgl@1371: + if (p[0] && p[1] != '>') mgl@1371: + return 0; mgl@1371: + mgl@1371: + c = *p, *p = 0; mgl@1371: + mgl@1371: + regid = avr32_parse_intreg(str); mgl@1371: + if (regid < 0) mgl@1371: + ret = 0; mgl@1371: + mgl@1371: + *p = c; mgl@1371: + return ret; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +match_intreg_part(char *str) mgl@1371: +{ mgl@1371: + int regid, ret = 1; mgl@1371: + char *p, c; mgl@1371: + mgl@1371: + for (p = str; *p; p++) mgl@1371: + if (*p == ':') mgl@1371: + break; mgl@1371: + mgl@1371: + if (p[0] != ':' || !ISPRINT(p[1]) || p[2] != '\0') mgl@1371: + return 0; mgl@1371: + mgl@1371: + c = *p, *p = 0; mgl@1371: + regid = avr32_parse_intreg(str); mgl@1371: + if (regid < 0) mgl@1371: + ret = 0; mgl@1371: + mgl@1371: + *p = c; mgl@1371: + mgl@1371: + return ret; mgl@1371: +} mgl@1371: + mgl@1371: +#define match_intreg_disp match_anything mgl@1371: + mgl@1371: +static int mgl@1371: +match_intreg_index(char *str) mgl@1371: +{ mgl@1371: + int regid, ret = 1; mgl@1371: + char *p, *end, c; mgl@1371: + mgl@1371: + for (p = str; *p; p++) mgl@1371: + if (*p == '[') mgl@1371: + break; mgl@1371: + mgl@1371: + /* don't allow empty displacement here (it makes no sense) */ mgl@1371: + if (p[0] != '[') mgl@1371: + return 0; mgl@1371: + mgl@1371: + for (end = p + 1; *end; end++) ; mgl@1371: + if (*(--end) != ']') mgl@1371: + return 0; mgl@1371: + mgl@1371: + c = *end, *end = 0; mgl@1371: + if (!match_intreg_lsl(p + 1)) mgl@1371: + ret = 0; mgl@1371: + *end = c; mgl@1371: + mgl@1371: + if (ret) mgl@1371: + { mgl@1371: + c = *p, *p = 0; mgl@1371: + regid = avr32_parse_intreg(str); mgl@1371: + if (regid < 0) mgl@1371: + ret = 0; mgl@1371: + *p = c; mgl@1371: + } mgl@1371: + mgl@1371: + return ret; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +match_intreg_xindex(char *str) mgl@1371: +{ mgl@1371: + int regid, ret = 1; mgl@1371: + char *p, *end, c; mgl@1371: + mgl@1371: + for (p = str; *p; p++) mgl@1371: + if (*p == '[') mgl@1371: + break; mgl@1371: + mgl@1371: + /* empty displacement makes no sense here either */ mgl@1371: + if (p[0] != '[') mgl@1371: + return 0; mgl@1371: + mgl@1371: + for (end = p + 1; *end; end++) mgl@1371: + if (*end == '<') mgl@1371: + break; mgl@1371: + mgl@1371: + if (!streq(end, "<<2]")) mgl@1371: + return 0; mgl@1371: + mgl@1371: + c = *end, *end = 0; mgl@1371: + if (!match_intreg_part(p + 1)) mgl@1371: + ret = 0; mgl@1371: + *end = c; mgl@1371: + mgl@1371: + if (ret) mgl@1371: + { mgl@1371: + c = *p, *p = 0; mgl@1371: + regid = avr32_parse_intreg(str); mgl@1371: + if (regid < 0) mgl@1371: + ret = 0; mgl@1371: + *p = c; mgl@1371: + } mgl@1371: + mgl@1371: + return ret; mgl@1371: +} mgl@1371: + mgl@1371: +/* The PC_UDISP_W operator may show up as a label or as a pc[disp] mgl@1371: + expression. So there's no point in attempting to match this... */ mgl@1371: +#define match_pc_disp match_anything mgl@1371: + mgl@1371: +static int mgl@1371: +match_sp(char *str) mgl@1371: +{ mgl@1371: + /* SP in any form will do */ mgl@1371: + return avr32_parse_intreg(str) == AVR32_REG_SP; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +match_sp_disp(char *str) mgl@1371: +{ mgl@1371: + int regid, ret = 1; mgl@1371: + char *p, c; mgl@1371: + mgl@1371: + for (p = str; *p; p++) mgl@1371: + if (*p == '[') mgl@1371: + break; mgl@1371: + mgl@1371: + /* allow empty displacement, meaning zero */ mgl@1371: + if (p[0] == '[') mgl@1371: + { mgl@1371: + char *end; mgl@1371: + for (end = p + 1; *end; end++) ; mgl@1371: + if (end[-1] != ']') mgl@1371: + return 0; mgl@1371: + } mgl@1371: + mgl@1371: + c = *p, *p = 0; mgl@1371: + regid = avr32_parse_intreg(str); mgl@1371: + if (regid != AVR32_REG_SP) mgl@1371: + ret = 0; mgl@1371: + mgl@1371: + *p = c; mgl@1371: + return ret; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +match_cpno(char *str) mgl@1371: +{ mgl@1371: + if (strncasecmp(str, "cp", 2) != 0) mgl@1371: + return 0; mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +match_cpreg(char *str) mgl@1371: +{ mgl@1371: + if (strncasecmp(str, "cr", 2) != 0) mgl@1371: + return 0; mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +/* We allow complex expressions, and register names may show up as mgl@1371: + symbols. Just make sure immediate expressions are always matched mgl@1371: + last. */ mgl@1371: +#define match_const match_anything mgl@1371: +#define match_jmplabel match_anything mgl@1371: +#define match_number match_anything mgl@1371: + mgl@1371: +/* Mnemonics that take reglists never accept anything else */ mgl@1371: +#define match_reglist8 match_anything mgl@1371: +#define match_reglist9 match_anything mgl@1371: +#define match_reglist16 match_anything mgl@1371: +#define match_reglist_ldm match_anything mgl@1371: +#define match_reglist_cp8 match_anything mgl@1371: +#define match_reglist_cpd8 match_anything mgl@1371: + mgl@1371: +/* Ditto for retval, jospinc and mcall */ mgl@1371: +#define match_retval match_anything mgl@1371: +#define match_jospinc match_anything mgl@1371: +#define match_mcall match_anything mgl@1371: + mgl@1371: +/* COH is used to select between two different syntaxes */ mgl@1371: +static int mgl@1371: +match_coh(char *str) mgl@1371: +{ mgl@1371: + return strcasecmp(str, "coh") == 0; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +match_fpreg(char *str) mgl@1371: +{ mgl@1371: + unsigned long regid; mgl@1371: + char *endptr; mgl@1371: + mgl@1371: + if ((str[0] != 'f' && str[0] != 'F') mgl@1371: + || (str[1] != 'r' && str[1] != 'R')) mgl@1371: + return 0; mgl@1371: + mgl@1371: + str += 2; mgl@1371: + regid = strtoul(str, &endptr, 10); mgl@1371: + if (!*str || *endptr) mgl@1371: + return 0; mgl@1371: + mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +match_picoreg(char *str) mgl@1371: +{ mgl@1371: + int regid; mgl@1371: + mgl@1371: + regid = avr32_parse_picoreg(str); mgl@1371: + if (regid < 0) mgl@1371: + return 0; mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +#define match_pico_reglist_w match_anything mgl@1371: +#define match_pico_reglist_d match_anything mgl@1371: + mgl@1371: +static int mgl@1371: +match_pico_in(char *str) mgl@1371: +{ mgl@1371: + unsigned long regid; mgl@1371: + char *end; mgl@1371: + mgl@1371: + if (strncasecmp(str, "in", 2) != 0) mgl@1371: + return 0; mgl@1371: + mgl@1371: + str += 2; mgl@1371: + regid = strtoul(str, &end, 10); mgl@1371: + if (!*str || *end) mgl@1371: + return 0; mgl@1371: + mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +match_pico_out0(char *str) mgl@1371: +{ mgl@1371: + if (strcasecmp(str, "out0") != 0) mgl@1371: + return 0; mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +match_pico_out1(char *str) mgl@1371: +{ mgl@1371: + if (strcasecmp(str, "out1") != 0) mgl@1371: + return 0; mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +match_pico_out2(char *str) mgl@1371: +{ mgl@1371: + if (strcasecmp(str, "out2") != 0) mgl@1371: + return 0; mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +match_pico_out3(char *str) mgl@1371: +{ mgl@1371: + if (strcasecmp(str, "out3") != 0) mgl@1371: + return 0; mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static void parse_nothing(const struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + char *str ATTRIBUTE_UNUSED, mgl@1371: + int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + /* Do nothing (this is used for "match-only" operands like COH) */ mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_const(const struct avr32_operand *op, char *str, mgl@1371: + int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + expressionS *exp = ¤t_insn.immediate; mgl@1371: + expressionS *sym_exp; mgl@1371: + int slot; mgl@1371: + char *save; mgl@1371: + mgl@1371: + pr_debug("parse_const: `%s' (signed: %d, pcrel: %d, align: %d)\n", mgl@1371: + str, op->is_signed, op->is_pcrel, op->align_order); mgl@1371: + mgl@1371: + save = input_line_pointer; mgl@1371: + input_line_pointer = str; mgl@1371: + mgl@1371: + expression(exp); mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].align_order = op->align_order; mgl@1371: + current_insn.pcrel = op->is_pcrel; mgl@1371: + mgl@1371: + switch (exp->X_op) mgl@1371: + { mgl@1371: + case O_illegal: mgl@1371: + as_bad(_("illegal operand")); mgl@1371: + break; mgl@1371: + case O_absent: mgl@1371: + as_bad(_("missing operand")); mgl@1371: + break; mgl@1371: + case O_constant: mgl@1371: + pr_debug(" -> constant: %ld\n", (long)exp->X_add_number); mgl@1371: + current_insn.field_value[slot].value = exp->X_add_number; mgl@1371: + break; mgl@1371: + case O_uminus: mgl@1371: + pr_debug(" -> uminus\n"); mgl@1371: + sym_exp = symbol_get_value_expression(exp->X_add_symbol); mgl@1371: + switch (sym_exp->X_op) { mgl@1371: + case O_subtract: mgl@1371: + pr_debug(" -> subtract: switching operands\n"); mgl@1371: + exp->X_op_symbol = sym_exp->X_add_symbol; mgl@1371: + exp->X_add_symbol = sym_exp->X_op_symbol; mgl@1371: + exp->X_op = O_subtract; mgl@1371: + /* TODO: Remove the old X_add_symbol */ mgl@1371: + break; mgl@1371: + default: mgl@1371: + as_bad(_("Expression too complex\n")); mgl@1371: + break; mgl@1371: + } mgl@1371: + break; mgl@1371: +#if 0 mgl@1371: + case O_subtract: mgl@1371: + /* Any expression subtracting a symbol from the current section mgl@1371: + can be made PC-relative by adding the right offset. */ mgl@1371: + if (S_GET_SEGMENT(exp->X_op_symbol) == now_seg) mgl@1371: + current_insn.pcrel = TRUE; mgl@1371: + pr_debug(" -> subtract: pcrel? %s\n", mgl@1371: + current_insn.pcrel ? "yes" : "no"); mgl@1371: + /* fall through */ mgl@1371: +#endif mgl@1371: + default: mgl@1371: + pr_debug(" -> (%p <%d> %p + %d)\n", mgl@1371: + exp->X_add_symbol, exp->X_op, exp->X_op_symbol, mgl@1371: + exp->X_add_number); mgl@1371: + current_insn.field_value[slot].value = 0; mgl@1371: + break; mgl@1371: + } mgl@1371: + mgl@1371: + input_line_pointer = save; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_jmplabel(const struct avr32_operand *op, char *str, mgl@1371: + int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + expressionS *exp = ¤t_insn.immediate; mgl@1371: + int slot; mgl@1371: + char *save; mgl@1371: + mgl@1371: + pr_debug("parse_jmplabel: `%s' (signed: %d, pcrel: %d, align: %d)\n", mgl@1371: + str, op->is_signed, op->is_pcrel, op->align_order); mgl@1371: + mgl@1371: + save = input_line_pointer; mgl@1371: + input_line_pointer = str; mgl@1371: + mgl@1371: + expression(exp); mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].align_order = op->align_order; mgl@1371: + current_insn.pcrel = TRUE; mgl@1371: + mgl@1371: + switch (exp->X_op) mgl@1371: + { mgl@1371: + case O_illegal: mgl@1371: + as_bad(_("illegal operand")); mgl@1371: + break; mgl@1371: + case O_absent: mgl@1371: + as_bad(_("missing operand")); mgl@1371: + break; mgl@1371: + case O_constant: mgl@1371: + pr_debug(" -> constant: %ld\n", (long)exp->X_add_number); mgl@1371: + current_insn.field_value[slot].value = exp->X_add_number; mgl@1371: + current_insn.pcrel = 0; mgl@1371: + break; mgl@1371: + default: mgl@1371: + pr_debug(" -> (%p <%d> %p + %d)\n", mgl@1371: + exp->X_add_symbol, exp->X_op, exp->X_op_symbol, mgl@1371: + exp->X_add_number); mgl@1371: + current_insn.field_value[slot].value = 0; mgl@1371: + break; mgl@1371: + } mgl@1371: + mgl@1371: + input_line_pointer = save; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_intreg(const struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + char *str, int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + int regid, slot; mgl@1371: + mgl@1371: + pr_debug("parse_intreg: `%s'\n", str); mgl@1371: + mgl@1371: + regid = avr32_parse_intreg(str); mgl@1371: + assert(regid >= 0); mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = regid; mgl@1371: + current_insn.field_value[slot].align_order = op->align_order; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_intreg_predec(const struct avr32_operand *op, char *str, int opindex) mgl@1371: +{ mgl@1371: + parse_intreg(op, str + 2, opindex); mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_intreg_postinc(const struct avr32_operand *op, char *str, int opindex) mgl@1371: +{ mgl@1371: + char *p, c; mgl@1371: + mgl@1371: + pr_debug("parse_intreg_postinc: `%s'\n", str); mgl@1371: + mgl@1371: + for (p = str; *p != '+'; p++) ; mgl@1371: + mgl@1371: + c = *p, *p = 0; mgl@1371: + parse_intreg(op, str, opindex); mgl@1371: + *p = c; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_intreg_shift(const struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + char *str, int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + int regid, slot, shift = 0; mgl@1371: + char *p, c; mgl@1371: + char shiftop; mgl@1371: + mgl@1371: + pr_debug("parse Ry<') mgl@1371: + break; mgl@1371: + mgl@1371: + shiftop = *p; mgl@1371: + mgl@1371: + c = *p, *p = 0; mgl@1371: + regid = avr32_parse_intreg(str); mgl@1371: + assert(regid >= 0); mgl@1371: + *p = c; mgl@1371: + mgl@1371: + if (c) mgl@1371: + { mgl@1371: + if (p[0] != shiftop || p[1] != shiftop) mgl@1371: + as_bad(_("expected shift operator in `%s'"), p); mgl@1371: + else mgl@1371: + { mgl@1371: + expressionS exp; mgl@1371: + char *saved; mgl@1371: + mgl@1371: + saved = input_line_pointer; mgl@1371: + input_line_pointer = p + 2; mgl@1371: + expression(&exp); mgl@1371: + input_line_pointer = saved; mgl@1371: + mgl@1371: + if (exp.X_op != O_constant) mgl@1371: + as_bad(_("shift amount must be a numeric constant")); mgl@1371: + else mgl@1371: + shift = exp.X_add_number; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = regid; mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = shift; mgl@1371: +} mgl@1371: + mgl@1371: +/* The match() function selected the right opcode, so it doesn't mgl@1371: + matter which way we shift any more. */ mgl@1371: +#define parse_intreg_lsl parse_intreg_shift mgl@1371: +#define parse_intreg_lsr parse_intreg_shift mgl@1371: + mgl@1371: +static void mgl@1371: +parse_intreg_part(const struct avr32_operand *op, char *str, mgl@1371: + int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + static const char bparts[] = { 'b', 'l', 'u', 't' }; mgl@1371: + static const char hparts[] = { 'b', 't' }; mgl@1371: + unsigned int slot, sel; mgl@1371: + int regid; mgl@1371: + char *p, c; mgl@1371: + mgl@1371: + pr_debug("parse reg:part `%s'\n", str); mgl@1371: + mgl@1371: + for (p = str; *p; p++) mgl@1371: + if (*p == ':') mgl@1371: + break; mgl@1371: + mgl@1371: + c = *p, *p = 0; mgl@1371: + regid = avr32_parse_intreg(str); mgl@1371: + assert(regid >= 0); mgl@1371: + *p = c; mgl@1371: + mgl@1371: + assert(c == ':'); mgl@1371: + mgl@1371: + if (op->align_order) mgl@1371: + { mgl@1371: + for (sel = 0; sel < sizeof(hparts); sel++) mgl@1371: + if (TOLOWER(p[1]) == hparts[sel]) mgl@1371: + break; mgl@1371: + mgl@1371: + if (sel >= sizeof(hparts)) mgl@1371: + { mgl@1371: + as_bad(_("invalid halfword selector `%c' (must be either b or t)"), mgl@1371: + p[1]); mgl@1371: + sel = 0; mgl@1371: + } mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + for (sel = 0; sel < sizeof(bparts); sel++) mgl@1371: + if (TOLOWER(p[1]) == bparts[sel]) mgl@1371: + break; mgl@1371: + mgl@1371: + if (sel >= sizeof(bparts)) mgl@1371: + { mgl@1371: + as_bad(_("invalid byte selector `%c' (must be one of b,l,u,t)"), mgl@1371: + p[1]); mgl@1371: + sel = 0; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = regid; mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = sel; mgl@1371: +} mgl@1371: + mgl@1371: +/* This is the parser for "Rp[displacement]" expressions. In addition mgl@1371: + to the "official" syntax, we accept a label as a replacement for mgl@1371: + the register expression. This syntax implies Rp=PC and the mgl@1371: + displacement is the pc-relative distance to the label. */ mgl@1371: +static void mgl@1371: +parse_intreg_disp(const struct avr32_operand *op, char *str, int opindex) mgl@1371: +{ mgl@1371: + expressionS *exp = ¤t_insn.immediate; mgl@1371: + int slot, regid; mgl@1371: + char *save, *p, c; mgl@1371: + mgl@1371: + pr_debug("parse_intreg_disp: `%s' (signed: %d, pcrel: %d, align: %d)\n", mgl@1371: + str, op->is_signed, op->is_pcrel, op->align_order); mgl@1371: + mgl@1371: + for (p = str; *p; p++) mgl@1371: + if (*p == '[') mgl@1371: + break; mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + mgl@1371: + /* First, check if we have a valid register either before '[' or as mgl@1371: + the sole expression. If so, we use the Rp[disp] syntax. */ mgl@1371: + c = *p, *p = 0; mgl@1371: + regid = avr32_parse_intreg(str); mgl@1371: + *p = c; mgl@1371: + mgl@1371: + if (regid >= 0) mgl@1371: + { mgl@1371: + current_insn.field_value[slot].value = regid; mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].align_order = op->align_order; mgl@1371: + mgl@1371: + if (c == '[') mgl@1371: + { mgl@1371: + save = input_line_pointer; mgl@1371: + input_line_pointer = p + 1; mgl@1371: + mgl@1371: + expression(exp); mgl@1371: + mgl@1371: + if (*input_line_pointer != ']') mgl@1371: + as_bad(_("junk after displacement expression")); mgl@1371: + mgl@1371: + input_line_pointer = save; mgl@1371: + mgl@1371: + switch (exp->X_op) mgl@1371: + { mgl@1371: + case O_illegal: mgl@1371: + as_bad(_("illegal displacement expression")); mgl@1371: + break; mgl@1371: + case O_absent: mgl@1371: + as_bad(_("missing displacement expression")); mgl@1371: + break; mgl@1371: + case O_constant: mgl@1371: + pr_debug(" -> constant: %ld\n", exp->X_add_number); mgl@1371: + current_insn.field_value[slot].value = exp->X_add_number; mgl@1371: + break; mgl@1371: +#if 0 mgl@1371: + case O_subtract: mgl@1371: + if (S_GET_SEGMENT(exp->X_op_symbol) == now_seg) mgl@1371: + current_insn.pcrel = TRUE; mgl@1371: + pr_debug(" -> subtract: pcrel? %s\n", mgl@1371: + current_insn.pcrel ? "yes" : "no"); mgl@1371: + /* fall through */ mgl@1371: +#endif mgl@1371: + default: mgl@1371: + pr_debug(" -> (%p <%d> %p + %d)\n", mgl@1371: + exp->X_add_symbol, exp->X_op, exp->X_op_symbol, mgl@1371: + exp->X_add_number); mgl@1371: + current_insn.field_value[slot].value = 0; mgl@1371: + } mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + exp->X_op = O_constant; mgl@1371: + exp->X_add_number = 0; mgl@1371: + current_insn.field_value[slot].value = 0; mgl@1371: + } mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + /* Didn't find a valid register. Try parsing it as a label. */ mgl@1371: + current_insn.field_value[slot].value = AVR32_REG_PC; mgl@1371: + parse_jmplabel(op, str, opindex); mgl@1371: + } mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_intreg_index(const struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + char *str, int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + int slot, regid; mgl@1371: + char *p, *end, c; mgl@1371: + mgl@1371: + for (p = str; *p; p++) mgl@1371: + if (*p == '[') mgl@1371: + break; mgl@1371: + mgl@1371: + assert(*p); mgl@1371: + mgl@1371: + c = *p, *p = 0; mgl@1371: + regid = avr32_parse_intreg(str); mgl@1371: + assert(regid >= 0); mgl@1371: + *p = c; mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = regid; mgl@1371: + mgl@1371: + p++; mgl@1371: + for (end = p; *end; end++) mgl@1371: + if (*end == ']' || *end == '<') mgl@1371: + break; mgl@1371: + mgl@1371: + assert(*end); mgl@1371: + mgl@1371: + c = *end, *end = 0; mgl@1371: + regid = avr32_parse_intreg(p); mgl@1371: + assert(regid >= 0); mgl@1371: + *end = c; mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = regid; mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = 0; mgl@1371: + mgl@1371: + if (*end == '<') mgl@1371: + { mgl@1371: + expressionS exp; mgl@1371: + char *save; mgl@1371: + mgl@1371: + p = end + 2; mgl@1371: + for (end = p; *end; end++) mgl@1371: + if (*end == ']') mgl@1371: + break; mgl@1371: + mgl@1371: + assert(*end == ']'); mgl@1371: + mgl@1371: + c = *end, *end = 0; mgl@1371: + save = input_line_pointer; mgl@1371: + input_line_pointer = p; mgl@1371: + expression(&exp); mgl@1371: + mgl@1371: + if (*input_line_pointer) mgl@1371: + as_bad(_("junk after shift expression")); mgl@1371: + mgl@1371: + *end = c; mgl@1371: + input_line_pointer = save; mgl@1371: + mgl@1371: + if (exp.X_op == O_constant) mgl@1371: + current_insn.field_value[slot].value = exp.X_add_number; mgl@1371: + else mgl@1371: + as_bad(_("shift expression too complex")); mgl@1371: + } mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_intreg_xindex(const struct avr32_operand *op, char *str, int opindex) mgl@1371: +{ mgl@1371: + int slot, regid; mgl@1371: + char *p, *end, c; mgl@1371: + mgl@1371: + for (p = str; *p; p++) mgl@1371: + if (*p == '[') mgl@1371: + break; mgl@1371: + mgl@1371: + assert(*p); mgl@1371: + mgl@1371: + c = *p, *p = 0; mgl@1371: + regid = avr32_parse_intreg(str); mgl@1371: + assert(regid >= 0); mgl@1371: + *p = c; mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = regid; mgl@1371: + mgl@1371: + p++; mgl@1371: + for (end = p; *end; end++) mgl@1371: + if (*end == '<') mgl@1371: + break; mgl@1371: + mgl@1371: + assert(*end); mgl@1371: + mgl@1371: + c = *end, *end = 0; mgl@1371: + parse_intreg_part(op, p, opindex); mgl@1371: + *end = c; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_pc_disp(const struct avr32_operand *op, char *str, int opindex) mgl@1371: +{ mgl@1371: + char *p, c; mgl@1371: + mgl@1371: + for (p = str; *p; p++) mgl@1371: + if (*p == '[') mgl@1371: + break; mgl@1371: + mgl@1371: + /* The lddpc instruction comes in two different syntax variants: mgl@1371: + lddpc reg, expression mgl@1371: + lddpc reg, pc[disp] mgl@1371: + If the operand contains a '[', we use the second form. */ mgl@1371: + if (*p) mgl@1371: + { mgl@1371: + int regid; mgl@1371: + mgl@1371: + c = *p, *p = 0; mgl@1371: + regid = avr32_parse_intreg(str); mgl@1371: + *p = c; mgl@1371: + if (regid == AVR32_REG_PC) mgl@1371: + { mgl@1371: + char *end; mgl@1371: + mgl@1371: + for (end = ++p; *end; end++) ; mgl@1371: + if (*(--end) != ']') mgl@1371: + as_bad(_("unrecognized form of instruction: `%s'"), str); mgl@1371: + else mgl@1371: + { mgl@1371: + c = *end, *end = 0; mgl@1371: + parse_const(op, p, opindex); mgl@1371: + *end = c; mgl@1371: + current_insn.pcrel = 0; mgl@1371: + } mgl@1371: + } mgl@1371: + else mgl@1371: + as_bad(_("unrecognized form of instruction: `%s'"), str); mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + parse_jmplabel(op, str, opindex); mgl@1371: + } mgl@1371: +} mgl@1371: + mgl@1371: +static void parse_sp(const struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + char *str ATTRIBUTE_UNUSED, mgl@1371: + int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + int slot; mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = AVR32_REG_SP; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_sp_disp(const struct avr32_operand *op, char *str, int opindex) mgl@1371: +{ mgl@1371: + char *p, c; mgl@1371: + mgl@1371: + for (; *str; str++) mgl@1371: + if (*str == '[') mgl@1371: + break; mgl@1371: + mgl@1371: + assert(*str); mgl@1371: + mgl@1371: + for (p = ++str; *p; p++) mgl@1371: + if (*p == ']') mgl@1371: + break; mgl@1371: + mgl@1371: + c = *p, *p = 0; mgl@1371: + parse_const(op, str, opindex); mgl@1371: + *p = c; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_cpno(const struct avr32_operand *op ATTRIBUTE_UNUSED, char *str, mgl@1371: + int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + int slot; mgl@1371: + mgl@1371: + str += 2; mgl@1371: + if (*str == '#') mgl@1371: + str++; mgl@1371: + if (*str < '0' || *str > '7' || str[1]) mgl@1371: + as_bad(_("invalid coprocessor `%s'"), str); mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = *str - '0'; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_cpreg(const struct avr32_operand *op, char *str, mgl@1371: + int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + unsigned int crid; mgl@1371: + int slot; mgl@1371: + char *endptr; mgl@1371: + mgl@1371: + str += 2; mgl@1371: + crid = strtoul(str, &endptr, 10); mgl@1371: + if (*endptr || crid > 15 || crid & ((1 << op->align_order) - 1)) mgl@1371: + as_bad(_("invalid coprocessor register `%s'"), str); mgl@1371: + mgl@1371: + crid >>= op->align_order; mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = crid; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_number(const struct avr32_operand *op, char *str, mgl@1371: + int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + expressionS exp; mgl@1371: + int slot; mgl@1371: + char *save; mgl@1371: + mgl@1371: + save = input_line_pointer; mgl@1371: + input_line_pointer = str; mgl@1371: + expression(&exp); mgl@1371: + input_line_pointer = save; mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].align_order = op->align_order; mgl@1371: + mgl@1371: + if (exp.X_op == O_constant) mgl@1371: + current_insn.field_value[slot].value = exp.X_add_number; mgl@1371: + else mgl@1371: + as_bad(_("invalid numeric expression `%s'"), str); mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_reglist8(const struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + char *str, int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + unsigned long regmask; mgl@1371: + unsigned long value = 0; mgl@1371: + int slot; mgl@1371: + char *tail; mgl@1371: + mgl@1371: + regmask = avr32_parse_reglist(str, &tail); mgl@1371: + if (*tail) mgl@1371: + as_bad(_("invalid register list `%s'"), str); mgl@1371: + else mgl@1371: + { mgl@1371: + if (avr32_make_regmask8(regmask, &value)) mgl@1371: + as_bad(_("register list `%s' doesn't fit"), str); mgl@1371: + } mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = value; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +parse_reglist_tail(char *str, unsigned long regmask) mgl@1371: +{ mgl@1371: + expressionS exp; mgl@1371: + char *save, *p, c; mgl@1371: + int regid; mgl@1371: + mgl@1371: + for (p = str + 1; *p; p++) mgl@1371: + if (*p == '=') mgl@1371: + break; mgl@1371: + mgl@1371: + if (!*p) mgl@1371: + { mgl@1371: + as_bad(_("invalid register list `%s'"), str); mgl@1371: + return -2; mgl@1371: + } mgl@1371: + mgl@1371: + c = *p, *p = 0; mgl@1371: + regid = avr32_parse_intreg(str); mgl@1371: + *p = c; mgl@1371: + mgl@1371: + if (regid != 12) mgl@1371: + { mgl@1371: + as_bad(_("invalid register list `%s'"), str); mgl@1371: + return -2; mgl@1371: + } mgl@1371: + mgl@1371: + /* If we have an assignment, we must pop PC and we must _not_ mgl@1371: + pop LR or R12 */ mgl@1371: + if (!(regmask & (1 << AVR32_REG_PC))) mgl@1371: + { mgl@1371: + as_bad(_("return value specified for non-return instruction")); mgl@1371: + return -2; mgl@1371: + } mgl@1371: + else if (regmask & ((1 << AVR32_REG_R12) | (1 << AVR32_REG_LR))) mgl@1371: + { mgl@1371: + as_bad(_("can't pop LR or R12 when specifying return value")); mgl@1371: + return -2; mgl@1371: + } mgl@1371: + mgl@1371: + save = input_line_pointer; mgl@1371: + input_line_pointer = p + 1; mgl@1371: + expression(&exp); mgl@1371: + input_line_pointer = save; mgl@1371: + mgl@1371: + if (exp.X_op != O_constant mgl@1371: + || exp.X_add_number < -1 mgl@1371: + || exp.X_add_number > 1) mgl@1371: + { mgl@1371: + as_bad(_("invalid return value `%s'"), str); mgl@1371: + return -2; mgl@1371: + } mgl@1371: + mgl@1371: + return exp.X_add_number; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_reglist9(const struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + char *str, int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + unsigned long regmask; mgl@1371: + unsigned long value = 0, kbit = 0; mgl@1371: + int slot; mgl@1371: + char *tail; mgl@1371: + mgl@1371: + regmask = avr32_parse_reglist(str, &tail); mgl@1371: + /* printf("parsed reglist16: %04lx, tail: `%s'\n", regmask, tail); */ mgl@1371: + if (*tail) mgl@1371: + { mgl@1371: + int retval; mgl@1371: + mgl@1371: + retval = parse_reglist_tail(tail, regmask); mgl@1371: + mgl@1371: + switch (retval) mgl@1371: + { mgl@1371: + case -1: mgl@1371: + regmask |= 1 << AVR32_REG_LR; mgl@1371: + break; mgl@1371: + case 0: mgl@1371: + break; mgl@1371: + case 1: mgl@1371: + regmask |= 1 << AVR32_REG_R12; mgl@1371: + break; mgl@1371: + default: mgl@1371: + break; mgl@1371: + } mgl@1371: + mgl@1371: + kbit = 1; mgl@1371: + } mgl@1371: + mgl@1371: + if (avr32_make_regmask8(regmask, &value)) mgl@1371: + as_bad(_("register list `%s' doesn't fit"), str); mgl@1371: + mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = (value << 1) | kbit; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_reglist16(const struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + char *str, int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + unsigned long regmask; mgl@1371: + int slot; mgl@1371: + char *tail; mgl@1371: + mgl@1371: + regmask = avr32_parse_reglist(str, &tail); mgl@1371: + if (*tail) mgl@1371: + as_bad(_("invalid register list `%s'"), str); mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = regmask; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_reglist_ldm(const struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + char *str, int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + unsigned long regmask; mgl@1371: + int slot, rp, w_bit = 0; mgl@1371: + char *tail, *p, c; mgl@1371: + mgl@1371: + for (p = str; *p && *p != ','; p++) mgl@1371: + if (*p == '+') mgl@1371: + break; mgl@1371: + mgl@1371: + c = *p, *p = 0; mgl@1371: + rp = avr32_parse_intreg(str); mgl@1371: + *p = c; mgl@1371: + if (rp < 0) mgl@1371: + { mgl@1371: + as_bad(_("invalid destination register in `%s'"), str); mgl@1371: + return; mgl@1371: + } mgl@1371: + mgl@1371: + if (p[0] == '+' && p[1] == '+') mgl@1371: + { mgl@1371: + w_bit = 1; mgl@1371: + p += 2; mgl@1371: + } mgl@1371: + mgl@1371: + if (*p != ',') mgl@1371: + { mgl@1371: + as_bad(_("expected `,' after destination register in `%s'"), str); mgl@1371: + return; mgl@1371: + } mgl@1371: + mgl@1371: + str = p + 1; mgl@1371: + regmask = avr32_parse_reglist(str, &tail); mgl@1371: + if (*tail) mgl@1371: + { mgl@1371: + int retval; mgl@1371: + mgl@1371: + if (rp != AVR32_REG_SP) mgl@1371: + { mgl@1371: + as_bad(_("junk at end of line: `%s'"), tail); mgl@1371: + return; mgl@1371: + } mgl@1371: + mgl@1371: + rp = AVR32_REG_PC; mgl@1371: + mgl@1371: + retval = parse_reglist_tail(tail, regmask); mgl@1371: + mgl@1371: + switch (retval) mgl@1371: + { mgl@1371: + case -1: mgl@1371: + regmask |= 1 << AVR32_REG_LR; mgl@1371: + break; mgl@1371: + case 0: mgl@1371: + break; mgl@1371: + case 1: mgl@1371: + regmask |= 1 << AVR32_REG_R12; mgl@1371: + break; mgl@1371: + default: mgl@1371: + return; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = rp; mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = w_bit; mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = regmask; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_reglist_cp8(const struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + char *str, int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + unsigned long regmask; mgl@1371: + int slot, h_bit = 0; mgl@1371: + char *tail; mgl@1371: + mgl@1371: + regmask = avr32_parse_cpreglist(str, &tail); mgl@1371: + if (*tail) mgl@1371: + as_bad(_("junk at end of line: `%s'"), tail); mgl@1371: + else if (regmask & 0xffUL) mgl@1371: + { mgl@1371: + if (regmask & 0xff00UL) mgl@1371: + as_bad(_("register list `%s' doesn't fit"), str); mgl@1371: + regmask &= 0xff; mgl@1371: + } mgl@1371: + else if (regmask & 0xff00UL) mgl@1371: + { mgl@1371: + regmask >>= 8; mgl@1371: + h_bit = 1; mgl@1371: + } mgl@1371: + else mgl@1371: + as_warn(_("register list is empty")); mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = regmask; mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = h_bit; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_reglist_cpd8(const struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + char *str, int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + unsigned long regmask, regmask_d = 0; mgl@1371: + int slot, i; mgl@1371: + char *tail; mgl@1371: + mgl@1371: + regmask = avr32_parse_cpreglist(str, &tail); mgl@1371: + if (*tail) mgl@1371: + as_bad(_("junk at end of line: `%s'"), tail); mgl@1371: + mgl@1371: + for (i = 0; i < 8; i++) mgl@1371: + { mgl@1371: + if (regmask & 1) mgl@1371: + { mgl@1371: + if (!(regmask & 2)) mgl@1371: + { mgl@1371: + as_bad(_("register list `%s' doesn't fit"), str); mgl@1371: + break; mgl@1371: + } mgl@1371: + regmask_d |= 1 << i; mgl@1371: + } mgl@1371: + else if (regmask & 2) mgl@1371: + { mgl@1371: + as_bad(_("register list `%s' doesn't fit"), str); mgl@1371: + break; mgl@1371: + } mgl@1371: + mgl@1371: + regmask >>= 2; mgl@1371: + } mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = regmask_d; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_retval(const struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + char *str, int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + int regid, slot; mgl@1371: + mgl@1371: + regid = avr32_parse_intreg(str); mgl@1371: + if (regid < 0) mgl@1371: + { mgl@1371: + expressionS exp; mgl@1371: + char *save; mgl@1371: + mgl@1371: + regid = 0; mgl@1371: + mgl@1371: + save = input_line_pointer; mgl@1371: + input_line_pointer = str; mgl@1371: + expression(&exp); mgl@1371: + input_line_pointer = save; mgl@1371: + mgl@1371: + if (exp.X_op != O_constant) mgl@1371: + as_bad(_("invalid return value `%s'"), str); mgl@1371: + else mgl@1371: + switch (exp.X_add_number) mgl@1371: + { mgl@1371: + case -1: mgl@1371: + regid = AVR32_REG_LR; mgl@1371: + break; mgl@1371: + case 0: mgl@1371: + regid = AVR32_REG_SP; mgl@1371: + break; mgl@1371: + case 1: mgl@1371: + regid = AVR32_REG_PC; mgl@1371: + break; mgl@1371: + default: mgl@1371: + as_bad(_("invalid return value `%s'"), str); mgl@1371: + break; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = regid; mgl@1371: +} mgl@1371: + mgl@1371: +#define parse_mcall parse_intreg_disp mgl@1371: + mgl@1371: +static void mgl@1371: +parse_jospinc(const struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + char *str, int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + expressionS exp; mgl@1371: + int slot; mgl@1371: + char *save; mgl@1371: + mgl@1371: + save = input_line_pointer; mgl@1371: + input_line_pointer = str; mgl@1371: + expression(&exp); mgl@1371: + input_line_pointer = save; mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + mgl@1371: + if (exp.X_op == O_constant) mgl@1371: + { mgl@1371: + if (exp.X_add_number > 0) mgl@1371: + exp.X_add_number--; mgl@1371: + current_insn.field_value[slot].value = exp.X_add_number; mgl@1371: + } mgl@1371: + else mgl@1371: + as_bad(_("invalid numeric expression `%s'"), str); mgl@1371: +} mgl@1371: + mgl@1371: +#define parse_coh parse_nothing mgl@1371: + mgl@1371: +static void mgl@1371: +parse_fpreg(const struct avr32_operand *op, mgl@1371: + char *str, int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + unsigned long regid; mgl@1371: + int slot; mgl@1371: + mgl@1371: + regid = strtoul(str + 2, NULL, 10); mgl@1371: + mgl@1371: + if ((regid >= 16) || (regid & ((1 << op->align_order) - 1))) mgl@1371: + as_bad(_("invalid floating-point register `%s'"), str); mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = regid; mgl@1371: + current_insn.field_value[slot].align_order = op->align_order; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_picoreg(const struct avr32_operand *op, mgl@1371: + char *str, int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + unsigned long regid; mgl@1371: + int slot; mgl@1371: + mgl@1371: + regid = avr32_parse_picoreg(str); mgl@1371: + if (regid & ((1 << op->align_order) - 1)) mgl@1371: + as_bad(_("invalid double-word PiCo register `%s'"), str); mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = regid; mgl@1371: + current_insn.field_value[slot].align_order = op->align_order; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_pico_reglist_w(const struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + char *str, int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + unsigned long regmask; mgl@1371: + int slot, h_bit = 0; mgl@1371: + char *tail; mgl@1371: + mgl@1371: + regmask = avr32_parse_pico_reglist(str, &tail); mgl@1371: + if (*tail) mgl@1371: + as_bad(_("junk at end of line: `%s'"), tail); mgl@1371: + mgl@1371: + if (regmask & 0x00ffUL) mgl@1371: + { mgl@1371: + if (regmask & 0xff00UL) mgl@1371: + as_bad(_("register list `%s' doesn't fit"), str); mgl@1371: + regmask &= 0x00ffUL; mgl@1371: + } mgl@1371: + else if (regmask & 0xff00UL) mgl@1371: + { mgl@1371: + regmask >>= 8; mgl@1371: + h_bit = 1; mgl@1371: + } mgl@1371: + else mgl@1371: + as_warn(_("register list is empty")); mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = regmask; mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = h_bit; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_pico_reglist_d(const struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + char *str, int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + unsigned long regmask, regmask_d = 0; mgl@1371: + int slot, i; mgl@1371: + char *tail; mgl@1371: + mgl@1371: + regmask = avr32_parse_pico_reglist(str, &tail); mgl@1371: + if (*tail) mgl@1371: + as_bad(_("junk at end of line: `%s'"), tail); mgl@1371: + mgl@1371: + for (i = 0; i < 8; i++) mgl@1371: + { mgl@1371: + if (regmask & 1) mgl@1371: + { mgl@1371: + if (!(regmask & 2)) mgl@1371: + { mgl@1371: + as_bad(_("register list `%s' doesn't fit"), str); mgl@1371: + break; mgl@1371: + } mgl@1371: + regmask_d |= 1 << i; mgl@1371: + } mgl@1371: + else if (regmask & 2) mgl@1371: + { mgl@1371: + as_bad(_("register list `%s' doesn't fit"), str); mgl@1371: + break; mgl@1371: + } mgl@1371: + mgl@1371: + regmask >>= 2; mgl@1371: + } mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = regmask_d; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +parse_pico_in(const struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + char *str, int opindex ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + unsigned long regid; mgl@1371: + int slot; mgl@1371: + mgl@1371: + regid = strtoul(str + 2, NULL, 10); mgl@1371: + mgl@1371: + if (regid >= 12) mgl@1371: + as_bad(_("invalid PiCo IN register `%s'"), str); mgl@1371: + mgl@1371: + slot = current_insn.next_slot++; mgl@1371: + current_insn.field_value[slot].value = regid; mgl@1371: + current_insn.field_value[slot].align_order = 0; mgl@1371: +} mgl@1371: + mgl@1371: +#define parse_pico_out0 parse_nothing mgl@1371: +#define parse_pico_out1 parse_nothing mgl@1371: +#define parse_pico_out2 parse_nothing mgl@1371: +#define parse_pico_out3 parse_nothing mgl@1371: + mgl@1371: +#define OP(name, sgn, pcrel, align, func) \ mgl@1371: + { AVR32_OPERAND_##name, sgn, pcrel, align, match_##func, parse_##func } mgl@1371: + mgl@1371: +struct avr32_operand avr32_operand_table[] = { mgl@1371: + OP(INTREG, 0, 0, 0, intreg), mgl@1371: + OP(INTREG_PREDEC, 0, 0, 0, intreg_predec), mgl@1371: + OP(INTREG_POSTINC, 0, 0, 0, intreg_postinc), mgl@1371: + OP(INTREG_LSL, 0, 0, 0, intreg_lsl), mgl@1371: + OP(INTREG_LSR, 0, 0, 0, intreg_lsr), mgl@1371: + OP(INTREG_BSEL, 0, 0, 0, intreg_part), mgl@1371: + OP(INTREG_HSEL, 0, 0, 1, intreg_part), mgl@1371: + OP(INTREG_SDISP, 1, 0, 0, intreg_disp), mgl@1371: + OP(INTREG_SDISP_H, 1, 0, 1, intreg_disp), mgl@1371: + OP(INTREG_SDISP_W, 1, 0, 2, intreg_disp), mgl@1371: + OP(INTREG_UDISP, 0, 0, 0, intreg_disp), mgl@1371: + OP(INTREG_UDISP_H, 0, 0, 1, intreg_disp), mgl@1371: + OP(INTREG_UDISP_W, 0, 0, 2, intreg_disp), mgl@1371: + OP(INTREG_INDEX, 0, 0, 0, intreg_index), mgl@1371: + OP(INTREG_XINDEX, 0, 0, 0, intreg_xindex), mgl@1371: + OP(DWREG, 0, 0, 1, intreg), mgl@1371: + OP(PC_UDISP_W, 0, 1, 2, pc_disp), mgl@1371: + OP(SP, 0, 0, 0, sp), mgl@1371: + OP(SP_UDISP_W, 0, 0, 2, sp_disp), mgl@1371: + OP(CPNO, 0, 0, 0, cpno), mgl@1371: + OP(CPREG, 0, 0, 0, cpreg), mgl@1371: + OP(CPREG_D, 0, 0, 1, cpreg), mgl@1371: + OP(UNSIGNED_CONST, 0, 0, 0, const), mgl@1371: + OP(UNSIGNED_CONST_W, 0, 0, 2, const), mgl@1371: + OP(SIGNED_CONST, 1, 0, 0, const), mgl@1371: + OP(SIGNED_CONST_W, 1, 0, 2, const), mgl@1371: + OP(JMPLABEL, 1, 1, 1, jmplabel), mgl@1371: + OP(UNSIGNED_NUMBER, 0, 0, 0, number), mgl@1371: + OP(UNSIGNED_NUMBER_W, 0, 0, 2, number), mgl@1371: + OP(REGLIST8, 0, 0, 0, reglist8), mgl@1371: + OP(REGLIST9, 0, 0, 0, reglist9), mgl@1371: + OP(REGLIST16, 0, 0, 0, reglist16), mgl@1371: + OP(REGLIST_LDM, 0, 0, 0, reglist_ldm), mgl@1371: + OP(REGLIST_CP8, 0, 0, 0, reglist_cp8), mgl@1371: + OP(REGLIST_CPD8, 0, 0, 0, reglist_cpd8), mgl@1371: + OP(RETVAL, 0, 0, 0, retval), mgl@1371: + OP(MCALL, 1, 0, 2, mcall), mgl@1371: + OP(JOSPINC, 0, 0, 0, jospinc), mgl@1371: + OP(COH, 0, 0, 0, coh), mgl@1371: + OP(FPREG_S, 0, 0, 0, fpreg), mgl@1371: + OP(FPREG_D, 0, 0, 1, fpreg), mgl@1371: + OP(PICO_REG_W, 0, 0, 0, picoreg), mgl@1371: + OP(PICO_REG_D, 0, 0, 1, picoreg), mgl@1371: + OP(PICO_REGLIST_W, 0, 0, 0, pico_reglist_w), mgl@1371: + OP(PICO_REGLIST_D, 0, 0, 0, pico_reglist_d), mgl@1371: + OP(PICO_IN, 0, 0, 0, pico_in), mgl@1371: + OP(PICO_OUT0, 0, 0, 0, pico_out0), mgl@1371: + OP(PICO_OUT1, 0, 0, 0, pico_out1), mgl@1371: + OP(PICO_OUT2, 0, 0, 0, pico_out2), mgl@1371: + OP(PICO_OUT3, 0, 0, 0, pico_out3), mgl@1371: +}; mgl@1371: + mgl@1371: +symbolS * mgl@1371: +md_undefined_symbol (char *name ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + pr_debug("md_undefined_symbol: %s\n", name); mgl@1371: + return 0; mgl@1371: +} mgl@1371: + mgl@1371: +struct avr32_relax_type mgl@1371: +{ mgl@1371: + long lower_bound; mgl@1371: + long upper_bound; mgl@1371: + unsigned char align; mgl@1371: + unsigned char length; mgl@1371: + signed short next; mgl@1371: +}; mgl@1371: + mgl@1371: +#define EMPTY { 0, 0, 0, 0, -1 } mgl@1371: +#define C(lower, upper, align, next) \ mgl@1371: + { (lower), (upper), (align), 2, AVR32_OPC_##next } mgl@1371: +#define E(lower, upper, align) \ mgl@1371: + { (lower), (upper), (align), 4, -1 } mgl@1371: + mgl@1371: +static const struct avr32_relax_type avr32_relax_table[] = mgl@1371: + { mgl@1371: + /* 0 */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, mgl@1371: + E(0, 65535, 0), E(0, 65535, 0), E(0, 65535, 0), E(0, 65535, 0), mgl@1371: + EMPTY, mgl@1371: + /* 16 */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + mgl@1371: + C(-256, 254, 1, BREQ2), C(-256, 254, 1, BRNE2), mgl@1371: + C(-256, 254, 1, BRCC2), C(-256, 254, 1, BRCS2), mgl@1371: + C(-256, 254, 1, BRGE2), C(-256, 254, 1, BRLT2), mgl@1371: + C(-256, 254, 1, BRMI2), C(-256, 254, 1, BRPL2), mgl@1371: + E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), mgl@1371: + E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), mgl@1371: + /* 32 */ mgl@1371: + E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), mgl@1371: + E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), mgl@1371: + E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), mgl@1371: + E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), mgl@1371: + E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), mgl@1371: + E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), mgl@1371: + mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 48 */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, mgl@1371: + mgl@1371: + C(-32, 31, 0, CP_W3), E(-1048576, 1048575, 0), mgl@1371: + mgl@1371: + EMPTY, EMPTY, EMPTY, mgl@1371: + /* 64: csrfcz */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + E(0, 65535, 0), E(0, 65535, 0), mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + E(-32768, 32767, 0), mgl@1371: + /* 80: LD_SB2 */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + mgl@1371: + C(0, 7, 0, LD_UB4), E(-32768, 32767, 0), mgl@1371: + mgl@1371: + EMPTY, mgl@1371: + EMPTY, EMPTY, mgl@1371: + mgl@1371: + C(0, 14, 1, LD_SH4), E(-32768, 32767, 0), mgl@1371: + mgl@1371: + EMPTY, EMPTY, EMPTY, mgl@1371: + mgl@1371: + C(0, 14, 1, LD_UH4), mgl@1371: + mgl@1371: + /* 96: LD_UH4 */ mgl@1371: + E(-32768, 32767, 0), mgl@1371: + mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + mgl@1371: + C(0, 124, 2, LD_W4), E(-32768, 32767, 0), mgl@1371: + mgl@1371: + E(0, 1020, 2), /* LDC_D1 */ mgl@1371: + EMPTY, EMPTY, mgl@1371: + E(0, 1020, 2), /* LDC_W1 */ mgl@1371: + EMPTY, EMPTY, mgl@1371: + E(0, 16380, 2), /* LDC0_D */ mgl@1371: + E(0, 16380, 2), /* LDC0_W */ mgl@1371: + EMPTY, mgl@1371: + mgl@1371: + /* 112: LDCM_D_PU */ mgl@1371: + EMPTY, EMPTY, EMPTY, mgl@1371: + mgl@1371: + C(0, 508, 2, LDDPC_EXT), E(-32768, 32767, 0), mgl@1371: + mgl@1371: + EMPTY,EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 134: MACHH_W */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + E(-131072, 131068, 2), /* MCALL */ mgl@1371: + E(0, 1020, 2), /* MFDR */ mgl@1371: + E(0, 1020, 2), /* MFSR */ mgl@1371: + EMPTY, EMPTY, mgl@1371: + mgl@1371: + C(-128, 127, 0, MOV2), E(-1048576, 1048575, 0), mgl@1371: + mgl@1371: + EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + mgl@1371: + E(-128, 127, 0), /* MOVEQ2 */ mgl@1371: + E(-128, 127, 0), /* MOVNE2 */ mgl@1371: + E(-128, 127, 0), /* MOVCC2 */ mgl@1371: + E(-128, 127, 0), /* 166: MOVCS2 */ mgl@1371: + E(-128, 127, 0), /* MOVGE2 */ mgl@1371: + E(-128, 127, 0), /* MOVLT2 */ mgl@1371: + E(-128, 127, 0), /* MOVMI2 */ mgl@1371: + E(-128, 127, 0), /* MOVPL2 */ mgl@1371: + E(-128, 127, 0), /* MOVLS2 */ mgl@1371: + E(-128, 127, 0), /* MOVGT2 */ mgl@1371: + E(-128, 127, 0), /* MOVLE2 */ mgl@1371: + E(-128, 127, 0), /* MOVHI2 */ mgl@1371: + E(-128, 127, 0), /* MOVVS2 */ mgl@1371: + E(-128, 127, 0), /* MOVVC2 */ mgl@1371: + E(-128, 127, 0), /* MOVQS2 */ mgl@1371: + E(-128, 127, 0), /* MOVAL2 */ mgl@1371: + mgl@1371: + E(0, 1020, 2), /* MTDR */ mgl@1371: + E(0, 1020, 2), /* MTSR */ mgl@1371: + EMPTY, mgl@1371: + EMPTY, mgl@1371: + E(-128, 127, 0), /* MUL3 */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 198: MVCR_W */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + E(0, 65535, 0), E(0, 65535, 0), mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 230: PASR_H */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 262: PUNPCKSB_H */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + mgl@1371: + C(-1024, 1022, 1, RCALL2), E(-2097152, 2097150, 1), mgl@1371: + mgl@1371: + EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, mgl@1371: + mgl@1371: + C(-1024, 1022, 1, BRAL), mgl@1371: + mgl@1371: + EMPTY, EMPTY, EMPTY, mgl@1371: + E(-128, 127, 0), /* RSUB2 */ mgl@1371: + /* 294: SATADD_H */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + E(0, 255, 0), /* SLEEP */ mgl@1371: + EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 326: ST_B2 */ mgl@1371: + EMPTY, EMPTY, mgl@1371: + C(0, 7, 0, ST_B4), E(-32768, 32767, 0), mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + E(-32768, 32767, 0), mgl@1371: + EMPTY, EMPTY, EMPTY, mgl@1371: + C(0, 14, 1, ST_H4), E(-32768, 32767, 0), mgl@1371: + EMPTY, EMPTY, mgl@1371: + EMPTY, mgl@1371: + C(0, 60, 2, ST_W4), E(-32768, 32767, 0), mgl@1371: + E(0, 1020, 2), /* STC_D1 */ mgl@1371: + EMPTY, EMPTY, mgl@1371: + E(0, 1020, 2), /* STC_W1 */ mgl@1371: + EMPTY, EMPTY, mgl@1371: + E(0, 16380, 2), /* STC0_D */ mgl@1371: + E(0, 16380, 2), /* STC0_W */ mgl@1371: + mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 358: STDSP */ mgl@1371: + EMPTY, EMPTY, mgl@1371: + E(0, 1020, 2), /* STHH_W1 */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, mgl@1371: + E(-32768, 32767, 0), mgl@1371: + C(-512, 508, 2, SUB4), mgl@1371: + C(-128, 127, 0, SUB4), E(-1048576, 1048576, 0), mgl@1371: + /* SUB{cond} */ mgl@1371: + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), mgl@1371: + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), mgl@1371: + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), mgl@1371: + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), mgl@1371: + /* SUBF{cond} */ mgl@1371: + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), mgl@1371: + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), mgl@1371: + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), mgl@1371: + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), mgl@1371: + EMPTY, mgl@1371: + mgl@1371: + /* 406: SWAP_B */ mgl@1371: + EMPTY, EMPTY, EMPTY, mgl@1371: + E(0, 255, 0), /* SYNC */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 414: TST */ mgl@1371: + EMPTY, EMPTY, E(-65536, 65535, 2), E(-65536, 65535, 2), E(-65536, 65535, 2), EMPTY, EMPTY, EMPTY, mgl@1371: + /* 422: RSUB{cond} */ mgl@1371: + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), mgl@1371: + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), mgl@1371: + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), mgl@1371: + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), mgl@1371: + /* 436: ADD{cond} */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 454: SUB{cond} */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 472: AND{cond} */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 486: OR{cond} */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 502: EOR{cond} */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 518: LD.w{cond} */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 534: LD.sh{cond} */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 550: LD.uh{cond} */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 566: LD.sb{cond} */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 582: LD.ub{cond} */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 596: ST.w{cond} */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 614: ST.h{cond} */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 630: ST.b{cond} */ mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, mgl@1371: + /* 646: movh */ mgl@1371: + E(0, 65535, 0) mgl@1371: + }; mgl@1371: + mgl@1371: +#undef E mgl@1371: +#undef C mgl@1371: +#undef EMPTY mgl@1371: + mgl@1371: +#define AVR32_RS_NONE (-1) mgl@1371: + mgl@1371: +#define avr32_rs_size(state) (avr32_relax_table[(state)].length) mgl@1371: +#define avr32_rs_align(state) (avr32_relax_table[(state)].align) mgl@1371: +#define relax_more(state) (avr32_relax_table[(state)].next) mgl@1371: + mgl@1371: +#define opc_initial_substate(opc) ((opc)->id) mgl@1371: + mgl@1371: +static int need_relax(int subtype, offsetT distance) mgl@1371: +{ mgl@1371: + offsetT upper_bound, lower_bound; mgl@1371: + mgl@1371: + upper_bound = avr32_relax_table[subtype].upper_bound; mgl@1371: + lower_bound = avr32_relax_table[subtype].lower_bound; mgl@1371: + mgl@1371: + if (distance & ((1 << avr32_rs_align(subtype)) - 1)) mgl@1371: + return 1; mgl@1371: + if ((distance > upper_bound) || (distance < lower_bound)) mgl@1371: + return 1; mgl@1371: + mgl@1371: + return 0; mgl@1371: +} mgl@1371: + mgl@1371: +enum { mgl@1371: + LDA_SUBTYPE_MOV1, mgl@1371: + LDA_SUBTYPE_MOV2, mgl@1371: + LDA_SUBTYPE_SUB, mgl@1371: + LDA_SUBTYPE_LDDPC, mgl@1371: + LDA_SUBTYPE_LDW, mgl@1371: + LDA_SUBTYPE_GOTLOAD, mgl@1371: + LDA_SUBTYPE_GOTLOAD_LARGE, mgl@1371: +}; mgl@1371: + mgl@1371: +enum { mgl@1371: + CALL_SUBTYPE_RCALL1, mgl@1371: + CALL_SUBTYPE_RCALL2, mgl@1371: + CALL_SUBTYPE_MCALL_CP, mgl@1371: + CALL_SUBTYPE_MCALL_GOT, mgl@1371: + CALL_SUBTYPE_MCALL_LARGE, mgl@1371: +}; mgl@1371: + mgl@1371: +#define LDA_INITIAL_SIZE (avr32_pic ? 4 : 2) mgl@1371: +#define CALL_INITIAL_SIZE 2 mgl@1371: + mgl@1371: +#define need_reloc(sym, seg, pcrel) \ mgl@1371: + (!(S_IS_DEFINED(sym) \ mgl@1371: + && ((pcrel && S_GET_SEGMENT(sym) == seg) \ mgl@1371: + || (!pcrel && S_GET_SEGMENT(sym) == absolute_section))) \ mgl@1371: + || S_FORCE_RELOC(sym, 1)) mgl@1371: + mgl@1371: +/* Return an initial guess of the length by which a fragment must grow to mgl@1371: + hold a branch to reach its destination. mgl@1371: + Also updates fr_type/fr_subtype as necessary. mgl@1371: + mgl@1371: + Called just before doing relaxation. mgl@1371: + Any symbol that is now undefined will not become defined. mgl@1371: + The guess for fr_var is ACTUALLY the growth beyond fr_fix. mgl@1371: + Whatever we do to grow fr_fix or fr_var contributes to our returned value. mgl@1371: + Although it may not be explicit in the frag, pretend fr_var starts with a mgl@1371: + 0 value. */ mgl@1371: + mgl@1371: +static int mgl@1371: +avr32_default_estimate_size_before_relax (fragS *fragP, segT segment) mgl@1371: +{ mgl@1371: + int growth = 0; mgl@1371: + mgl@1371: + assert(fragP); mgl@1371: + assert(fragP->fr_symbol); mgl@1371: + mgl@1371: + if (fragP->tc_frag_data.force_extended mgl@1371: + || need_reloc(fragP->fr_symbol, segment, fragP->tc_frag_data.pcrel)) mgl@1371: + { mgl@1371: + int largest_state = fragP->fr_subtype; mgl@1371: + while (relax_more(largest_state) != AVR32_RS_NONE) mgl@1371: + largest_state = relax_more(largest_state); mgl@1371: + growth = avr32_rs_size(largest_state) - fragP->fr_var; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + growth = avr32_rs_size(fragP->fr_subtype) - fragP->fr_var; mgl@1371: + } mgl@1371: + mgl@1371: + pr_debug("%s:%d: md_estimate_size_before_relax: %d\n", mgl@1371: + fragP->fr_file, fragP->fr_line, growth); mgl@1371: + mgl@1371: + return growth; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +avr32_lda_estimate_size_before_relax(fragS *fragP, segT segment ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + return fragP->fr_var - LDA_INITIAL_SIZE; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +avr32_call_estimate_size_before_relax(fragS *fragP, segT segment ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + return fragP->fr_var - CALL_INITIAL_SIZE; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +avr32_cpool_estimate_size_before_relax(fragS *fragP, mgl@1371: + segT segment ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + return fragP->fr_var; mgl@1371: +} mgl@1371: + mgl@1371: +/* This macro may be defined to relax a frag. GAS will call this with the mgl@1371: + * segment, the frag, and the change in size of all previous frags; mgl@1371: + * md_relax_frag should return the change in size of the frag. */ mgl@1371: +static long mgl@1371: +avr32_default_relax_frag (segT segment, fragS *fragP, long stretch) mgl@1371: +{ mgl@1371: + int state, next_state; mgl@1371: + symbolS *symbolP; /* The target symbol */ mgl@1371: + long growth = 0; mgl@1371: + mgl@1371: + state = next_state = fragP->fr_subtype; mgl@1371: + mgl@1371: + symbolP = fragP->fr_symbol; mgl@1371: + mgl@1371: + if (fragP->tc_frag_data.force_extended mgl@1371: + || need_reloc(symbolP, segment, fragP->tc_frag_data.pcrel)) mgl@1371: + { mgl@1371: + /* Symbol must be resolved by the linker. Emit the largest mgl@1371: + possible opcode. */ mgl@1371: + while (relax_more(next_state) != AVR32_RS_NONE) mgl@1371: + next_state = relax_more(next_state); mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + addressT address; /* The address of fragP */ mgl@1371: + addressT target; /* The address of the target symbol */ mgl@1371: + offsetT distance; /* The distance between the insn and the symbol */ mgl@1371: + fragS *sym_frag; mgl@1371: + mgl@1371: + address = fragP->fr_address; mgl@1371: + target = fragP->fr_offset; mgl@1371: + symbolP = fragP->fr_symbol; mgl@1371: + sym_frag = symbol_get_frag(symbolP); mgl@1371: + mgl@1371: + address += fragP->fr_fix - fragP->fr_var; mgl@1371: + target += S_GET_VALUE(symbolP); mgl@1371: + mgl@1371: + if (stretch != 0 mgl@1371: + && sym_frag->relax_marker != fragP->relax_marker mgl@1371: + && S_GET_SEGMENT(symbolP) == segment) mgl@1371: + /* if it was correctly aligned before, make sure it stays aligned */ mgl@1371: + target += stretch & (~0UL << avr32_rs_align(state)); mgl@1371: + mgl@1371: + if (fragP->tc_frag_data.pcrel) mgl@1371: + distance = target - (address & (~0UL << avr32_rs_align(state))); mgl@1371: + else mgl@1371: + distance = target; mgl@1371: + mgl@1371: + pr_debug("%s:%d: relax more? 0x%x - 0x%x = 0x%x (%d), align %d\n", mgl@1371: + fragP->fr_file, fragP->fr_line, target, address, mgl@1371: + distance, distance, avr32_rs_align(state)); mgl@1371: + mgl@1371: + if (need_relax(state, distance)) mgl@1371: + { mgl@1371: + if (relax_more(state) != AVR32_RS_NONE) mgl@1371: + next_state = relax_more(state); mgl@1371: + pr_debug("%s:%d: relax more %d -> %d (%d - %d, align %d)\n", mgl@1371: + fragP->fr_file, fragP->fr_line, state, next_state, mgl@1371: + target, address, avr32_rs_align(state)); mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + growth = avr32_rs_size(next_state) - avr32_rs_size(state); mgl@1371: + fragP->fr_subtype = next_state; mgl@1371: + mgl@1371: + pr_debug("%s:%d: md_relax_frag: growth=%d, subtype=%d, opc=0x%08lx\n", mgl@1371: + fragP->fr_file, fragP->fr_line, growth, fragP->fr_subtype, mgl@1371: + avr32_opc_table[next_state].value); mgl@1371: + mgl@1371: + return growth; mgl@1371: +} mgl@1371: + mgl@1371: +static long mgl@1371: +avr32_lda_relax_frag(segT segment, fragS *fragP, long stretch) mgl@1371: +{ mgl@1371: + struct cpool *pool= NULL; mgl@1371: + unsigned int entry = 0; mgl@1371: + addressT address, target; mgl@1371: + offsetT distance; mgl@1371: + symbolS *symbolP; mgl@1371: + fragS *sym_frag; mgl@1371: + long old_size, new_size; mgl@1371: + mgl@1371: + symbolP = fragP->fr_symbol; mgl@1371: + old_size = fragP->fr_var; mgl@1371: + if (!avr32_pic) mgl@1371: + { mgl@1371: + pool = fragP->tc_frag_data.pool; mgl@1371: + entry = fragP->tc_frag_data.pool_entry; mgl@1371: + } mgl@1371: + mgl@1371: + address = fragP->fr_address; mgl@1371: + address += fragP->fr_fix - LDA_INITIAL_SIZE; mgl@1371: + mgl@1371: + if (!S_IS_DEFINED(symbolP) || S_FORCE_RELOC(symbolP, 1)) mgl@1371: + goto relax_max; mgl@1371: + mgl@1371: + target = fragP->fr_offset; mgl@1371: + sym_frag = symbol_get_frag(symbolP); mgl@1371: + target += S_GET_VALUE(symbolP); mgl@1371: + mgl@1371: + if (sym_frag->relax_marker != fragP->relax_marker mgl@1371: + && S_GET_SEGMENT(symbolP) == segment) mgl@1371: + target += stretch; mgl@1371: + mgl@1371: + distance = target - address; mgl@1371: + mgl@1371: + pr_debug("lda_relax_frag: target: %d, address: %d, var: %d\n", mgl@1371: + target, address, fragP->fr_var); mgl@1371: + mgl@1371: + if (!avr32_pic && S_GET_SEGMENT(symbolP) == absolute_section mgl@1371: + && target <= 127 && (offsetT)target >= -128) mgl@1371: + { mgl@1371: + if (fragP->fr_subtype == LDA_SUBTYPE_LDDPC mgl@1371: + || fragP->fr_subtype == LDA_SUBTYPE_LDW) mgl@1371: + pool->literals[entry].refcount--; mgl@1371: + new_size = 2; mgl@1371: + fragP->fr_subtype = LDA_SUBTYPE_MOV1; mgl@1371: + } mgl@1371: + else if (!avr32_pic && S_GET_SEGMENT(symbolP) == absolute_section mgl@1371: + && target <= 1048575 && (offsetT)target >= -1048576) mgl@1371: + { mgl@1371: + if (fragP->fr_subtype == LDA_SUBTYPE_LDDPC mgl@1371: + || fragP->fr_subtype == LDA_SUBTYPE_LDW) mgl@1371: + pool->literals[entry].refcount--; mgl@1371: + new_size = 4; mgl@1371: + fragP->fr_subtype = LDA_SUBTYPE_MOV2; mgl@1371: + } mgl@1371: + else if (!linkrelax && S_GET_SEGMENT(symbolP) == segment mgl@1371: + /* the field will be negated, so this is really -(-32768) mgl@1371: + and -(32767) */ mgl@1371: + && distance <= 32768 && distance >= -32767) mgl@1371: + { mgl@1371: + if (!avr32_pic mgl@1371: + && (fragP->fr_subtype == LDA_SUBTYPE_LDDPC mgl@1371: + || fragP->fr_subtype == LDA_SUBTYPE_LDW)) mgl@1371: + pool->literals[entry].refcount--; mgl@1371: + new_size = 4; mgl@1371: + fragP->fr_subtype = LDA_SUBTYPE_SUB; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + relax_max: mgl@1371: + if (avr32_pic) mgl@1371: + { mgl@1371: + if (linkrelax) mgl@1371: + { mgl@1371: + new_size = 8; mgl@1371: + fragP->fr_subtype = LDA_SUBTYPE_GOTLOAD_LARGE; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + new_size = 4; mgl@1371: + fragP->fr_subtype = LDA_SUBTYPE_GOTLOAD; mgl@1371: + } mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + if (fragP->fr_subtype != LDA_SUBTYPE_LDDPC mgl@1371: + && fragP->fr_subtype != LDA_SUBTYPE_LDW) mgl@1371: + pool->literals[entry].refcount++; mgl@1371: + mgl@1371: + sym_frag = symbol_get_frag(pool->symbol); mgl@1371: + target = (sym_frag->fr_address + sym_frag->fr_fix mgl@1371: + + pool->padding + pool->literals[entry].offset); mgl@1371: + mgl@1371: + pr_debug("cpool sym address: 0x%lx\n", mgl@1371: + sym_frag->fr_address + sym_frag->fr_fix); mgl@1371: + mgl@1371: + know(pool->section == segment); mgl@1371: + mgl@1371: + if (sym_frag->relax_marker != fragP->relax_marker) mgl@1371: + target += stretch; mgl@1371: + mgl@1371: + distance = target - address; mgl@1371: + if (distance <= 508 && distance >= 0) mgl@1371: + { mgl@1371: + new_size = 2; mgl@1371: + fragP->fr_subtype = LDA_SUBTYPE_LDDPC; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + new_size = 4; mgl@1371: + fragP->fr_subtype = LDA_SUBTYPE_LDW; mgl@1371: + } mgl@1371: + mgl@1371: + pr_debug("lda_relax_frag (cpool): target=0x%lx, address=0x%lx, refcount=%d\n", mgl@1371: + target, address, pool->literals[entry].refcount); mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + fragP->fr_var = new_size; mgl@1371: + mgl@1371: + pr_debug("%s:%d: lda: relax pass done. subtype: %d, growth: %ld\n", mgl@1371: + fragP->fr_file, fragP->fr_line, mgl@1371: + fragP->fr_subtype, new_size - old_size); mgl@1371: + mgl@1371: + return new_size - old_size; mgl@1371: +} mgl@1371: + mgl@1371: +static long mgl@1371: +avr32_call_relax_frag(segT segment, fragS *fragP, long stretch) mgl@1371: +{ mgl@1371: + struct cpool *pool = NULL; mgl@1371: + unsigned int entry = 0; mgl@1371: + addressT address, target; mgl@1371: + offsetT distance; mgl@1371: + symbolS *symbolP; mgl@1371: + fragS *sym_frag; mgl@1371: + long old_size, new_size; mgl@1371: + mgl@1371: + symbolP = fragP->fr_symbol; mgl@1371: + old_size = fragP->fr_var; mgl@1371: + if (!avr32_pic) mgl@1371: + { mgl@1371: + pool = fragP->tc_frag_data.pool; mgl@1371: + entry = fragP->tc_frag_data.pool_entry; mgl@1371: + } mgl@1371: + mgl@1371: + address = fragP->fr_address; mgl@1371: + address += fragP->fr_fix - CALL_INITIAL_SIZE; mgl@1371: + mgl@1371: + if (need_reloc(symbolP, segment, 1)) mgl@1371: + { mgl@1371: + pr_debug("call: must emit reloc\n"); mgl@1371: + goto relax_max; mgl@1371: + } mgl@1371: + mgl@1371: + target = fragP->fr_offset; mgl@1371: + sym_frag = symbol_get_frag(symbolP); mgl@1371: + target += S_GET_VALUE(symbolP); mgl@1371: + mgl@1371: + if (sym_frag->relax_marker != fragP->relax_marker mgl@1371: + && S_GET_SEGMENT(symbolP) == segment) mgl@1371: + target += stretch; mgl@1371: + mgl@1371: + distance = target - address; mgl@1371: + mgl@1371: + if (distance <= 1022 && distance >= -1024) mgl@1371: + { mgl@1371: + pr_debug("call: distance is %d, emitting short rcall\n", distance); mgl@1371: + if (!avr32_pic && fragP->fr_subtype == CALL_SUBTYPE_MCALL_CP) mgl@1371: + pool->literals[entry].refcount--; mgl@1371: + new_size = 2; mgl@1371: + fragP->fr_subtype = CALL_SUBTYPE_RCALL1; mgl@1371: + } mgl@1371: + else if (distance <= 2097150 && distance >= -2097152) mgl@1371: + { mgl@1371: + pr_debug("call: distance is %d, emitting long rcall\n", distance); mgl@1371: + if (!avr32_pic && fragP->fr_subtype == CALL_SUBTYPE_MCALL_CP) mgl@1371: + pool->literals[entry].refcount--; mgl@1371: + new_size = 4; mgl@1371: + fragP->fr_subtype = CALL_SUBTYPE_RCALL2; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + pr_debug("call: distance %d too far, emitting something big\n", distance); mgl@1371: + mgl@1371: + relax_max: mgl@1371: + if (avr32_pic) mgl@1371: + { mgl@1371: + if (linkrelax) mgl@1371: + { mgl@1371: + new_size = 10; mgl@1371: + fragP->fr_subtype = CALL_SUBTYPE_MCALL_LARGE; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + new_size = 4; mgl@1371: + fragP->fr_subtype = CALL_SUBTYPE_MCALL_GOT; mgl@1371: + } mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + if (fragP->fr_subtype != CALL_SUBTYPE_MCALL_CP) mgl@1371: + pool->literals[entry].refcount++; mgl@1371: + mgl@1371: + new_size = 4; mgl@1371: + fragP->fr_subtype = CALL_SUBTYPE_MCALL_CP; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + fragP->fr_var = new_size; mgl@1371: + mgl@1371: + pr_debug("%s:%d: call: relax pass done, growth: %d, fr_var: %d\n", mgl@1371: + fragP->fr_file, fragP->fr_line, mgl@1371: + new_size - old_size, fragP->fr_var); mgl@1371: + mgl@1371: + return new_size - old_size; mgl@1371: +} mgl@1371: + mgl@1371: +static long mgl@1371: +avr32_cpool_relax_frag(segT segment ATTRIBUTE_UNUSED, mgl@1371: + fragS *fragP, mgl@1371: + long stretch ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + struct cpool *pool; mgl@1371: + addressT address; mgl@1371: + long old_size, new_size; mgl@1371: + unsigned int entry; mgl@1371: + mgl@1371: + pool = fragP->tc_frag_data.pool; mgl@1371: + address = fragP->fr_address + fragP->fr_fix; mgl@1371: + old_size = fragP->fr_var; mgl@1371: + new_size = 0; mgl@1371: + mgl@1371: + for (entry = 0; entry < pool->next_free_entry; entry++) mgl@1371: + { mgl@1371: + if (pool->literals[entry].refcount > 0) mgl@1371: + { mgl@1371: + pool->literals[entry].offset = new_size; mgl@1371: + new_size += 4; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + fragP->fr_var = new_size; mgl@1371: + mgl@1371: + return new_size - old_size; mgl@1371: +} mgl@1371: + mgl@1371: +/* *fragP has been relaxed to its final size, and now needs to have mgl@1371: + the bytes inside it modified to conform to the new size. mgl@1371: + mgl@1371: + Called after relaxation is finished. mgl@1371: + fragP->fr_type == rs_machine_dependent. mgl@1371: + fragP->fr_subtype is the subtype of what the address relaxed to. */ mgl@1371: + mgl@1371: +static void mgl@1371: +avr32_default_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, mgl@1371: + segT segment ATTRIBUTE_UNUSED, mgl@1371: + fragS *fragP) mgl@1371: +{ mgl@1371: + const struct avr32_opcode *opc; mgl@1371: + const struct avr32_ifield *ifield; mgl@1371: + bfd_reloc_code_real_type r_type; mgl@1371: + symbolS *symbolP; mgl@1371: + fixS *fixP; mgl@1371: + bfd_vma value; mgl@1371: + int subtype; mgl@1371: + mgl@1371: + opc = &avr32_opc_table[fragP->fr_subtype]; mgl@1371: + ifield = opc->fields[opc->var_field]; mgl@1371: + symbolP = fragP->fr_symbol; mgl@1371: + subtype = fragP->fr_subtype; mgl@1371: + r_type = opc->reloc_type; mgl@1371: + mgl@1371: + /* Clear the opcode bits and the bits belonging to the relaxed mgl@1371: + field. We assume all other fields stay the same. */ mgl@1371: + value = bfd_getb32(fragP->fr_opcode); mgl@1371: + value &= ~(opc->mask | ifield->mask); mgl@1371: + mgl@1371: + /* Insert the new opcode */ mgl@1371: + value |= opc->value; mgl@1371: + bfd_putb32(value, fragP->fr_opcode); mgl@1371: + mgl@1371: + fragP->fr_fix += opc->size - fragP->fr_var; mgl@1371: + mgl@1371: + if (fragP->tc_frag_data.reloc_info != AVR32_OPINFO_NONE) mgl@1371: + { mgl@1371: + switch (fragP->tc_frag_data.reloc_info) mgl@1371: + { mgl@1371: + case AVR32_OPINFO_HI: mgl@1371: + r_type = BFD_RELOC_HI16; mgl@1371: + break; mgl@1371: + case AVR32_OPINFO_LO: mgl@1371: + r_type = BFD_RELOC_LO16; mgl@1371: + break; mgl@1371: + case AVR32_OPINFO_GOT: mgl@1371: + switch (r_type) mgl@1371: + { mgl@1371: + case BFD_RELOC_AVR32_18W_PCREL: mgl@1371: + r_type = BFD_RELOC_AVR32_GOT18SW; mgl@1371: + break; mgl@1371: + case BFD_RELOC_AVR32_16S: mgl@1371: + r_type = BFD_RELOC_AVR32_GOT16S; mgl@1371: + break; mgl@1371: + default: mgl@1371: + BAD_CASE(r_type); mgl@1371: + break; mgl@1371: + } mgl@1371: + break; mgl@1371: + default: mgl@1371: + BAD_CASE(fragP->tc_frag_data.reloc_info); mgl@1371: + break; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + pr_debug("%s:%d: convert_frag: new %s fixup\n", mgl@1371: + fragP->fr_file, fragP->fr_line, mgl@1371: + bfd_get_reloc_code_name(r_type)); mgl@1371: + mgl@1371: +#if 1 mgl@1371: + fixP = fix_new_exp(fragP, fragP->fr_fix - opc->size, opc->size, mgl@1371: + &fragP->tc_frag_data.exp, mgl@1371: + fragP->tc_frag_data.pcrel, r_type); mgl@1371: +#else mgl@1371: + fixP = fix_new(fragP, fragP->fr_fix - opc->size, opc->size, symbolP, mgl@1371: + fragP->fr_offset, fragP->tc_frag_data.pcrel, r_type); mgl@1371: +#endif mgl@1371: + mgl@1371: + /* Revert fix_new brain damage. "dot_value" is the value of PC at mgl@1371: + the point of the fixup, relative to the frag address. fix_new() mgl@1371: + and friends think they are only being called during the assembly mgl@1371: + pass, not during relaxation or similar, so fx_dot_value, fx_file mgl@1371: + and fx_line are all initialized to the wrong value. But we don't mgl@1371: + know the size of the fixup until now, so we really can't live up mgl@1371: + to the assumptions these functions make about the target. What mgl@1371: + do these functions think the "where" and "frag" argument mean mgl@1371: + anyway? */ mgl@1371: + fixP->fx_dot_value = fragP->fr_fix - opc->size; mgl@1371: + fixP->fx_file = fragP->fr_file; mgl@1371: + fixP->fx_line = fragP->fr_line; mgl@1371: + mgl@1371: + fixP->tc_fix_data.ifield = ifield; mgl@1371: + fixP->tc_fix_data.align = avr32_rs_align(subtype); mgl@1371: + fixP->tc_fix_data.min = avr32_relax_table[subtype].lower_bound; mgl@1371: + fixP->tc_fix_data.max = avr32_relax_table[subtype].upper_bound; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +avr32_lda_convert_frag(bfd *abfd ATTRIBUTE_UNUSED, mgl@1371: + segT segment ATTRIBUTE_UNUSED, mgl@1371: + fragS *fragP) mgl@1371: +{ mgl@1371: + const struct avr32_opcode *opc; mgl@1371: + const struct avr32_ifield *ifield; mgl@1371: + bfd_reloc_code_real_type r_type; mgl@1371: + expressionS exp; mgl@1371: + struct cpool *pool; mgl@1371: + fixS *fixP; mgl@1371: + bfd_vma value; mgl@1371: + int regid, pcrel = 0, align = 0; mgl@1371: + char *p; mgl@1371: + mgl@1371: + r_type = BFD_RELOC_NONE; mgl@1371: + regid = fragP->tc_frag_data.reloc_info; mgl@1371: + p = fragP->fr_opcode; mgl@1371: + exp.X_add_symbol = fragP->fr_symbol; mgl@1371: + exp.X_add_number = fragP->fr_offset; mgl@1371: + exp.X_op = O_symbol; mgl@1371: + mgl@1371: + pr_debug("%s:%d: lda_convert_frag, subtype: %d, fix: %d, var: %d, regid: %d\n", mgl@1371: + fragP->fr_file, fragP->fr_line, mgl@1371: + fragP->fr_subtype, fragP->fr_fix, fragP->fr_var, regid); mgl@1371: + mgl@1371: + switch (fragP->fr_subtype) mgl@1371: + { mgl@1371: + case LDA_SUBTYPE_MOV1: mgl@1371: + opc = &avr32_opc_table[AVR32_OPC_MOV1]; mgl@1371: + opc->fields[0]->insert(opc->fields[0], p, regid); mgl@1371: + ifield = opc->fields[1]; mgl@1371: + r_type = opc->reloc_type; mgl@1371: + break; mgl@1371: + case LDA_SUBTYPE_MOV2: mgl@1371: + opc = &avr32_opc_table[AVR32_OPC_MOV2]; mgl@1371: + opc->fields[0]->insert(opc->fields[0], p, regid); mgl@1371: + ifield = opc->fields[1]; mgl@1371: + r_type = opc->reloc_type; mgl@1371: + break; mgl@1371: + case LDA_SUBTYPE_SUB: mgl@1371: + opc = &avr32_opc_table[AVR32_OPC_SUB5]; mgl@1371: + opc->fields[0]->insert(opc->fields[0], p, regid); mgl@1371: + opc->fields[1]->insert(opc->fields[1], p, AVR32_REG_PC); mgl@1371: + ifield = opc->fields[2]; mgl@1371: + r_type = BFD_RELOC_AVR32_16N_PCREL; mgl@1371: + mgl@1371: + /* Pretend that SUB5 isn't a "negated" pcrel expression for now. mgl@1371: + We'll have to fix it up later when we know whether to mgl@1371: + generate a reloc for it (in which case the linker will negate mgl@1371: + it, so we shouldn't). */ mgl@1371: + pcrel = 1; mgl@1371: + break; mgl@1371: + case LDA_SUBTYPE_LDDPC: mgl@1371: + opc = &avr32_opc_table[AVR32_OPC_LDDPC]; mgl@1371: + align = 2; mgl@1371: + r_type = BFD_RELOC_AVR32_9W_CP; mgl@1371: + goto cpool_common; mgl@1371: + case LDA_SUBTYPE_LDW: mgl@1371: + opc = &avr32_opc_table[AVR32_OPC_LDDPC_EXT]; mgl@1371: + r_type = BFD_RELOC_AVR32_16_CP; mgl@1371: + cpool_common: mgl@1371: + opc->fields[0]->insert(opc->fields[0], p, regid); mgl@1371: + ifield = opc->fields[1]; mgl@1371: + pool = fragP->tc_frag_data.pool; mgl@1371: + exp.X_add_symbol = pool->symbol; mgl@1371: + exp.X_add_number = pool->literals[fragP->tc_frag_data.pool_entry].offset; mgl@1371: + pcrel = 1; mgl@1371: + break; mgl@1371: + case LDA_SUBTYPE_GOTLOAD_LARGE: mgl@1371: + /* ld.w Rd, r6[Rd << 2] (last) */ mgl@1371: + opc = &avr32_opc_table[AVR32_OPC_LD_W5]; mgl@1371: + bfd_putb32(opc->value, p + 4); mgl@1371: + opc->fields[0]->insert(opc->fields[0], p + 4, regid); mgl@1371: + opc->fields[1]->insert(opc->fields[1], p + 4, 6); mgl@1371: + opc->fields[2]->insert(opc->fields[2], p + 4, regid); mgl@1371: + opc->fields[3]->insert(opc->fields[3], p + 4, 2); mgl@1371: + mgl@1371: + /* mov Rd, (got_offset / 4) */ mgl@1371: + opc = &avr32_opc_table[AVR32_OPC_MOV2]; mgl@1371: + opc->fields[0]->insert(opc->fields[0], p, regid); mgl@1371: + ifield = opc->fields[1]; mgl@1371: + r_type = BFD_RELOC_AVR32_LDA_GOT; mgl@1371: + break; mgl@1371: + case LDA_SUBTYPE_GOTLOAD: mgl@1371: + opc = &avr32_opc_table[AVR32_OPC_LD_W4]; mgl@1371: + opc->fields[0]->insert(opc->fields[0], p, regid); mgl@1371: + opc->fields[1]->insert(opc->fields[1], p, 6); mgl@1371: + ifield = opc->fields[2]; mgl@1371: + if (r_type == BFD_RELOC_NONE) mgl@1371: + r_type = BFD_RELOC_AVR32_GOT16S; mgl@1371: + break; mgl@1371: + default: mgl@1371: + BAD_CASE(fragP->fr_subtype); mgl@1371: + } mgl@1371: + mgl@1371: + value = bfd_getb32(p); mgl@1371: + value &= ~(opc->mask | ifield->mask); mgl@1371: + value |= opc->value; mgl@1371: + bfd_putb32(value, p); mgl@1371: + mgl@1371: + fragP->fr_fix += fragP->fr_var - LDA_INITIAL_SIZE; mgl@1371: + mgl@1371: + if (fragP->fr_next mgl@1371: + && ((offsetT)(fragP->fr_next->fr_address - fragP->fr_address) mgl@1371: + != fragP->fr_fix)) mgl@1371: + { mgl@1371: + fprintf(stderr, "LDA frag: fr_fix is wrong! fragP->fr_var = %ld, r_type = %s\n", mgl@1371: + fragP->fr_var, bfd_get_reloc_code_name(r_type)); mgl@1371: + abort(); mgl@1371: + } mgl@1371: + mgl@1371: + fixP = fix_new_exp(fragP, fragP->fr_fix - fragP->fr_var, fragP->fr_var, mgl@1371: + &exp, pcrel, r_type); mgl@1371: + mgl@1371: + /* Revert fix_new brain damage. "dot_value" is the value of PC at mgl@1371: + the point of the fixup, relative to the frag address. fix_new() mgl@1371: + and friends think they are only being called during the assembly mgl@1371: + pass, not during relaxation or similar, so fx_dot_value, fx_file mgl@1371: + and fx_line are all initialized to the wrong value. But we don't mgl@1371: + know the size of the fixup until now, so we really can't live up mgl@1371: + to the assumptions these functions make about the target. What mgl@1371: + do these functions think the "where" and "frag" argument mean mgl@1371: + anyway? */ mgl@1371: + fixP->fx_dot_value = fragP->fr_fix - opc->size; mgl@1371: + fixP->fx_file = fragP->fr_file; mgl@1371: + fixP->fx_line = fragP->fr_line; mgl@1371: + mgl@1371: + fixP->tc_fix_data.ifield = ifield; mgl@1371: + fixP->tc_fix_data.align = align; mgl@1371: + /* these are only used if the fixup can actually be resolved */ mgl@1371: + fixP->tc_fix_data.min = -32768; mgl@1371: + fixP->tc_fix_data.max = 32767; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +avr32_call_convert_frag(bfd *abfd ATTRIBUTE_UNUSED, mgl@1371: + segT segment ATTRIBUTE_UNUSED, mgl@1371: + fragS *fragP) mgl@1371: +{ mgl@1371: + const struct avr32_opcode *opc = NULL; mgl@1371: + const struct avr32_ifield *ifield; mgl@1371: + bfd_reloc_code_real_type r_type; mgl@1371: + symbolS *symbol; mgl@1371: + offsetT offset; mgl@1371: + fixS *fixP; mgl@1371: + bfd_vma value; mgl@1371: + int pcrel = 0, align = 0; mgl@1371: + char *p; mgl@1371: + mgl@1371: + symbol = fragP->fr_symbol; mgl@1371: + offset = fragP->fr_offset; mgl@1371: + r_type = BFD_RELOC_NONE; mgl@1371: + p = fragP->fr_opcode; mgl@1371: + mgl@1371: + pr_debug("%s:%d: call_convert_frag, subtype: %d, fix: %d, var: %d\n", mgl@1371: + fragP->fr_file, fragP->fr_line, mgl@1371: + fragP->fr_subtype, fragP->fr_fix, fragP->fr_var); mgl@1371: + mgl@1371: + switch (fragP->fr_subtype) mgl@1371: + { mgl@1371: + case CALL_SUBTYPE_RCALL1: mgl@1371: + opc = &avr32_opc_table[AVR32_OPC_RCALL1]; mgl@1371: + /* fall through */ mgl@1371: + case CALL_SUBTYPE_RCALL2: mgl@1371: + if (!opc) mgl@1371: + opc = &avr32_opc_table[AVR32_OPC_RCALL2]; mgl@1371: + ifield = opc->fields[0]; mgl@1371: + r_type = opc->reloc_type; mgl@1371: + pcrel = 1; mgl@1371: + align = 1; mgl@1371: + break; mgl@1371: + case CALL_SUBTYPE_MCALL_CP: mgl@1371: + opc = &avr32_opc_table[AVR32_OPC_MCALL]; mgl@1371: + opc->fields[0]->insert(opc->fields[0], p, AVR32_REG_PC); mgl@1371: + ifield = opc->fields[1]; mgl@1371: + r_type = BFD_RELOC_AVR32_CPCALL; mgl@1371: + symbol = fragP->tc_frag_data.pool->symbol; mgl@1371: + offset = fragP->tc_frag_data.pool->literals[fragP->tc_frag_data.pool_entry].offset; mgl@1371: + assert(fragP->tc_frag_data.pool->literals[fragP->tc_frag_data.pool_entry].refcount > 0); mgl@1371: + pcrel = 1; mgl@1371: + align = 2; mgl@1371: + break; mgl@1371: + case CALL_SUBTYPE_MCALL_GOT: mgl@1371: + opc = &avr32_opc_table[AVR32_OPC_MCALL]; mgl@1371: + opc->fields[0]->insert(opc->fields[0], p, 6); mgl@1371: + ifield = opc->fields[1]; mgl@1371: + r_type = BFD_RELOC_AVR32_GOT18SW; mgl@1371: + break; mgl@1371: + case CALL_SUBTYPE_MCALL_LARGE: mgl@1371: + assert(fragP->fr_var == 10); mgl@1371: + /* ld.w lr, r6[lr << 2] */ mgl@1371: + opc = &avr32_opc_table[AVR32_OPC_LD_W5]; mgl@1371: + bfd_putb32(opc->value, p + 4); mgl@1371: + opc->fields[0]->insert(opc->fields[0], p + 4, AVR32_REG_LR); mgl@1371: + opc->fields[1]->insert(opc->fields[1], p + 4, 6); mgl@1371: + opc->fields[2]->insert(opc->fields[2], p + 4, AVR32_REG_LR); mgl@1371: + opc->fields[3]->insert(opc->fields[3], p + 4, 2); mgl@1371: + mgl@1371: + /* icall lr */ mgl@1371: + opc = &avr32_opc_table[AVR32_OPC_ICALL]; mgl@1371: + bfd_putb16(opc->value >> 16, p + 8); mgl@1371: + opc->fields[0]->insert(opc->fields[0], p + 8, AVR32_REG_LR); mgl@1371: + mgl@1371: + /* mov lr, (got_offset / 4) */ mgl@1371: + opc = &avr32_opc_table[AVR32_OPC_MOV2]; mgl@1371: + opc->fields[0]->insert(opc->fields[0], p, AVR32_REG_LR); mgl@1371: + ifield = opc->fields[1]; mgl@1371: + r_type = BFD_RELOC_AVR32_GOTCALL; mgl@1371: + break; mgl@1371: + default: mgl@1371: + BAD_CASE(fragP->fr_subtype); mgl@1371: + } mgl@1371: + mgl@1371: + /* Insert the opcode and clear the variable ifield */ mgl@1371: + value = bfd_getb32(p); mgl@1371: + value &= ~(opc->mask | ifield->mask); mgl@1371: + value |= opc->value; mgl@1371: + bfd_putb32(value, p); mgl@1371: + mgl@1371: + fragP->fr_fix += fragP->fr_var - CALL_INITIAL_SIZE; mgl@1371: + mgl@1371: + if (fragP->fr_next mgl@1371: + && ((offsetT)(fragP->fr_next->fr_address - fragP->fr_address) mgl@1371: + != fragP->fr_fix)) mgl@1371: + { mgl@1371: + fprintf(stderr, "%s:%d: fr_fix %lu is wrong! fr_var=%lu, r_type=%s\n", mgl@1371: + fragP->fr_file, fragP->fr_line, mgl@1371: + fragP->fr_fix, fragP->fr_var, bfd_get_reloc_code_name(r_type)); mgl@1371: + fprintf(stderr, "fr_fix should be %ld. next frag is %s:%d\n", mgl@1371: + (offsetT)(fragP->fr_next->fr_address - fragP->fr_address), mgl@1371: + fragP->fr_next->fr_file, fragP->fr_next->fr_line); mgl@1371: + } mgl@1371: + mgl@1371: + fixP = fix_new(fragP, fragP->fr_fix - fragP->fr_var, fragP->fr_var, mgl@1371: + symbol, offset, pcrel, r_type); mgl@1371: + mgl@1371: + /* Revert fix_new brain damage. "dot_value" is the value of PC at mgl@1371: + the point of the fixup, relative to the frag address. fix_new() mgl@1371: + and friends think they are only being called during the assembly mgl@1371: + pass, not during relaxation or similar, so fx_dot_value, fx_file mgl@1371: + and fx_line are all initialized to the wrong value. But we don't mgl@1371: + know the size of the fixup until now, so we really can't live up mgl@1371: + to the assumptions these functions make about the target. What mgl@1371: + do these functions think the "where" and "frag" argument mean mgl@1371: + anyway? */ mgl@1371: + fixP->fx_dot_value = fragP->fr_fix - opc->size; mgl@1371: + fixP->fx_file = fragP->fr_file; mgl@1371: + fixP->fx_line = fragP->fr_line; mgl@1371: + mgl@1371: + fixP->tc_fix_data.ifield = ifield; mgl@1371: + fixP->tc_fix_data.align = align; mgl@1371: + /* these are only used if the fixup can actually be resolved */ mgl@1371: + fixP->tc_fix_data.min = -2097152; mgl@1371: + fixP->tc_fix_data.max = 2097150; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +avr32_cpool_convert_frag(bfd *abfd ATTRIBUTE_UNUSED, mgl@1371: + segT segment ATTRIBUTE_UNUSED, mgl@1371: + fragS *fragP) mgl@1371: +{ mgl@1371: + struct cpool *pool; mgl@1371: + addressT address; mgl@1371: + unsigned int entry; mgl@1371: + char *p; mgl@1371: + char sym_name[20]; mgl@1371: + mgl@1371: + /* Did we get rid of the frag altogether? */ mgl@1371: + if (!fragP->fr_var) mgl@1371: + return; mgl@1371: + mgl@1371: + pool = fragP->tc_frag_data.pool; mgl@1371: + address = fragP->fr_address + fragP->fr_fix; mgl@1371: + p = fragP->fr_literal + fragP->fr_fix; mgl@1371: + mgl@1371: + sprintf(sym_name, "$$cp_\002%x", pool->id); mgl@1371: + symbol_locate(pool->symbol, sym_name, pool->section, fragP->fr_fix, fragP); mgl@1371: + symbol_table_insert(pool->symbol); mgl@1371: + mgl@1371: + for (entry = 0; entry < pool->next_free_entry; entry++) mgl@1371: + { mgl@1371: + if (pool->literals[entry].refcount > 0) mgl@1371: + { mgl@1371: + fix_new_exp(fragP, fragP->fr_fix, 4, &pool->literals[entry].exp, mgl@1371: + FALSE, BFD_RELOC_AVR32_32_CPENT); mgl@1371: + fragP->fr_fix += 4; mgl@1371: + } mgl@1371: + } mgl@1371: +} mgl@1371: + mgl@1371: +static struct avr32_relaxer avr32_default_relaxer = { mgl@1371: + .estimate_size = avr32_default_estimate_size_before_relax, mgl@1371: + .relax_frag = avr32_default_relax_frag, mgl@1371: + .convert_frag = avr32_default_convert_frag, mgl@1371: +}; mgl@1371: +static struct avr32_relaxer avr32_lda_relaxer = { mgl@1371: + .estimate_size = avr32_lda_estimate_size_before_relax, mgl@1371: + .relax_frag = avr32_lda_relax_frag, mgl@1371: + .convert_frag = avr32_lda_convert_frag, mgl@1371: +}; mgl@1371: +static struct avr32_relaxer avr32_call_relaxer = { mgl@1371: + .estimate_size = avr32_call_estimate_size_before_relax, mgl@1371: + .relax_frag = avr32_call_relax_frag, mgl@1371: + .convert_frag = avr32_call_convert_frag, mgl@1371: +}; mgl@1371: +static struct avr32_relaxer avr32_cpool_relaxer = { mgl@1371: + .estimate_size = avr32_cpool_estimate_size_before_relax, mgl@1371: + .relax_frag = avr32_cpool_relax_frag, mgl@1371: + .convert_frag = avr32_cpool_convert_frag, mgl@1371: +}; mgl@1371: + mgl@1371: +static void s_cpool(int arg ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + struct cpool *pool; mgl@1371: + unsigned int max_size; mgl@1371: + char *buf; mgl@1371: + mgl@1371: + pool = find_cpool(now_seg, now_subseg); mgl@1371: + if (!pool || !pool->symbol || pool->next_free_entry == 0) mgl@1371: + return; mgl@1371: + mgl@1371: + /* Make sure the constant pool is properly aligned */ mgl@1371: + frag_align_code(2, 0); mgl@1371: + if (bfd_get_section_alignment(stdoutput, pool->section) < 2) mgl@1371: + bfd_set_section_alignment(stdoutput, pool->section, 2); mgl@1371: + mgl@1371: + /* Assume none of the entries are discarded, and that we need the mgl@1371: + maximum amount of alignment. But we're not going to allocate mgl@1371: + anything up front. */ mgl@1371: + max_size = pool->next_free_entry * 4 + 2; mgl@1371: + frag_grow(max_size); mgl@1371: + buf = frag_more(0); mgl@1371: + mgl@1371: + frag_now->tc_frag_data.relaxer = &avr32_cpool_relaxer; mgl@1371: + frag_now->tc_frag_data.pool = pool; mgl@1371: + mgl@1371: + symbol_set_frag(pool->symbol, frag_now); mgl@1371: + mgl@1371: + /* Assume zero initial size, allowing other relaxers to be mgl@1371: + optimistic about things. */ mgl@1371: + frag_var(rs_machine_dependent, max_size, 0, mgl@1371: + 0, pool->symbol, 0, NULL); mgl@1371: + mgl@1371: + /* Mark the pool as empty. */ mgl@1371: + pool->used = 1; mgl@1371: +} mgl@1371: + mgl@1371: +/* The location from which a PC relative jump should be calculated, mgl@1371: + given a PC relative reloc. */ mgl@1371: + mgl@1371: +long mgl@1371: +md_pcrel_from_section (fixS *fixP, segT sec) mgl@1371: +{ mgl@1371: + pr_debug("pcrel_from_section, fx_offset = %d\n", fixP->fx_offset); mgl@1371: + mgl@1371: + if (fixP->fx_addsy != NULL mgl@1371: + && (! S_IS_DEFINED (fixP->fx_addsy) mgl@1371: + || S_GET_SEGMENT (fixP->fx_addsy) != sec mgl@1371: + || S_FORCE_RELOC(fixP->fx_addsy, 1))) mgl@1371: + { mgl@1371: + pr_debug("Unknown pcrel symbol: %s\n", S_GET_NAME(fixP->fx_addsy)); mgl@1371: + mgl@1371: + /* The symbol is undefined (or is defined but not in this section). mgl@1371: + Let the linker figure it out. */ mgl@1371: + return 0; mgl@1371: + } mgl@1371: + mgl@1371: + pr_debug("pcrel from %x + %x, symbol: %s (%x)\n", mgl@1371: + fixP->fx_frag->fr_address, fixP->fx_where, mgl@1371: + fixP->fx_addsy?S_GET_NAME(fixP->fx_addsy):"(null)", mgl@1371: + fixP->fx_addsy?S_GET_VALUE(fixP->fx_addsy):0); mgl@1371: + mgl@1371: + return ((fixP->fx_frag->fr_address + fixP->fx_where) mgl@1371: + & (~0UL << fixP->tc_fix_data.align)); mgl@1371: +} mgl@1371: + mgl@1371: +valueT mgl@1371: +md_section_align (segT segment, valueT size) mgl@1371: +{ mgl@1371: + int align = bfd_get_section_alignment (stdoutput, segment); mgl@1371: + return ((size + (1 << align) - 1) & (-1 << align)); mgl@1371: +} mgl@1371: + mgl@1371: +static int syntax_matches(const struct avr32_syntax *syntax, mgl@1371: + char *str) mgl@1371: +{ mgl@1371: + int i; mgl@1371: + mgl@1371: + pr_debug("syntax %d matches `%s'?\n", syntax->id, str); mgl@1371: + mgl@1371: + if (syntax->nr_operands < 0) mgl@1371: + { mgl@1371: + struct avr32_operand *op; mgl@1371: + int optype; mgl@1371: + mgl@1371: + for (i = 0; i < (-syntax->nr_operands - 1); i++) mgl@1371: + { mgl@1371: + char *p; mgl@1371: + char c; mgl@1371: + mgl@1371: + optype = syntax->operand[i]; mgl@1371: + assert(optype < AVR32_NR_OPERANDS); mgl@1371: + op = &avr32_operand_table[optype]; mgl@1371: + mgl@1371: + for (p = str; *p; p++) mgl@1371: + if (*p == ',') mgl@1371: + break; mgl@1371: + mgl@1371: + if (p == str) mgl@1371: + return 0; mgl@1371: + mgl@1371: + c = *p; mgl@1371: + *p = 0; mgl@1371: + mgl@1371: + if (!op->match(str)) mgl@1371: + { mgl@1371: + *p = c; mgl@1371: + return 0; mgl@1371: + } mgl@1371: + mgl@1371: + str = p; mgl@1371: + *p = c; mgl@1371: + if (c) mgl@1371: + str++; mgl@1371: + } mgl@1371: + mgl@1371: + optype = syntax->operand[i]; mgl@1371: + assert(optype < AVR32_NR_OPERANDS); mgl@1371: + op = &avr32_operand_table[optype]; mgl@1371: + mgl@1371: + if (!op->match(str)) mgl@1371: + return 0; mgl@1371: + return 1; mgl@1371: + } mgl@1371: + mgl@1371: + for (i = 0; i < syntax->nr_operands; i++) mgl@1371: + { mgl@1371: + struct avr32_operand *op; mgl@1371: + int optype = syntax->operand[i]; mgl@1371: + char *p; mgl@1371: + char c; mgl@1371: + mgl@1371: + assert(optype < AVR32_NR_OPERANDS); mgl@1371: + op = &avr32_operand_table[optype]; mgl@1371: + mgl@1371: + for (p = str; *p; p++) mgl@1371: + if (*p == ',') mgl@1371: + break; mgl@1371: + mgl@1371: + if (p == str) mgl@1371: + return 0; mgl@1371: + mgl@1371: + c = *p; mgl@1371: + *p = 0; mgl@1371: + mgl@1371: + if (!op->match(str)) mgl@1371: + { mgl@1371: + *p = c; mgl@1371: + return 0; mgl@1371: + } mgl@1371: + mgl@1371: + str = p; mgl@1371: + *p = c; mgl@1371: + if (c) mgl@1371: + str++; mgl@1371: + } mgl@1371: + mgl@1371: + if (*str == '\0') mgl@1371: + return 1; mgl@1371: + mgl@1371: + if ((*str == 'e' || *str == 'E') && !str[1]) mgl@1371: + return 1; mgl@1371: + mgl@1371: + return 0; mgl@1371: +} mgl@1371: + mgl@1371: +static int parse_operands(char *str) mgl@1371: +{ mgl@1371: + int i; mgl@1371: + mgl@1371: + if (current_insn.syntax->nr_operands < 0) mgl@1371: + { mgl@1371: + int optype; mgl@1371: + struct avr32_operand *op; mgl@1371: + mgl@1371: + for (i = 0; i < (-current_insn.syntax->nr_operands - 1); i++) mgl@1371: + { mgl@1371: + char *p; mgl@1371: + char c; mgl@1371: + mgl@1371: + optype = current_insn.syntax->operand[i]; mgl@1371: + op = &avr32_operand_table[optype]; mgl@1371: + mgl@1371: + for (p = str; *p; p++) mgl@1371: + if (*p == ',') mgl@1371: + break; mgl@1371: + mgl@1371: + assert(p != str); mgl@1371: + mgl@1371: + c = *p, *p = 0; mgl@1371: + op->parse(op, str, i); mgl@1371: + *p = c; mgl@1371: + mgl@1371: + str = p; mgl@1371: + if (c) str++; mgl@1371: + } mgl@1371: + mgl@1371: + /* give the rest of the line to the last operand */ mgl@1371: + optype = current_insn.syntax->operand[i]; mgl@1371: + op = &avr32_operand_table[optype]; mgl@1371: + op->parse(op, str, i); mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + for (i = 0; i < current_insn.syntax->nr_operands; i++) mgl@1371: + { mgl@1371: + int optype = current_insn.syntax->operand[i]; mgl@1371: + struct avr32_operand *op = &avr32_operand_table[optype]; mgl@1371: + char *p; mgl@1371: + char c; mgl@1371: + mgl@1371: + skip_whitespace(str); mgl@1371: + mgl@1371: + for (p = str; *p; p++) mgl@1371: + if (*p == ',') mgl@1371: + break; mgl@1371: + mgl@1371: + assert(p != str); mgl@1371: + mgl@1371: + c = *p, *p = 0; mgl@1371: + op->parse(op, str, i); mgl@1371: + *p = c; mgl@1371: + mgl@1371: + str = p; mgl@1371: + if (c) str++; mgl@1371: + } mgl@1371: + mgl@1371: + if (*str == 'E' || *str == 'e') mgl@1371: + current_insn.force_extended = 1; mgl@1371: + } mgl@1371: + mgl@1371: + return 0; mgl@1371: +} mgl@1371: + mgl@1371: +static const char * mgl@1371: +finish_insn(const struct avr32_opcode *opc) mgl@1371: +{ mgl@1371: + expressionS *exp = ¤t_insn.immediate; mgl@1371: + unsigned int i; mgl@1371: + int will_relax = 0; mgl@1371: + char *buf; mgl@1371: + mgl@1371: + assert(current_insn.next_slot == opc->nr_fields); mgl@1371: + mgl@1371: + pr_debug("%s:%d: finish_insn: trying opcode %d\n", mgl@1371: + frag_now->fr_file, frag_now->fr_line, opc->id); mgl@1371: + mgl@1371: + /* Go through the relaxation stage for all instructions that can mgl@1371: + possibly take a symbolic immediate. The relax code will take mgl@1371: + care of range checking and alignment. */ mgl@1371: + if (opc->var_field != -1) mgl@1371: + { mgl@1371: + int substate, largest_substate; mgl@1371: + symbolS *sym; mgl@1371: + offsetT off; mgl@1371: + mgl@1371: + will_relax = 1; mgl@1371: + substate = largest_substate = opc_initial_substate(opc); mgl@1371: + mgl@1371: + while (relax_more(largest_substate) != AVR32_RS_NONE) mgl@1371: + largest_substate = relax_more(largest_substate); mgl@1371: + mgl@1371: + pr_debug("will relax. initial substate: %d (size %d), largest substate: %d (size %d)\n", mgl@1371: + substate, avr32_rs_size(substate), mgl@1371: + largest_substate, avr32_rs_size(largest_substate)); mgl@1371: + mgl@1371: + /* make sure we have enough room for the largest possible opcode */ mgl@1371: + frag_grow(avr32_rs_size(largest_substate)); mgl@1371: + buf = frag_more(opc->size); mgl@1371: + mgl@1371: + dwarf2_emit_insn(opc->size); mgl@1371: + mgl@1371: + frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_NONE; mgl@1371: + frag_now->tc_frag_data.pcrel = current_insn.pcrel; mgl@1371: + frag_now->tc_frag_data.force_extended = current_insn.force_extended; mgl@1371: + frag_now->tc_frag_data.relaxer = &avr32_default_relaxer; mgl@1371: + mgl@1371: + if (exp->X_op == O_hi) mgl@1371: + { mgl@1371: + frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_HI; mgl@1371: + exp->X_op = exp->X_md; mgl@1371: + } mgl@1371: + else if (exp->X_op == O_lo) mgl@1371: + { mgl@1371: + frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_LO; mgl@1371: + exp->X_op = exp->X_md; mgl@1371: + } mgl@1371: + else if (exp->X_op == O_got) mgl@1371: + { mgl@1371: + frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_GOT; mgl@1371: + exp->X_op = O_symbol; mgl@1371: + } mgl@1371: + mgl@1371: +#if 0 mgl@1371: + if ((opc->reloc_type == BFD_RELOC_AVR32_SUB5) mgl@1371: + && exp->X_op == O_subtract) mgl@1371: + { mgl@1371: + symbolS *tmp; mgl@1371: + tmp = exp->X_add_symbol; mgl@1371: + exp->X_add_symbol = exp->X_op_symbol; mgl@1371: + exp->X_op_symbol = tmp; mgl@1371: + } mgl@1371: +#endif mgl@1371: + mgl@1371: + frag_now->tc_frag_data.exp = current_insn.immediate; mgl@1371: + mgl@1371: + sym = exp->X_add_symbol; mgl@1371: + off = exp->X_add_number; mgl@1371: + if (exp->X_op != O_symbol) mgl@1371: + { mgl@1371: + sym = make_expr_symbol(exp); mgl@1371: + off = 0; mgl@1371: + } mgl@1371: + mgl@1371: + frag_var(rs_machine_dependent, mgl@1371: + avr32_rs_size(largest_substate) - opc->size, mgl@1371: + opc->size, mgl@1371: + substate, sym, off, buf); mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + assert(avr32_rs_size(opc_initial_substate(opc)) == 0); mgl@1371: + mgl@1371: + /* Make sure we always have room for another whole word, as the ifield mgl@1371: + inserters can only write words. */ mgl@1371: + frag_grow(4); mgl@1371: + buf = frag_more(opc->size); mgl@1371: + dwarf2_emit_insn(opc->size); mgl@1371: + } mgl@1371: + mgl@1371: + assert(!(opc->value & ~opc->mask)); mgl@1371: + mgl@1371: + pr_debug("inserting opcode: 0x%lx\n", opc->value); mgl@1371: + bfd_putb32(opc->value, buf); mgl@1371: + mgl@1371: + for (i = 0; i < opc->nr_fields; i++) mgl@1371: + { mgl@1371: + const struct avr32_ifield *f = opc->fields[i]; mgl@1371: + const struct avr32_ifield_data *fd = ¤t_insn.field_value[i]; mgl@1371: + mgl@1371: + pr_debug("inserting field: 0x%lx & 0x%lx\n", mgl@1371: + fd->value >> fd->align_order, f->mask); mgl@1371: + mgl@1371: + f->insert(f, buf, fd->value >> fd->align_order); mgl@1371: + } mgl@1371: + mgl@1371: + assert(will_relax || !current_insn.immediate.X_add_symbol); mgl@1371: + return NULL; mgl@1371: +} mgl@1371: + mgl@1371: +static const char * mgl@1371: +finish_alias(const struct avr32_alias *alias) mgl@1371: +{ mgl@1371: + const struct avr32_opcode *opc; mgl@1371: + struct { mgl@1371: + unsigned long value; mgl@1371: + unsigned long align; mgl@1371: + } mapped_operand[AVR32_MAX_OPERANDS]; mgl@1371: + unsigned int i; mgl@1371: + mgl@1371: + opc = alias->opc; mgl@1371: + mgl@1371: + /* Remap the operands from the alias to the real opcode */ mgl@1371: + for (i = 0; i < opc->nr_fields; i++) mgl@1371: + { mgl@1371: + if (alias->operand_map[i].is_opindex) mgl@1371: + { mgl@1371: + struct avr32_ifield_data *fd; mgl@1371: + fd = ¤t_insn.field_value[alias->operand_map[i].value]; mgl@1371: + mapped_operand[i].value = fd->value; mgl@1371: + mapped_operand[i].align = fd->align_order; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + mapped_operand[i].value = alias->operand_map[i].value; mgl@1371: + mapped_operand[i].align = 0; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + for (i = 0; i < opc->nr_fields; i++) mgl@1371: + { mgl@1371: + current_insn.field_value[i].value = mapped_operand[i].value; mgl@1371: + if (opc->id == AVR32_OPC_COP) mgl@1371: + current_insn.field_value[i].align_order = 0; mgl@1371: + else mgl@1371: + current_insn.field_value[i].align_order mgl@1371: + = mapped_operand[i].align; mgl@1371: + } mgl@1371: + mgl@1371: + current_insn.next_slot = opc->nr_fields; mgl@1371: + mgl@1371: + return finish_insn(opc); mgl@1371: +} mgl@1371: + mgl@1371: +static const char * mgl@1371: +finish_lda(const struct avr32_syntax *syntax ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + expressionS *exp = ¤t_insn.immediate; mgl@1371: + relax_substateT initial_subtype; mgl@1371: + symbolS *sym; mgl@1371: + offsetT off; mgl@1371: + int initial_size, max_size; mgl@1371: + char *buf; mgl@1371: + mgl@1371: + initial_size = LDA_INITIAL_SIZE; mgl@1371: + mgl@1371: + if (avr32_pic) mgl@1371: + { mgl@1371: + initial_subtype = LDA_SUBTYPE_SUB; mgl@1371: + if (linkrelax) mgl@1371: + max_size = 8; mgl@1371: + else mgl@1371: + max_size = 4; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + initial_subtype = LDA_SUBTYPE_MOV1; mgl@1371: + max_size = 4; mgl@1371: + } mgl@1371: + mgl@1371: + frag_grow(max_size); mgl@1371: + buf = frag_more(initial_size); mgl@1371: + dwarf2_emit_insn(initial_size); mgl@1371: + mgl@1371: + if (exp->X_op == O_symbol) mgl@1371: + { mgl@1371: + sym = exp->X_add_symbol; mgl@1371: + off = exp->X_add_number; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + sym = make_expr_symbol(exp); mgl@1371: + off = 0; mgl@1371: + } mgl@1371: + mgl@1371: + frag_now->tc_frag_data.reloc_info = current_insn.field_value[0].value; mgl@1371: + frag_now->tc_frag_data.relaxer = &avr32_lda_relaxer; mgl@1371: + mgl@1371: + if (!avr32_pic) mgl@1371: + { mgl@1371: + /* The relaxer will bump the refcount if necessary */ mgl@1371: + frag_now->tc_frag_data.pool mgl@1371: + = add_to_cpool(exp, &frag_now->tc_frag_data.pool_entry, 0); mgl@1371: + } mgl@1371: + mgl@1371: + frag_var(rs_machine_dependent, max_size - initial_size, mgl@1371: + initial_size, initial_subtype, sym, off, buf); mgl@1371: + mgl@1371: + return NULL; mgl@1371: +} mgl@1371: + mgl@1371: +static const char * mgl@1371: +finish_call(const struct avr32_syntax *syntax ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + expressionS *exp = ¤t_insn.immediate; mgl@1371: + symbolS *sym; mgl@1371: + offsetT off; mgl@1371: + int initial_size, max_size; mgl@1371: + char *buf; mgl@1371: + mgl@1371: + initial_size = CALL_INITIAL_SIZE; mgl@1371: + mgl@1371: + if (avr32_pic) mgl@1371: + { mgl@1371: + if (linkrelax) mgl@1371: + max_size = 10; mgl@1371: + else mgl@1371: + max_size = 4; mgl@1371: + } mgl@1371: + else mgl@1371: + max_size = 4; mgl@1371: + mgl@1371: + frag_grow(max_size); mgl@1371: + buf = frag_more(initial_size); mgl@1371: + dwarf2_emit_insn(initial_size); mgl@1371: + mgl@1371: + frag_now->tc_frag_data.relaxer = &avr32_call_relaxer; mgl@1371: + mgl@1371: + if (exp->X_op == O_symbol) mgl@1371: + { mgl@1371: + sym = exp->X_add_symbol; mgl@1371: + off = exp->X_add_number; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + sym = make_expr_symbol(exp); mgl@1371: + off = 0; mgl@1371: + } mgl@1371: + mgl@1371: + if (!avr32_pic) mgl@1371: + { mgl@1371: + /* The relaxer will bump the refcount if necessary */ mgl@1371: + frag_now->tc_frag_data.pool mgl@1371: + = add_to_cpool(exp, &frag_now->tc_frag_data.pool_entry, 0); mgl@1371: + } mgl@1371: + mgl@1371: + frag_var(rs_machine_dependent, max_size - initial_size, mgl@1371: + initial_size, CALL_SUBTYPE_RCALL1, sym, off, buf); mgl@1371: + mgl@1371: + return NULL; mgl@1371: +} mgl@1371: + mgl@1371: +void mgl@1371: +md_begin (void) mgl@1371: +{ mgl@1371: + unsigned long flags = 0; mgl@1371: + int i; mgl@1371: + mgl@1371: + avr32_mnemonic_htab = hash_new(); mgl@1371: + mgl@1371: + if (!avr32_mnemonic_htab) mgl@1371: + as_fatal(_("virtual memory exhausted")); mgl@1371: + mgl@1371: + for (i = 0; i < AVR32_NR_MNEMONICS; i++) mgl@1371: + { mgl@1371: + hash_insert(avr32_mnemonic_htab, avr32_mnemonic_table[i].name, mgl@1371: + (void *)&avr32_mnemonic_table[i]); mgl@1371: + } mgl@1371: + mgl@1371: + if (linkrelax) mgl@1371: + flags |= EF_AVR32_LINKRELAX; mgl@1371: + if (avr32_pic) mgl@1371: + flags |= EF_AVR32_PIC; mgl@1371: + mgl@1371: + bfd_set_private_flags(stdoutput, flags); mgl@1371: + mgl@1371: +#ifdef OPC_CONSISTENCY_CHECK mgl@1371: + if (sizeof(avr32_operand_table)/sizeof(avr32_operand_table[0]) mgl@1371: + < AVR32_NR_OPERANDS) mgl@1371: + as_fatal(_("operand table is incomplete")); mgl@1371: + mgl@1371: + for (i = 0; i < AVR32_NR_OPERANDS; i++) mgl@1371: + if (avr32_operand_table[i].id != i) mgl@1371: + as_fatal(_("operand table inconsistency found at index %d\n"), i); mgl@1371: + pr_debug("%d operands verified\n", AVR32_NR_OPERANDS); mgl@1371: + mgl@1371: + for (i = 0; i < AVR32_NR_IFIELDS; i++) mgl@1371: + if (avr32_ifield_table[i].id != i) mgl@1371: + as_fatal(_("ifield table inconsistency found at index %d\n"), i); mgl@1371: + pr_debug("%d instruction fields verified\n", AVR32_NR_IFIELDS); mgl@1371: + mgl@1371: + for (i = 0; i < AVR32_NR_OPCODES; i++) mgl@1371: + { mgl@1371: + if (avr32_opc_table[i].id != i) mgl@1371: + as_fatal(_("opcode table inconsistency found at index %d\n"), i); mgl@1371: + if ((avr32_opc_table[i].var_field == -1 mgl@1371: + && avr32_relax_table[i].length != 0) mgl@1371: + || (avr32_opc_table[i].var_field != -1 mgl@1371: + && avr32_relax_table[i].length == 0)) mgl@1371: + as_fatal(_("relax table inconsistency found at index %d\n"), i); mgl@1371: + } mgl@1371: + pr_debug("%d opcodes verified\n", AVR32_NR_OPCODES); mgl@1371: + mgl@1371: + for (i = 0; i < AVR32_NR_SYNTAX; i++) mgl@1371: + if (avr32_syntax_table[i].id != i) mgl@1371: + as_fatal(_("syntax table inconsistency found at index %d\n"), i); mgl@1371: + pr_debug("%d syntax variants verified\n", AVR32_NR_SYNTAX); mgl@1371: + mgl@1371: + for (i = 0; i < AVR32_NR_ALIAS; i++) mgl@1371: + if (avr32_alias_table[i].id != i) mgl@1371: + as_fatal(_("alias table inconsistency found at index %d\n"), i); mgl@1371: + pr_debug("%d aliases verified\n", AVR32_NR_ALIAS); mgl@1371: + mgl@1371: + for (i = 0; i < AVR32_NR_MNEMONICS; i++) mgl@1371: + if (avr32_mnemonic_table[i].id != i) mgl@1371: + as_fatal(_("mnemonic table inconsistency found at index %d\n"), i); mgl@1371: + pr_debug("%d mnemonics verified\n", AVR32_NR_MNEMONICS); mgl@1371: +#endif mgl@1371: +} mgl@1371: + mgl@1371: +void mgl@1371: +md_assemble (char *str) mgl@1371: +{ mgl@1371: + struct avr32_mnemonic *mnemonic; mgl@1371: + char *p, c; mgl@1371: + mgl@1371: + memset(¤t_insn, 0, sizeof(current_insn)); mgl@1371: + current_insn.immediate.X_op = O_constant; mgl@1371: + mgl@1371: + skip_whitespace(str); mgl@1371: + for (p = str; *p; p++) mgl@1371: + if (*p == ' ') mgl@1371: + break; mgl@1371: + c = *p; mgl@1371: + *p = 0; mgl@1371: + mgl@1371: + mnemonic = hash_find(avr32_mnemonic_htab, str); mgl@1371: + *p = c; mgl@1371: + if (c) p++; mgl@1371: + mgl@1371: + if (mnemonic) mgl@1371: + { mgl@1371: + const struct avr32_syntax *syntax; mgl@1371: + mgl@1371: + for (syntax = mnemonic->syntax; syntax; syntax = syntax->next) mgl@1371: + { mgl@1371: + const char *errmsg = NULL; mgl@1371: + mgl@1371: + if (syntax_matches(syntax, p)) mgl@1371: + { mgl@1371: + if (!(syntax->isa_flags & avr32_arch->isa_flags)) mgl@1371: + { mgl@1371: + as_bad(_("Selected architecture `%s' does not support `%s'"), mgl@1371: + avr32_arch->name, str); mgl@1371: + return; mgl@1371: + } mgl@1371: + mgl@1371: + current_insn.syntax = syntax; mgl@1371: + parse_operands(p); mgl@1371: + mgl@1371: + switch (syntax->type) mgl@1371: + { mgl@1371: + case AVR32_PARSER_NORMAL: mgl@1371: + errmsg = finish_insn(syntax->u.opc); mgl@1371: + break; mgl@1371: + case AVR32_PARSER_ALIAS: mgl@1371: + errmsg = finish_alias(syntax->u.alias); mgl@1371: + break; mgl@1371: + case AVR32_PARSER_LDA: mgl@1371: + errmsg = finish_lda(syntax); mgl@1371: + break; mgl@1371: + case AVR32_PARSER_CALL: mgl@1371: + errmsg = finish_call(syntax); mgl@1371: + break; mgl@1371: + default: mgl@1371: + BAD_CASE(syntax->type); mgl@1371: + break; mgl@1371: + } mgl@1371: + mgl@1371: + if (errmsg) mgl@1371: + as_bad("%s in `%s'", errmsg, str); mgl@1371: + mgl@1371: + return; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + as_bad(_("unrecognized form of instruction: `%s'"), str); mgl@1371: + } mgl@1371: + else mgl@1371: + as_bad(_("unrecognized instruction `%s'"), str); mgl@1371: +} mgl@1371: + mgl@1371: +void avr32_cleanup(void) mgl@1371: +{ mgl@1371: + struct cpool *pool; mgl@1371: + mgl@1371: + /* Emit any constant pools that haven't been explicitly flushed with mgl@1371: + a .cpool directive. */ mgl@1371: + for (pool = cpool_list; pool; pool = pool->next) mgl@1371: + { mgl@1371: + subseg_set(pool->section, pool->sub_section); mgl@1371: + s_cpool(0); mgl@1371: + } mgl@1371: +} mgl@1371: + mgl@1371: +/* Handle any PIC-related operands in data allocation pseudo-ops */ mgl@1371: +void mgl@1371: +avr32_cons_fix_new (fragS *frag, int off, int size, expressionS *exp) mgl@1371: +{ mgl@1371: + bfd_reloc_code_real_type r_type = BFD_RELOC_UNUSED; mgl@1371: + int pcrel = 0; mgl@1371: + mgl@1371: + pr_debug("%s:%u: cons_fix_new, add_sym: %s, op_sym: %s, op: %d, add_num: %d\n", mgl@1371: + frag->fr_file, frag->fr_line, mgl@1371: + exp->X_add_symbol?S_GET_NAME(exp->X_add_symbol):"(none)", mgl@1371: + exp->X_op_symbol?S_GET_NAME(exp->X_op_symbol):"(none)", mgl@1371: + exp->X_op, exp->X_add_number); mgl@1371: + mgl@1371: + if (exp->X_op == O_subtract && exp->X_op_symbol) mgl@1371: + { mgl@1371: + if (exp->X_op_symbol == GOT_symbol) mgl@1371: + { mgl@1371: + if (size != 4) mgl@1371: + goto bad_size; mgl@1371: + r_type = BFD_RELOC_AVR32_GOTPC; mgl@1371: + exp->X_op = O_symbol; mgl@1371: + exp->X_op_symbol = NULL; mgl@1371: + } mgl@1371: + } mgl@1371: + else if (exp->X_op == O_got) mgl@1371: + { mgl@1371: + switch (size) mgl@1371: + { mgl@1371: + case 1: mgl@1371: + r_type = BFD_RELOC_AVR32_GOT8; mgl@1371: + break; mgl@1371: + case 2: mgl@1371: + r_type = BFD_RELOC_AVR32_GOT16; mgl@1371: + break; mgl@1371: + case 4: mgl@1371: + r_type = BFD_RELOC_AVR32_GOT32; mgl@1371: + break; mgl@1371: + default: mgl@1371: + goto bad_size; mgl@1371: + } mgl@1371: + mgl@1371: + exp->X_op = O_symbol; mgl@1371: + } mgl@1371: + mgl@1371: + if (r_type == BFD_RELOC_UNUSED) mgl@1371: + switch (size) mgl@1371: + { mgl@1371: + case 1: mgl@1371: + r_type = BFD_RELOC_8; mgl@1371: + break; mgl@1371: + case 2: mgl@1371: + r_type = BFD_RELOC_16; mgl@1371: + break; mgl@1371: + case 4: mgl@1371: + r_type = BFD_RELOC_32; mgl@1371: + break; mgl@1371: + default: mgl@1371: + goto bad_size; mgl@1371: + } mgl@1371: + else if (size != 4) mgl@1371: + { mgl@1371: + bad_size: mgl@1371: + as_bad(_("unsupported BFD relocation size %u"), size); mgl@1371: + r_type = BFD_RELOC_UNUSED; mgl@1371: + } mgl@1371: + mgl@1371: + fix_new_exp (frag, off, size, exp, pcrel, r_type); mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +avr32_frob_section(bfd *abfd ATTRIBUTE_UNUSED, segT sec, mgl@1371: + void *ignore ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + segment_info_type *seginfo; mgl@1371: + fixS *fix; mgl@1371: + mgl@1371: + seginfo = seg_info(sec); mgl@1371: + if (!seginfo) mgl@1371: + return; mgl@1371: + mgl@1371: + for (fix = seginfo->fix_root; fix; fix = fix->fx_next) mgl@1371: + { mgl@1371: + if (fix->fx_done) mgl@1371: + continue; mgl@1371: + mgl@1371: + if (fix->fx_r_type == BFD_RELOC_AVR32_SUB5 mgl@1371: + && fix->fx_addsy && fix->fx_subsy) mgl@1371: + { mgl@1371: + if (S_GET_SEGMENT(fix->fx_addsy) != S_GET_SEGMENT(fix->fx_subsy) mgl@1371: + || linkrelax) mgl@1371: + { mgl@1371: + symbolS *tmp; mgl@1371: +#ifdef DEBUG mgl@1371: + fprintf(stderr, "Swapping symbols in fixup:\n"); mgl@1371: + print_fixup(fix); mgl@1371: +#endif mgl@1371: + tmp = fix->fx_addsy; mgl@1371: + fix->fx_addsy = fix->fx_subsy; mgl@1371: + fix->fx_subsy = tmp; mgl@1371: + fix->fx_offset = -fix->fx_offset; mgl@1371: + } mgl@1371: + } mgl@1371: + } mgl@1371: +} mgl@1371: + mgl@1371: +/* We need to look for SUB5 instructions with expressions that will be mgl@1371: + made PC-relative and switch fx_addsy with fx_subsy. This has to be mgl@1371: + done before adjustment or the wrong symbol might be adjusted. mgl@1371: + mgl@1371: + This applies to fixups that are a result of expressions like -(sym mgl@1371: + - .) and that will make it all the way to md_apply_fix3(). LDA mgl@1371: + does the right thing in convert_frag, so we must not convert mgl@1371: + those. */ mgl@1371: +void mgl@1371: +avr32_frob_file(void) mgl@1371: +{ mgl@1371: + /* if (1 || !linkrelax) mgl@1371: + return; */ mgl@1371: + mgl@1371: + bfd_map_over_sections(stdoutput, avr32_frob_section, NULL); mgl@1371: +} mgl@1371: + mgl@1371: +static bfd_boolean mgl@1371: +convert_to_diff_reloc(fixS *fixP) mgl@1371: +{ mgl@1371: + switch (fixP->fx_r_type) mgl@1371: + { mgl@1371: + case BFD_RELOC_32: mgl@1371: + fixP->fx_r_type = BFD_RELOC_AVR32_DIFF32; mgl@1371: + break; mgl@1371: + case BFD_RELOC_16: mgl@1371: + fixP->fx_r_type = BFD_RELOC_AVR32_DIFF16; mgl@1371: + break; mgl@1371: + case BFD_RELOC_8: mgl@1371: + fixP->fx_r_type = BFD_RELOC_AVR32_DIFF8; mgl@1371: + break; mgl@1371: + default: mgl@1371: + return FALSE; mgl@1371: + } mgl@1371: + mgl@1371: + return TRUE; mgl@1371: +} mgl@1371: + mgl@1371: +/* Simplify a fixup. If possible, the fixup is reduced to a single mgl@1371: + constant which is written to the output file. Otherwise, a mgl@1371: + relocation is generated so that the linker can take care of the mgl@1371: + rest. mgl@1371: + mgl@1371: + ELF relocations have certain constraints: They can only take a mgl@1371: + single symbol and a single addend. This means that for difference mgl@1371: + expressions, we _must_ get rid of the fx_subsy symbol somehow. mgl@1371: + mgl@1371: + The difference between two labels in the same section can be mgl@1371: + calculated directly unless 'linkrelax' is set, or a relocation is mgl@1371: + forced. If so, we must emit a R_AVR32_DIFFxx relocation. If there mgl@1371: + are addends involved at this point, we must be especially careful mgl@1371: + as the relocation must point exactly to the symbol being mgl@1371: + subtracted. mgl@1371: + mgl@1371: + When subtracting a symbol defined in the same section as the fixup, mgl@1371: + we might be able to convert it to a PC-relative expression, unless mgl@1371: + linkrelax is set. If this is the case, there's no way we can make mgl@1371: + sure that the difference between the fixup and fx_subsy stays mgl@1371: + constant. So for now, we're just going to disallow that. mgl@1371: + */ mgl@1371: +void mgl@1371: +avr32_process_fixup(fixS *fixP, segT this_segment) mgl@1371: +{ mgl@1371: + segT add_symbol_segment = absolute_section; mgl@1371: + segT sub_symbol_segment = absolute_section; mgl@1371: + symbolS *fx_addsy, *fx_subsy; mgl@1371: + offsetT value = 0, fx_offset; mgl@1371: + bfd_boolean apply = FALSE; mgl@1371: + mgl@1371: + assert(this_segment != absolute_section); mgl@1371: + mgl@1371: + if (fixP->fx_r_type >= BFD_RELOC_UNUSED) mgl@1371: + { mgl@1371: + as_bad_where(fixP->fx_file, fixP->fx_line, mgl@1371: + _("Bad relocation type %d\n"), fixP->fx_r_type); mgl@1371: + return; mgl@1371: + } mgl@1371: + mgl@1371: + /* BFD_RELOC_AVR32_SUB5 fixups have been swapped by avr32_frob_section() */ mgl@1371: + fx_addsy = fixP->fx_addsy; mgl@1371: + fx_subsy = fixP->fx_subsy; mgl@1371: + fx_offset = fixP->fx_offset; mgl@1371: + mgl@1371: + if (fx_addsy) mgl@1371: + add_symbol_segment = S_GET_SEGMENT(fx_addsy); mgl@1371: + mgl@1371: + if (fx_subsy) mgl@1371: + { mgl@1371: + resolve_symbol_value(fx_subsy); mgl@1371: + sub_symbol_segment = S_GET_SEGMENT(fx_subsy); mgl@1371: + mgl@1371: + if (sub_symbol_segment == this_segment mgl@1371: + && (!linkrelax mgl@1371: + || S_GET_VALUE(fx_subsy) == (fixP->fx_frag->fr_address mgl@1371: + + fixP->fx_where))) mgl@1371: + { mgl@1371: + fixP->fx_pcrel = TRUE; mgl@1371: + fx_offset += (fixP->fx_frag->fr_address + fixP->fx_where mgl@1371: + - S_GET_VALUE(fx_subsy)); mgl@1371: + fx_subsy = NULL; mgl@1371: + } mgl@1371: + else if (sub_symbol_segment == absolute_section) mgl@1371: + { mgl@1371: + /* The symbol is really a constant. */ mgl@1371: + fx_offset -= S_GET_VALUE(fx_subsy); mgl@1371: + fx_subsy = NULL; mgl@1371: + } mgl@1371: + else if (SEG_NORMAL(add_symbol_segment) mgl@1371: + && sub_symbol_segment == add_symbol_segment mgl@1371: + && (!linkrelax || convert_to_diff_reloc(fixP))) mgl@1371: + { mgl@1371: + /* Difference between two labels in the same section. */ mgl@1371: + if (linkrelax) mgl@1371: + { mgl@1371: + /* convert_to_diff() has ensured that the reloc type is mgl@1371: + either DIFF32, DIFF16 or DIFF8. */ mgl@1371: + value = (S_GET_VALUE(fx_addsy) + fixP->fx_offset mgl@1371: + - S_GET_VALUE(fx_subsy)); mgl@1371: + mgl@1371: + /* Try to convert it to a section symbol if possible */ mgl@1371: + if (!S_FORCE_RELOC(fx_addsy, 1) mgl@1371: + && !(sub_symbol_segment->flags & SEC_THREAD_LOCAL)) mgl@1371: + { mgl@1371: + fx_offset = S_GET_VALUE(fx_subsy); mgl@1371: + fx_addsy = section_symbol(sub_symbol_segment); mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + fx_addsy = fx_subsy; mgl@1371: + fx_offset = 0; mgl@1371: + } mgl@1371: + mgl@1371: + fx_subsy = NULL; mgl@1371: + apply = TRUE; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + fx_offset += S_GET_VALUE(fx_addsy); mgl@1371: + fx_offset -= S_GET_VALUE(fx_subsy); mgl@1371: + fx_addsy = NULL; mgl@1371: + fx_subsy = NULL; mgl@1371: + } mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + as_bad_where(fixP->fx_file, fixP->fx_line, mgl@1371: + _("can't resolve `%s' {%s section} - `%s' {%s section}"), mgl@1371: + fx_addsy ? S_GET_NAME (fx_addsy) : "0", mgl@1371: + segment_name (add_symbol_segment), mgl@1371: + S_GET_NAME (fx_subsy), mgl@1371: + segment_name (sub_symbol_segment)); mgl@1371: + return; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + if (fx_addsy && !TC_FORCE_RELOCATION(fixP)) mgl@1371: + { mgl@1371: + if (add_symbol_segment == this_segment mgl@1371: + && fixP->fx_pcrel) mgl@1371: + { mgl@1371: + value += S_GET_VALUE(fx_addsy); mgl@1371: + value -= md_pcrel_from_section(fixP, this_segment); mgl@1371: + fx_addsy = NULL; mgl@1371: + fixP->fx_pcrel = FALSE; mgl@1371: + } mgl@1371: + else if (add_symbol_segment == absolute_section) mgl@1371: + { mgl@1371: + fx_offset += S_GET_VALUE(fixP->fx_addsy); mgl@1371: + fx_addsy = NULL; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + if (!fx_addsy) mgl@1371: + fixP->fx_done = TRUE; mgl@1371: + mgl@1371: + if (fixP->fx_pcrel) mgl@1371: + { mgl@1371: + if (fx_addsy != NULL mgl@1371: + && S_IS_DEFINED(fx_addsy) mgl@1371: + && S_GET_SEGMENT(fx_addsy) != this_segment) mgl@1371: + value += md_pcrel_from_section(fixP, this_segment); mgl@1371: + mgl@1371: + switch (fixP->fx_r_type) mgl@1371: + { mgl@1371: + case BFD_RELOC_32: mgl@1371: + fixP->fx_r_type = BFD_RELOC_32_PCREL; mgl@1371: + break; mgl@1371: + case BFD_RELOC_16: mgl@1371: + fixP->fx_r_type = BFD_RELOC_16_PCREL; mgl@1371: + break; mgl@1371: + case BFD_RELOC_8: mgl@1371: + fixP->fx_r_type = BFD_RELOC_8_PCREL; mgl@1371: + break; mgl@1371: + case BFD_RELOC_AVR32_SUB5: mgl@1371: + fixP->fx_r_type = BFD_RELOC_AVR32_16N_PCREL; mgl@1371: + break; mgl@1371: + case BFD_RELOC_AVR32_16S: mgl@1371: + fixP->fx_r_type = BFD_RELOC_AVR32_16B_PCREL; mgl@1371: + break; mgl@1371: + case BFD_RELOC_AVR32_14UW: mgl@1371: + fixP->fx_r_type = BFD_RELOC_AVR32_14UW_PCREL; mgl@1371: + break; mgl@1371: + case BFD_RELOC_AVR32_10UW: mgl@1371: + fixP->fx_r_type = BFD_RELOC_AVR32_10UW_PCREL; mgl@1371: + break; mgl@1371: + default: mgl@1371: + /* Should have been taken care of already */ mgl@1371: + break; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + if (fixP->fx_done || apply) mgl@1371: + { mgl@1371: + const struct avr32_ifield *ifield; mgl@1371: + char *buf = fixP->fx_where + fixP->fx_frag->fr_literal; mgl@1371: + mgl@1371: + if (fixP->fx_done) mgl@1371: + value += fx_offset; mgl@1371: + mgl@1371: + /* For hosts with longs bigger than 32-bits make sure that the top mgl@1371: + bits of a 32-bit negative value read in by the parser are set, mgl@1371: + so that the correct comparisons are made. */ mgl@1371: + if (value & 0x80000000) mgl@1371: + value |= (-1L << 31); mgl@1371: + mgl@1371: + switch (fixP->fx_r_type) mgl@1371: + { mgl@1371: + case BFD_RELOC_32: mgl@1371: + case BFD_RELOC_16: mgl@1371: + case BFD_RELOC_8: mgl@1371: + case BFD_RELOC_AVR32_DIFF32: mgl@1371: + case BFD_RELOC_AVR32_DIFF16: mgl@1371: + case BFD_RELOC_AVR32_DIFF8: mgl@1371: + md_number_to_chars(buf, value, fixP->fx_size); mgl@1371: + break; mgl@1371: + case BFD_RELOC_HI16: mgl@1371: + value >>= 16; mgl@1371: + case BFD_RELOC_LO16: mgl@1371: + value &= 0xffff; mgl@1371: + md_number_to_chars(buf + 2, value, 2); mgl@1371: + break; mgl@1371: + case BFD_RELOC_AVR32_16N_PCREL: mgl@1371: + value = -value; mgl@1371: + /* fall through */ mgl@1371: + case BFD_RELOC_AVR32_22H_PCREL: mgl@1371: + case BFD_RELOC_AVR32_18W_PCREL: mgl@1371: + case BFD_RELOC_AVR32_16B_PCREL: mgl@1371: + case BFD_RELOC_AVR32_11H_PCREL: mgl@1371: + case BFD_RELOC_AVR32_9H_PCREL: mgl@1371: + case BFD_RELOC_AVR32_9UW_PCREL: mgl@1371: + case BFD_RELOC_AVR32_3U: mgl@1371: + case BFD_RELOC_AVR32_4UH: mgl@1371: + case BFD_RELOC_AVR32_6UW: mgl@1371: + case BFD_RELOC_AVR32_6S: mgl@1371: + case BFD_RELOC_AVR32_7UW: mgl@1371: + case BFD_RELOC_AVR32_8S_EXT: mgl@1371: + case BFD_RELOC_AVR32_8S: mgl@1371: + case BFD_RELOC_AVR32_10UW: mgl@1371: + case BFD_RELOC_AVR32_10SW: mgl@1371: + case BFD_RELOC_AVR32_STHH_W: mgl@1371: + case BFD_RELOC_AVR32_14UW: mgl@1371: + case BFD_RELOC_AVR32_16S: mgl@1371: + case BFD_RELOC_AVR32_16U: mgl@1371: + case BFD_RELOC_AVR32_21S: mgl@1371: + case BFD_RELOC_AVR32_SUB5: mgl@1371: + case BFD_RELOC_AVR32_CPCALL: mgl@1371: + case BFD_RELOC_AVR32_16_CP: mgl@1371: + case BFD_RELOC_AVR32_9W_CP: mgl@1371: + case BFD_RELOC_AVR32_15S: mgl@1371: + ifield = fixP->tc_fix_data.ifield; mgl@1371: + pr_debug("insert field: %ld <= %ld <= %ld (align %u)\n", mgl@1371: + fixP->tc_fix_data.min, value, fixP->tc_fix_data.max, mgl@1371: + fixP->tc_fix_data.align); mgl@1371: + if (value < fixP->tc_fix_data.min || value > fixP->tc_fix_data.max) mgl@1371: + as_bad_where(fixP->fx_file, fixP->fx_line, mgl@1371: + _("operand out of range (%ld not between %ld and %ld)"), mgl@1371: + value, fixP->tc_fix_data.min, fixP->tc_fix_data.max); mgl@1371: + if (value & ((1 << fixP->tc_fix_data.align) - 1)) mgl@1371: + as_bad_where(fixP->fx_file, fixP->fx_line, mgl@1371: + _("misaligned operand (required alignment: %d)"), mgl@1371: + 1 << fixP->tc_fix_data.align); mgl@1371: + ifield->insert(ifield, buf, value >> fixP->tc_fix_data.align); mgl@1371: + break; mgl@1371: + case BFD_RELOC_AVR32_ALIGN: mgl@1371: + /* Nothing to do */ mgl@1371: + fixP->fx_done = FALSE; mgl@1371: + break; mgl@1371: + default: mgl@1371: + as_fatal("reloc type %s not handled\n", mgl@1371: + bfd_get_reloc_code_name(fixP->fx_r_type)); mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + fixP->fx_addsy = fx_addsy; mgl@1371: + fixP->fx_subsy = fx_subsy; mgl@1371: + fixP->fx_offset = fx_offset; mgl@1371: + mgl@1371: + if (!fixP->fx_done) mgl@1371: + { mgl@1371: + if (!fixP->fx_addsy) mgl@1371: + fixP->fx_addsy = abs_section_sym; mgl@1371: + mgl@1371: + symbol_mark_used_in_reloc(fixP->fx_addsy); mgl@1371: + if (fixP->fx_subsy) mgl@1371: + abort(); mgl@1371: + } mgl@1371: +} mgl@1371: + mgl@1371: +#if 0 mgl@1371: +void mgl@1371: +md_apply_fix3 (fixS *fixP, valueT *valP, segT seg) mgl@1371: +{ mgl@1371: + const struct avr32_ifield *ifield; mgl@1371: + offsetT value = *valP; mgl@1371: + char *buf = fixP->fx_where + fixP->fx_frag->fr_literal; mgl@1371: + bfd_boolean apply; mgl@1371: + mgl@1371: + pr_debug("%s:%u: apply_fix3: r_type=%d value=%lx offset=%lx\n", mgl@1371: + fixP->fx_file, fixP->fx_line, fixP->fx_r_type, *valP, mgl@1371: + fixP->fx_offset); mgl@1371: + mgl@1371: + if (fixP->fx_r_type >= BFD_RELOC_UNUSED) mgl@1371: + { mgl@1371: + as_bad_where(fixP->fx_file, fixP->fx_line, mgl@1371: + _("Bad relocation type %d\n"), fixP->fx_r_type); mgl@1371: + return; mgl@1371: + } mgl@1371: + mgl@1371: + if (!fixP->fx_addsy && !fixP->fx_subsy) mgl@1371: + fixP->fx_done = 1; mgl@1371: + mgl@1371: + if (fixP->fx_pcrel) mgl@1371: + { mgl@1371: + if (fixP->fx_addsy != NULL mgl@1371: + && S_IS_DEFINED(fixP->fx_addsy) mgl@1371: + && S_GET_SEGMENT(fixP->fx_addsy) != seg) mgl@1371: + value += md_pcrel_from_section(fixP, seg); mgl@1371: + mgl@1371: + switch (fixP->fx_r_type) mgl@1371: + { mgl@1371: + case BFD_RELOC_32: mgl@1371: + fixP->fx_r_type = BFD_RELOC_32_PCREL; mgl@1371: + break; mgl@1371: + case BFD_RELOC_16: mgl@1371: + case BFD_RELOC_8: mgl@1371: + as_bad_where (fixP->fx_file, fixP->fx_line, mgl@1371: + _("8- and 16-bit PC-relative relocations not supported")); mgl@1371: + break; mgl@1371: + case BFD_RELOC_AVR32_SUB5: mgl@1371: + fixP->fx_r_type = BFD_RELOC_AVR32_PCREL_SUB5; mgl@1371: + break; mgl@1371: + case BFD_RELOC_AVR32_16S: mgl@1371: + fixP->fx_r_type = BFD_RELOC_AVR32_16_PCREL; mgl@1371: + break; mgl@1371: + default: mgl@1371: + /* Should have been taken care of already */ mgl@1371: + break; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + if (fixP->fx_r_type == BFD_RELOC_32 mgl@1371: + && fixP->fx_subsy) mgl@1371: + { mgl@1371: + fixP->fx_r_type = BFD_RELOC_AVR32_DIFF32; mgl@1371: + mgl@1371: + /* Offsets are only allowed if it's a result of adjusting a mgl@1371: + local symbol into a section-relative offset. mgl@1371: + tc_fix_adjustable() should prevent any adjustment if there mgl@1371: + was an offset involved before. */ mgl@1371: + if (fixP->fx_offset && !symbol_section_p(fixP->fx_addsy)) mgl@1371: + as_bad_where(fixP->fx_file, fixP->fx_line, mgl@1371: + _("cannot represent symbol difference with an offset")); mgl@1371: + mgl@1371: + value = (S_GET_VALUE(fixP->fx_addsy) + fixP->fx_offset mgl@1371: + - S_GET_VALUE(fixP->fx_subsy)); mgl@1371: + mgl@1371: + /* The difference before any relaxing takes place is written mgl@1371: + out, and the DIFF32 reloc identifies the address of the first mgl@1371: + symbol (i.e. the on that's subtracted.) */ mgl@1371: + *valP = value; mgl@1371: + fixP->fx_offset -= value; mgl@1371: + fixP->fx_subsy = NULL; mgl@1371: + mgl@1371: + md_number_to_chars(buf, value, fixP->fx_size); mgl@1371: + } mgl@1371: + mgl@1371: + if (fixP->fx_done) mgl@1371: + { mgl@1371: + switch (fixP->fx_r_type) mgl@1371: + { mgl@1371: + case BFD_RELOC_8: mgl@1371: + case BFD_RELOC_16: mgl@1371: + case BFD_RELOC_32: mgl@1371: + md_number_to_chars(buf, value, fixP->fx_size); mgl@1371: + break; mgl@1371: + case BFD_RELOC_HI16: mgl@1371: + value >>= 16; mgl@1371: + case BFD_RELOC_LO16: mgl@1371: + value &= 0xffff; mgl@1371: + *valP = value; mgl@1371: + md_number_to_chars(buf + 2, value, 2); mgl@1371: + break; mgl@1371: + case BFD_RELOC_AVR32_PCREL_SUB5: mgl@1371: + value = -value; mgl@1371: + /* fall through */ mgl@1371: + case BFD_RELOC_AVR32_9_PCREL: mgl@1371: + case BFD_RELOC_AVR32_11_PCREL: mgl@1371: + case BFD_RELOC_AVR32_16_PCREL: mgl@1371: + case BFD_RELOC_AVR32_18_PCREL: mgl@1371: + case BFD_RELOC_AVR32_22_PCREL: mgl@1371: + case BFD_RELOC_AVR32_3U: mgl@1371: + case BFD_RELOC_AVR32_4UH: mgl@1371: + case BFD_RELOC_AVR32_6UW: mgl@1371: + case BFD_RELOC_AVR32_6S: mgl@1371: + case BFD_RELOC_AVR32_7UW: mgl@1371: + case BFD_RELOC_AVR32_8S: mgl@1371: + case BFD_RELOC_AVR32_10UW: mgl@1371: + case BFD_RELOC_AVR32_10SW: mgl@1371: + case BFD_RELOC_AVR32_14UW: mgl@1371: + case BFD_RELOC_AVR32_16S: mgl@1371: + case BFD_RELOC_AVR32_16U: mgl@1371: + case BFD_RELOC_AVR32_21S: mgl@1371: + case BFD_RELOC_AVR32_BRC1: mgl@1371: + case BFD_RELOC_AVR32_SUB5: mgl@1371: + case BFD_RELOC_AVR32_CPCALL: mgl@1371: + case BFD_RELOC_AVR32_16_CP: mgl@1371: + case BFD_RELOC_AVR32_9_CP: mgl@1371: + case BFD_RELOC_AVR32_15S: mgl@1371: + ifield = fixP->tc_fix_data.ifield; mgl@1371: + pr_debug("insert field: %ld <= %ld <= %ld (align %u)\n", mgl@1371: + fixP->tc_fix_data.min, value, fixP->tc_fix_data.max, mgl@1371: + fixP->tc_fix_data.align); mgl@1371: + if (value < fixP->tc_fix_data.min || value > fixP->tc_fix_data.max) mgl@1371: + as_bad_where(fixP->fx_file, fixP->fx_line, mgl@1371: + _("operand out of range (%ld not between %ld and %ld)"), mgl@1371: + value, fixP->tc_fix_data.min, fixP->tc_fix_data.max); mgl@1371: + if (value & ((1 << fixP->tc_fix_data.align) - 1)) mgl@1371: + as_bad_where(fixP->fx_file, fixP->fx_line, mgl@1371: + _("misaligned operand (required alignment: %d)"), mgl@1371: + 1 << fixP->tc_fix_data.align); mgl@1371: + ifield->insert(ifield, buf, value >> fixP->tc_fix_data.align); mgl@1371: + break; mgl@1371: + case BFD_RELOC_AVR32_ALIGN: mgl@1371: + /* Nothing to do */ mgl@1371: + fixP->fx_done = FALSE; mgl@1371: + break; mgl@1371: + default: mgl@1371: + as_fatal("reloc type %s not handled\n", mgl@1371: + bfd_get_reloc_code_name(fixP->fx_r_type)); mgl@1371: + } mgl@1371: + } mgl@1371: +} mgl@1371: +#endif mgl@1371: + mgl@1371: +arelent * mgl@1371: +tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, mgl@1371: + fixS *fixp) mgl@1371: +{ mgl@1371: + arelent *reloc; mgl@1371: + bfd_reloc_code_real_type code; mgl@1371: + mgl@1371: + reloc = xmalloc (sizeof (arelent)); mgl@1371: + mgl@1371: + reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); mgl@1371: + *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); mgl@1371: + reloc->address = fixp->fx_frag->fr_address + fixp->fx_where; mgl@1371: + reloc->addend = fixp->fx_offset; mgl@1371: + code = fixp->fx_r_type; mgl@1371: + mgl@1371: + reloc->howto = bfd_reloc_type_lookup (stdoutput, code); mgl@1371: + mgl@1371: + if (reloc->howto == NULL) mgl@1371: + { mgl@1371: + as_bad_where (fixp->fx_file, fixp->fx_line, mgl@1371: + _("cannot represent relocation %s in this object file format"), mgl@1371: + bfd_get_reloc_code_name (code)); mgl@1371: + return NULL; mgl@1371: + } mgl@1371: + mgl@1371: + return reloc; mgl@1371: +} mgl@1371: + mgl@1371: +bfd_boolean mgl@1371: +avr32_force_reloc(fixS *fixP) mgl@1371: +{ mgl@1371: + if (linkrelax && fixP->fx_addsy mgl@1371: + && !(S_GET_SEGMENT(fixP->fx_addsy)->flags & SEC_DEBUGGING) mgl@1371: + && S_GET_SEGMENT(fixP->fx_addsy) != absolute_section) mgl@1371: + { mgl@1371: + pr_debug(stderr, "force reloc: addsy=%p, r_type=%d, sec=%s\n", mgl@1371: + fixP->fx_addsy, fixP->fx_r_type, S_GET_SEGMENT(fixP->fx_addsy)->name); mgl@1371: + return 1; mgl@1371: + } mgl@1371: + mgl@1371: + return generic_force_reloc(fixP); mgl@1371: +} mgl@1371: + mgl@1371: +bfd_boolean mgl@1371: +avr32_fix_adjustable(fixS *fixP) mgl@1371: +{ mgl@1371: + switch (fixP->fx_r_type) mgl@1371: + { mgl@1371: + /* GOT relocations can't have addends since BFD treats all mgl@1371: + references to a given symbol the same. This means that we mgl@1371: + must avoid section-relative references to local symbols when mgl@1371: + dealing with these kinds of relocs */ mgl@1371: + case BFD_RELOC_AVR32_GOT32: mgl@1371: + case BFD_RELOC_AVR32_GOT16: mgl@1371: + case BFD_RELOC_AVR32_GOT8: mgl@1371: + case BFD_RELOC_AVR32_GOT21S: mgl@1371: + case BFD_RELOC_AVR32_GOT18SW: mgl@1371: + case BFD_RELOC_AVR32_GOT16S: mgl@1371: + case BFD_RELOC_AVR32_LDA_GOT: mgl@1371: + case BFD_RELOC_AVR32_GOTCALL: mgl@1371: + pr_debug("fix not adjustable\n"); mgl@1371: + return 0; mgl@1371: + mgl@1371: + default: mgl@1371: + break; mgl@1371: + } mgl@1371: + mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +/* When we want the linker to be able to relax the code, we need to mgl@1371: + output a reloc for every .align directive requesting an alignment mgl@1371: + to a four byte boundary or larger. If we don't do this, the linker mgl@1371: + can't guarantee that the alignment is actually maintained in the mgl@1371: + linker output. mgl@1371: + mgl@1371: + TODO: Might as well insert proper NOPs while we're at it... */ mgl@1371: +void mgl@1371: +avr32_handle_align(fragS *frag) mgl@1371: +{ mgl@1371: + if (linkrelax mgl@1371: + && frag->fr_type == rs_align_code mgl@1371: + && frag->fr_address + frag->fr_fix > 0 mgl@1371: + && frag->fr_offset > 0) mgl@1371: + { mgl@1371: + /* The alignment order (fr_offset) is stored in the addend. */ mgl@1371: + fix_new(frag, frag->fr_fix, 2, &abs_symbol, frag->fr_offset, mgl@1371: + FALSE, BFD_RELOC_AVR32_ALIGN); mgl@1371: + } mgl@1371: +} mgl@1371: + mgl@1371: +/* Relax_align. Advance location counter to next address that has 'alignment' mgl@1371: + lowest order bits all 0s, return size of adjustment made. */ mgl@1371: +relax_addressT mgl@1371: +avr32_relax_align(segT segment ATTRIBUTE_UNUSED, mgl@1371: + fragS *fragP, mgl@1371: + relax_addressT address) mgl@1371: +{ mgl@1371: + relax_addressT mask; mgl@1371: + relax_addressT new_address; mgl@1371: + int alignment; mgl@1371: + mgl@1371: + alignment = fragP->fr_offset; mgl@1371: + mask = ~((~0) << alignment); mgl@1371: + new_address = (address + mask) & (~mask); mgl@1371: + mgl@1371: + return new_address - address; mgl@1371: +} mgl@1371: + mgl@1371: +/* Turn a string in input_line_pointer into a floating point constant mgl@1371: + of type type, and store the appropriate bytes in *litP. The number mgl@1371: + of LITTLENUMS emitted is stored in *sizeP . An error message is mgl@1371: + returned, or NULL on OK. */ mgl@1371: + mgl@1371: +/* Equal to MAX_PRECISION in atof-ieee.c */ mgl@1371: +#define MAX_LITTLENUMS 6 mgl@1371: + mgl@1371: +char * mgl@1371: +md_atof (type, litP, sizeP) mgl@1371: +char type; mgl@1371: +char * litP; mgl@1371: +int * sizeP; mgl@1371: +{ mgl@1371: + int i; mgl@1371: + int prec; mgl@1371: + LITTLENUM_TYPE words [MAX_LITTLENUMS]; mgl@1371: + char * t; mgl@1371: + mgl@1371: + switch (type) mgl@1371: + { mgl@1371: + case 'f': mgl@1371: + case 'F': mgl@1371: + case 's': mgl@1371: + case 'S': mgl@1371: + prec = 2; mgl@1371: + break; mgl@1371: + mgl@1371: + case 'd': mgl@1371: + case 'D': mgl@1371: + case 'r': mgl@1371: + case 'R': mgl@1371: + prec = 4; mgl@1371: + break; mgl@1371: + mgl@1371: + /* FIXME: Some targets allow other format chars for bigger sizes here. */ mgl@1371: + mgl@1371: + default: mgl@1371: + * sizeP = 0; mgl@1371: + return _("Bad call to md_atof()"); mgl@1371: + } mgl@1371: + mgl@1371: + t = atof_ieee (input_line_pointer, type, words); mgl@1371: + if (t) mgl@1371: + input_line_pointer = t; mgl@1371: + * sizeP = prec * sizeof (LITTLENUM_TYPE); mgl@1371: + mgl@1371: + for (i = 0; i < prec; i++) mgl@1371: + { mgl@1371: + md_number_to_chars (litP, (valueT) words[i], mgl@1371: + sizeof (LITTLENUM_TYPE)); mgl@1371: + litP += sizeof (LITTLENUM_TYPE); mgl@1371: + } mgl@1371: + mgl@1371: + return 0; mgl@1371: +} mgl@1371: + mgl@1371: +static char *avr32_end_of_match(char *cont, char *what) mgl@1371: +{ mgl@1371: + int len = strlen (what); mgl@1371: + mgl@1371: + if (! is_part_of_name (cont[len]) mgl@1371: + && strncasecmp (cont, what, len) == 0) mgl@1371: + return cont + len; mgl@1371: + mgl@1371: + return NULL; mgl@1371: +} mgl@1371: + mgl@1371: +int mgl@1371: +avr32_parse_name (char const *name, expressionS *exp, char *nextchar) mgl@1371: +{ mgl@1371: + char *next = input_line_pointer; mgl@1371: + char *next_end; mgl@1371: + mgl@1371: + pr_debug("parse_name: %s, nextchar=%c (%02x)\n", name, *nextchar, *nextchar); mgl@1371: + mgl@1371: + if (*nextchar == '(') mgl@1371: + { mgl@1371: + if (strcasecmp(name, "hi") == 0) mgl@1371: + { mgl@1371: + *next = *nextchar; mgl@1371: + mgl@1371: + expression(exp); mgl@1371: + mgl@1371: + if (exp->X_op == O_constant) mgl@1371: + { mgl@1371: + pr_debug(" -> constant hi(0x%08lx) -> 0x%04lx\n", mgl@1371: + exp->X_add_number, exp->X_add_number >> 16); mgl@1371: + exp->X_add_number = (exp->X_add_number >> 16) & 0xffff; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + exp->X_md = exp->X_op; mgl@1371: + exp->X_op = O_hi; mgl@1371: + } mgl@1371: + mgl@1371: + return 1; mgl@1371: + } mgl@1371: + else if (strcasecmp(name, "lo") == 0) mgl@1371: + { mgl@1371: + *next = *nextchar; mgl@1371: + mgl@1371: + expression(exp); mgl@1371: + mgl@1371: + if (exp->X_op == O_constant) mgl@1371: + exp->X_add_number &= 0xffff; mgl@1371: + else mgl@1371: + { mgl@1371: + exp->X_md = exp->X_op; mgl@1371: + exp->X_op = O_lo; mgl@1371: + } mgl@1371: + mgl@1371: + return 1; mgl@1371: + } mgl@1371: + } mgl@1371: + else if (*nextchar == '@') mgl@1371: + { mgl@1371: + exp->X_md = exp->X_op; mgl@1371: + mgl@1371: + if ((next_end = avr32_end_of_match (next + 1, "got"))) mgl@1371: + exp->X_op = O_got; mgl@1371: + else if ((next_end = avr32_end_of_match (next + 1, "tlsgd"))) mgl@1371: + exp->X_op = O_tlsgd; mgl@1371: + /* Add more as needed */ mgl@1371: + else mgl@1371: + { mgl@1371: + char c; mgl@1371: + input_line_pointer++; mgl@1371: + c = get_symbol_end(); mgl@1371: + as_bad (_("unknown relocation override `%s'"), next + 1); mgl@1371: + *input_line_pointer = c; mgl@1371: + input_line_pointer = next; mgl@1371: + return 0; mgl@1371: + } mgl@1371: + mgl@1371: + exp->X_op_symbol = NULL; mgl@1371: + exp->X_add_symbol = symbol_find_or_make (name); mgl@1371: + exp->X_add_number = 0; mgl@1371: + mgl@1371: + *input_line_pointer = *nextchar; mgl@1371: + input_line_pointer = next_end; mgl@1371: + *nextchar = *input_line_pointer; mgl@1371: + *input_line_pointer = '\0'; mgl@1371: + return 1; mgl@1371: + } mgl@1371: + else if (strcmp (name, "_GLOBAL_OFFSET_TABLE_") == 0) mgl@1371: + { mgl@1371: + if (!GOT_symbol) mgl@1371: + GOT_symbol = symbol_find_or_make(name); mgl@1371: + mgl@1371: + exp->X_add_symbol = GOT_symbol; mgl@1371: + exp->X_op = O_symbol; mgl@1371: + exp->X_add_number = 0; mgl@1371: + return 1; mgl@1371: + } mgl@1371: + mgl@1371: + return 0; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +s_rseg (int value ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + /* Syntax: RSEG segment_name [:type] [NOROOT|ROOT] [(align)] mgl@1371: + * Defaults: mgl@1371: + * - type: undocumented ("typically CODE or DATA") mgl@1371: + * - ROOT mgl@1371: + * - align: 1 for code, 0 for others mgl@1371: + * mgl@1371: + * TODO: NOROOT is ignored. If gas supports discardable segments, it should mgl@1371: + * be implemented. mgl@1371: + */ mgl@1371: + char *name, *end; mgl@1371: + int length, type, attr; mgl@1371: + int align = 0; mgl@1371: + mgl@1371: + SKIP_WHITESPACE(); mgl@1371: + mgl@1371: + end = input_line_pointer; mgl@1371: + while (0 == strchr ("\n\t;:( ", *end)) mgl@1371: + end++; mgl@1371: + if (end == input_line_pointer) mgl@1371: + { mgl@1371: + as_warn (_("missing name")); mgl@1371: + ignore_rest_of_line(); mgl@1371: + return; mgl@1371: + } mgl@1371: + mgl@1371: + name = xmalloc (end - input_line_pointer + 1); mgl@1371: + memcpy (name, input_line_pointer, end - input_line_pointer); mgl@1371: + name[end - input_line_pointer] = '\0'; mgl@1371: + input_line_pointer = end; mgl@1371: + mgl@1371: + SKIP_WHITESPACE(); mgl@1371: + mgl@1371: + type = SHT_NULL; mgl@1371: + attr = 0; mgl@1371: + mgl@1371: + if (*input_line_pointer == ':') mgl@1371: + { mgl@1371: + /* Skip the colon */ mgl@1371: + ++input_line_pointer; mgl@1371: + SKIP_WHITESPACE(); mgl@1371: + mgl@1371: + /* Possible options at this point: mgl@1371: + * - flag (ROOT or NOROOT) mgl@1371: + * - a segment type mgl@1371: + */ mgl@1371: + end = input_line_pointer; mgl@1371: + while (0 == strchr ("\n\t;:( ", *end)) mgl@1371: + end++; mgl@1371: + length = end - input_line_pointer; mgl@1371: + if (((length == 4) && (0 == strncasecmp( input_line_pointer, "ROOT", 4))) || mgl@1371: + ((length == 6) && (0 == strncasecmp( input_line_pointer, "NOROOT", 6)))) mgl@1371: + { mgl@1371: + /* Ignore ROOT/NOROOT */ mgl@1371: + input_line_pointer = end; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + /* Must be a segment type */ mgl@1371: + switch (*input_line_pointer) mgl@1371: + { mgl@1371: + case 'C': mgl@1371: + case 'c': mgl@1371: + if ((length == 4) && mgl@1371: + (0 == strncasecmp (input_line_pointer, "CODE", 4))) mgl@1371: + { mgl@1371: + attr |= SHF_ALLOC | SHF_EXECINSTR; mgl@1371: + type = SHT_PROGBITS; mgl@1371: + align = 1; mgl@1371: + break; mgl@1371: + } mgl@1371: + if ((length == 5) && mgl@1371: + (0 == strncasecmp (input_line_pointer, "CONST", 5))) mgl@1371: + { mgl@1371: + attr |= SHF_ALLOC; mgl@1371: + type = SHT_PROGBITS; mgl@1371: + break; mgl@1371: + } mgl@1371: + goto de_fault; mgl@1371: + mgl@1371: + case 'D': mgl@1371: + case 'd': mgl@1371: + if ((length == 4) && mgl@1371: + (0 == strncasecmp (input_line_pointer, "DATA", 4))) mgl@1371: + { mgl@1371: + attr |= SHF_ALLOC | SHF_WRITE; mgl@1371: + type = SHT_PROGBITS; mgl@1371: + break; mgl@1371: + } mgl@1371: + goto de_fault; mgl@1371: + mgl@1371: + /* TODO: Add FAR*, HUGE*, IDATA and NEAR* if necessary */ mgl@1371: + mgl@1371: + case 'U': mgl@1371: + case 'u': mgl@1371: + if ((length == 7) && mgl@1371: + (0 == strncasecmp (input_line_pointer, "UNTYPED", 7))) mgl@1371: + break; mgl@1371: + goto de_fault; mgl@1371: + mgl@1371: + /* TODO: Add XDATA and ZPAGE if necessary */ mgl@1371: + mgl@1371: + de_fault: mgl@1371: + default: mgl@1371: + as_warn (_("unrecognized segment type")); mgl@1371: + } mgl@1371: + mgl@1371: + input_line_pointer = end; mgl@1371: + SKIP_WHITESPACE(); mgl@1371: + mgl@1371: + if (*input_line_pointer == ':') mgl@1371: + { mgl@1371: + /* ROOT/NOROOT */ mgl@1371: + ++input_line_pointer; mgl@1371: + SKIP_WHITESPACE(); mgl@1371: + mgl@1371: + end = input_line_pointer; mgl@1371: + while (0 == strchr ("\n\t;:( ", *end)) mgl@1371: + end++; mgl@1371: + length = end - input_line_pointer; mgl@1371: + if (! ((length == 4) && mgl@1371: + (0 == strncasecmp( input_line_pointer, "ROOT", 4))) && mgl@1371: + ! ((length == 6) && mgl@1371: + (0 == strncasecmp( input_line_pointer, "NOROOT", 6)))) mgl@1371: + { mgl@1371: + as_warn (_("unrecognized segment flag")); mgl@1371: + } mgl@1371: + mgl@1371: + input_line_pointer = end; mgl@1371: + SKIP_WHITESPACE(); mgl@1371: + } mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + if (*input_line_pointer == '(') mgl@1371: + { mgl@1371: + align = get_absolute_expression (); mgl@1371: + } mgl@1371: + mgl@1371: + demand_empty_rest_of_line(); mgl@1371: + mgl@1371: + obj_elf_change_section (name, type, attr, 0, NULL, 0, 0); mgl@1371: +#ifdef AVR32_DEBUG mgl@1371: + fprintf( stderr, "RSEG: Changed section to %s, type: 0x%x, attr: 0x%x\n", mgl@1371: + name, type, attr ); mgl@1371: + fprintf( stderr, "RSEG: Aligning to 2**%d\n", align ); mgl@1371: +#endif mgl@1371: + mgl@1371: + if (align > 15) mgl@1371: + { mgl@1371: + align = 15; mgl@1371: + as_warn (_("alignment too large: %u assumed"), align); mgl@1371: + } mgl@1371: + mgl@1371: + /* Hope not, that is */ mgl@1371: + assert (now_seg != absolute_section); mgl@1371: + mgl@1371: + /* Only make a frag if we HAVE to... */ mgl@1371: + if (align != 0 && !need_pass_2) mgl@1371: + { mgl@1371: + if (subseg_text_p (now_seg)) mgl@1371: + frag_align_code (align, 0); mgl@1371: + else mgl@1371: + frag_align (align, 0, 0); mgl@1371: + } mgl@1371: + mgl@1371: + record_alignment (now_seg, align - OCTETS_PER_BYTE_POWER); mgl@1371: +} mgl@1371: + mgl@1371: +/* vim: syntax=c sw=2 mgl@1371: + */ mgl@1371: --- /dev/null mgl@1371: +++ b/gas/config/tc-avr32.h mgl@1371: @@ -0,0 +1,325 @@ mgl@1371: +/* Assembler definitions for AVR32. mgl@1371: + Copyright 2003-2006 Atmel Corporation. mgl@1371: + mgl@1371: + Written by Haavard Skinnemoen, Atmel Norway, mgl@1371: + mgl@1371: + This file is part of GAS, the GNU Assembler. mgl@1371: + mgl@1371: + GAS is free software; you can redistribute it and/or modify it mgl@1371: + under the terms of the GNU General Public License as published by mgl@1371: + the Free Software Foundation; either version 2, or (at your option) mgl@1371: + any later version. mgl@1371: + mgl@1371: + GAS is distributed in the hope that it will be useful, but WITHOUT mgl@1371: + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY mgl@1371: + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public mgl@1371: + License for more details. mgl@1371: + mgl@1371: + You should have received a copy of the GNU General Public License mgl@1371: + along with GAS; see the file COPYING. If not, write to the Free mgl@1371: + Software Foundation, 59 Temple Place - Suite 330, Boston, MA mgl@1371: + 02111-1307, USA. */ mgl@1371: + mgl@1371: +#if 0 mgl@1371: +#define DEBUG mgl@1371: +#define DEBUG1 mgl@1371: +#define DEBUG2 mgl@1371: +#define DEBUG3 mgl@1371: +#define DEBUG4 mgl@1371: +#define DEBUG5 mgl@1371: +#endif mgl@1371: + mgl@1371: +/* Are we trying to be compatible with the IAR assembler? (--iar) */ mgl@1371: +extern int avr32_iarcompat; mgl@1371: + mgl@1371: +/* By convention, you should define this macro in the `.h' file. For mgl@1371: + example, `tc-m68k.h' defines `TC_M68K'. You might have to use this mgl@1371: + if it is necessary to add CPU specific code to the object format mgl@1371: + file. */ mgl@1371: +#define TC_AVR32 mgl@1371: + mgl@1371: +/* This macro is the BFD target name to use when creating the output mgl@1371: + file. This will normally depend upon the `OBJ_FMT' macro. */ mgl@1371: +#define TARGET_FORMAT "elf32-avr32" mgl@1371: + mgl@1371: +/* This macro is the BFD architecture to pass to `bfd_set_arch_mach'. */ mgl@1371: +#define TARGET_ARCH bfd_arch_avr32 mgl@1371: + mgl@1371: +/* This macro is the BFD machine number to pass to mgl@1371: + `bfd_set_arch_mach'. If it is not defined, GAS will use 0. */ mgl@1371: +#define TARGET_MACH 0 mgl@1371: + mgl@1371: +/* UNDOCUMENTED: Allow //-style comments */ mgl@1371: +#define DOUBLESLASH_LINE_COMMENTS mgl@1371: + mgl@1371: +/* You should define this macro to be non-zero if the target is big mgl@1371: + endian, and zero if the target is little endian. */ mgl@1371: +#define TARGET_BYTES_BIG_ENDIAN 1 mgl@1371: + mgl@1371: +/* FIXME: It seems that GAS only expects a one-byte opcode... mgl@1371: + #define NOP_OPCODE 0xd703 */ mgl@1371: + mgl@1371: +/* If you define this macro, GAS will warn about the use of mgl@1371: + nonstandard escape sequences in a string. */ mgl@1371: +#undef ONLY_STANDARD_ESCAPES mgl@1371: + mgl@1371: +#define DWARF2_FORMAT() dwarf2_format_32bit mgl@1371: + mgl@1371: +/* Instructions are either 2 or 4 bytes long */ mgl@1371: +/* #define DWARF2_LINE_MIN_INSN_LENGTH 2 */ mgl@1371: + mgl@1371: +/* GAS will call this function for any expression that can not be mgl@1371: + recognized. When the function is called, `input_line_pointer' mgl@1371: + will point to the start of the expression. */ mgl@1371: +#define md_operand(x) mgl@1371: + mgl@1371: +#define md_parse_name(name, expr, mode, c) avr32_parse_name(name, expr, c) mgl@1371: +extern int avr32_parse_name(const char *, struct expressionS *, char *); mgl@1371: + mgl@1371: +/* You may define this macro to generate a fixup for a data mgl@1371: + allocation pseudo-op. */ mgl@1371: +#define TC_CONS_FIX_NEW(FRAG, OFF, LEN, EXP) \ mgl@1371: + avr32_cons_fix_new(FRAG, OFF, LEN, EXP) mgl@1371: +void avr32_cons_fix_new (fragS *, int, int, expressionS *); mgl@1371: + mgl@1371: +/* `extsym - .' expressions can be emitted using PC-relative relocs */ mgl@1371: +#define DIFF_EXPR_OK mgl@1371: + mgl@1371: +/* This is used to construct expressions out of @gotoff, etc. The mgl@1371: + relocation type is stored in X_md */ mgl@1371: +#define O_got O_md1 mgl@1371: +#define O_hi O_md2 mgl@1371: +#define O_lo O_md3 mgl@1371: +#define O_tlsgd O_md4 mgl@1371: + mgl@1371: +/* You may define this macro to parse an expression used in a data mgl@1371: + allocation pseudo-op such as `.word'. You can use this to mgl@1371: + recognize relocation directives that may appear in such directives. */ mgl@1371: +/* #define TC_PARSE_CONS_EXPRESSION(EXPR,N) avr_parse_cons_expression (EXPR,N) mgl@1371: + void avr_parse_cons_expression (expressionS *exp, int nbytes); */ mgl@1371: + mgl@1371: +/* This should just call either `number_to_chars_bigendian' or mgl@1371: + `number_to_chars_littleendian', whichever is appropriate. On mgl@1371: + targets like the MIPS which support options to change the mgl@1371: + endianness, which function to call is a runtime decision. On mgl@1371: + other targets, `md_number_to_chars' can be a simple macro. */ mgl@1371: +#define md_number_to_chars number_to_chars_bigendian mgl@1371: + mgl@1371: +/* `md_short_jump_size' mgl@1371: + `md_long_jump_size' mgl@1371: + `md_create_short_jump' mgl@1371: + `md_create_long_jump' mgl@1371: + If `WORKING_DOT_WORD' is defined, GAS will not do broken word mgl@1371: + processing (*note Broken words::.). Otherwise, you should set mgl@1371: + `md_short_jump_size' to the size of a short jump (a jump that is mgl@1371: + just long enough to jump around a long jmp) and mgl@1371: + `md_long_jump_size' to the size of a long jump (a jump that can go mgl@1371: + anywhere in the function), You should define mgl@1371: + `md_create_short_jump' to create a short jump around a long jump, mgl@1371: + and define `md_create_long_jump' to create a long jump. */ mgl@1371: +#define WORKING_DOT_WORD mgl@1371: + mgl@1371: +/* If you define this macro, it means that `tc_gen_reloc' may return mgl@1371: + multiple relocation entries for a single fixup. In this case, the mgl@1371: + return value of `tc_gen_reloc' is a pointer to a null terminated mgl@1371: + array. */ mgl@1371: +#undef RELOC_EXPANSION_POSSIBLE mgl@1371: + mgl@1371: +/* If you define this macro, GAS will not require pseudo-ops to start with a . mgl@1371: + character. */ mgl@1371: +#define NO_PSEUDO_DOT (avr32_iarcompat) mgl@1371: + mgl@1371: +/* The IAR assembler uses $ as the location counter. Unfortunately, we mgl@1371: + can't make this dependent on avr32_iarcompat... */ mgl@1371: +#define DOLLAR_DOT mgl@1371: + mgl@1371: +/* Values passed to md_apply_fix3 don't include the symbol value. */ mgl@1371: +#define MD_APPLY_SYM_VALUE(FIX) 0 mgl@1371: + mgl@1371: +/* The number of bytes to put into a word in a listing. This affects mgl@1371: + the way the bytes are clumped together in the listing. For mgl@1371: + example, a value of 2 might print `1234 5678' where a value of 1 mgl@1371: + would print `12 34 56 78'. The default value is 4. */ mgl@1371: +#define LISTING_WORD_SIZE 4 mgl@1371: + mgl@1371: +/* extern const struct relax_type md_relax_table[]; mgl@1371: +#define TC_GENERIC_RELAX_TABLE md_relax_table */ mgl@1371: + mgl@1371: +/* mgl@1371: + An `.lcomm' directive with no explicit alignment parameter will use mgl@1371: + this macro to set P2VAR to the alignment that a request for SIZE mgl@1371: + bytes will have. The alignment is expressed as a power of two. If mgl@1371: + no alignment should take place, the macro definition should do mgl@1371: + nothing. Some targets define a `.bss' directive that is also mgl@1371: + affected by this macro. The default definition will set P2VAR to mgl@1371: + the truncated power of two of sizes up to eight bytes. mgl@1371: + mgl@1371: + We want doublewords to be word-aligned, so we're going to modify the mgl@1371: + default definition a tiny bit. mgl@1371: +*/ mgl@1371: +#define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR) \ mgl@1371: + do \ mgl@1371: + { \ mgl@1371: + if ((SIZE) >= 4) \ mgl@1371: + (P2VAR) = 2; \ mgl@1371: + else if ((SIZE) >= 2) \ mgl@1371: + (P2VAR) = 1; \ mgl@1371: + else \ mgl@1371: + (P2VAR) = 0; \ mgl@1371: + } \ mgl@1371: + while (0) mgl@1371: + mgl@1371: +/* When relaxing, we need to generate relocations for alignment mgl@1371: + directives. */ mgl@1371: +#define HANDLE_ALIGN(frag) avr32_handle_align(frag) mgl@1371: +extern void avr32_handle_align(fragS *); mgl@1371: + mgl@1371: +/* See internals doc for explanation. Oh wait... mgl@1371: + Now, can you guess where "alignment" comes from? ;-) */ mgl@1371: +#define MAX_MEM_FOR_RS_ALIGN_CODE ((1 << alignment) - 1) mgl@1371: + mgl@1371: +/* We need to stop gas from reducing certain expressions (e.g. GOT mgl@1371: + references) */ mgl@1371: +#define tc_fix_adjustable(fix) avr32_fix_adjustable(fix) mgl@1371: +extern bfd_boolean avr32_fix_adjustable(struct fix *); mgl@1371: + mgl@1371: +/* The linker needs to be passed a little more information when relaxing. */ mgl@1371: +#define TC_FORCE_RELOCATION(fix) avr32_force_reloc(fix) mgl@1371: +extern bfd_boolean avr32_force_reloc(struct fix *); mgl@1371: + mgl@1371: +/* I'm tired of working around all the madness in fixup_segment(). mgl@1371: + This hook will do basically the same things as the generic code, mgl@1371: + and then it will "goto" right past it. */ mgl@1371: +#define TC_VALIDATE_FIX(FIX, SEG, SKIP) \ mgl@1371: + do \ mgl@1371: + { \ mgl@1371: + avr32_process_fixup(FIX, SEG); \ mgl@1371: + if (!(FIX)->fx_done) \ mgl@1371: + ++seg_reloc_count; \ mgl@1371: + goto SKIP; \ mgl@1371: + } \ mgl@1371: + while (0) mgl@1371: +extern void avr32_process_fixup(struct fix *fixP, segT this_segment); mgl@1371: + mgl@1371: +/* Positive values of TC_FX_SIZE_SLACK allow a target to define mgl@1371: + fixups that far past the end of a frag. Having such fixups mgl@1371: + is of course most most likely a bug in setting fx_size correctly. mgl@1371: + A negative value disables the fixup check entirely, which is mgl@1371: + appropriate for something like the Renesas / SuperH SH_COUNT mgl@1371: + reloc. */ mgl@1371: +/* This target is buggy, and sets fix size too large. */ mgl@1371: +#define TC_FX_SIZE_SLACK(FIX) -1 mgl@1371: + mgl@1371: +/* We don't want the gas core to make any assumptions about our way of mgl@1371: + doing linkrelaxing. */ mgl@1371: +#define TC_LINKRELAX_FIXUP(SEG) 0 mgl@1371: + mgl@1371: +/* ... but we do want it to insert lots of padding. */ mgl@1371: +#define LINKER_RELAXING_SHRINKS_ONLY mgl@1371: + mgl@1371: +/* Better do it ourselves, really... */ mgl@1371: +#define TC_RELAX_ALIGN(SEG, FRAG, ADDR) avr32_relax_align(SEG, FRAG, ADDR) mgl@1371: +extern relax_addressT mgl@1371: +avr32_relax_align(segT segment, fragS *fragP, relax_addressT address); mgl@1371: + mgl@1371: +/* Use line number format that is amenable to linker relaxation. */ mgl@1371: +#define DWARF2_USE_FIXED_ADVANCE_PC (linkrelax != 0) mgl@1371: + mgl@1371: +/* This is called by write_object_file() just before symbols are mgl@1371: + attempted converted into section symbols. */ mgl@1371: +#define tc_frob_file_before_adjust() avr32_frob_file() mgl@1371: +extern void avr32_frob_file(void); mgl@1371: + mgl@1371: +/* If you define this macro, GAS will call it at the end of each input mgl@1371: + file. */ mgl@1371: +#define md_cleanup() avr32_cleanup() mgl@1371: +extern void avr32_cleanup(void); mgl@1371: + mgl@1371: +/* There's an AVR32-specific hack in operand() which creates O_md mgl@1371: + expressions when encountering HWRD or LWRD. We need to generate mgl@1371: + proper relocs for them */ mgl@1371: +/* #define md_cgen_record_fixup_exp avr32_cgen_record_fixup_exp */ mgl@1371: + mgl@1371: +/* I needed to add an extra hook in gas_cgen_finish_insn() for mgl@1371: + conversion of O_md* operands because md_cgen_record_fixup_exp() mgl@1371: + isn't called for relaxable insns */ mgl@1371: +/* #define md_cgen_convert_expr(exp, opinfo) avr32_cgen_convert_expr(exp, opinfo) mgl@1371: + int avr32_cgen_convert_expr(expressionS *, int); */ mgl@1371: + mgl@1371: +/* #define tc_gen_reloc gas_cgen_tc_gen_reloc */ mgl@1371: + mgl@1371: +/* If you define this macro, it should return the position from which mgl@1371: + the PC relative adjustment for a PC relative fixup should be mgl@1371: + made. On many processors, the base of a PC relative instruction is mgl@1371: + the next instruction, so this macro would return the length of an mgl@1371: + instruction, plus the address of the PC relative fixup. The latter mgl@1371: + can be calculated as fixp->fx_where + fixp->fx_frag->fr_address. */ mgl@1371: +extern long md_pcrel_from_section (struct fix *, segT); mgl@1371: +#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC) mgl@1371: + mgl@1371: +#define LOCAL_LABEL(name) (name[0] == '.' && (name[1] == 'L')) mgl@1371: +#define LOCAL_LABELS_FB 1 mgl@1371: + mgl@1371: +struct avr32_relaxer mgl@1371: +{ mgl@1371: + int (*estimate_size)(fragS *, segT); mgl@1371: + long (*relax_frag)(segT, fragS *, long); mgl@1371: + void (*convert_frag)(bfd *, segT, fragS *); mgl@1371: +}; mgl@1371: + mgl@1371: +/* AVR32 has quite complex instruction coding, which means we need mgl@1371: + * lots of information in order to do the right thing during relaxing mgl@1371: + * (basically, we need to be able to reconstruct a whole new opcode if mgl@1371: + * necessary) */ mgl@1371: +#define TC_FRAG_TYPE struct avr32_frag_data mgl@1371: + mgl@1371: +struct cpool; mgl@1371: + mgl@1371: +struct avr32_frag_data mgl@1371: +{ mgl@1371: + /* TODO: Maybe add an expression object here so that we can use mgl@1371: + fix_new_exp() in md_convert_frag? We may have to decide mgl@1371: + pcrel-ness in md_estimate_size_before_relax() as well...or we mgl@1371: + might do it when parsing. Doing it while parsing may fail mgl@1371: + because the sub_symbol is undefined then... */ mgl@1371: + int pcrel; mgl@1371: + int force_extended; mgl@1371: + int reloc_info; mgl@1371: + struct avr32_relaxer *relaxer; mgl@1371: + expressionS exp; mgl@1371: + mgl@1371: + /* Points to associated constant pool, for use by LDA and CALL in mgl@1371: + non-pic mode, and when relaxing the .cpool directive */ mgl@1371: + struct cpool *pool; mgl@1371: + unsigned int pool_entry; mgl@1371: +}; mgl@1371: + mgl@1371: +/* We will have to initialize the fields explicitly when needed */ mgl@1371: +#define TC_FRAG_INIT(fragP) mgl@1371: + mgl@1371: +#define md_estimate_size_before_relax(fragP, segT) \ mgl@1371: + ((fragP)->tc_frag_data.relaxer->estimate_size(fragP, segT)) mgl@1371: +#define md_relax_frag(segment, fragP, stretch) \ mgl@1371: + ((fragP)->tc_frag_data.relaxer->relax_frag(segment, fragP, stretch)) mgl@1371: +#define md_convert_frag(abfd, segment, fragP) \ mgl@1371: + ((fragP)->tc_frag_data.relaxer->convert_frag(abfd, segment, fragP)) mgl@1371: + mgl@1371: +#define TC_FIX_TYPE struct avr32_fix_data mgl@1371: + mgl@1371: +struct avr32_fix_data mgl@1371: +{ mgl@1371: + const struct avr32_ifield *ifield; mgl@1371: + unsigned int align; mgl@1371: + long min; mgl@1371: + long max; mgl@1371: +}; mgl@1371: + mgl@1371: +#define TC_INIT_FIX_DATA(fixP) \ mgl@1371: + do \ mgl@1371: + { \ mgl@1371: + (fixP)->tc_fix_data.ifield = NULL; \ mgl@1371: + (fixP)->tc_fix_data.align = 0; \ mgl@1371: + (fixP)->tc_fix_data.min = 0; \ mgl@1371: + (fixP)->tc_fix_data.max = 0; \ mgl@1371: + } \ mgl@1371: + while (0) mgl@1371: --- a/gas/configure.tgt mgl@1371: +++ b/gas/configure.tgt mgl@1371: @@ -33,6 +33,7 @@ case ${cpu} in mgl@1371: am33_2.0) cpu_type=mn10300 endian=little ;; mgl@1371: arm*be|arm*b) cpu_type=arm endian=big ;; mgl@1371: arm*) cpu_type=arm endian=little ;; mgl@1371: + avr32*) cpu_type=avr32 endian=big ;; mgl@1371: bfin*) cpu_type=bfin endian=little ;; mgl@1371: c4x*) cpu_type=tic4x ;; mgl@1371: cr16*) cpu_type=cr16 endian=little ;; mgl@1371: @@ -129,6 +130,9 @@ case ${generic_target} in mgl@1371: bfin-*elf) fmt=elf ;; mgl@1371: cr16-*-elf*) fmt=elf ;; mgl@1371: mgl@1371: + avr32-*-linux*) fmt=elf em=linux bfd_gas=yes ;; mgl@1371: + avr32*) fmt=elf bfd_gas=yes ;; mgl@1371: + mgl@1371: cris-*-linux-* | crisv32-*-linux-*) mgl@1371: fmt=multi em=linux ;; mgl@1371: cris-*-* | crisv32-*-*) fmt=multi ;; mgl@1371: --- a/gas/doc/all.texi mgl@1371: +++ b/gas/doc/all.texi mgl@1371: @@ -30,6 +30,7 @@ mgl@1371: @set ARC mgl@1371: @set ARM mgl@1371: @set AVR mgl@1371: +@set AVR32 mgl@1371: @set BFIN mgl@1371: @set CR16 mgl@1371: @set CRIS mgl@1371: --- a/gas/doc/as.texinfo mgl@1371: +++ b/gas/doc/as.texinfo mgl@1371: @@ -6353,6 +6353,9 @@ subject, see the hardware manufacturer's mgl@1371: @ifset AVR mgl@1371: * AVR-Dependent:: AVR Dependent Features mgl@1371: @end ifset mgl@1371: +@ifset AVR32 mgl@1371: +* AVR32-Dependent:: AVR32 Dependent Features mgl@1371: +@end ifset mgl@1371: @ifset BFIN mgl@1371: * BFIN-Dependent:: BFIN Dependent Features mgl@1371: @end ifset mgl@1371: @@ -6476,6 +6479,10 @@ subject, see the hardware manufacturer's mgl@1371: @include c-avr.texi mgl@1371: @end ifset mgl@1371: mgl@1371: +@ifset AVR32 mgl@1371: +@include c-avr32.texi mgl@1371: +@end ifset mgl@1371: + mgl@1371: @ifset BFIN mgl@1371: @include c-bfin.texi mgl@1371: @end ifset mgl@1371: --- /dev/null mgl@1371: +++ b/gas/doc/c-avr32.texi mgl@1371: @@ -0,0 +1,247 @@ mgl@1371: +@c Copyright 2005, 2006 mgl@1371: +@c Atmel Corporation mgl@1371: +@c This is part of the GAS manual. mgl@1371: +@c For copying conditions, see the file as.texinfo. mgl@1371: + mgl@1371: +@ifset GENERIC mgl@1371: +@page mgl@1371: +@node AVR32-Dependent mgl@1371: +@chapter AVR32 Dependent Features mgl@1371: +@end ifset mgl@1371: + mgl@1371: +@ifclear GENERIC mgl@1371: +@node Machine Dependencies mgl@1371: +@chapter AVR32 Dependent Features mgl@1371: +@end ifclear mgl@1371: + mgl@1371: +@cindex AVR32 support mgl@1371: +@menu mgl@1371: +* AVR32 Options:: Options mgl@1371: +* AVR32 Syntax:: Syntax mgl@1371: +* AVR32 Directives:: Directives mgl@1371: +* AVR32 Opcodes:: Opcodes mgl@1371: +@end menu mgl@1371: + mgl@1371: +@node AVR32 Options mgl@1371: +@section Options mgl@1371: +@cindex AVR32 options mgl@1371: +@cindex options for AVR32 mgl@1371: + mgl@1371: +There are currently no AVR32-specific options. However, the following mgl@1371: +options are planned: mgl@1371: + mgl@1371: +@table @code mgl@1371: + mgl@1371: +@cindex @code{--pic} command line option, AVR32 mgl@1371: +@cindex PIC code generation for AVR32 mgl@1371: +@item --pic mgl@1371: +This option specifies that the output of the assembler should be marked mgl@1371: +as position-independent code (PIC). It will also ensure that mgl@1371: +pseudo-instructions that deal with address calculation are output as mgl@1371: +PIC, and that all absolute address references in the code are marked as mgl@1371: +such. mgl@1371: + mgl@1371: +@cindex @code{--linkrelax} command line option, AVR32 mgl@1371: +@item --linkrelax mgl@1371: +This option specifies that the output of the assembler should be marked mgl@1371: +as linker-relaxable. It will also ensure that all PC-relative operands mgl@1371: +that may change during linker relaxation get appropriate relocations. mgl@1371: + mgl@1371: +@end table mgl@1371: + mgl@1371: + mgl@1371: +@node AVR32 Syntax mgl@1371: +@section Syntax mgl@1371: +@menu mgl@1371: +* AVR32-Chars:: Special Characters mgl@1371: +* AVR32-Symrefs:: Symbol references mgl@1371: +@end menu mgl@1371: + mgl@1371: +@node AVR32-Chars mgl@1371: +@subsection Special Characters mgl@1371: + mgl@1371: +@cindex line comment character, AVR32 mgl@1371: +@cindex AVR32 line comment character mgl@1371: +The presence of a @samp{//} on a line indicates the start of a comment mgl@1371: +that extends to the end of the current line. If a @samp{#} appears as mgl@1371: +the first character of a line, the whole line is treated as a comment. mgl@1371: + mgl@1371: +@cindex line separator, AVR32 mgl@1371: +@cindex statement separator, AVR32 mgl@1371: +@cindex AVR32 line separator mgl@1371: +The @samp{;} character can be used instead of a newline to separate mgl@1371: +statements. mgl@1371: + mgl@1371: +@node AVR32-Symrefs mgl@1371: +@subsection Symbol references mgl@1371: + mgl@1371: +The absolute value of a symbol can be obtained by simply naming the mgl@1371: +symbol. However, as AVR32 symbols have 32-bit values, most symbols have mgl@1371: +values that are outside the range of any instructions. mgl@1371: + mgl@1371: +Instructions that take a PC-relative offset, e.g. @code{lddpc} or mgl@1371: +@code{rcall}, can also reference a symbol by simply naming the symbol mgl@1371: +(no explicit calculations necessary). In this case, the assembler or mgl@1371: +linker subtracts the address of the instruction from the symbol's value mgl@1371: +and inserts the result into the instruction. Note that even though an mgl@1371: +overflow is less likely to happen for a relative reference than for an mgl@1371: +absolute reference, the assembler or linker will generate an error if mgl@1371: +the referenced symbol is too far away from the current location. mgl@1371: + mgl@1371: +Relative references can be used for data as well. For example: mgl@1371: + mgl@1371: +@smallexample mgl@1371: + lddpc r0, 2f mgl@1371: +1: add r0, pc mgl@1371: + ... mgl@1371: + .align 2 mgl@1371: +2: .int @var{some_symbol} - 1b mgl@1371: +@end smallexample mgl@1371: + mgl@1371: +Here, r0 will end up with the run-time address of @var{some_symbol} even mgl@1371: +if the program was loaded at a different address than it was linked mgl@1371: +(position-independent code). mgl@1371: + mgl@1371: +@subsubsection Symbol modifiers mgl@1371: + mgl@1371: +@table @code mgl@1371: + mgl@1371: +@item @code{hi(@var{symbol})} mgl@1371: +Evaluates to the value of the symbol shifted right 16 bits. This will mgl@1371: +work even if @var{symbol} is defined in a different module. mgl@1371: + mgl@1371: +@item @code{lo(@var{symbol})} mgl@1371: +Evaluates to the low 16 bits of the symbol's value. This will work even mgl@1371: +if @var{symbol} is defined in a different module. mgl@1371: + mgl@1371: +@item @code{@var{symbol}@@got} mgl@1371: +Create a GOT entry for @var{symbol} and return the offset of that entry mgl@1371: +relative to the GOT base. mgl@1371: + mgl@1371: +@end table mgl@1371: + mgl@1371: + mgl@1371: +@node AVR32 Directives mgl@1371: +@section Directives mgl@1371: +@cindex machine directives, AVR32 mgl@1371: +@cindex AVR32 directives mgl@1371: + mgl@1371: +@table @code mgl@1371: + mgl@1371: +@cindex @code{.cpool} directive, AVR32 mgl@1371: +@item .cpool mgl@1371: +This directive causes the current contents of the constant pool to be mgl@1371: +dumped into the current section at the current location (aligned to a mgl@1371: +word boundary). @code{GAS} maintains a separate constant pool for each mgl@1371: +section and each sub-section. The @code{.cpool} directive will only mgl@1371: +affect the constant pool of the current section and sub-section. At the mgl@1371: +end of assembly, all remaining, non-empty constant pools will mgl@1371: +automatically be dumped. mgl@1371: + mgl@1371: +@end table mgl@1371: + mgl@1371: + mgl@1371: +@node AVR32 Opcodes mgl@1371: +@section Opcodes mgl@1371: +@cindex AVR32 opcodes mgl@1371: +@cindex opcodes for AVR32 mgl@1371: + mgl@1371: +@code{@value{AS}} implements all the standard AVR32 opcodes. It also mgl@1371: +implements several pseudo-opcodes, which are recommended to use wherever mgl@1371: +possible because they give the tool chain better freedom to generate mgl@1371: +optimal code. mgl@1371: + mgl@1371: +@table @code mgl@1371: + mgl@1371: +@cindex @code{LDA.W reg, symbol} pseudo op, AVR32 mgl@1371: +@item LDA.W mgl@1371: +@smallexample mgl@1371: + lda.w @var{reg}, @var{symbol} mgl@1371: +@end smallexample mgl@1371: + mgl@1371: +This instruction will load the address of @var{symbol} into mgl@1371: +@var{reg}. The instruction will evaluate to one of the following, mgl@1371: +depending on the relative distance to the symbol, the relative distance mgl@1371: +to the constant pool and whether the @code{--pic} option has been mgl@1371: +specified. If the @code{--pic} option has not been specified, the mgl@1371: +alternatives are as follows: mgl@1371: +@smallexample mgl@1371: + /* @var{symbol} evaluates to a small enough value */ mgl@1371: + mov @var{reg}, @var{symbol} mgl@1371: + mgl@1371: + /* (. - @var{symbol}) evaluates to a small enough value */ mgl@1371: + sub @var{reg}, pc, . - @var{symbol} mgl@1371: + mgl@1371: + /* Constant pool is close enough */ mgl@1371: + lddpc @var{reg}, @var{cpent} mgl@1371: + ... mgl@1371: +@var{cpent}: mgl@1371: + .long @var{symbol} mgl@1371: + mgl@1371: + /* Otherwise (not implemented yet, probably not necessary) */ mgl@1371: + mov @var{reg}, lo(@var{symbol}) mgl@1371: + orh @var{reg}, hi(@var{symbol}) mgl@1371: +@end smallexample mgl@1371: + mgl@1371: +If the @code{--pic} option has been specified, the alternatives are as mgl@1371: +follows: mgl@1371: +@smallexample mgl@1371: + /* (. - @var{symbol}) evaluates to a small enough value */ mgl@1371: + sub @var{reg}, pc, . - @var{symbol} mgl@1371: + mgl@1371: + /* If @code{--linkrelax} not specified */ mgl@1371: + ld.w @var{reg}, r6[@var{symbol}@@got] mgl@1371: + mgl@1371: + /* Otherwise */ mgl@1371: + mov @var{reg}, @var{symbol}@@got / 4 mgl@1371: + ld.w @var{reg}, r6[@var{reg} << 2] mgl@1371: +@end smallexample mgl@1371: + mgl@1371: +If @var{symbol} is not defined in the same file and section as the mgl@1371: +@code{LDA.W} instruction, the most pessimistic alternative of the mgl@1371: +above is selected. The linker may convert it back into the most mgl@1371: +optimal alternative when the final value of all symbols is known. mgl@1371: + mgl@1371: +@cindex @code{CALL symbol} pseudo op, AVR32 mgl@1371: +@item CALL mgl@1371: +@smallexample mgl@1371: + call @var{symbol} mgl@1371: +@end smallexample mgl@1371: + mgl@1371: +This instruction will insert code to call the subroutine identified by mgl@1371: +@var{symbol}. It will evaluate to one of the following, depending on mgl@1371: +the relative distance to the symbol as well as the @code{--linkrelax} mgl@1371: +and @code{--pic} command-line options. mgl@1371: + mgl@1371: +If @var{symbol} is defined in the same section and input file, and the mgl@1371: +distance is small enough, an @code{rcall} instruction is inserted: mgl@1371: +@smallexample mgl@1371: + rcall @var{symbol} mgl@1371: +@end smallexample mgl@1371: + mgl@1371: +Otherwise, if the @code{--pic} option has not been specified: mgl@1371: +@smallexample mgl@1371: + mcall @var{cpent} mgl@1371: + ... mgl@1371: +@var{cpent}: mgl@1371: + .long @var{symbol} mgl@1371: +@end smallexample mgl@1371: + mgl@1371: +Finally, if nothing else fits and the @code{--pic} option has been mgl@1371: +specified, the assembler will indirect the call through the Global mgl@1371: +Offset Table: mgl@1371: +@smallexample mgl@1371: + /* If @code{--linkrelax} not specified */ mgl@1371: + mcall r6[@var{symbol}@@got] mgl@1371: + mgl@1371: + /* If @code{--linkrelax} specified */ mgl@1371: + mov lr, @var{symbol}@@got / 4 mgl@1371: + ld.w lr, r6[lr << 2] mgl@1371: + icall lr mgl@1371: +@end smallexample mgl@1371: + mgl@1371: +The linker, after determining the final value of @var{symbol}, may mgl@1371: +convert any of these into more optimal alternatives. This includes mgl@1371: +deleting any superfluous constant pool- and GOT-entries. mgl@1371: + mgl@1371: +@end table mgl@1371: --- a/gas/doc/Makefile.am mgl@1371: +++ b/gas/doc/Makefile.am mgl@1371: @@ -33,6 +33,7 @@ CPU_DOCS = \ mgl@1371: c-arc.texi \ mgl@1371: c-arm.texi \ mgl@1371: c-avr.texi \ mgl@1371: + c-avr32.texi \ mgl@1371: c-bfin.texi \ mgl@1371: c-cr16.texi \ mgl@1371: c-d10v.texi \ mgl@1371: --- a/gas/Makefile.am mgl@1371: +++ b/gas/Makefile.am mgl@1371: @@ -47,6 +47,7 @@ CPU_TYPES = \ mgl@1371: arc \ mgl@1371: arm \ mgl@1371: avr \ mgl@1371: + avr32 \ mgl@1371: bfin \ mgl@1371: cr16 \ mgl@1371: cris \ mgl@1371: @@ -241,6 +242,7 @@ TARGET_CPU_CFILES = \ mgl@1371: config/tc-arc.c \ mgl@1371: config/tc-arm.c \ mgl@1371: config/tc-avr.c \ mgl@1371: + config/tc-avr32.c \ mgl@1371: config/tc-bfin.c \ mgl@1371: config/tc-cr16.c \ mgl@1371: config/tc-cris.c \ mgl@1371: @@ -296,6 +298,7 @@ TARGET_CPU_HFILES = \ mgl@1371: config/tc-arc.h \ mgl@1371: config/tc-arm.h \ mgl@1371: config/tc-avr.h \ mgl@1371: + config/tc-avr32.h \ mgl@1371: config/tc-bfin.h \ mgl@1371: config/tc-cr16.h \ mgl@1371: config/tc-cris.h \ mgl@1371: @@ -1050,6 +1053,11 @@ DEPTC_avr_elf = $(srcdir)/config/obj-elf mgl@1371: $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h dwarf2dbg.h \ mgl@1371: $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \ mgl@1371: $(INCDIR)/opcode/avr.h mgl@1371: +DEPTC_avr32_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \ mgl@1371: + $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ mgl@1371: + $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr32.h \ mgl@1371: + $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \ mgl@1371: + $(srcdir)/../opcodes/avr32-opc.h $(srcdir)/../opcodes/avr32-asm.h mgl@1371: DEPTC_bfin_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \ mgl@1371: $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ mgl@1371: $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h dwarf2dbg.h \ mgl@1371: @@ -1487,6 +1495,11 @@ DEPOBJ_avr_elf = $(srcdir)/config/obj-el mgl@1371: $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h dwarf2dbg.h \ mgl@1371: $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \ mgl@1371: $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h mgl@1371: +DEPOBJ_avr32_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \ mgl@1371: + $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ mgl@1371: + $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr32.h \ mgl@1371: + $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \ mgl@1371: + struc-symbol.h dwarf2dbg.h mgl@1371: DEPOBJ_bfin_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \ mgl@1371: $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ mgl@1371: $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h dwarf2dbg.h \ mgl@1371: @@ -1858,6 +1871,9 @@ DEP_cr16_elf = $(srcdir)/config/obj-elf. mgl@1371: $(INCDIR)/bfdlink.h $(srcdir)/config/tc-cr16.h dwarf2dbg.h \ mgl@1371: $(srcdir)/config/obj-coff.h $(INCDIR)/coff/internal.h \ mgl@1371: $(BFDDIR)/libcoff.h mgl@1371: +DEP_avr32_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \ mgl@1371: + $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ mgl@1371: + $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr32.h mgl@1371: DEP_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \ mgl@1371: $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h mgl@1371: DEP_cris_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \ mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/aliases.d mgl@1371: @@ -0,0 +1,19 @@ mgl@1371: +#as: mgl@1371: +#objdump: -dr mgl@1371: +#name: aliases mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: 19 80 [ \t]+ld\.ub r0,r12\[0x0\] mgl@1371: + 2: f9 20 00 00[ \t]+ld\.sb r0,r12\[0\] mgl@1371: + 6: 98 80 [ \t]+ld\.uh r0,r12\[0x0\] mgl@1371: + 8: 98 00 [ \t]+ld\.sh r0,r12\[0x0\] mgl@1371: + a: 78 00 [ \t]+ld\.w r0,r12\[0x0\] mgl@1371: + mgl@1371: +0000000c : mgl@1371: + c: b8 80 [ \t]+st\.b r12\[0x0\],r0 mgl@1371: + e: b8 00 [ \t]+st\.h r12\[0x0\],r0 mgl@1371: + 10: 99 00 [ \t]+st\.w r12\[0x0\],r0 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/aliases.s mgl@1371: @@ -0,0 +1,14 @@ mgl@1371: + .text mgl@1371: + .global ld_nodisp mgl@1371: +ld_nodisp: mgl@1371: + ld.ub r0, r12 mgl@1371: + ld.sb r0, r12 mgl@1371: + ld.uh r0, r12 mgl@1371: + ld.sh r0, r12 mgl@1371: + ld.w r0, r12 mgl@1371: + mgl@1371: + .global st_nodisp mgl@1371: +st_nodisp: mgl@1371: + st.b r12, r0 mgl@1371: + st.h r12, r0 mgl@1371: + st.w r12, r0 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/allinsn.d mgl@1371: @@ -0,0 +1,2987 @@ mgl@1371: +#as: mgl@1371: +#objdump: -dr mgl@1371: +#name: allinsn mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 02 3e ld\.d lr,pc\[pc<<0x3\] mgl@1371: + *[0-9a-f]*: e0 00 02 00 ld\.d r0,r0\[r0\] mgl@1371: + *[0-9a-f]*: ea 05 02 26 ld\.d r6,r5\[r5<<0x2\] mgl@1371: + *[0-9a-f]*: e8 04 02 14 ld\.d r4,r4\[r4<<0x1\] mgl@1371: + *[0-9a-f]*: fc 0e 02 1e ld\.d lr,lr\[lr<<0x1\] mgl@1371: + *[0-9a-f]*: e6 0d 02 2a ld\.d r10,r3\[sp<<0x2\] mgl@1371: + *[0-9a-f]*: f4 06 02 28 ld\.d r8,r10\[r6<<0x2\] mgl@1371: + *[0-9a-f]*: ee 09 02 02 ld\.d r2,r7\[r9\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 03 0f ld\.w pc,pc\[pc\] mgl@1371: + *[0-9a-f]*: f8 0c 03 3c ld\.w r12,r12\[r12<<0x3\] mgl@1371: + *[0-9a-f]*: ea 05 03 25 ld\.w r5,r5\[r5<<0x2\] mgl@1371: + *[0-9a-f]*: e8 04 03 14 ld\.w r4,r4\[r4<<0x1\] mgl@1371: + *[0-9a-f]*: fc 0e 03 1e ld\.w lr,lr\[lr<<0x1\] mgl@1371: + *[0-9a-f]*: f2 09 03 02 ld\.w r2,r9\[r9\] mgl@1371: + *[0-9a-f]*: e4 06 03 0b ld\.w r11,r2\[r6\] mgl@1371: + *[0-9a-f]*: e4 0d 03 30 ld\.w r0,r2\[sp<<0x3\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 04 0f ld\.sh pc,pc\[pc\] mgl@1371: + *[0-9a-f]*: f8 0c 04 3c ld\.sh r12,r12\[r12<<0x3\] mgl@1371: + *[0-9a-f]*: ea 05 04 25 ld\.sh r5,r5\[r5<<0x2\] mgl@1371: + *[0-9a-f]*: e8 04 04 14 ld\.sh r4,r4\[r4<<0x1\] mgl@1371: + *[0-9a-f]*: fc 0e 04 1e ld\.sh lr,lr\[lr<<0x1\] mgl@1371: + *[0-9a-f]*: e0 0f 04 2b ld\.sh r11,r0\[pc<<0x2\] mgl@1371: + *[0-9a-f]*: fa 06 04 2a ld\.sh r10,sp\[r6<<0x2\] mgl@1371: + *[0-9a-f]*: e4 02 04 0c ld\.sh r12,r2\[r2\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 05 0f ld\.uh pc,pc\[pc\] mgl@1371: + *[0-9a-f]*: f8 0c 05 3c ld\.uh r12,r12\[r12<<0x3\] mgl@1371: + *[0-9a-f]*: ea 05 05 25 ld\.uh r5,r5\[r5<<0x2\] mgl@1371: + *[0-9a-f]*: e8 04 05 14 ld\.uh r4,r4\[r4<<0x1\] mgl@1371: + *[0-9a-f]*: fc 0e 05 1e ld\.uh lr,lr\[lr<<0x1\] mgl@1371: + *[0-9a-f]*: fe 0e 05 38 ld\.uh r8,pc\[lr<<0x3\] mgl@1371: + *[0-9a-f]*: e2 0f 05 16 ld\.uh r6,r1\[pc<<0x1\] mgl@1371: + *[0-9a-f]*: fc 0d 05 16 ld\.uh r6,lr\[sp<<0x1\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 06 0f ld\.sb pc,pc\[pc\] mgl@1371: + *[0-9a-f]*: f8 0c 06 3c ld\.sb r12,r12\[r12<<0x3\] mgl@1371: + *[0-9a-f]*: ea 05 06 25 ld\.sb r5,r5\[r5<<0x2\] mgl@1371: + *[0-9a-f]*: e8 04 06 14 ld\.sb r4,r4\[r4<<0x1\] mgl@1371: + *[0-9a-f]*: fc 0e 06 1e ld\.sb lr,lr\[lr<<0x1\] mgl@1371: + *[0-9a-f]*: e2 0f 06 39 ld\.sb r9,r1\[pc<<0x3\] mgl@1371: + *[0-9a-f]*: e6 0b 06 10 ld\.sb r0,r3\[r11<<0x1\] mgl@1371: + *[0-9a-f]*: ea 05 06 1a ld\.sb r10,r5\[r5<<0x1\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 07 0f ld\.ub pc,pc\[pc\] mgl@1371: + *[0-9a-f]*: f8 0c 07 3c ld\.ub r12,r12\[r12<<0x3\] mgl@1371: + *[0-9a-f]*: ea 05 07 25 ld\.ub r5,r5\[r5<<0x2\] mgl@1371: + *[0-9a-f]*: e8 04 07 14 ld\.ub r4,r4\[r4<<0x1\] mgl@1371: + *[0-9a-f]*: fc 0e 07 1e ld\.ub lr,lr\[lr<<0x1\] mgl@1371: + *[0-9a-f]*: f8 07 07 36 ld\.ub r6,r12\[r7<<0x3\] mgl@1371: + *[0-9a-f]*: ec 0c 07 02 ld\.ub r2,r6\[r12\] mgl@1371: + *[0-9a-f]*: ee 0b 07 10 ld\.ub r0,r7\[r11<<0x1\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 08 0e st\.d pc\[pc\],lr mgl@1371: + *[0-9a-f]*: f8 0c 08 3c st\.d r12\[r12<<0x3\],r12 mgl@1371: + *[0-9a-f]*: ea 05 08 26 st\.d r5\[r5<<0x2\],r6 mgl@1371: + *[0-9a-f]*: e8 04 08 14 st\.d r4\[r4<<0x1\],r4 mgl@1371: + *[0-9a-f]*: fc 0e 08 1e st\.d lr\[lr<<0x1\],lr mgl@1371: + *[0-9a-f]*: e2 09 08 14 st\.d r1\[r9<<0x1\],r4 mgl@1371: + *[0-9a-f]*: f4 02 08 14 st\.d r10\[r2<<0x1\],r4 mgl@1371: + *[0-9a-f]*: f8 06 08 0e st\.d r12\[r6\],lr mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 09 0f st\.w pc\[pc\],pc mgl@1371: + *[0-9a-f]*: f8 0c 09 3c st\.w r12\[r12<<0x3\],r12 mgl@1371: + *[0-9a-f]*: ea 05 09 25 st\.w r5\[r5<<0x2\],r5 mgl@1371: + *[0-9a-f]*: e8 04 09 14 st\.w r4\[r4<<0x1\],r4 mgl@1371: + *[0-9a-f]*: fc 0e 09 1e st\.w lr\[lr<<0x1\],lr mgl@1371: + *[0-9a-f]*: e2 0a 09 03 st\.w r1\[r10\],r3 mgl@1371: + *[0-9a-f]*: e0 0a 09 19 st\.w r0\[r10<<0x1\],r9 mgl@1371: + *[0-9a-f]*: e8 05 09 3f st\.w r4\[r5<<0x3\],pc mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 0a 0f st\.h pc\[pc\],pc mgl@1371: + *[0-9a-f]*: f8 0c 0a 3c st\.h r12\[r12<<0x3\],r12 mgl@1371: + *[0-9a-f]*: ea 05 0a 25 st\.h r5\[r5<<0x2\],r5 mgl@1371: + *[0-9a-f]*: e8 04 0a 14 st\.h r4\[r4<<0x1\],r4 mgl@1371: + *[0-9a-f]*: fc 0e 0a 1e st\.h lr\[lr<<0x1\],lr mgl@1371: + *[0-9a-f]*: e4 09 0a 0b st\.h r2\[r9\],r11 mgl@1371: + *[0-9a-f]*: ea 01 0a 2c st\.h r5\[r1<<0x2\],r12 mgl@1371: + *[0-9a-f]*: fe 08 0a 23 st\.h pc\[r8<<0x2\],r3 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 0b 0f st\.b pc\[pc\],pc mgl@1371: + *[0-9a-f]*: f8 0c 0b 3c st\.b r12\[r12<<0x3\],r12 mgl@1371: + *[0-9a-f]*: ea 05 0b 25 st\.b r5\[r5<<0x2\],r5 mgl@1371: + *[0-9a-f]*: e8 04 0b 14 st\.b r4\[r4<<0x1\],r4 mgl@1371: + *[0-9a-f]*: fc 0e 0b 1e st\.b lr\[lr<<0x1\],lr mgl@1371: + *[0-9a-f]*: e2 08 0b 16 st\.b r1\[r8<<0x1\],r6 mgl@1371: + *[0-9a-f]*: fc 0e 0b 31 st\.b lr\[lr<<0x3\],r1 mgl@1371: + *[0-9a-f]*: ea 00 0b 2f st\.b r5\[r0<<0x2\],pc mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 0c 0f divs pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 0c 0c divs r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 0c 05 divs r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 0c 04 divs r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 0c 0e divs lr,lr,lr mgl@1371: + *[0-9a-f]*: fe 0f 0c 03 divs r3,pc,pc mgl@1371: + *[0-9a-f]*: f8 02 0c 09 divs r9,r12,r2 mgl@1371: + *[0-9a-f]*: e8 01 0c 07 divs r7,r4,r1 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1e 0f add pc,pc mgl@1371: + *[0-9a-f]*: 18 0c add r12,r12 mgl@1371: + *[0-9a-f]*: 0a 05 add r5,r5 mgl@1371: + *[0-9a-f]*: 08 04 add r4,r4 mgl@1371: + *[0-9a-f]*: 1c 0e add lr,lr mgl@1371: + *[0-9a-f]*: 12 0c add r12,r9 mgl@1371: + *[0-9a-f]*: 06 06 add r6,r3 mgl@1371: + *[0-9a-f]*: 18 0a add r10,r12 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1e 1f sub pc,pc mgl@1371: + *[0-9a-f]*: 18 1c sub r12,r12 mgl@1371: + *[0-9a-f]*: 0a 15 sub r5,r5 mgl@1371: + *[0-9a-f]*: 08 14 sub r4,r4 mgl@1371: + *[0-9a-f]*: 1c 1e sub lr,lr mgl@1371: + *[0-9a-f]*: 0c 1e sub lr,r6 mgl@1371: + *[0-9a-f]*: 1a 10 sub r0,sp mgl@1371: + *[0-9a-f]*: 18 16 sub r6,r12 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1e 2f rsub pc,pc mgl@1371: + *[0-9a-f]*: 18 2c rsub r12,r12 mgl@1371: + *[0-9a-f]*: 0a 25 rsub r5,r5 mgl@1371: + *[0-9a-f]*: 08 24 rsub r4,r4 mgl@1371: + *[0-9a-f]*: 1c 2e rsub lr,lr mgl@1371: + *[0-9a-f]*: 1a 2b rsub r11,sp mgl@1371: + *[0-9a-f]*: 08 27 rsub r7,r4 mgl@1371: + *[0-9a-f]*: 02 29 rsub r9,r1 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1e 3f cp\.w pc,pc mgl@1371: + *[0-9a-f]*: 18 3c cp\.w r12,r12 mgl@1371: + *[0-9a-f]*: 0a 35 cp\.w r5,r5 mgl@1371: + *[0-9a-f]*: 08 34 cp\.w r4,r4 mgl@1371: + *[0-9a-f]*: 1c 3e cp\.w lr,lr mgl@1371: + *[0-9a-f]*: 04 36 cp\.w r6,r2 mgl@1371: + *[0-9a-f]*: 12 30 cp\.w r0,r9 mgl@1371: + *[0-9a-f]*: 1a 33 cp\.w r3,sp mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1e 4f or pc,pc mgl@1371: + *[0-9a-f]*: 18 4c or r12,r12 mgl@1371: + *[0-9a-f]*: 0a 45 or r5,r5 mgl@1371: + *[0-9a-f]*: 08 44 or r4,r4 mgl@1371: + *[0-9a-f]*: 1c 4e or lr,lr mgl@1371: + *[0-9a-f]*: 12 44 or r4,r9 mgl@1371: + *[0-9a-f]*: 08 4b or r11,r4 mgl@1371: + *[0-9a-f]*: 00 44 or r4,r0 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1e 5f eor pc,pc mgl@1371: + *[0-9a-f]*: 18 5c eor r12,r12 mgl@1371: + *[0-9a-f]*: 0a 55 eor r5,r5 mgl@1371: + *[0-9a-f]*: 08 54 eor r4,r4 mgl@1371: + *[0-9a-f]*: 1c 5e eor lr,lr mgl@1371: + *[0-9a-f]*: 16 5c eor r12,r11 mgl@1371: + *[0-9a-f]*: 02 50 eor r0,r1 mgl@1371: + *[0-9a-f]*: 1e 55 eor r5,pc mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1e 6f and pc,pc mgl@1371: + *[0-9a-f]*: 18 6c and r12,r12 mgl@1371: + *[0-9a-f]*: 0a 65 and r5,r5 mgl@1371: + *[0-9a-f]*: 08 64 and r4,r4 mgl@1371: + *[0-9a-f]*: 1c 6e and lr,lr mgl@1371: + *[0-9a-f]*: 02 68 and r8,r1 mgl@1371: + *[0-9a-f]*: 1a 60 and r0,sp mgl@1371: + *[0-9a-f]*: 0a 6a and r10,r5 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1e 7f tst pc,pc mgl@1371: + *[0-9a-f]*: 18 7c tst r12,r12 mgl@1371: + *[0-9a-f]*: 0a 75 tst r5,r5 mgl@1371: + *[0-9a-f]*: 08 74 tst r4,r4 mgl@1371: + *[0-9a-f]*: 1c 7e tst lr,lr mgl@1371: + *[0-9a-f]*: 18 70 tst r0,r12 mgl@1371: + *[0-9a-f]*: 0c 7a tst r10,r6 mgl@1371: + *[0-9a-f]*: 08 7d tst sp,r4 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1e 8f andn pc,pc mgl@1371: + *[0-9a-f]*: 18 8c andn r12,r12 mgl@1371: + *[0-9a-f]*: 0a 85 andn r5,r5 mgl@1371: + *[0-9a-f]*: 08 84 andn r4,r4 mgl@1371: + *[0-9a-f]*: 1c 8e andn lr,lr mgl@1371: + *[0-9a-f]*: 18 89 andn r9,r12 mgl@1371: + *[0-9a-f]*: 1a 8b andn r11,sp mgl@1371: + *[0-9a-f]*: 0a 8c andn r12,r5 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1e 9f mov pc,pc mgl@1371: + *[0-9a-f]*: 18 9c mov r12,r12 mgl@1371: + *[0-9a-f]*: 0a 95 mov r5,r5 mgl@1371: + *[0-9a-f]*: 08 94 mov r4,r4 mgl@1371: + *[0-9a-f]*: 1c 9e mov lr,lr mgl@1371: + *[0-9a-f]*: 12 95 mov r5,r9 mgl@1371: + *[0-9a-f]*: 16 9b mov r11,r11 mgl@1371: + *[0-9a-f]*: 1c 92 mov r2,lr mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1e af st\.w pc\+\+,pc mgl@1371: + *[0-9a-f]*: 18 ac st\.w r12\+\+,r12 mgl@1371: + *[0-9a-f]*: 0a a5 st\.w r5\+\+,r5 mgl@1371: + *[0-9a-f]*: 08 a4 st\.w r4\+\+,r4 mgl@1371: + *[0-9a-f]*: 1c ae st\.w lr\+\+,lr mgl@1371: + *[0-9a-f]*: 02 ab st\.w r1\+\+,r11 mgl@1371: + *[0-9a-f]*: 1a a0 st\.w sp\+\+,r0 mgl@1371: + *[0-9a-f]*: 1a a1 st\.w sp\+\+,r1 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1e bf st\.h pc\+\+,pc mgl@1371: + *[0-9a-f]*: 18 bc st\.h r12\+\+,r12 mgl@1371: + *[0-9a-f]*: 0a b5 st\.h r5\+\+,r5 mgl@1371: + *[0-9a-f]*: 08 b4 st\.h r4\+\+,r4 mgl@1371: + *[0-9a-f]*: 1c be st\.h lr\+\+,lr mgl@1371: + *[0-9a-f]*: 18 bd st\.h r12\+\+,sp mgl@1371: + *[0-9a-f]*: 0e be st\.h r7\+\+,lr mgl@1371: + *[0-9a-f]*: 0e b4 st\.h r7\+\+,r4 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1e cf st\.b pc\+\+,pc mgl@1371: + *[0-9a-f]*: 18 cc st\.b r12\+\+,r12 mgl@1371: + *[0-9a-f]*: 0a c5 st\.b r5\+\+,r5 mgl@1371: + *[0-9a-f]*: 08 c4 st\.b r4\+\+,r4 mgl@1371: + *[0-9a-f]*: 1c ce st\.b lr\+\+,lr mgl@1371: + *[0-9a-f]*: 12 cd st\.b r9\+\+,sp mgl@1371: + *[0-9a-f]*: 02 cd st\.b r1\+\+,sp mgl@1371: + *[0-9a-f]*: 00 c4 st\.b r0\+\+,r4 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1e df st\.w --pc,pc mgl@1371: + *[0-9a-f]*: 18 dc st\.w --r12,r12 mgl@1371: + *[0-9a-f]*: 0a d5 st\.w --r5,r5 mgl@1371: + *[0-9a-f]*: 08 d4 st\.w --r4,r4 mgl@1371: + *[0-9a-f]*: 1c de st\.w --lr,lr mgl@1371: + *[0-9a-f]*: 02 d7 st\.w --r1,r7 mgl@1371: + *[0-9a-f]*: 06 d9 st\.w --r3,r9 mgl@1371: + *[0-9a-f]*: 0a d5 st\.w --r5,r5 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1e ef st\.h --pc,pc mgl@1371: + *[0-9a-f]*: 18 ec st\.h --r12,r12 mgl@1371: + *[0-9a-f]*: 0a e5 st\.h --r5,r5 mgl@1371: + *[0-9a-f]*: 08 e4 st\.h --r4,r4 mgl@1371: + *[0-9a-f]*: 1c ee st\.h --lr,lr mgl@1371: + *[0-9a-f]*: 0a e7 st\.h --r5,r7 mgl@1371: + *[0-9a-f]*: 10 e8 st\.h --r8,r8 mgl@1371: + *[0-9a-f]*: 0e e2 st\.h --r7,r2 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1e ff st\.b --pc,pc mgl@1371: + *[0-9a-f]*: 18 fc st\.b --r12,r12 mgl@1371: + *[0-9a-f]*: 0a f5 st\.b --r5,r5 mgl@1371: + *[0-9a-f]*: 08 f4 st\.b --r4,r4 mgl@1371: + *[0-9a-f]*: 1c fe st\.b --lr,lr mgl@1371: + *[0-9a-f]*: 1a fd st\.b --sp,sp mgl@1371: + *[0-9a-f]*: 1a fb st\.b --sp,r11 mgl@1371: + *[0-9a-f]*: 08 f5 st\.b --r4,r5 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1f 0f ld\.w pc,pc\+\+ mgl@1371: + *[0-9a-f]*: 19 0c ld\.w r12,r12\+\+ mgl@1371: + *[0-9a-f]*: 0b 05 ld\.w r5,r5\+\+ mgl@1371: + *[0-9a-f]*: 09 04 ld\.w r4,r4\+\+ mgl@1371: + *[0-9a-f]*: 1d 0e ld\.w lr,lr\+\+ mgl@1371: + *[0-9a-f]*: 0f 03 ld\.w r3,r7\+\+ mgl@1371: + *[0-9a-f]*: 1d 03 ld\.w r3,lr\+\+ mgl@1371: + *[0-9a-f]*: 0b 0c ld\.w r12,r5\+\+ mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1f 1f ld\.sh pc,pc\+\+ mgl@1371: + *[0-9a-f]*: 19 1c ld\.sh r12,r12\+\+ mgl@1371: + *[0-9a-f]*: 0b 15 ld\.sh r5,r5\+\+ mgl@1371: + *[0-9a-f]*: 09 14 ld\.sh r4,r4\+\+ mgl@1371: + *[0-9a-f]*: 1d 1e ld\.sh lr,lr\+\+ mgl@1371: + *[0-9a-f]*: 05 1b ld\.sh r11,r2\+\+ mgl@1371: + *[0-9a-f]*: 11 12 ld\.sh r2,r8\+\+ mgl@1371: + *[0-9a-f]*: 0d 17 ld\.sh r7,r6\+\+ mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1f 2f ld\.uh pc,pc\+\+ mgl@1371: + *[0-9a-f]*: 19 2c ld\.uh r12,r12\+\+ mgl@1371: + *[0-9a-f]*: 0b 25 ld\.uh r5,r5\+\+ mgl@1371: + *[0-9a-f]*: 09 24 ld\.uh r4,r4\+\+ mgl@1371: + *[0-9a-f]*: 1d 2e ld\.uh lr,lr\+\+ mgl@1371: + *[0-9a-f]*: 0f 26 ld\.uh r6,r7\+\+ mgl@1371: + *[0-9a-f]*: 17 2a ld\.uh r10,r11\+\+ mgl@1371: + *[0-9a-f]*: 09 2e ld\.uh lr,r4\+\+ mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1f 3f ld\.ub pc,pc\+\+ mgl@1371: + *[0-9a-f]*: 19 3c ld\.ub r12,r12\+\+ mgl@1371: + *[0-9a-f]*: 0b 35 ld\.ub r5,r5\+\+ mgl@1371: + *[0-9a-f]*: 09 34 ld\.ub r4,r4\+\+ mgl@1371: + *[0-9a-f]*: 1d 3e ld\.ub lr,lr\+\+ mgl@1371: + *[0-9a-f]*: 1d 38 ld\.ub r8,lr\+\+ mgl@1371: + *[0-9a-f]*: 19 3c ld\.ub r12,r12\+\+ mgl@1371: + *[0-9a-f]*: 15 3b ld\.ub r11,r10\+\+ mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1f 4f ld\.w pc,--pc mgl@1371: + *[0-9a-f]*: 19 4c ld\.w r12,--r12 mgl@1371: + *[0-9a-f]*: 0b 45 ld\.w r5,--r5 mgl@1371: + *[0-9a-f]*: 09 44 ld\.w r4,--r4 mgl@1371: + *[0-9a-f]*: 1d 4e ld\.w lr,--lr mgl@1371: + *[0-9a-f]*: 1d 4a ld\.w r10,--lr mgl@1371: + *[0-9a-f]*: 13 4c ld\.w r12,--r9 mgl@1371: + *[0-9a-f]*: 0b 46 ld\.w r6,--r5 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1f 5f ld\.sh pc,--pc mgl@1371: + *[0-9a-f]*: 19 5c ld\.sh r12,--r12 mgl@1371: + *[0-9a-f]*: 0b 55 ld\.sh r5,--r5 mgl@1371: + *[0-9a-f]*: 09 54 ld\.sh r4,--r4 mgl@1371: + *[0-9a-f]*: 1d 5e ld\.sh lr,--lr mgl@1371: + *[0-9a-f]*: 15 5f ld\.sh pc,--r10 mgl@1371: + *[0-9a-f]*: 07 56 ld\.sh r6,--r3 mgl@1371: + *[0-9a-f]*: 0d 54 ld\.sh r4,--r6 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1f 6f ld\.uh pc,--pc mgl@1371: + *[0-9a-f]*: 19 6c ld\.uh r12,--r12 mgl@1371: + *[0-9a-f]*: 0b 65 ld\.uh r5,--r5 mgl@1371: + *[0-9a-f]*: 09 64 ld\.uh r4,--r4 mgl@1371: + *[0-9a-f]*: 1d 6e ld\.uh lr,--lr mgl@1371: + *[0-9a-f]*: 05 63 ld\.uh r3,--r2 mgl@1371: + *[0-9a-f]*: 01 61 ld\.uh r1,--r0 mgl@1371: + *[0-9a-f]*: 13 62 ld\.uh r2,--r9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1f 7f ld\.ub pc,--pc mgl@1371: + *[0-9a-f]*: 19 7c ld\.ub r12,--r12 mgl@1371: + *[0-9a-f]*: 0b 75 ld\.ub r5,--r5 mgl@1371: + *[0-9a-f]*: 09 74 ld\.ub r4,--r4 mgl@1371: + *[0-9a-f]*: 1d 7e ld\.ub lr,--lr mgl@1371: + *[0-9a-f]*: 03 71 ld\.ub r1,--r1 mgl@1371: + *[0-9a-f]*: 0d 70 ld\.ub r0,--r6 mgl@1371: + *[0-9a-f]*: 0f 72 ld\.ub r2,--r7 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1f 8f ld\.ub pc,pc\[0x0\] mgl@1371: + *[0-9a-f]*: 19 fc ld\.ub r12,r12\[0x7\] mgl@1371: + *[0-9a-f]*: 0b c5 ld\.ub r5,r5\[0x4\] mgl@1371: + *[0-9a-f]*: 09 b4 ld\.ub r4,r4\[0x3\] mgl@1371: + *[0-9a-f]*: 1d 9e ld\.ub lr,lr\[0x1\] mgl@1371: + *[0-9a-f]*: 13 e6 ld\.ub r6,r9\[0x6\] mgl@1371: + *[0-9a-f]*: 1d c2 ld\.ub r2,lr\[0x4\] mgl@1371: + *[0-9a-f]*: 11 81 ld\.ub r1,r8\[0x0\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 20 0d sub sp,0 mgl@1371: + *[0-9a-f]*: 2f fd sub sp,-4 mgl@1371: + *[0-9a-f]*: 28 0d sub sp,-512 mgl@1371: + *[0-9a-f]*: 27 fd sub sp,508 mgl@1371: + *[0-9a-f]*: 20 1d sub sp,4 mgl@1371: + *[0-9a-f]*: 20 bd sub sp,44 mgl@1371: + *[0-9a-f]*: 20 2d sub sp,8 mgl@1371: + *[0-9a-f]*: 25 7d sub sp,348 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 20 0f sub pc,0 mgl@1371: + *[0-9a-f]*: 2f fc sub r12,-1 mgl@1371: + *[0-9a-f]*: 28 05 sub r5,-128 mgl@1371: + *[0-9a-f]*: 27 f4 sub r4,127 mgl@1371: + *[0-9a-f]*: 20 1e sub lr,1 mgl@1371: + *[0-9a-f]*: 2d 76 sub r6,-41 mgl@1371: + *[0-9a-f]*: 22 54 sub r4,37 mgl@1371: + *[0-9a-f]*: 23 8c sub r12,56 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 30 0f mov pc,0 mgl@1371: + *[0-9a-f]*: 3f fc mov r12,-1 mgl@1371: + *[0-9a-f]*: 38 05 mov r5,-128 mgl@1371: + *[0-9a-f]*: 37 f4 mov r4,127 mgl@1371: + *[0-9a-f]*: 30 1e mov lr,1 mgl@1371: + *[0-9a-f]*: 30 ef mov pc,14 mgl@1371: + *[0-9a-f]*: 39 c6 mov r6,-100 mgl@1371: + *[0-9a-f]*: 38 6e mov lr,-122 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 40 0f lddsp pc,sp\[0x0\] mgl@1371: + *[0-9a-f]*: 47 fc lddsp r12,sp\[0x1fc\] mgl@1371: + *[0-9a-f]*: 44 05 lddsp r5,sp\[0x100\] mgl@1371: + *[0-9a-f]*: 43 f4 lddsp r4,sp\[0xfc\] mgl@1371: + *[0-9a-f]*: 40 1e lddsp lr,sp\[0x4\] mgl@1371: + *[0-9a-f]*: 44 0e lddsp lr,sp\[0x100\] mgl@1371: + *[0-9a-f]*: 40 5c lddsp r12,sp\[0x14\] mgl@1371: + *[0-9a-f]*: 47 69 lddsp r9,sp\[0x1d8\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 48 0f lddpc pc,[0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: 4f f0 lddpc r0,[0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: 4c 08 lddpc r8,[0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: 4b f7 lddpc r7,[0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: 48 1e lddpc lr,[0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: 4f 6d lddpc sp,[0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: 49 e6 lddpc r6,[0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: 48 7b lddpc r11,[0-9a-f]* <.*> mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 50 0f stdsp sp\[0x0\],pc mgl@1371: + *[0-9a-f]*: 57 fc stdsp sp\[0x1fc\],r12 mgl@1371: + *[0-9a-f]*: 54 05 stdsp sp\[0x100\],r5 mgl@1371: + *[0-9a-f]*: 53 f4 stdsp sp\[0xfc\],r4 mgl@1371: + *[0-9a-f]*: 50 1e stdsp sp\[0x4\],lr mgl@1371: + *[0-9a-f]*: 54 cf stdsp sp\[0x130\],pc mgl@1371: + *[0-9a-f]*: 54 00 stdsp sp\[0x100\],r0 mgl@1371: + *[0-9a-f]*: 55 45 stdsp sp\[0x150\],r5 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 58 0f cp.w pc,0 mgl@1371: + *[0-9a-f]*: 5b fc cp.w r12,-1 mgl@1371: + *[0-9a-f]*: 5a 05 cp.w r5,-32 mgl@1371: + *[0-9a-f]*: 59 f4 cp.w r4,31 mgl@1371: + *[0-9a-f]*: 58 1e cp.w lr,1 mgl@1371: + *[0-9a-f]*: 58 38 cp.w r8,3 mgl@1371: + *[0-9a-f]*: 59 0e cp.w lr,16 mgl@1371: + *[0-9a-f]*: 5a 67 cp.w r7,-26 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5c 0f acr pc mgl@1371: + *[0-9a-f]*: 5c 0c acr r12 mgl@1371: + *[0-9a-f]*: 5c 05 acr r5 mgl@1371: + *[0-9a-f]*: 5c 04 acr r4 mgl@1371: + *[0-9a-f]*: 5c 0e acr lr mgl@1371: + *[0-9a-f]*: 5c 02 acr r2 mgl@1371: + *[0-9a-f]*: 5c 0c acr r12 mgl@1371: + *[0-9a-f]*: 5c 0f acr pc mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5c 1f scr pc mgl@1371: + *[0-9a-f]*: 5c 1c scr r12 mgl@1371: + *[0-9a-f]*: 5c 15 scr r5 mgl@1371: + *[0-9a-f]*: 5c 14 scr r4 mgl@1371: + *[0-9a-f]*: 5c 1e scr lr mgl@1371: + *[0-9a-f]*: 5c 1f scr pc mgl@1371: + *[0-9a-f]*: 5c 16 scr r6 mgl@1371: + *[0-9a-f]*: 5c 11 scr r1 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5c 2f cpc pc mgl@1371: + *[0-9a-f]*: 5c 2c cpc r12 mgl@1371: + *[0-9a-f]*: 5c 25 cpc r5 mgl@1371: + *[0-9a-f]*: 5c 24 cpc r4 mgl@1371: + *[0-9a-f]*: 5c 2e cpc lr mgl@1371: + *[0-9a-f]*: 5c 2f cpc pc mgl@1371: + *[0-9a-f]*: 5c 24 cpc r4 mgl@1371: + *[0-9a-f]*: 5c 29 cpc r9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5c 3f neg pc mgl@1371: + *[0-9a-f]*: 5c 3c neg r12 mgl@1371: + *[0-9a-f]*: 5c 35 neg r5 mgl@1371: + *[0-9a-f]*: 5c 34 neg r4 mgl@1371: + *[0-9a-f]*: 5c 3e neg lr mgl@1371: + *[0-9a-f]*: 5c 37 neg r7 mgl@1371: + *[0-9a-f]*: 5c 31 neg r1 mgl@1371: + *[0-9a-f]*: 5c 39 neg r9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5c 4f abs pc mgl@1371: + *[0-9a-f]*: 5c 4c abs r12 mgl@1371: + *[0-9a-f]*: 5c 45 abs r5 mgl@1371: + *[0-9a-f]*: 5c 44 abs r4 mgl@1371: + *[0-9a-f]*: 5c 4e abs lr mgl@1371: + *[0-9a-f]*: 5c 46 abs r6 mgl@1371: + *[0-9a-f]*: 5c 46 abs r6 mgl@1371: + *[0-9a-f]*: 5c 44 abs r4 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5c 5f castu\.b pc mgl@1371: + *[0-9a-f]*: 5c 5c castu\.b r12 mgl@1371: + *[0-9a-f]*: 5c 55 castu\.b r5 mgl@1371: + *[0-9a-f]*: 5c 54 castu\.b r4 mgl@1371: + *[0-9a-f]*: 5c 5e castu\.b lr mgl@1371: + *[0-9a-f]*: 5c 57 castu\.b r7 mgl@1371: + *[0-9a-f]*: 5c 5d castu\.b sp mgl@1371: + *[0-9a-f]*: 5c 59 castu\.b r9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5c 6f casts\.b pc mgl@1371: + *[0-9a-f]*: 5c 6c casts\.b r12 mgl@1371: + *[0-9a-f]*: 5c 65 casts\.b r5 mgl@1371: + *[0-9a-f]*: 5c 64 casts\.b r4 mgl@1371: + *[0-9a-f]*: 5c 6e casts\.b lr mgl@1371: + *[0-9a-f]*: 5c 6b casts\.b r11 mgl@1371: + *[0-9a-f]*: 5c 61 casts\.b r1 mgl@1371: + *[0-9a-f]*: 5c 6a casts\.b r10 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5c 7f castu\.h pc mgl@1371: + *[0-9a-f]*: 5c 7c castu\.h r12 mgl@1371: + *[0-9a-f]*: 5c 75 castu\.h r5 mgl@1371: + *[0-9a-f]*: 5c 74 castu\.h r4 mgl@1371: + *[0-9a-f]*: 5c 7e castu\.h lr mgl@1371: + *[0-9a-f]*: 5c 7a castu\.h r10 mgl@1371: + *[0-9a-f]*: 5c 7b castu\.h r11 mgl@1371: + *[0-9a-f]*: 5c 71 castu\.h r1 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5c 8f casts\.h pc mgl@1371: + *[0-9a-f]*: 5c 8c casts\.h r12 mgl@1371: + *[0-9a-f]*: 5c 85 casts\.h r5 mgl@1371: + *[0-9a-f]*: 5c 84 casts\.h r4 mgl@1371: + *[0-9a-f]*: 5c 8e casts\.h lr mgl@1371: + *[0-9a-f]*: 5c 80 casts\.h r0 mgl@1371: + *[0-9a-f]*: 5c 85 casts\.h r5 mgl@1371: + *[0-9a-f]*: 5c 89 casts\.h r9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5c 9f brev pc mgl@1371: + *[0-9a-f]*: 5c 9c brev r12 mgl@1371: + *[0-9a-f]*: 5c 95 brev r5 mgl@1371: + *[0-9a-f]*: 5c 94 brev r4 mgl@1371: + *[0-9a-f]*: 5c 9e brev lr mgl@1371: + *[0-9a-f]*: 5c 95 brev r5 mgl@1371: + *[0-9a-f]*: 5c 9a brev r10 mgl@1371: + *[0-9a-f]*: 5c 98 brev r8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5c af swap\.h pc mgl@1371: + *[0-9a-f]*: 5c ac swap\.h r12 mgl@1371: + *[0-9a-f]*: 5c a5 swap\.h r5 mgl@1371: + *[0-9a-f]*: 5c a4 swap\.h r4 mgl@1371: + *[0-9a-f]*: 5c ae swap\.h lr mgl@1371: + *[0-9a-f]*: 5c a7 swap\.h r7 mgl@1371: + *[0-9a-f]*: 5c a0 swap\.h r0 mgl@1371: + *[0-9a-f]*: 5c a8 swap\.h r8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5c bf swap\.b pc mgl@1371: + *[0-9a-f]*: 5c bc swap\.b r12 mgl@1371: + *[0-9a-f]*: 5c b5 swap\.b r5 mgl@1371: + *[0-9a-f]*: 5c b4 swap\.b r4 mgl@1371: + *[0-9a-f]*: 5c be swap\.b lr mgl@1371: + *[0-9a-f]*: 5c ba swap\.b r10 mgl@1371: + *[0-9a-f]*: 5c bc swap\.b r12 mgl@1371: + *[0-9a-f]*: 5c b1 swap\.b r1 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5c cf swap\.bh pc mgl@1371: + *[0-9a-f]*: 5c cc swap\.bh r12 mgl@1371: + *[0-9a-f]*: 5c c5 swap\.bh r5 mgl@1371: + *[0-9a-f]*: 5c c4 swap\.bh r4 mgl@1371: + *[0-9a-f]*: 5c ce swap\.bh lr mgl@1371: + *[0-9a-f]*: 5c c9 swap\.bh r9 mgl@1371: + *[0-9a-f]*: 5c c4 swap\.bh r4 mgl@1371: + *[0-9a-f]*: 5c c1 swap\.bh r1 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5c df com pc mgl@1371: + *[0-9a-f]*: 5c dc com r12 mgl@1371: + *[0-9a-f]*: 5c d5 com r5 mgl@1371: + *[0-9a-f]*: 5c d4 com r4 mgl@1371: + *[0-9a-f]*: 5c de com lr mgl@1371: + *[0-9a-f]*: 5c d2 com r2 mgl@1371: + *[0-9a-f]*: 5c d2 com r2 mgl@1371: + *[0-9a-f]*: 5c d7 com r7 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5c ef tnbz pc mgl@1371: + *[0-9a-f]*: 5c ec tnbz r12 mgl@1371: + *[0-9a-f]*: 5c e5 tnbz r5 mgl@1371: + *[0-9a-f]*: 5c e4 tnbz r4 mgl@1371: + *[0-9a-f]*: 5c ee tnbz lr mgl@1371: + *[0-9a-f]*: 5c e8 tnbz r8 mgl@1371: + *[0-9a-f]*: 5c ec tnbz r12 mgl@1371: + *[0-9a-f]*: 5c ef tnbz pc mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5c ff rol pc mgl@1371: + *[0-9a-f]*: 5c fc rol r12 mgl@1371: + *[0-9a-f]*: 5c f5 rol r5 mgl@1371: + *[0-9a-f]*: 5c f4 rol r4 mgl@1371: + *[0-9a-f]*: 5c fe rol lr mgl@1371: + *[0-9a-f]*: 5c fa rol r10 mgl@1371: + *[0-9a-f]*: 5c f9 rol r9 mgl@1371: + *[0-9a-f]*: 5c f5 rol r5 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5d 0f ror pc mgl@1371: + *[0-9a-f]*: 5d 0c ror r12 mgl@1371: + *[0-9a-f]*: 5d 05 ror r5 mgl@1371: + *[0-9a-f]*: 5d 04 ror r4 mgl@1371: + *[0-9a-f]*: 5d 0e ror lr mgl@1371: + *[0-9a-f]*: 5d 08 ror r8 mgl@1371: + *[0-9a-f]*: 5d 04 ror r4 mgl@1371: + *[0-9a-f]*: 5d 07 ror r7 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5d 1f icall pc mgl@1371: + *[0-9a-f]*: 5d 1c icall r12 mgl@1371: + *[0-9a-f]*: 5d 15 icall r5 mgl@1371: + *[0-9a-f]*: 5d 14 icall r4 mgl@1371: + *[0-9a-f]*: 5d 1e icall lr mgl@1371: + *[0-9a-f]*: 5d 13 icall r3 mgl@1371: + *[0-9a-f]*: 5d 11 icall r1 mgl@1371: + *[0-9a-f]*: 5d 13 icall r3 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5d 2f mustr pc mgl@1371: + *[0-9a-f]*: 5d 2c mustr r12 mgl@1371: + *[0-9a-f]*: 5d 25 mustr r5 mgl@1371: + *[0-9a-f]*: 5d 24 mustr r4 mgl@1371: + *[0-9a-f]*: 5d 2e mustr lr mgl@1371: + *[0-9a-f]*: 5d 21 mustr r1 mgl@1371: + *[0-9a-f]*: 5d 24 mustr r4 mgl@1371: + *[0-9a-f]*: 5d 2c mustr r12 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5d 3f musfr pc mgl@1371: + *[0-9a-f]*: 5d 3c musfr r12 mgl@1371: + *[0-9a-f]*: 5d 35 musfr r5 mgl@1371: + *[0-9a-f]*: 5d 34 musfr r4 mgl@1371: + *[0-9a-f]*: 5d 3e musfr lr mgl@1371: + *[0-9a-f]*: 5d 3b musfr r11 mgl@1371: + *[0-9a-f]*: 5d 3c musfr r12 mgl@1371: + *[0-9a-f]*: 5d 32 musfr r2 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5e 0f reteq 1 mgl@1371: + *[0-9a-f]*: 5e fc retal r12 mgl@1371: + *[0-9a-f]*: 5e 85 retls r5 mgl@1371: + *[0-9a-f]*: 5e 74 retpl r4 mgl@1371: + *[0-9a-f]*: 5e 1e retne -1 mgl@1371: + *[0-9a-f]*: 5e 90 retgt r0 mgl@1371: + *[0-9a-f]*: 5e 9c retgt r12 mgl@1371: + *[0-9a-f]*: 5e 4a retge r10 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 5f 0f sreq pc mgl@1371: + *[0-9a-f]*: 5f fc sral r12 mgl@1371: + *[0-9a-f]*: 5f 85 srls r5 mgl@1371: + *[0-9a-f]*: 5f 74 srpl r4 mgl@1371: + *[0-9a-f]*: 5f 1e srne lr mgl@1371: + *[0-9a-f]*: 5f 50 srlt r0 mgl@1371: + *[0-9a-f]*: 5f fd sral sp mgl@1371: + *[0-9a-f]*: 5f 49 srge r9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 7e 0f ld\.w pc,pc\[0x0\] mgl@1371: + *[0-9a-f]*: 79 fc ld\.w r12,r12\[0x7c\] mgl@1371: + *[0-9a-f]*: 6b 05 ld\.w r5,r5\[0x40\] mgl@1371: + *[0-9a-f]*: 68 f4 ld\.w r4,r4\[0x3c\] mgl@1371: + *[0-9a-f]*: 7c 1e ld\.w lr,lr\[0x4\] mgl@1371: + *[0-9a-f]*: 64 dd ld\.w sp,r2\[0x34\] mgl@1371: + *[0-9a-f]*: 62 29 ld\.w r9,r1\[0x8\] mgl@1371: + *[0-9a-f]*: 7a f5 ld\.w r5,sp\[0x3c\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 9e 0f ld\.sh pc,pc\[0x0\] mgl@1371: + *[0-9a-f]*: 98 7c ld\.sh r12,r12\[0xe\] mgl@1371: + *[0-9a-f]*: 8a 45 ld\.sh r5,r5\[0x8\] mgl@1371: + *[0-9a-f]*: 88 34 ld\.sh r4,r4\[0x6\] mgl@1371: + *[0-9a-f]*: 9c 1e ld\.sh lr,lr\[0x2\] mgl@1371: + *[0-9a-f]*: 84 44 ld\.sh r4,r2\[0x8\] mgl@1371: + *[0-9a-f]*: 9c 5d ld\.sh sp,lr\[0xa\] mgl@1371: + *[0-9a-f]*: 96 12 ld\.sh r2,r11\[0x2\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 9e 8f ld\.uh pc,pc\[0x0\] mgl@1371: + *[0-9a-f]*: 98 fc ld\.uh r12,r12\[0xe\] mgl@1371: + *[0-9a-f]*: 8a c5 ld\.uh r5,r5\[0x8\] mgl@1371: + *[0-9a-f]*: 88 b4 ld\.uh r4,r4\[0x6\] mgl@1371: + *[0-9a-f]*: 9c 9e ld\.uh lr,lr\[0x2\] mgl@1371: + *[0-9a-f]*: 80 da ld\.uh r10,r0\[0xa\] mgl@1371: + *[0-9a-f]*: 96 c8 ld\.uh r8,r11\[0x8\] mgl@1371: + *[0-9a-f]*: 84 ea ld\.uh r10,r2\[0xc\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 9f 0f st\.w pc\[0x0\],pc mgl@1371: + *[0-9a-f]*: 99 fc st\.w r12\[0x3c\],r12 mgl@1371: + *[0-9a-f]*: 8b 85 st\.w r5\[0x20\],r5 mgl@1371: + *[0-9a-f]*: 89 74 st\.w r4\[0x1c\],r4 mgl@1371: + *[0-9a-f]*: 9d 1e st\.w lr\[0x4\],lr mgl@1371: + *[0-9a-f]*: 8f bb st\.w r7\[0x2c\],r11 mgl@1371: + *[0-9a-f]*: 85 66 st\.w r2\[0x18\],r6 mgl@1371: + *[0-9a-f]*: 89 39 st\.w r4\[0xc\],r9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: be 0f st\.h pc\[0x0\],pc mgl@1371: + *[0-9a-f]*: b8 7c st\.h r12\[0xe\],r12 mgl@1371: + *[0-9a-f]*: aa 45 st\.h r5\[0x8\],r5 mgl@1371: + *[0-9a-f]*: a8 34 st\.h r4\[0x6\],r4 mgl@1371: + *[0-9a-f]*: bc 1e st\.h lr\[0x2\],lr mgl@1371: + *[0-9a-f]*: bc 5c st\.h lr\[0xa\],r12 mgl@1371: + *[0-9a-f]*: ac 20 st\.h r6\[0x4\],r0 mgl@1371: + *[0-9a-f]*: aa 6d st\.h r5\[0xc\],sp mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: be 8f st\.b pc\[0x0\],pc mgl@1371: + *[0-9a-f]*: b8 fc st\.b r12\[0x7\],r12 mgl@1371: + *[0-9a-f]*: aa c5 st\.b r5\[0x4\],r5 mgl@1371: + *[0-9a-f]*: a8 b4 st\.b r4\[0x3\],r4 mgl@1371: + *[0-9a-f]*: bc 9e st\.b lr\[0x1\],lr mgl@1371: + *[0-9a-f]*: b8 e9 st\.b r12\[0x6\],r9 mgl@1371: + *[0-9a-f]*: a4 be st\.b r2\[0x3\],lr mgl@1371: + *[0-9a-f]*: a2 bb st\.b r1\[0x3\],r11 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: bf 00 ld\.d r0,pc mgl@1371: + *[0-9a-f]*: b9 0e ld\.d lr,r12 mgl@1371: + *[0-9a-f]*: ab 08 ld\.d r8,r5 mgl@1371: + *[0-9a-f]*: a9 06 ld\.d r6,r4 mgl@1371: + *[0-9a-f]*: bd 02 ld\.d r2,lr mgl@1371: + *[0-9a-f]*: af 0e ld\.d lr,r7 mgl@1371: + *[0-9a-f]*: a9 04 ld\.d r4,r4 mgl@1371: + *[0-9a-f]*: bf 0e ld\.d lr,pc mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: bf 01 ld\.d r0,pc\+\+ mgl@1371: + *[0-9a-f]*: b9 0f ld\.d lr,r12\+\+ mgl@1371: + *[0-9a-f]*: ab 09 ld\.d r8,r5\+\+ mgl@1371: + *[0-9a-f]*: a9 07 ld\.d r6,r4\+\+ mgl@1371: + *[0-9a-f]*: bd 03 ld\.d r2,lr\+\+ mgl@1371: + *[0-9a-f]*: ab 0f ld\.d lr,r5\+\+ mgl@1371: + *[0-9a-f]*: b7 0d ld\.d r12,r11\+\+ mgl@1371: + *[0-9a-f]*: b9 03 ld\.d r2,r12\+\+ mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: bf 10 ld\.d r0,--pc mgl@1371: + *[0-9a-f]*: b9 1e ld\.d lr,--r12 mgl@1371: + *[0-9a-f]*: ab 18 ld\.d r8,--r5 mgl@1371: + *[0-9a-f]*: a9 16 ld\.d r6,--r4 mgl@1371: + *[0-9a-f]*: bd 12 ld\.d r2,--lr mgl@1371: + *[0-9a-f]*: a1 18 ld\.d r8,--r0 mgl@1371: + *[0-9a-f]*: bf 1a ld\.d r10,--pc mgl@1371: + *[0-9a-f]*: a9 12 ld\.d r2,--r4 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: bf 11 st\.d pc,r0 mgl@1371: + *[0-9a-f]*: b9 1f st\.d r12,lr mgl@1371: + *[0-9a-f]*: ab 19 st\.d r5,r8 mgl@1371: + *[0-9a-f]*: a9 17 st\.d r4,r6 mgl@1371: + *[0-9a-f]*: bd 13 st\.d lr,r2 mgl@1371: + *[0-9a-f]*: a1 1d st\.d r0,r12 mgl@1371: + *[0-9a-f]*: bb 15 st\.d sp,r4 mgl@1371: + *[0-9a-f]*: b9 1d st\.d r12,r12 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: bf 20 st\.d pc\+\+,r0 mgl@1371: + *[0-9a-f]*: b9 2e st\.d r12\+\+,lr mgl@1371: + *[0-9a-f]*: ab 28 st\.d r5\+\+,r8 mgl@1371: + *[0-9a-f]*: a9 26 st\.d r4\+\+,r6 mgl@1371: + *[0-9a-f]*: bd 22 st\.d lr\+\+,r2 mgl@1371: + *[0-9a-f]*: bb 26 st\.d sp\+\+,r6 mgl@1371: + *[0-9a-f]*: b5 26 st\.d r10\+\+,r6 mgl@1371: + *[0-9a-f]*: af 22 st\.d r7\+\+,r2 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: bf 21 st\.d --pc,r0 mgl@1371: + *[0-9a-f]*: b9 2f st\.d --r12,lr mgl@1371: + *[0-9a-f]*: ab 29 st\.d --r5,r8 mgl@1371: + *[0-9a-f]*: a9 27 st\.d --r4,r6 mgl@1371: + *[0-9a-f]*: bd 23 st\.d --lr,r2 mgl@1371: + *[0-9a-f]*: a7 27 st\.d --r3,r6 mgl@1371: + *[0-9a-f]*: bd 23 st\.d --lr,r2 mgl@1371: + *[0-9a-f]*: a1 25 st\.d --r0,r4 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: bf 3f mul pc,pc mgl@1371: + *[0-9a-f]*: b9 3c mul r12,r12 mgl@1371: + *[0-9a-f]*: ab 35 mul r5,r5 mgl@1371: + *[0-9a-f]*: a9 34 mul r4,r4 mgl@1371: + *[0-9a-f]*: bd 3e mul lr,lr mgl@1371: + *[0-9a-f]*: bd 3a mul r10,lr mgl@1371: + *[0-9a-f]*: b1 30 mul r0,r8 mgl@1371: + *[0-9a-f]*: ab 38 mul r8,r5 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: a1 4f asr pc,0x0 mgl@1371: + *[0-9a-f]*: bf 5c asr r12,0x1f mgl@1371: + *[0-9a-f]*: b1 45 asr r5,0x10 mgl@1371: + *[0-9a-f]*: af 54 asr r4,0xf mgl@1371: + *[0-9a-f]*: a1 5e asr lr,0x1 mgl@1371: + *[0-9a-f]*: b7 56 asr r6,0x17 mgl@1371: + *[0-9a-f]*: b3 46 asr r6,0x12 mgl@1371: + *[0-9a-f]*: a9 45 asr r5,0x8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: a1 6f lsl pc,0x0 mgl@1371: + *[0-9a-f]*: bf 7c lsl r12,0x1f mgl@1371: + *[0-9a-f]*: b1 65 lsl r5,0x10 mgl@1371: + *[0-9a-f]*: af 74 lsl r4,0xf mgl@1371: + *[0-9a-f]*: a1 7e lsl lr,0x1 mgl@1371: + *[0-9a-f]*: ad 7c lsl r12,0xd mgl@1371: + *[0-9a-f]*: b1 66 lsl r6,0x10 mgl@1371: + *[0-9a-f]*: b9 71 lsl r1,0x19 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: a1 8f lsr pc,0x0 mgl@1371: + *[0-9a-f]*: bf 9c lsr r12,0x1f mgl@1371: + *[0-9a-f]*: b1 85 lsr r5,0x10 mgl@1371: + *[0-9a-f]*: af 94 lsr r4,0xf mgl@1371: + *[0-9a-f]*: a1 9e lsr lr,0x1 mgl@1371: + *[0-9a-f]*: a1 90 lsr r0,0x1 mgl@1371: + *[0-9a-f]*: ab 88 lsr r8,0xa mgl@1371: + *[0-9a-f]*: bb 87 lsr r7,0x1a mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: a1 af sbr pc,0x0 mgl@1371: + *[0-9a-f]*: bf bc sbr r12,0x1f mgl@1371: + *[0-9a-f]*: b1 a5 sbr r5,0x10 mgl@1371: + *[0-9a-f]*: af b4 sbr r4,0xf mgl@1371: + *[0-9a-f]*: a1 be sbr lr,0x1 mgl@1371: + *[0-9a-f]*: bf b8 sbr r8,0x1f mgl@1371: + *[0-9a-f]*: b7 a6 sbr r6,0x16 mgl@1371: + *[0-9a-f]*: b7 b1 sbr r1,0x17 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: a1 cf cbr pc,0x0 mgl@1371: + *[0-9a-f]*: bf dc cbr r12,0x1f mgl@1371: + *[0-9a-f]*: b1 c5 cbr r5,0x10 mgl@1371: + *[0-9a-f]*: af d4 cbr r4,0xf mgl@1371: + *[0-9a-f]*: a1 de cbr lr,0x1 mgl@1371: + *[0-9a-f]*: ab cc cbr r12,0xa mgl@1371: + *[0-9a-f]*: b7 c7 cbr r7,0x16 mgl@1371: + *[0-9a-f]*: a9 d8 cbr r8,0x9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: c0 00 breq [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: cf f7 brpl [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: c8 04 brge [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: c7 f3 brcs [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: c0 11 brne [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: c7 33 brcs [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: cf 70 breq [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: c0 60 breq [0-9a-f]* <.*> mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: c0 08 rjmp [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: cf fb rjmp [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: c0 0a rjmp [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: cf f9 rjmp [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: c0 18 rjmp [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: c1 fa rjmp [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: c0 78 rjmp [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: cf ea rjmp [0-9a-f]* <.*> mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: c0 0c rcall [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: cf ff rcall [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: c0 0e rcall [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: cf fd rcall [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: c0 1c rcall [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: c6 cc rcall [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: cf 7e rcall [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: c1 ae rcall [0-9a-f]* <.*> mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d0 00 acall 0x0 mgl@1371: + *[0-9a-f]*: df f0 acall 0x3fc mgl@1371: + *[0-9a-f]*: d8 00 acall 0x200 mgl@1371: + *[0-9a-f]*: d7 f0 acall 0x1fc mgl@1371: + *[0-9a-f]*: d0 10 acall 0x4 mgl@1371: + *[0-9a-f]*: d5 90 acall 0x164 mgl@1371: + *[0-9a-f]*: d4 c0 acall 0x130 mgl@1371: + *[0-9a-f]*: d2 b0 acall 0xac mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d7 33 scall mgl@1371: + *[0-9a-f]*: d7 33 scall mgl@1371: + *[0-9a-f]*: d7 33 scall mgl@1371: + *[0-9a-f]*: d7 33 scall mgl@1371: + *[0-9a-f]*: d7 33 scall mgl@1371: + *[0-9a-f]*: d7 33 scall mgl@1371: + *[0-9a-f]*: d7 33 scall mgl@1371: + *[0-9a-f]*: d7 33 scall mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d8 02 popm pc mgl@1371: + *[0-9a-f]*: dd fa popm r0-r11,pc,r12=-1 mgl@1371: + *[0-9a-f]*: d4 02 popm lr mgl@1371: + *[0-9a-f]*: db fa popm r0-r11,pc,r12=1 mgl@1371: + *[0-9a-f]*: d0 12 popm r0-r3 mgl@1371: + *[0-9a-f]*: d8 e2 popm r4-r10,pc mgl@1371: + *[0-9a-f]*: d9 1a popm r0-r3,r11,pc,r12=0 mgl@1371: + *[0-9a-f]*: d7 b2 popm r0-r7,r10-r12,lr mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d8 01 pushm pc mgl@1371: + *[0-9a-f]*: df f1 pushm r0-r12,lr-pc mgl@1371: + *[0-9a-f]*: d8 01 pushm pc mgl@1371: + *[0-9a-f]*: d7 f1 pushm r0-r12,lr mgl@1371: + *[0-9a-f]*: d0 11 pushm r0-r3 mgl@1371: + *[0-9a-f]*: dc c1 pushm r8-r10,lr-pc mgl@1371: + *[0-9a-f]*: d0 91 pushm r0-r3,r10 mgl@1371: + *[0-9a-f]*: d2 41 pushm r8-r9,r12 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: +.* mgl@1371: +.* mgl@1371: +.* mgl@1371: +.* mgl@1371: +.* mgl@1371: +.* mgl@1371: +.* mgl@1371: +.* mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: +.* mgl@1371: +.* mgl@1371: +.* mgl@1371: +.* mgl@1371: +.* mgl@1371: +.* mgl@1371: +.* mgl@1371: +.* mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d0 03 csrfcz 0x0 mgl@1371: + *[0-9a-f]*: d1 f3 csrfcz 0x1f mgl@1371: + *[0-9a-f]*: d1 03 csrfcz 0x10 mgl@1371: + *[0-9a-f]*: d0 f3 csrfcz 0xf mgl@1371: + *[0-9a-f]*: d0 13 csrfcz 0x1 mgl@1371: + *[0-9a-f]*: d0 53 csrfcz 0x5 mgl@1371: + *[0-9a-f]*: d0 d3 csrfcz 0xd mgl@1371: + *[0-9a-f]*: d1 73 csrfcz 0x17 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d2 03 ssrf 0x0 mgl@1371: + *[0-9a-f]*: d3 f3 ssrf 0x1f mgl@1371: + *[0-9a-f]*: d3 03 ssrf 0x10 mgl@1371: + *[0-9a-f]*: d2 f3 ssrf 0xf mgl@1371: + *[0-9a-f]*: d2 13 ssrf 0x1 mgl@1371: + *[0-9a-f]*: d3 d3 ssrf 0x1d mgl@1371: + *[0-9a-f]*: d2 d3 ssrf 0xd mgl@1371: + *[0-9a-f]*: d2 d3 ssrf 0xd mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d4 03 csrf 0x0 mgl@1371: + *[0-9a-f]*: d5 f3 csrf 0x1f mgl@1371: + *[0-9a-f]*: d5 03 csrf 0x10 mgl@1371: + *[0-9a-f]*: d4 f3 csrf 0xf mgl@1371: + *[0-9a-f]*: d4 13 csrf 0x1 mgl@1371: + *[0-9a-f]*: d4 a3 csrf 0xa mgl@1371: + *[0-9a-f]*: d4 f3 csrf 0xf mgl@1371: + *[0-9a-f]*: d4 b3 csrf 0xb mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d6 03 rete mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d6 13 rets mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d6 23 retd mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d6 33 retj mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d6 43 tlbr mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d6 53 tlbs mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d6 63 tlbw mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d6 73 breakpoint mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d6 83 incjosp 1 mgl@1371: + *[0-9a-f]*: d6 93 incjosp 2 mgl@1371: + *[0-9a-f]*: d6 a3 incjosp 3 mgl@1371: + *[0-9a-f]*: d6 b3 incjosp 4 mgl@1371: + *[0-9a-f]*: d6 c3 incjosp -4 mgl@1371: + *[0-9a-f]*: d6 d3 incjosp -3 mgl@1371: + *[0-9a-f]*: d6 e3 incjosp -2 mgl@1371: + *[0-9a-f]*: d6 f3 incjosp -1 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d7 03 nop mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d7 13 popjc mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: d7 23 pushjc mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 00 0f add pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 00 3c add r12,r12,r12<<0x3 mgl@1371: + *[0-9a-f]*: ea 05 00 25 add r5,r5,r5<<0x2 mgl@1371: + *[0-9a-f]*: e8 04 00 14 add r4,r4,r4<<0x1 mgl@1371: + *[0-9a-f]*: fc 0e 00 1e add lr,lr,lr<<0x1 mgl@1371: + *[0-9a-f]*: f8 00 00 10 add r0,r12,r0<<0x1 mgl@1371: + *[0-9a-f]*: f8 04 00 09 add r9,r12,r4 mgl@1371: + *[0-9a-f]*: f8 07 00 2c add r12,r12,r7<<0x2 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 01 0f sub pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 01 3c sub r12,r12,r12<<0x3 mgl@1371: + *[0-9a-f]*: ea 05 01 25 sub r5,r5,r5<<0x2 mgl@1371: + *[0-9a-f]*: e8 04 01 14 sub r4,r4,r4<<0x1 mgl@1371: + *[0-9a-f]*: fc 0e 01 1e sub lr,lr,lr<<0x1 mgl@1371: + *[0-9a-f]*: e6 04 01 0d sub sp,r3,r4 mgl@1371: + *[0-9a-f]*: ee 03 01 03 sub r3,r7,r3 mgl@1371: + *[0-9a-f]*: f4 0d 01 1d sub sp,r10,sp<<0x1 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 0d 0f divu pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 0d 0c divu r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 0d 05 divu r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 0d 04 divu r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 0d 0e divu lr,lr,lr mgl@1371: + *[0-9a-f]*: e8 0f 0d 0d divu sp,r4,pc mgl@1371: + *[0-9a-f]*: ea 0d 0d 05 divu r5,r5,sp mgl@1371: + *[0-9a-f]*: fa 00 0d 0a divu r10,sp,r0 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 0e 0f addhh\.w pc,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 0e 3c addhh\.w r12,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 0e 35 addhh\.w r5,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 0e 04 addhh\.w r4,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 0e 3e addhh\.w lr,lr:t,lr:t mgl@1371: + *[0-9a-f]*: e0 03 0e 00 addhh\.w r0,r0:b,r3:b mgl@1371: + *[0-9a-f]*: f8 07 0e 2e addhh\.w lr,r12:t,r7:b mgl@1371: + *[0-9a-f]*: f4 02 0e 23 addhh\.w r3,r10:t,r2:b mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 0f 0f subhh\.w pc,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 0f 3c subhh\.w r12,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 0f 35 subhh\.w r5,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 0f 04 subhh\.w r4,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 0f 3e subhh\.w lr,lr:t,lr:t mgl@1371: + *[0-9a-f]*: e2 07 0f 2a subhh\.w r10,r1:t,r7:b mgl@1371: + *[0-9a-f]*: f4 0e 0f 3f subhh\.w pc,r10:t,lr:t mgl@1371: + *[0-9a-f]*: e0 0c 0f 23 subhh\.w r3,r0:t,r12:b mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 00 4f adc pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 00 4c adc r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 00 45 adc r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 00 44 adc r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 00 4e adc lr,lr,lr mgl@1371: + *[0-9a-f]*: e0 07 00 44 adc r4,r0,r7 mgl@1371: + *[0-9a-f]*: e8 03 00 4d adc sp,r4,r3 mgl@1371: + *[0-9a-f]*: f8 00 00 42 adc r2,r12,r0 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 01 4f sbc pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 01 4c sbc r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 01 45 sbc r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 01 44 sbc r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 01 4e sbc lr,lr,lr mgl@1371: + *[0-9a-f]*: ee 09 01 46 sbc r6,r7,r9 mgl@1371: + *[0-9a-f]*: f0 05 01 40 sbc r0,r8,r5 mgl@1371: + *[0-9a-f]*: e0 04 01 41 sbc r1,r0,r4 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 02 4f mul pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 02 4c mul r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 02 45 mul r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 02 44 mul r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 02 4e mul lr,lr,lr mgl@1371: + *[0-9a-f]*: e0 00 02 4f mul pc,r0,r0 mgl@1371: + *[0-9a-f]*: fe 0e 02 48 mul r8,pc,lr mgl@1371: + *[0-9a-f]*: f8 0f 02 44 mul r4,r12,pc mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 03 4f mac pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 03 4c mac r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 03 45 mac r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 03 44 mac r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 03 4e mac lr,lr,lr mgl@1371: + *[0-9a-f]*: e8 00 03 4a mac r10,r4,r0 mgl@1371: + *[0-9a-f]*: fc 00 03 47 mac r7,lr,r0 mgl@1371: + *[0-9a-f]*: f2 0c 03 42 mac r2,r9,r12 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 04 4f muls\.d pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 04 4c muls\.d r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 04 45 muls\.d r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 04 44 muls\.d r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 04 4e muls\.d lr,lr,lr mgl@1371: + *[0-9a-f]*: f0 0e 04 42 muls\.d r2,r8,lr mgl@1371: + *[0-9a-f]*: e0 0b 04 44 muls\.d r4,r0,r11 mgl@1371: + *[0-9a-f]*: fc 06 04 45 muls\.d r5,lr,r6 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 05 40 macs\.d r0,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 05 4e macs\.d lr,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 05 48 macs\.d r8,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 05 46 macs\.d r6,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 05 42 macs\.d r2,lr,lr mgl@1371: + *[0-9a-f]*: e2 09 05 48 macs\.d r8,r1,r9 mgl@1371: + *[0-9a-f]*: f0 08 05 4e macs\.d lr,r8,r8 mgl@1371: + *[0-9a-f]*: e6 0c 05 44 macs\.d r4,r3,r12 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 06 40 mulu\.d r0,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 06 4e mulu\.d lr,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 06 48 mulu\.d r8,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 06 46 mulu\.d r6,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 06 42 mulu\.d r2,lr,lr mgl@1371: + *[0-9a-f]*: ea 00 06 46 mulu\.d r6,r5,r0 mgl@1371: + *[0-9a-f]*: ec 01 06 44 mulu\.d r4,r6,r1 mgl@1371: + *[0-9a-f]*: f0 02 06 48 mulu\.d r8,r8,r2 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 07 40 macu\.d r0,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 07 4e macu\.d lr,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 07 48 macu\.d r8,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 07 46 macu\.d r6,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 07 42 macu\.d r2,lr,lr mgl@1371: + *[0-9a-f]*: fa 0b 07 46 macu\.d r6,sp,r11 mgl@1371: + *[0-9a-f]*: e8 08 07 42 macu\.d r2,r4,r8 mgl@1371: + *[0-9a-f]*: f4 09 07 46 macu\.d r6,r10,r9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 08 4f asr pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 08 4c asr r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 08 45 asr r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 08 44 asr r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 08 4e asr lr,lr,lr mgl@1371: + *[0-9a-f]*: ec 0f 08 4f asr pc,r6,pc mgl@1371: + *[0-9a-f]*: ec 0c 08 40 asr r0,r6,r12 mgl@1371: + *[0-9a-f]*: fa 00 08 44 asr r4,sp,r0 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 09 4f lsl pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 09 4c lsl r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 09 45 lsl r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 09 44 lsl r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 09 4e lsl lr,lr,lr mgl@1371: + *[0-9a-f]*: ea 0e 09 4e lsl lr,r5,lr mgl@1371: + *[0-9a-f]*: fe 03 09 45 lsl r5,pc,r3 mgl@1371: + *[0-9a-f]*: fe 09 09 41 lsl r1,pc,r9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 0a 4f lsr pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 0a 4c lsr r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 0a 45 lsr r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 0a 44 lsr r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 0a 4e lsr lr,lr,lr mgl@1371: + *[0-9a-f]*: e8 01 0a 42 lsr r2,r4,r1 mgl@1371: + *[0-9a-f]*: e2 06 0a 45 lsr r5,r1,r6 mgl@1371: + *[0-9a-f]*: ec 07 0a 4d lsr sp,r6,r7 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 0b 4f xchg pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 0b 4c xchg r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 0b 45 xchg r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 0b 44 xchg r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 0b 4e xchg lr,lr,lr mgl@1371: + *[0-9a-f]*: e8 0d 0b 4e xchg lr,r4,sp mgl@1371: + *[0-9a-f]*: ea 0c 0b 41 xchg r1,r5,r12 mgl@1371: + *[0-9a-f]*: f8 00 0b 4e xchg lr,r12,r0 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 0c 4f max pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 0c 4c max r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 0c 45 max r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 0c 44 max r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 0c 4e max lr,lr,lr mgl@1371: + *[0-9a-f]*: e4 0d 0c 4e max lr,r2,sp mgl@1371: + *[0-9a-f]*: f4 09 0c 44 max r4,r10,r9 mgl@1371: + *[0-9a-f]*: f2 0e 0c 4e max lr,r9,lr mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 0d 4f min pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 0d 4c min r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 0d 45 min r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 0d 44 min r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 0d 4e min lr,lr,lr mgl@1371: + *[0-9a-f]*: ee 08 0d 49 min r9,r7,r8 mgl@1371: + *[0-9a-f]*: ea 05 0d 4d min sp,r5,r5 mgl@1371: + *[0-9a-f]*: e2 04 0d 44 min r4,r1,r4 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 0e 4f addabs pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 0e 4c addabs r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 0e 45 addabs r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 0e 44 addabs r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 0e 4e addabs lr,lr,lr mgl@1371: + *[0-9a-f]*: f4 00 0e 47 addabs r7,r10,r0 mgl@1371: + *[0-9a-f]*: f2 07 0e 49 addabs r9,r9,r7 mgl@1371: + *[0-9a-f]*: f0 0c 0e 42 addabs r2,r8,r12 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 01 8f mulnhh\.w pc,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 01 bc mulnhh\.w r12,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 01 b5 mulnhh\.w r5,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 01 84 mulnhh\.w r4,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 01 be mulnhh\.w lr,lr:t,lr:t mgl@1371: + *[0-9a-f]*: fa 09 01 ab mulnhh\.w r11,sp:t,r9:b mgl@1371: + *[0-9a-f]*: e8 0e 01 9d mulnhh\.w sp,r4:b,lr:t mgl@1371: + *[0-9a-f]*: e4 0b 01 ac mulnhh\.w r12,r2:t,r11:b mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 02 80 mulnwh\.d r0,pc,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 02 9e mulnwh\.d lr,r12,r12:t mgl@1371: + *[0-9a-f]*: ea 05 02 98 mulnwh\.d r8,r5,r5:t mgl@1371: + *[0-9a-f]*: e8 04 02 86 mulnwh\.d r6,r4,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 02 92 mulnwh\.d r2,lr,lr:t mgl@1371: + *[0-9a-f]*: e6 02 02 9e mulnwh\.d lr,r3,r2:t mgl@1371: + *[0-9a-f]*: ea 09 02 84 mulnwh\.d r4,r5,r9:b mgl@1371: + *[0-9a-f]*: e8 04 02 9c mulnwh\.d r12,r4,r4:t mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 04 8f machh\.w pc,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 04 bc machh\.w r12,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 04 b5 machh\.w r5,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 04 84 machh\.w r4,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 04 be machh\.w lr,lr:t,lr:t mgl@1371: + *[0-9a-f]*: ea 01 04 9e machh\.w lr,r5:b,r1:t mgl@1371: + *[0-9a-f]*: ec 07 04 89 machh\.w r9,r6:b,r7:b mgl@1371: + *[0-9a-f]*: fc 0c 04 a5 machh\.w r5,lr:t,r12:b mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 05 80 machh\.d r0,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 05 be machh\.d lr,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 05 b8 machh\.d r8,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 05 86 machh\.d r6,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 05 b2 machh\.d r2,lr:t,lr:t mgl@1371: + *[0-9a-f]*: e0 08 05 8a machh\.d r10,r0:b,r8:b mgl@1371: + *[0-9a-f]*: e8 05 05 9e machh\.d lr,r4:b,r5:t mgl@1371: + *[0-9a-f]*: e0 04 05 98 machh\.d r8,r0:b,r4:t mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 06 8f macsathh\.w pc,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 06 bc macsathh\.w r12,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 06 b5 macsathh\.w r5,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 06 84 macsathh\.w r4,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 06 be macsathh\.w lr,lr:t,lr:t mgl@1371: + *[0-9a-f]*: ee 0f 06 b7 macsathh\.w r7,r7:t,pc:t mgl@1371: + *[0-9a-f]*: e4 04 06 a4 macsathh\.w r4,r2:t,r4:b mgl@1371: + *[0-9a-f]*: f0 03 06 b4 macsathh\.w r4,r8:t,r3:t mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 07 8f mulhh\.w pc,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 07 bc mulhh\.w r12,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 07 b5 mulhh\.w r5,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 07 84 mulhh\.w r4,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 07 be mulhh\.w lr,lr:t,lr:t mgl@1371: + *[0-9a-f]*: e8 09 07 a7 mulhh\.w r7,r4:t,r9:b mgl@1371: + *[0-9a-f]*: e6 07 07 bf mulhh\.w pc,r3:t,r7:t mgl@1371: + *[0-9a-f]*: e8 09 07 9f mulhh\.w pc,r4:b,r9:t mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 08 8f mulsathh\.h pc,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 08 bc mulsathh\.h r12,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 08 b5 mulsathh\.h r5,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 08 84 mulsathh\.h r4,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 08 be mulsathh\.h lr,lr:t,lr:t mgl@1371: + *[0-9a-f]*: e2 0d 08 83 mulsathh\.h r3,r1:b,sp:b mgl@1371: + *[0-9a-f]*: fc 0b 08 ab mulsathh\.h r11,lr:t,r11:b mgl@1371: + *[0-9a-f]*: f0 0b 08 98 mulsathh\.h r8,r8:b,r11:t mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 09 8f mulsathh\.w pc,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 09 bc mulsathh\.w r12,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 09 b5 mulsathh\.w r5,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 09 84 mulsathh\.w r4,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 09 be mulsathh\.w lr,lr:t,lr:t mgl@1371: + *[0-9a-f]*: f6 06 09 ae mulsathh\.w lr,r11:t,r6:b mgl@1371: + *[0-9a-f]*: ec 07 09 96 mulsathh\.w r6,r6:b,r7:t mgl@1371: + *[0-9a-f]*: e4 03 09 8a mulsathh\.w r10,r2:b,r3:b mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 0a 8f mulsatrndhh\.h pc,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 0a bc mulsatrndhh\.h r12,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 0a b5 mulsatrndhh\.h r5,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 0a 84 mulsatrndhh\.h r4,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 0a be mulsatrndhh\.h lr,lr:t,lr:t mgl@1371: + *[0-9a-f]*: ec 09 0a 8b mulsatrndhh\.h r11,r6:b,r9:b mgl@1371: + *[0-9a-f]*: e6 08 0a 9b mulsatrndhh\.h r11,r3:b,r8:t mgl@1371: + *[0-9a-f]*: fa 07 0a b5 mulsatrndhh\.h r5,sp:t,r7:t mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 0b 8f mulsatrndwh\.w pc,pc,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 0b 9c mulsatrndwh\.w r12,r12,r12:t mgl@1371: + *[0-9a-f]*: ea 05 0b 95 mulsatrndwh\.w r5,r5,r5:t mgl@1371: + *[0-9a-f]*: e8 04 0b 84 mulsatrndwh\.w r4,r4,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 0b 9e mulsatrndwh\.w lr,lr,lr:t mgl@1371: + *[0-9a-f]*: f8 00 0b 85 mulsatrndwh\.w r5,r12,r0:b mgl@1371: + *[0-9a-f]*: f4 0f 0b 87 mulsatrndwh\.w r7,r10,pc:b mgl@1371: + *[0-9a-f]*: f0 05 0b 9a mulsatrndwh\.w r10,r8,r5:t mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 0c 80 macwh\.d r0,pc,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 0c 9e macwh\.d lr,r12,r12:t mgl@1371: + *[0-9a-f]*: ea 05 0c 98 macwh\.d r8,r5,r5:t mgl@1371: + *[0-9a-f]*: e8 04 0c 86 macwh\.d r6,r4,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 0c 92 macwh\.d r2,lr,lr:t mgl@1371: + *[0-9a-f]*: f4 0c 0c 94 macwh\.d r4,r10,r12:t mgl@1371: + *[0-9a-f]*: ee 0d 0c 84 macwh\.d r4,r7,sp:b mgl@1371: + *[0-9a-f]*: f2 0b 0c 8e macwh\.d lr,r9,r11:b mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 0d 80 mulwh\.d r0,pc,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 0d 9e mulwh\.d lr,r12,r12:t mgl@1371: + *[0-9a-f]*: ea 05 0d 98 mulwh\.d r8,r5,r5:t mgl@1371: + *[0-9a-f]*: e8 04 0d 86 mulwh\.d r6,r4,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 0d 92 mulwh\.d r2,lr,lr:t mgl@1371: + *[0-9a-f]*: ea 01 0d 8c mulwh\.d r12,r5,r1:b mgl@1371: + *[0-9a-f]*: e2 03 0d 90 mulwh\.d r0,r1,r3:t mgl@1371: + *[0-9a-f]*: f2 02 0d 80 mulwh\.d r0,r9,r2:b mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 0e 8f mulsatwh\.w pc,pc,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 0e 9c mulsatwh\.w r12,r12,r12:t mgl@1371: + *[0-9a-f]*: ea 05 0e 95 mulsatwh\.w r5,r5,r5:t mgl@1371: + *[0-9a-f]*: e8 04 0e 84 mulsatwh\.w r4,r4,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 0e 9e mulsatwh\.w lr,lr,lr:t mgl@1371: + *[0-9a-f]*: fe 0a 0e 9b mulsatwh\.w r11,pc,r10:t mgl@1371: + *[0-9a-f]*: f8 09 0e 9d mulsatwh\.w sp,r12,r9:t mgl@1371: + *[0-9a-f]*: e6 02 0e 90 mulsatwh\.w r0,r3,r2:t mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 0f 8f ld\.w pc,pc\[pc:b<<2\] mgl@1371: + *[0-9a-f]*: f8 0c 0f bc ld\.w r12,r12\[r12:t<<2\] mgl@1371: + *[0-9a-f]*: ea 05 0f a5 ld\.w r5,r5\[r5:u<<2\] mgl@1371: + *[0-9a-f]*: e8 04 0f 94 ld\.w r4,r4\[r4:l<<2\] mgl@1371: + *[0-9a-f]*: fc 0e 0f 9e ld\.w lr,lr\[lr:l<<2\] mgl@1371: + *[0-9a-f]*: f4 06 0f 99 ld\.w r9,r10\[r6:l<<2\] mgl@1371: + *[0-9a-f]*: f4 0a 0f 82 ld\.w r2,r10\[r10:b<<2\] mgl@1371: + *[0-9a-f]*: ea 0f 0f 8b ld\.w r11,r5\[pc:b<<2\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 00 cf satadd\.w pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 00 cc satadd\.w r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 00 c5 satadd\.w r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 00 c4 satadd\.w r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 00 ce satadd\.w lr,lr,lr mgl@1371: + *[0-9a-f]*: f0 0b 00 c4 satadd\.w r4,r8,r11 mgl@1371: + *[0-9a-f]*: f8 06 00 c3 satadd\.w r3,r12,r6 mgl@1371: + *[0-9a-f]*: fc 09 00 c3 satadd\.w r3,lr,r9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 01 cf satsub\.w pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 01 cc satsub\.w r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 01 c5 satsub\.w r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 01 c4 satsub\.w r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 01 ce satsub\.w lr,lr,lr mgl@1371: + *[0-9a-f]*: fa 00 01 c8 satsub\.w r8,sp,r0 mgl@1371: + *[0-9a-f]*: f0 04 01 c9 satsub\.w r9,r8,r4 mgl@1371: + *[0-9a-f]*: fc 02 01 cf satsub\.w pc,lr,r2 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 02 cf satadd\.h pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 02 cc satadd\.h r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 02 c5 satadd\.h r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 02 c4 satadd\.h r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 02 ce satadd\.h lr,lr,lr mgl@1371: + *[0-9a-f]*: e6 09 02 c7 satadd\.h r7,r3,r9 mgl@1371: + *[0-9a-f]*: e0 02 02 c1 satadd\.h r1,r0,r2 mgl@1371: + *[0-9a-f]*: e8 0e 02 c1 satadd\.h r1,r4,lr mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 03 cf satsub\.h pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 03 cc satsub\.h r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 03 c5 satsub\.h r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 03 c4 satsub\.h r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 03 ce satsub\.h lr,lr,lr mgl@1371: + *[0-9a-f]*: fc 03 03 ce satsub\.h lr,lr,r3 mgl@1371: + *[0-9a-f]*: ec 05 03 cb satsub\.h r11,r6,r5 mgl@1371: + *[0-9a-f]*: fa 00 03 c3 satsub\.h r3,sp,r0 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 10 00 mul pc,pc,0 mgl@1371: + *[0-9a-f]*: f8 0c 10 ff mul r12,r12,-1 mgl@1371: + *[0-9a-f]*: ea 05 10 80 mul r5,r5,-128 mgl@1371: + *[0-9a-f]*: e8 04 10 7f mul r4,r4,127 mgl@1371: + *[0-9a-f]*: fc 0e 10 01 mul lr,lr,1 mgl@1371: + *[0-9a-f]*: e4 0c 10 f9 mul r12,r2,-7 mgl@1371: + *[0-9a-f]*: fe 01 10 5f mul r1,pc,95 mgl@1371: + *[0-9a-f]*: ec 04 10 13 mul r4,r6,19 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 11 00 rsub pc,pc,0 mgl@1371: + *[0-9a-f]*: f8 0c 11 ff rsub r12,r12,-1 mgl@1371: + *[0-9a-f]*: ea 05 11 80 rsub r5,r5,-128 mgl@1371: + *[0-9a-f]*: e8 04 11 7f rsub r4,r4,127 mgl@1371: + *[0-9a-f]*: fc 0e 11 01 rsub lr,lr,1 mgl@1371: + *[0-9a-f]*: fc 09 11 60 rsub r9,lr,96 mgl@1371: + *[0-9a-f]*: e2 0b 11 38 rsub r11,r1,56 mgl@1371: + *[0-9a-f]*: ee 00 11 a9 rsub r0,r7,-87 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 12 00 clz pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 12 00 clz r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 12 00 clz r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 12 00 clz r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 12 00 clz lr,lr mgl@1371: + *[0-9a-f]*: e6 02 12 00 clz r2,r3 mgl@1371: + *[0-9a-f]*: f6 05 12 00 clz r5,r11 mgl@1371: + *[0-9a-f]*: e6 0f 12 00 clz pc,r3 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 13 00 cpc pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 13 00 cpc r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 13 00 cpc r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 13 00 cpc r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 13 00 cpc lr,lr mgl@1371: + *[0-9a-f]*: e8 0f 13 00 cpc pc,r4 mgl@1371: + *[0-9a-f]*: f2 05 13 00 cpc r5,r9 mgl@1371: + *[0-9a-f]*: ee 06 13 00 cpc r6,r7 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 14 00 asr pc,pc,0x0 mgl@1371: + *[0-9a-f]*: f8 0c 14 1f asr r12,r12,0x1f mgl@1371: + *[0-9a-f]*: ea 05 14 10 asr r5,r5,0x10 mgl@1371: + *[0-9a-f]*: e8 04 14 0f asr r4,r4,0xf mgl@1371: + *[0-9a-f]*: fc 0e 14 01 asr lr,lr,0x1 mgl@1371: + *[0-9a-f]*: f6 04 14 13 asr r4,r11,0x13 mgl@1371: + *[0-9a-f]*: fe 0d 14 1a asr sp,pc,0x1a mgl@1371: + *[0-9a-f]*: fa 0b 14 08 asr r11,sp,0x8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 15 00 lsl pc,pc,0x0 mgl@1371: + *[0-9a-f]*: f8 0c 15 1f lsl r12,r12,0x1f mgl@1371: + *[0-9a-f]*: ea 05 15 10 lsl r5,r5,0x10 mgl@1371: + *[0-9a-f]*: e8 04 15 0f lsl r4,r4,0xf mgl@1371: + *[0-9a-f]*: fc 0e 15 01 lsl lr,lr,0x1 mgl@1371: + *[0-9a-f]*: f4 08 15 11 lsl r8,r10,0x11 mgl@1371: + *[0-9a-f]*: fc 02 15 03 lsl r2,lr,0x3 mgl@1371: + *[0-9a-f]*: f6 0e 15 0e lsl lr,r11,0xe mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 16 00 lsr pc,pc,0x0 mgl@1371: + *[0-9a-f]*: f8 0c 16 1f lsr r12,r12,0x1f mgl@1371: + *[0-9a-f]*: ea 05 16 10 lsr r5,r5,0x10 mgl@1371: + *[0-9a-f]*: e8 04 16 0f lsr r4,r4,0xf mgl@1371: + *[0-9a-f]*: fc 0e 16 01 lsr lr,lr,0x1 mgl@1371: + *[0-9a-f]*: e6 04 16 1f lsr r4,r3,0x1f mgl@1371: + *[0-9a-f]*: f2 0f 16 0e lsr pc,r9,0xe mgl@1371: + *[0-9a-f]*: e0 03 16 06 lsr r3,r0,0x6 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 17 00 moveq pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 17 f0 moval r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 17 80 movls r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 17 70 movpl r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 17 10 movne lr,lr mgl@1371: + *[0-9a-f]*: f6 0f 17 10 movne pc,r11 mgl@1371: + *[0-9a-f]*: e4 0a 17 60 movmi r10,r2 mgl@1371: + *[0-9a-f]*: f8 08 17 80 movls r8,r12 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 20 0f padd\.h pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 20 0c padd\.h r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 20 05 padd\.h r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 20 04 padd\.h r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 20 0e padd\.h lr,lr,lr mgl@1371: + *[0-9a-f]*: e4 07 20 08 padd\.h r8,r2,r7 mgl@1371: + *[0-9a-f]*: e0 03 20 00 padd\.h r0,r0,r3 mgl@1371: + *[0-9a-f]*: f6 06 20 0d padd\.h sp,r11,r6 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 20 1f psub\.h pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 20 1c psub\.h r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 20 15 psub\.h r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 20 14 psub\.h r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 20 1e psub\.h lr,lr,lr mgl@1371: + *[0-9a-f]*: ec 08 20 1e psub\.h lr,r6,r8 mgl@1371: + *[0-9a-f]*: e2 0d 20 10 psub\.h r0,r1,sp mgl@1371: + *[0-9a-f]*: fe 0d 20 1f psub\.h pc,pc,sp mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 20 2f paddx\.h pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 20 2c paddx\.h r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 20 25 paddx\.h r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 20 24 paddx\.h r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 20 2e paddx\.h lr,lr,lr mgl@1371: + *[0-9a-f]*: fe 01 20 2f paddx\.h pc,pc,r1 mgl@1371: + *[0-9a-f]*: e8 05 20 2a paddx\.h r10,r4,r5 mgl@1371: + *[0-9a-f]*: fe 02 20 25 paddx\.h r5,pc,r2 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 20 3f psubx\.h pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 20 3c psubx\.h r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 20 35 psubx\.h r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 20 34 psubx\.h r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 20 3e psubx\.h lr,lr,lr mgl@1371: + *[0-9a-f]*: f8 05 20 35 psubx\.h r5,r12,r5 mgl@1371: + *[0-9a-f]*: f0 03 20 33 psubx\.h r3,r8,r3 mgl@1371: + *[0-9a-f]*: e4 03 20 35 psubx\.h r5,r2,r3 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 20 4f padds\.sh pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 20 4c padds\.sh r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 20 45 padds\.sh r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 20 44 padds\.sh r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 20 4e padds\.sh lr,lr,lr mgl@1371: + *[0-9a-f]*: fc 02 20 49 padds\.sh r9,lr,r2 mgl@1371: + *[0-9a-f]*: f0 01 20 46 padds\.sh r6,r8,r1 mgl@1371: + *[0-9a-f]*: e8 0a 20 46 padds\.sh r6,r4,r10 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 20 5f psubs\.sh pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 20 5c psubs\.sh r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 20 55 psubs\.sh r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 20 54 psubs\.sh r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 20 5e psubs\.sh lr,lr,lr mgl@1371: + *[0-9a-f]*: fc 0b 20 56 psubs\.sh r6,lr,r11 mgl@1371: + *[0-9a-f]*: f8 04 20 52 psubs\.sh r2,r12,r4 mgl@1371: + *[0-9a-f]*: f2 00 20 50 psubs\.sh r0,r9,r0 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 20 6f paddxs\.sh pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 20 6c paddxs\.sh r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 20 65 paddxs\.sh r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 20 64 paddxs\.sh r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 20 6e paddxs\.sh lr,lr,lr mgl@1371: + *[0-9a-f]*: e6 09 20 60 paddxs\.sh r0,r3,r9 mgl@1371: + *[0-9a-f]*: f4 0b 20 6f paddxs\.sh pc,r10,r11 mgl@1371: + *[0-9a-f]*: f4 0f 20 6f paddxs\.sh pc,r10,pc mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 20 7f psubxs\.sh pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 20 7c psubxs\.sh r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 20 75 psubxs\.sh r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 20 74 psubxs\.sh r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 20 7e psubxs\.sh lr,lr,lr mgl@1371: + *[0-9a-f]*: e8 04 20 77 psubxs\.sh r7,r4,r4 mgl@1371: + *[0-9a-f]*: f0 03 20 77 psubxs\.sh r7,r8,r3 mgl@1371: + *[0-9a-f]*: ec 05 20 7f psubxs\.sh pc,r6,r5 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 20 8f padds\.uh pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 20 8c padds\.uh r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 20 85 padds\.uh r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 20 84 padds\.uh r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 20 8e padds\.uh lr,lr,lr mgl@1371: + *[0-9a-f]*: f6 07 20 8c padds\.uh r12,r11,r7 mgl@1371: + *[0-9a-f]*: f0 0e 20 87 padds\.uh r7,r8,lr mgl@1371: + *[0-9a-f]*: f2 07 20 86 padds\.uh r6,r9,r7 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 20 9f psubs\.uh pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 20 9c psubs\.uh r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 20 95 psubs\.uh r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 20 94 psubs\.uh r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 20 9e psubs\.uh lr,lr,lr mgl@1371: + *[0-9a-f]*: f4 06 20 9e psubs\.uh lr,r10,r6 mgl@1371: + *[0-9a-f]*: e4 0f 20 9d psubs\.uh sp,r2,pc mgl@1371: + *[0-9a-f]*: f2 02 20 92 psubs\.uh r2,r9,r2 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 20 af paddxs\.uh pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 20 ac paddxs\.uh r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 20 a5 paddxs\.uh r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 20 a4 paddxs\.uh r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 20 ae paddxs\.uh lr,lr,lr mgl@1371: + *[0-9a-f]*: f2 05 20 a7 paddxs\.uh r7,r9,r5 mgl@1371: + *[0-9a-f]*: e2 04 20 a9 paddxs\.uh r9,r1,r4 mgl@1371: + *[0-9a-f]*: e4 03 20 a5 paddxs\.uh r5,r2,r3 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 20 bf psubxs\.uh pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 20 bc psubxs\.uh r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 20 b5 psubxs\.uh r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 20 b4 psubxs\.uh r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 20 be psubxs\.uh lr,lr,lr mgl@1371: + *[0-9a-f]*: ea 0d 20 bd psubxs\.uh sp,r5,sp mgl@1371: + *[0-9a-f]*: ec 06 20 bd psubxs\.uh sp,r6,r6 mgl@1371: + *[0-9a-f]*: f6 08 20 b3 psubxs\.uh r3,r11,r8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 20 cf paddh\.sh pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 20 cc paddh\.sh r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 20 c5 paddh\.sh r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 20 c4 paddh\.sh r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 20 ce paddh\.sh lr,lr,lr mgl@1371: + *[0-9a-f]*: fa 03 20 cc paddh\.sh r12,sp,r3 mgl@1371: + *[0-9a-f]*: ea 03 20 cf paddh\.sh pc,r5,r3 mgl@1371: + *[0-9a-f]*: f0 0d 20 c8 paddh\.sh r8,r8,sp mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 20 df psubh\.sh pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 20 dc psubh\.sh r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 20 d5 psubh\.sh r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 20 d4 psubh\.sh r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 20 de psubh\.sh lr,lr,lr mgl@1371: + *[0-9a-f]*: ea 08 20 d1 psubh\.sh r1,r5,r8 mgl@1371: + *[0-9a-f]*: e6 06 20 d7 psubh\.sh r7,r3,r6 mgl@1371: + *[0-9a-f]*: e6 03 20 d4 psubh\.sh r4,r3,r3 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 20 ef paddxh\.sh pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 20 ec paddxh\.sh r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 20 e5 paddxh\.sh r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 20 e4 paddxh\.sh r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 20 ee paddxh\.sh lr,lr,lr mgl@1371: + *[0-9a-f]*: e0 04 20 e6 paddxh\.sh r6,r0,r4 mgl@1371: + *[0-9a-f]*: f0 09 20 e9 paddxh\.sh r9,r8,r9 mgl@1371: + *[0-9a-f]*: e0 0d 20 e3 paddxh\.sh r3,r0,sp mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 20 ff psubxh\.sh pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 20 fc psubxh\.sh r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 20 f5 psubxh\.sh r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 20 f4 psubxh\.sh r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 20 fe psubxh\.sh lr,lr,lr mgl@1371: + *[0-9a-f]*: fe 0c 20 f4 psubxh\.sh r4,pc,r12 mgl@1371: + *[0-9a-f]*: e8 06 20 f8 psubxh\.sh r8,r4,r6 mgl@1371: + *[0-9a-f]*: f2 04 20 fc psubxh\.sh r12,r9,r4 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 21 0f paddsub\.h pc,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 21 3c paddsub\.h r12,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 21 35 paddsub\.h r5,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 21 04 paddsub\.h r4,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 21 3e paddsub\.h lr,lr:t,lr:t mgl@1371: + *[0-9a-f]*: e4 0e 21 25 paddsub\.h r5,r2:t,lr:b mgl@1371: + *[0-9a-f]*: e2 08 21 07 paddsub\.h r7,r1:b,r8:b mgl@1371: + *[0-9a-f]*: f4 05 21 36 paddsub\.h r6,r10:t,r5:t mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 21 4f psubadd\.h pc,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 21 7c psubadd\.h r12,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 21 75 psubadd\.h r5,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 21 44 psubadd\.h r4,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 21 7e psubadd\.h lr,lr:t,lr:t mgl@1371: + *[0-9a-f]*: f6 08 21 79 psubadd\.h r9,r11:t,r8:t mgl@1371: + *[0-9a-f]*: ee 0e 21 7a psubadd\.h r10,r7:t,lr:t mgl@1371: + *[0-9a-f]*: fe 0f 21 66 psubadd\.h r6,pc:t,pc:b mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 21 8f paddsubs\.sh pc,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 21 bc paddsubs\.sh r12,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 21 b5 paddsubs\.sh r5,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 21 84 paddsubs\.sh r4,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 21 be paddsubs\.sh lr,lr:t,lr:t mgl@1371: + *[0-9a-f]*: fc 00 21 a0 paddsubs\.sh r0,lr:t,r0:b mgl@1371: + *[0-9a-f]*: e4 04 21 b9 paddsubs\.sh r9,r2:t,r4:t mgl@1371: + *[0-9a-f]*: f2 0d 21 bc paddsubs\.sh r12,r9:t,sp:t mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 21 cf psubadds\.sh pc,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 21 fc psubadds\.sh r12,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 21 f5 psubadds\.sh r5,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 21 c4 psubadds\.sh r4,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 21 fe psubadds\.sh lr,lr:t,lr:t mgl@1371: + *[0-9a-f]*: fc 01 21 df psubadds\.sh pc,lr:b,r1:t mgl@1371: + *[0-9a-f]*: e6 0c 21 cb psubadds\.sh r11,r3:b,r12:b mgl@1371: + *[0-9a-f]*: e4 08 21 fa psubadds\.sh r10,r2:t,r8:t mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 22 0f paddsubs\.uh pc,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 22 3c paddsubs\.uh r12,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 22 35 paddsubs\.uh r5,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 22 04 paddsubs\.uh r4,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 22 3e paddsubs\.uh lr,lr:t,lr:t mgl@1371: + *[0-9a-f]*: e4 03 22 09 paddsubs\.uh r9,r2:b,r3:b mgl@1371: + *[0-9a-f]*: fa 07 22 1d paddsubs\.uh sp,sp:b,r7:t mgl@1371: + *[0-9a-f]*: e0 0a 22 1e paddsubs\.uh lr,r0:b,r10:t mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 22 4f psubadds\.uh pc,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 22 7c psubadds\.uh r12,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 22 75 psubadds\.uh r5,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 22 44 psubadds\.uh r4,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 22 7e psubadds\.uh lr,lr:t,lr:t mgl@1371: + *[0-9a-f]*: f2 0f 22 7c psubadds\.uh r12,r9:t,pc:t mgl@1371: + *[0-9a-f]*: ec 08 22 48 psubadds\.uh r8,r6:b,r8:b mgl@1371: + *[0-9a-f]*: f0 04 22 48 psubadds\.uh r8,r8:b,r4:b mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 22 8f paddsubh\.sh pc,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 22 bc paddsubh\.sh r12,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 22 b5 paddsubh\.sh r5,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 22 84 paddsubh\.sh r4,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 22 be paddsubh\.sh lr,lr:t,lr:t mgl@1371: + *[0-9a-f]*: f2 09 22 a8 paddsubh\.sh r8,r9:t,r9:b mgl@1371: + *[0-9a-f]*: fa 01 22 b0 paddsubh\.sh r0,sp:t,r1:t mgl@1371: + *[0-9a-f]*: e2 00 22 93 paddsubh\.sh r3,r1:b,r0:t mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 22 cf psubaddh\.sh pc,pc:b,pc:b mgl@1371: + *[0-9a-f]*: f8 0c 22 fc psubaddh\.sh r12,r12:t,r12:t mgl@1371: + *[0-9a-f]*: ea 05 22 f5 psubaddh\.sh r5,r5:t,r5:t mgl@1371: + *[0-9a-f]*: e8 04 22 c4 psubaddh\.sh r4,r4:b,r4:b mgl@1371: + *[0-9a-f]*: fc 0e 22 fe psubaddh\.sh lr,lr:t,lr:t mgl@1371: + *[0-9a-f]*: e6 0a 22 e7 psubaddh\.sh r7,r3:t,r10:b mgl@1371: + *[0-9a-f]*: e4 01 22 f7 psubaddh\.sh r7,r2:t,r1:t mgl@1371: + *[0-9a-f]*: e6 06 22 cb psubaddh\.sh r11,r3:b,r6:b mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 23 0f padd\.b pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 23 0c padd\.b r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 23 05 padd\.b r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 23 04 padd\.b r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 23 0e padd\.b lr,lr,lr mgl@1371: + *[0-9a-f]*: ec 0f 23 02 padd\.b r2,r6,pc mgl@1371: + *[0-9a-f]*: f2 0c 23 08 padd\.b r8,r9,r12 mgl@1371: + *[0-9a-f]*: f8 03 23 05 padd\.b r5,r12,r3 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 23 1f psub\.b pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 23 1c psub\.b r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 23 15 psub\.b r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 23 14 psub\.b r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 23 1e psub\.b lr,lr,lr mgl@1371: + *[0-9a-f]*: f8 0f 23 10 psub\.b r0,r12,pc mgl@1371: + *[0-9a-f]*: fa 0a 23 17 psub\.b r7,sp,r10 mgl@1371: + *[0-9a-f]*: fa 0c 23 15 psub\.b r5,sp,r12 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 23 2f padds\.sb pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 23 2c padds\.sb r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 23 25 padds\.sb r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 23 24 padds\.sb r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 23 2e padds\.sb lr,lr,lr mgl@1371: + *[0-9a-f]*: f6 04 23 2d padds\.sb sp,r11,r4 mgl@1371: + *[0-9a-f]*: f4 0b 23 2b padds\.sb r11,r10,r11 mgl@1371: + *[0-9a-f]*: f8 06 23 25 padds\.sb r5,r12,r6 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 23 3f psubs\.sb pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 23 3c psubs\.sb r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 23 35 psubs\.sb r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 23 34 psubs\.sb r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 23 3e psubs\.sb lr,lr,lr mgl@1371: + *[0-9a-f]*: ec 08 23 37 psubs\.sb r7,r6,r8 mgl@1371: + *[0-9a-f]*: f4 09 23 3c psubs\.sb r12,r10,r9 mgl@1371: + *[0-9a-f]*: f6 00 23 3f psubs\.sb pc,r11,r0 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 23 4f padds\.ub pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 23 4c padds\.ub r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 23 45 padds\.ub r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 23 44 padds\.ub r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 23 4e padds\.ub lr,lr,lr mgl@1371: + *[0-9a-f]*: e4 0b 23 43 padds\.ub r3,r2,r11 mgl@1371: + *[0-9a-f]*: f0 01 23 4a padds\.ub r10,r8,r1 mgl@1371: + *[0-9a-f]*: f0 0a 23 4b padds\.ub r11,r8,r10 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 23 5f psubs\.ub pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 23 5c psubs\.ub r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 23 55 psubs\.ub r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 23 54 psubs\.ub r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 23 5e psubs\.ub lr,lr,lr mgl@1371: + *[0-9a-f]*: e4 07 23 50 psubs\.ub r0,r2,r7 mgl@1371: + *[0-9a-f]*: ea 03 23 5e psubs\.ub lr,r5,r3 mgl@1371: + *[0-9a-f]*: ee 09 23 56 psubs\.ub r6,r7,r9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 23 6f paddh\.ub pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 23 6c paddh\.ub r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 23 65 paddh\.ub r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 23 64 paddh\.ub r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 23 6e paddh\.ub lr,lr,lr mgl@1371: + *[0-9a-f]*: e2 00 23 6e paddh\.ub lr,r1,r0 mgl@1371: + *[0-9a-f]*: ee 07 23 62 paddh\.ub r2,r7,r7 mgl@1371: + *[0-9a-f]*: e2 02 23 62 paddh\.ub r2,r1,r2 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 23 7f psubh\.ub pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 23 7c psubh\.ub r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 23 75 psubh\.ub r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 23 74 psubh\.ub r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 23 7e psubh\.ub lr,lr,lr mgl@1371: + *[0-9a-f]*: e2 06 23 70 psubh\.ub r0,r1,r6 mgl@1371: + *[0-9a-f]*: fc 0a 23 74 psubh\.ub r4,lr,r10 mgl@1371: + *[0-9a-f]*: f0 01 23 79 psubh\.ub r9,r8,r1 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 23 8f pmax\.ub pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 23 8c pmax\.ub r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 23 85 pmax\.ub r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 23 84 pmax\.ub r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 23 8e pmax\.ub lr,lr,lr mgl@1371: + *[0-9a-f]*: e4 0b 23 8f pmax\.ub pc,r2,r11 mgl@1371: + *[0-9a-f]*: e2 01 23 8c pmax\.ub r12,r1,r1 mgl@1371: + *[0-9a-f]*: e4 00 23 85 pmax\.ub r5,r2,r0 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 23 9f pmax\.sh pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 23 9c pmax\.sh r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 23 95 pmax\.sh r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 23 94 pmax\.sh r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 23 9e pmax\.sh lr,lr,lr mgl@1371: + *[0-9a-f]*: ec 0c 23 9e pmax\.sh lr,r6,r12 mgl@1371: + *[0-9a-f]*: fe 05 23 92 pmax\.sh r2,pc,r5 mgl@1371: + *[0-9a-f]*: e4 07 23 9f pmax\.sh pc,r2,r7 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 23 af pmin\.ub pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 23 ac pmin\.ub r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 23 a5 pmin\.ub r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 23 a4 pmin\.ub r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 23 ae pmin\.ub lr,lr,lr mgl@1371: + *[0-9a-f]*: e2 05 23 a8 pmin\.ub r8,r1,r5 mgl@1371: + *[0-9a-f]*: f0 03 23 a1 pmin\.ub r1,r8,r3 mgl@1371: + *[0-9a-f]*: e4 07 23 a0 pmin\.ub r0,r2,r7 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 23 bf pmin\.sh pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 23 bc pmin\.sh r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 23 b5 pmin\.sh r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 23 b4 pmin\.sh r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 23 be pmin\.sh lr,lr,lr mgl@1371: + *[0-9a-f]*: e8 0a 23 b8 pmin\.sh r8,r4,r10 mgl@1371: + *[0-9a-f]*: f4 0c 23 be pmin\.sh lr,r10,r12 mgl@1371: + *[0-9a-f]*: ec 02 23 b2 pmin\.sh r2,r6,r2 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 23 cf pavg\.ub pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 23 cc pavg\.ub r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 23 c5 pavg\.ub r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 23 c4 pavg\.ub r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 23 ce pavg\.ub lr,lr,lr mgl@1371: + *[0-9a-f]*: e2 06 23 c0 pavg\.ub r0,r1,r6 mgl@1371: + *[0-9a-f]*: e6 06 23 c8 pavg\.ub r8,r3,r6 mgl@1371: + *[0-9a-f]*: f8 0a 23 cf pavg\.ub pc,r12,r10 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 23 df pavg\.sh pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 23 dc pavg\.sh r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 23 d5 pavg\.sh r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 23 d4 pavg\.sh r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 23 de pavg\.sh lr,lr,lr mgl@1371: + *[0-9a-f]*: fe 0d 23 d9 pavg\.sh r9,pc,sp mgl@1371: + *[0-9a-f]*: fa 03 23 df pavg\.sh pc,sp,r3 mgl@1371: + *[0-9a-f]*: e2 09 23 d6 pavg\.sh r6,r1,r9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e0 0f 23 ef pabs\.sb pc,pc mgl@1371: + *[0-9a-f]*: e0 0c 23 ec pabs\.sb r12,r12 mgl@1371: + *[0-9a-f]*: e0 05 23 e5 pabs\.sb r5,r5 mgl@1371: + *[0-9a-f]*: e0 04 23 e4 pabs\.sb r4,r4 mgl@1371: + *[0-9a-f]*: e0 0e 23 ee pabs\.sb lr,lr mgl@1371: + *[0-9a-f]*: e0 06 23 eb pabs\.sb r11,r6 mgl@1371: + *[0-9a-f]*: e0 09 23 ee pabs\.sb lr,r9 mgl@1371: + *[0-9a-f]*: e0 07 23 ed pabs\.sb sp,r7 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e0 0f 23 ff pabs\.sh pc,pc mgl@1371: + *[0-9a-f]*: e0 0c 23 fc pabs\.sh r12,r12 mgl@1371: + *[0-9a-f]*: e0 05 23 f5 pabs\.sh r5,r5 mgl@1371: + *[0-9a-f]*: e0 04 23 f4 pabs\.sh r4,r4 mgl@1371: + *[0-9a-f]*: e0 0e 23 fe pabs\.sh lr,lr mgl@1371: + *[0-9a-f]*: e0 03 23 ff pabs\.sh pc,r3 mgl@1371: + *[0-9a-f]*: e0 07 23 f5 pabs\.sh r5,r7 mgl@1371: + *[0-9a-f]*: e0 00 23 f4 pabs\.sh r4,r0 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 24 0f psad pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 24 0c psad r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 24 05 psad r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 24 04 psad r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 24 0e psad lr,lr,lr mgl@1371: + *[0-9a-f]*: f6 0b 24 09 psad r9,r11,r11 mgl@1371: + *[0-9a-f]*: e8 0d 24 0e psad lr,r4,sp mgl@1371: + *[0-9a-f]*: e8 05 24 0e psad lr,r4,r5 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 00 24 1f pasr\.b pc,pc,0x0 mgl@1371: + *[0-9a-f]*: f8 07 24 1c pasr\.b r12,r12,0x7 mgl@1371: + *[0-9a-f]*: ea 04 24 15 pasr\.b r5,r5,0x4 mgl@1371: + *[0-9a-f]*: e8 03 24 14 pasr\.b r4,r4,0x3 mgl@1371: + *[0-9a-f]*: fc 01 24 1e pasr\.b lr,lr,0x1 mgl@1371: + *[0-9a-f]*: ee 01 24 1f pasr\.b pc,r7,0x1 mgl@1371: + *[0-9a-f]*: fc 06 24 1d pasr\.b sp,lr,0x6 mgl@1371: + *[0-9a-f]*: e6 02 24 1d pasr\.b sp,r3,0x2 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 00 24 2f plsl\.b pc,pc,0x0 mgl@1371: + *[0-9a-f]*: f8 07 24 2c plsl\.b r12,r12,0x7 mgl@1371: + *[0-9a-f]*: ea 04 24 25 plsl\.b r5,r5,0x4 mgl@1371: + *[0-9a-f]*: e8 03 24 24 plsl\.b r4,r4,0x3 mgl@1371: + *[0-9a-f]*: fc 01 24 2e plsl\.b lr,lr,0x1 mgl@1371: + *[0-9a-f]*: f6 04 24 22 plsl\.b r2,r11,0x4 mgl@1371: + *[0-9a-f]*: ea 07 24 28 plsl\.b r8,r5,0x7 mgl@1371: + *[0-9a-f]*: e0 02 24 2f plsl\.b pc,r0,0x2 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 00 24 3f plsr\.b pc,pc,0x0 mgl@1371: + *[0-9a-f]*: f8 07 24 3c plsr\.b r12,r12,0x7 mgl@1371: + *[0-9a-f]*: ea 04 24 35 plsr\.b r5,r5,0x4 mgl@1371: + *[0-9a-f]*: e8 03 24 34 plsr\.b r4,r4,0x3 mgl@1371: + *[0-9a-f]*: fc 01 24 3e plsr\.b lr,lr,0x1 mgl@1371: + *[0-9a-f]*: e2 02 24 3c plsr\.b r12,r1,0x2 mgl@1371: + *[0-9a-f]*: fe 07 24 36 plsr\.b r6,pc,0x7 mgl@1371: + *[0-9a-f]*: f6 02 24 3c plsr\.b r12,r11,0x2 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 00 24 4f pasr\.h pc,pc,0x0 mgl@1371: + *[0-9a-f]*: f8 0f 24 4c pasr\.h r12,r12,0xf mgl@1371: + *[0-9a-f]*: ea 08 24 45 pasr\.h r5,r5,0x8 mgl@1371: + *[0-9a-f]*: e8 07 24 44 pasr\.h r4,r4,0x7 mgl@1371: + *[0-9a-f]*: fc 01 24 4e pasr\.h lr,lr,0x1 mgl@1371: + *[0-9a-f]*: f6 0a 24 40 pasr\.h r0,r11,0xa mgl@1371: + *[0-9a-f]*: ec 08 24 44 pasr\.h r4,r6,0x8 mgl@1371: + *[0-9a-f]*: e4 04 24 46 pasr\.h r6,r2,0x4 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 00 24 5f plsl\.h pc,pc,0x0 mgl@1371: + *[0-9a-f]*: f8 0f 24 5c plsl\.h r12,r12,0xf mgl@1371: + *[0-9a-f]*: ea 08 24 55 plsl\.h r5,r5,0x8 mgl@1371: + *[0-9a-f]*: e8 07 24 54 plsl\.h r4,r4,0x7 mgl@1371: + *[0-9a-f]*: fc 01 24 5e plsl\.h lr,lr,0x1 mgl@1371: + *[0-9a-f]*: f4 09 24 55 plsl\.h r5,r10,0x9 mgl@1371: + *[0-9a-f]*: fc 08 24 5d plsl\.h sp,lr,0x8 mgl@1371: + *[0-9a-f]*: fc 07 24 50 plsl\.h r0,lr,0x7 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 00 24 6f plsr\.h pc,pc,0x0 mgl@1371: + *[0-9a-f]*: f8 0f 24 6c plsr\.h r12,r12,0xf mgl@1371: + *[0-9a-f]*: ea 08 24 65 plsr\.h r5,r5,0x8 mgl@1371: + *[0-9a-f]*: e8 07 24 64 plsr\.h r4,r4,0x7 mgl@1371: + *[0-9a-f]*: fc 01 24 6e plsr\.h lr,lr,0x1 mgl@1371: + *[0-9a-f]*: e0 0f 24 6b plsr\.h r11,r0,0xf mgl@1371: + *[0-9a-f]*: e6 03 24 6e plsr\.h lr,r3,0x3 mgl@1371: + *[0-9a-f]*: fc 0a 24 68 plsr\.h r8,lr,0xa mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 24 7f packw\.sh pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 24 7c packw\.sh r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 24 75 packw\.sh r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 24 74 packw\.sh r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 24 7e packw\.sh lr,lr,lr mgl@1371: + *[0-9a-f]*: f6 0a 24 7d packw\.sh sp,r11,r10 mgl@1371: + *[0-9a-f]*: e4 0c 24 78 packw\.sh r8,r2,r12 mgl@1371: + *[0-9a-f]*: e2 05 24 78 packw\.sh r8,r1,r5 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 00 24 8f punpckub\.h pc,pc:b mgl@1371: + *[0-9a-f]*: f8 00 24 9c punpckub\.h r12,r12:t mgl@1371: + *[0-9a-f]*: ea 00 24 95 punpckub\.h r5,r5:t mgl@1371: + *[0-9a-f]*: e8 00 24 84 punpckub\.h r4,r4:b mgl@1371: + *[0-9a-f]*: fc 00 24 9e punpckub\.h lr,lr:t mgl@1371: + *[0-9a-f]*: e2 00 24 96 punpckub\.h r6,r1:t mgl@1371: + *[0-9a-f]*: ea 00 24 8e punpckub\.h lr,r5:b mgl@1371: + *[0-9a-f]*: e4 00 24 9e punpckub\.h lr,r2:t mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 00 24 af punpcksb\.h pc,pc:b mgl@1371: + *[0-9a-f]*: f8 00 24 bc punpcksb\.h r12,r12:t mgl@1371: + *[0-9a-f]*: ea 00 24 b5 punpcksb\.h r5,r5:t mgl@1371: + *[0-9a-f]*: e8 00 24 a4 punpcksb\.h r4,r4:b mgl@1371: + *[0-9a-f]*: fc 00 24 be punpcksb\.h lr,lr:t mgl@1371: + *[0-9a-f]*: ee 00 24 b4 punpcksb\.h r4,r7:t mgl@1371: + *[0-9a-f]*: fc 00 24 a6 punpcksb\.h r6,lr:b mgl@1371: + *[0-9a-f]*: f8 00 24 bc punpcksb\.h r12,r12:t mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 24 cf packsh\.ub pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 24 cc packsh\.ub r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 24 c5 packsh\.ub r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 24 c4 packsh\.ub r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 24 ce packsh\.ub lr,lr,lr mgl@1371: + *[0-9a-f]*: ec 03 24 c3 packsh\.ub r3,r6,r3 mgl@1371: + *[0-9a-f]*: e0 03 24 c8 packsh\.ub r8,r0,r3 mgl@1371: + *[0-9a-f]*: e6 0e 24 c9 packsh\.ub r9,r3,lr mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe 0f 24 df packsh\.sb pc,pc,pc mgl@1371: + *[0-9a-f]*: f8 0c 24 dc packsh\.sb r12,r12,r12 mgl@1371: + *[0-9a-f]*: ea 05 24 d5 packsh\.sb r5,r5,r5 mgl@1371: + *[0-9a-f]*: e8 04 24 d4 packsh\.sb r4,r4,r4 mgl@1371: + *[0-9a-f]*: fc 0e 24 de packsh\.sb lr,lr,lr mgl@1371: + *[0-9a-f]*: f0 01 24 d6 packsh\.sb r6,r8,r1 mgl@1371: + *[0-9a-f]*: f2 08 24 de packsh\.sb lr,r9,r8 mgl@1371: + *[0-9a-f]*: ec 06 24 dd packsh\.sb sp,r6,r6 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e0 1f 00 00 andl pc,0x0 mgl@1371: + *[0-9a-f]*: e0 1c ff ff andl r12,0xffff mgl@1371: + *[0-9a-f]*: e0 15 80 00 andl r5,0x8000 mgl@1371: + *[0-9a-f]*: e0 14 7f ff andl r4,0x7fff mgl@1371: + *[0-9a-f]*: e0 1e 00 01 andl lr,0x1 mgl@1371: + *[0-9a-f]*: e0 1f 5a 58 andl pc,0x5a58 mgl@1371: + *[0-9a-f]*: e0 18 b8 9e andl r8,0xb89e mgl@1371: + *[0-9a-f]*: e0 17 35 97 andl r7,0x3597 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e2 1f 00 00 andl pc,0x0,COH mgl@1371: + *[0-9a-f]*: e2 1c ff ff andl r12,0xffff,COH mgl@1371: + *[0-9a-f]*: e2 15 80 00 andl r5,0x8000,COH mgl@1371: + *[0-9a-f]*: e2 14 7f ff andl r4,0x7fff,COH mgl@1371: + *[0-9a-f]*: e2 1e 00 01 andl lr,0x1,COH mgl@1371: + *[0-9a-f]*: e2 16 58 e1 andl r6,0x58e1,COH mgl@1371: + *[0-9a-f]*: e2 10 9e cd andl r0,0x9ecd,COH mgl@1371: + *[0-9a-f]*: e2 14 bd c4 andl r4,0xbdc4,COH mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e4 1f 00 00 andh pc,0x0 mgl@1371: + *[0-9a-f]*: e4 1c ff ff andh r12,0xffff mgl@1371: + *[0-9a-f]*: e4 15 80 00 andh r5,0x8000 mgl@1371: + *[0-9a-f]*: e4 14 7f ff andh r4,0x7fff mgl@1371: + *[0-9a-f]*: e4 1e 00 01 andh lr,0x1 mgl@1371: + *[0-9a-f]*: e4 1c cc 58 andh r12,0xcc58 mgl@1371: + *[0-9a-f]*: e4 13 21 e3 andh r3,0x21e3 mgl@1371: + *[0-9a-f]*: e4 12 a7 eb andh r2,0xa7eb mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e6 1f 00 00 andh pc,0x0,COH mgl@1371: + *[0-9a-f]*: e6 1c ff ff andh r12,0xffff,COH mgl@1371: + *[0-9a-f]*: e6 15 80 00 andh r5,0x8000,COH mgl@1371: + *[0-9a-f]*: e6 14 7f ff andh r4,0x7fff,COH mgl@1371: + *[0-9a-f]*: e6 1e 00 01 andh lr,0x1,COH mgl@1371: + *[0-9a-f]*: e6 1b 86 0d andh r11,0x860d,COH mgl@1371: + *[0-9a-f]*: e6 18 ce f6 andh r8,0xcef6,COH mgl@1371: + *[0-9a-f]*: e6 1a 5c 83 andh r10,0x5c83,COH mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e8 1f 00 00 orl pc,0x0 mgl@1371: + *[0-9a-f]*: e8 1c ff ff orl r12,0xffff mgl@1371: + *[0-9a-f]*: e8 15 80 00 orl r5,0x8000 mgl@1371: + *[0-9a-f]*: e8 14 7f ff orl r4,0x7fff mgl@1371: + *[0-9a-f]*: e8 1e 00 01 orl lr,0x1 mgl@1371: + *[0-9a-f]*: e8 1d 41 7e orl sp,0x417e mgl@1371: + *[0-9a-f]*: e8 10 52 bd orl r0,0x52bd mgl@1371: + *[0-9a-f]*: e8 1f ac 47 orl pc,0xac47 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ea 1f 00 00 orh pc,0x0 mgl@1371: + *[0-9a-f]*: ea 1c ff ff orh r12,0xffff mgl@1371: + *[0-9a-f]*: ea 15 80 00 orh r5,0x8000 mgl@1371: + *[0-9a-f]*: ea 14 7f ff orh r4,0x7fff mgl@1371: + *[0-9a-f]*: ea 1e 00 01 orh lr,0x1 mgl@1371: + *[0-9a-f]*: ea 18 6e 7d orh r8,0x6e7d mgl@1371: + *[0-9a-f]*: ea 1c 77 1c orh r12,0x771c mgl@1371: + *[0-9a-f]*: ea 11 ea 1a orh r1,0xea1a mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ec 1f 00 00 eorl pc,0x0 mgl@1371: + *[0-9a-f]*: ec 1c ff ff eorl r12,0xffff mgl@1371: + *[0-9a-f]*: ec 15 80 00 eorl r5,0x8000 mgl@1371: + *[0-9a-f]*: ec 14 7f ff eorl r4,0x7fff mgl@1371: + *[0-9a-f]*: ec 1e 00 01 eorl lr,0x1 mgl@1371: + *[0-9a-f]*: ec 14 c7 b9 eorl r4,0xc7b9 mgl@1371: + *[0-9a-f]*: ec 16 fb dd eorl r6,0xfbdd mgl@1371: + *[0-9a-f]*: ec 11 51 b1 eorl r1,0x51b1 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ee 1f 00 00 eorh pc,0x0 mgl@1371: + *[0-9a-f]*: ee 1c ff ff eorh r12,0xffff mgl@1371: + *[0-9a-f]*: ee 15 80 00 eorh r5,0x8000 mgl@1371: + *[0-9a-f]*: ee 14 7f ff eorh r4,0x7fff mgl@1371: + *[0-9a-f]*: ee 1e 00 01 eorh lr,0x1 mgl@1371: + *[0-9a-f]*: ee 10 2d d4 eorh r0,0x2dd4 mgl@1371: + *[0-9a-f]*: ee 1a 94 b5 eorh r10,0x94b5 mgl@1371: + *[0-9a-f]*: ee 19 df 2a eorh r9,0xdf2a mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: f0 1f 00 00 mcall [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: f0 1c ff ff mcall r12\[-4\] mgl@1371: + *[0-9a-f]*: f0 15 80 00 mcall r5\[-131072\] mgl@1371: + *[0-9a-f]*: f0 14 7f ff mcall r4\[131068\] mgl@1371: + *[0-9a-f]*: f0 1e 00 01 mcall lr\[4\] mgl@1371: + *[0-9a-f]*: f0 1d 3b bf mcall sp\[61180\] mgl@1371: + *[0-9a-f]*: f0 14 dd d2 mcall r4\[-35000\] mgl@1371: + *[0-9a-f]*: f0 10 09 b1 mcall r0\[9924\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: f2 1f 00 00 pref pc\[0\] mgl@1371: + *[0-9a-f]*: f2 1c ff ff pref r12\[-1\] mgl@1371: + *[0-9a-f]*: f2 15 80 00 pref r5\[-32768\] mgl@1371: + *[0-9a-f]*: f2 14 7f ff pref r4\[32767\] mgl@1371: + *[0-9a-f]*: f2 1e 00 01 pref lr\[1\] mgl@1371: + *[0-9a-f]*: f2 17 1e 44 pref r7\[7748\] mgl@1371: + *[0-9a-f]*: f2 17 e1 ed pref r7\[-7699\] mgl@1371: + *[0-9a-f]*: f2 12 9a dc pref r2\[-25892\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: f4 1f 00 00 cache pc\[0\],0x0 mgl@1371: + *[0-9a-f]*: f4 1c ff ff cache r12\[-1\],0x1f mgl@1371: + *[0-9a-f]*: f4 15 84 00 cache r5\[-1024\],0x10 mgl@1371: + *[0-9a-f]*: f4 14 7b ff cache r4\[1023\],0xf mgl@1371: + *[0-9a-f]*: f4 1e 08 01 cache lr\[1\],0x1 mgl@1371: + *[0-9a-f]*: f4 13 8c 3c cache r3\[-964\],0x11 mgl@1371: + *[0-9a-f]*: f4 14 b6 89 cache r4\[-375\],0x16 mgl@1371: + *[0-9a-f]*: f4 13 8c 88 cache r3\[-888\],0x11 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 20 0f sub pc,0 mgl@1371: + *[0-9a-f]*: 2f fc sub r12,-1 mgl@1371: + *[0-9a-f]*: f0 25 00 00 sub r5,-1048576 mgl@1371: + *[0-9a-f]*: ee 34 ff ff sub r4,1048575 mgl@1371: + *[0-9a-f]*: 20 1e sub lr,1 mgl@1371: + *[0-9a-f]*: f6 22 8d 6c sub r2,-619156 mgl@1371: + *[0-9a-f]*: e6 3e 0a cd sub lr,461517 mgl@1371: + *[0-9a-f]*: fc 38 2d 25 sub r8,-185051 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 58 0f cp.w pc,0 mgl@1371: + *[0-9a-f]*: 5b fc cp.w r12,-1 mgl@1371: + *[0-9a-f]*: f0 45 00 00 cp.w r5,-1048576 mgl@1371: + *[0-9a-f]*: ee 54 ff ff cp.w r4,1048575 mgl@1371: + *[0-9a-f]*: 58 1e cp.w lr,1 mgl@1371: + *[0-9a-f]*: e0 51 e4 ae cp.w r1,124078 mgl@1371: + *[0-9a-f]*: fa 40 37 e3 cp.w r0,-378909 mgl@1371: + *[0-9a-f]*: fc 44 4a 14 cp.w r4,-243180 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 30 0f mov pc,0 mgl@1371: + *[0-9a-f]*: 3f fc mov r12,-1 mgl@1371: + *[0-9a-f]*: f0 65 00 00 mov r5,-1048576 mgl@1371: + *[0-9a-f]*: ee 74 ff ff mov r4,1048575 mgl@1371: + *[0-9a-f]*: 30 1e mov lr,1 mgl@1371: + *[0-9a-f]*: fa 75 29 a3 mov r5,-317021 mgl@1371: + *[0-9a-f]*: f4 6d 91 94 mov sp,-749164 mgl@1371: + *[0-9a-f]*: ee 65 58 93 mov r5,940179 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: c0 00 breq [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: fe 9f ff ff bral [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: f0 88 00 00 brls [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: ee 97 ff ff brpl [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: c0 11 brne [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: f2 8b 4a 4d brhi [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: ea 8e 14 cc brqs [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: fa 98 98 33 brls [0-9a-f]* <.*> mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: c0 0c rcall [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: cf ff rcall [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: f0 a0 00 00 rcall [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: ee b0 ff ff rcall [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: c0 1c rcall [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: e2 b0 ca 5a rcall [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: e8 a0 47 52 rcall [0-9a-f]* <.*> mgl@1371: + *[0-9a-f]*: fe b0 fd ef rcall [0-9a-f]* <.*> mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe cf 00 00 sub pc,pc,0 mgl@1371: + *[0-9a-f]*: f8 cc ff ff sub r12,r12,-1 mgl@1371: + *[0-9a-f]*: ea c5 80 00 sub r5,r5,-32768 mgl@1371: + *[0-9a-f]*: e8 c4 7f ff sub r4,r4,32767 mgl@1371: + *[0-9a-f]*: fc ce 00 01 sub lr,lr,1 mgl@1371: + *[0-9a-f]*: fe cf ce 38 sub pc,pc,-12744 mgl@1371: + *[0-9a-f]*: ee c7 95 1b sub r7,r7,-27365 mgl@1371: + *[0-9a-f]*: f2 c2 bc 32 sub r2,r9,-17358 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe df 00 00 satsub\.w pc,pc,0 mgl@1371: + *[0-9a-f]*: f8 dc ff ff satsub\.w r12,r12,-1 mgl@1371: + *[0-9a-f]*: ea d5 80 00 satsub\.w r5,r5,-32768 mgl@1371: + *[0-9a-f]*: e8 d4 7f ff satsub\.w r4,r4,32767 mgl@1371: + *[0-9a-f]*: fc de 00 01 satsub\.w lr,lr,1 mgl@1371: + *[0-9a-f]*: fc d2 f8 29 satsub\.w r2,lr,-2007 mgl@1371: + *[0-9a-f]*: f8 d7 fc f0 satsub\.w r7,r12,-784 mgl@1371: + *[0-9a-f]*: ee d4 5a 8c satsub\.w r4,r7,23180 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe e0 00 00 ld\.d r0,pc\[0\] mgl@1371: + *[0-9a-f]*: f8 ee ff ff ld\.d lr,r12\[-1\] mgl@1371: + *[0-9a-f]*: ea e8 80 00 ld\.d r8,r5\[-32768\] mgl@1371: + *[0-9a-f]*: e8 e6 7f ff ld\.d r6,r4\[32767\] mgl@1371: + *[0-9a-f]*: fc e2 00 01 ld\.d r2,lr\[1\] mgl@1371: + *[0-9a-f]*: f6 ee 39 c0 ld\.d lr,r11\[14784\] mgl@1371: + *[0-9a-f]*: f2 e6 b6 27 ld\.d r6,r9\[-18905\] mgl@1371: + *[0-9a-f]*: e6 e2 e7 2d ld\.d r2,r3\[-6355\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 7e 0f ld\.w pc,pc\[0x0\] mgl@1371: + *[0-9a-f]*: f8 fc ff ff ld\.w r12,r12\[-1\] mgl@1371: + *[0-9a-f]*: ea f5 80 00 ld\.w r5,r5\[-32768\] mgl@1371: + *[0-9a-f]*: e8 f4 7f ff ld\.w r4,r4\[32767\] mgl@1371: + *[0-9a-f]*: fc fe 00 01 ld\.w lr,lr\[1\] mgl@1371: + *[0-9a-f]*: f8 f0 a9 8b ld\.w r0,r12\[-22133\] mgl@1371: + *[0-9a-f]*: fe fd af d7 ld\.w sp,pc\[-20521\] mgl@1371: + *[0-9a-f]*: d7 03 nop mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 9e 0f ld\.sh pc,pc\[0x0\] mgl@1371: + *[0-9a-f]*: f9 0c ff ff ld\.sh r12,r12\[-1\] mgl@1371: + *[0-9a-f]*: eb 05 80 00 ld\.sh r5,r5\[-32768\] mgl@1371: + *[0-9a-f]*: e9 04 7f ff ld\.sh r4,r4\[32767\] mgl@1371: + *[0-9a-f]*: fd 0e 00 01 ld\.sh lr,lr\[1\] mgl@1371: + *[0-9a-f]*: f5 06 78 d2 ld\.sh r6,r10\[30930\] mgl@1371: + *[0-9a-f]*: f5 06 55 d5 ld\.sh r6,r10\[21973\] mgl@1371: + *[0-9a-f]*: d7 03 nop mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 9e 8f ld\.uh pc,pc\[0x0\] mgl@1371: + *[0-9a-f]*: f9 1c ff ff ld\.uh r12,r12\[-1\] mgl@1371: + *[0-9a-f]*: eb 15 80 00 ld\.uh r5,r5\[-32768\] mgl@1371: + *[0-9a-f]*: e9 14 7f ff ld\.uh r4,r4\[32767\] mgl@1371: + *[0-9a-f]*: fd 1e 00 01 ld\.uh lr,lr\[1\] mgl@1371: + *[0-9a-f]*: f3 11 cb d6 ld\.uh r1,r9\[-13354\] mgl@1371: + *[0-9a-f]*: f7 1e 53 59 ld\.uh lr,r11\[21337\] mgl@1371: + *[0-9a-f]*: d7 03 nop mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff 2f 00 00 ld\.sb pc,pc\[0\] mgl@1371: + *[0-9a-f]*: f9 2c ff ff ld\.sb r12,r12\[-1\] mgl@1371: + *[0-9a-f]*: eb 25 80 00 ld\.sb r5,r5\[-32768\] mgl@1371: + *[0-9a-f]*: e9 24 7f ff ld\.sb r4,r4\[32767\] mgl@1371: + *[0-9a-f]*: fd 2e 00 01 ld\.sb lr,lr\[1\] mgl@1371: + *[0-9a-f]*: fb 27 90 09 ld\.sb r7,sp\[-28663\] mgl@1371: + *[0-9a-f]*: e3 22 e9 09 ld\.sb r2,r1\[-5879\] mgl@1371: + *[0-9a-f]*: e7 2c 49 2e ld\.sb r12,r3\[18734\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 1f 8f ld\.ub pc,pc\[0x0\] mgl@1371: + *[0-9a-f]*: f9 3c ff ff ld\.ub r12,r12\[-1\] mgl@1371: + *[0-9a-f]*: eb 35 80 00 ld\.ub r5,r5\[-32768\] mgl@1371: + *[0-9a-f]*: e9 34 7f ff ld\.ub r4,r4\[32767\] mgl@1371: + *[0-9a-f]*: 1d 9e ld\.ub lr,lr\[0x1\] mgl@1371: + *[0-9a-f]*: e9 3f 20 55 ld\.ub pc,r4\[8277\] mgl@1371: + *[0-9a-f]*: f9 35 4a e4 ld\.ub r5,r12\[19172\] mgl@1371: + *[0-9a-f]*: fd 3a 66 eb ld\.ub r10,lr\[26347\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fe e1 00 00 st\.d pc\[0\],r0 mgl@1371: + *[0-9a-f]*: f8 ef ff ff st\.d r12\[-1\],lr mgl@1371: + *[0-9a-f]*: ea e9 80 00 st\.d r5\[-32768\],r8 mgl@1371: + *[0-9a-f]*: e8 e7 7f ff st\.d r4\[32767\],r6 mgl@1371: + *[0-9a-f]*: fc e3 00 01 st\.d lr\[1\],r2 mgl@1371: + *[0-9a-f]*: ea eb 33 90 st\.d r5\[13200\],r10 mgl@1371: + *[0-9a-f]*: ea eb 24 88 st\.d r5\[9352\],r10 mgl@1371: + *[0-9a-f]*: ea e5 7e 75 st\.d r5\[32373\],r4 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: 9f 0f st\.w pc\[0x0\],pc mgl@1371: + *[0-9a-f]*: f9 4c ff ff st\.w r12\[-1\],r12 mgl@1371: + *[0-9a-f]*: eb 45 80 00 st\.w r5\[-32768\],r5 mgl@1371: + *[0-9a-f]*: e9 44 7f ff st\.w r4\[32767\],r4 mgl@1371: + *[0-9a-f]*: fd 4e 00 01 st\.w lr\[1\],lr mgl@1371: + *[0-9a-f]*: fb 47 17 f8 st\.w sp\[6136\],r7 mgl@1371: + *[0-9a-f]*: ed 4c 69 cf st\.w r6\[27087\],r12 mgl@1371: + *[0-9a-f]*: d7 03 nop mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: be 0f st\.h pc\[0x0\],pc mgl@1371: + *[0-9a-f]*: f9 5c ff ff st\.h r12\[-1\],r12 mgl@1371: + *[0-9a-f]*: eb 55 80 00 st\.h r5\[-32768\],r5 mgl@1371: + *[0-9a-f]*: e9 54 7f ff st\.h r4\[32767\],r4 mgl@1371: + *[0-9a-f]*: fd 5e 00 01 st\.h lr\[1\],lr mgl@1371: + *[0-9a-f]*: e9 57 d9 16 st\.h r4\[-9962\],r7 mgl@1371: + *[0-9a-f]*: f3 53 c0 86 st\.h r9\[-16250\],r3 mgl@1371: + *[0-9a-f]*: d7 03 nop mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: be 8f st\.b pc\[0x0\],pc mgl@1371: + *[0-9a-f]*: f9 6c ff ff st\.b r12\[-1\],r12 mgl@1371: + *[0-9a-f]*: eb 65 80 00 st\.b r5\[-32768\],r5 mgl@1371: + *[0-9a-f]*: e9 64 7f ff st\.b r4\[32767\],r4 mgl@1371: + *[0-9a-f]*: bc 9e st\.b lr\[0x1\],lr mgl@1371: + *[0-9a-f]*: f9 66 75 96 st\.b r12\[30102\],r6 mgl@1371: + *[0-9a-f]*: eb 61 71 31 st\.b r5\[28977\],r1 mgl@1371: + *[0-9a-f]*: e1 61 15 5e st\.b r0\[5470\],r1 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 bf 00 00 mfsr pc,0x0 mgl@1371: + *[0-9a-f]*: e1 bc 00 ff mfsr r12,0x3fc mgl@1371: + *[0-9a-f]*: e1 b5 00 80 mfsr r5,0x200 mgl@1371: + *[0-9a-f]*: e1 b4 00 7f mfsr r4,0x1fc mgl@1371: + *[0-9a-f]*: e1 be 00 01 mfsr lr,0x4 mgl@1371: + *[0-9a-f]*: e1 b2 00 ae mfsr r2,0x2b8 mgl@1371: + *[0-9a-f]*: e1 b4 00 41 mfsr r4,0x104 mgl@1371: + *[0-9a-f]*: e1 ba 00 fe mfsr r10,0x3f8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e3 bf 00 00 mtsr 0x0,pc mgl@1371: + *[0-9a-f]*: e3 bc 00 ff mtsr 0x3fc,r12 mgl@1371: + *[0-9a-f]*: e3 b5 00 80 mtsr 0x200,r5 mgl@1371: + *[0-9a-f]*: e3 b4 00 7f mtsr 0x1fc,r4 mgl@1371: + *[0-9a-f]*: e3 be 00 01 mtsr 0x4,lr mgl@1371: + *[0-9a-f]*: e3 ba 00 38 mtsr 0xe0,r10 mgl@1371: + *[0-9a-f]*: e3 bc 00 d1 mtsr 0x344,r12 mgl@1371: + *[0-9a-f]*: e3 b9 00 4c mtsr 0x130,r9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e5 bf 00 00 mfdr pc,0x0 mgl@1371: + *[0-9a-f]*: e5 bc 00 ff mfdr r12,0x3fc mgl@1371: + *[0-9a-f]*: e5 b5 00 80 mfdr r5,0x200 mgl@1371: + *[0-9a-f]*: e5 b4 00 7f mfdr r4,0x1fc mgl@1371: + *[0-9a-f]*: e5 be 00 01 mfdr lr,0x4 mgl@1371: + *[0-9a-f]*: e5 b6 00 e9 mfdr r6,0x3a4 mgl@1371: + *[0-9a-f]*: e5 b5 00 09 mfdr r5,0x24 mgl@1371: + *[0-9a-f]*: e5 b9 00 4b mfdr r9,0x12c mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e7 bf 00 00 mtdr 0x0,pc mgl@1371: + *[0-9a-f]*: e7 bc 00 ff mtdr 0x3fc,r12 mgl@1371: + *[0-9a-f]*: e7 b5 00 80 mtdr 0x200,r5 mgl@1371: + *[0-9a-f]*: e7 b4 00 7f mtdr 0x1fc,r4 mgl@1371: + *[0-9a-f]*: e7 be 00 01 mtdr 0x4,lr mgl@1371: + *[0-9a-f]*: e7 b8 00 2d mtdr 0xb4,r8 mgl@1371: + *[0-9a-f]*: e7 ba 00 b4 mtdr 0x2d0,r10 mgl@1371: + *[0-9a-f]*: e7 be 00 66 mtdr 0x198,lr mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e9 b0 00 00 sleep 0x0 mgl@1371: + *[0-9a-f]*: e9 b0 00 ff sleep 0xff mgl@1371: + *[0-9a-f]*: e9 b0 00 80 sleep 0x80 mgl@1371: + *[0-9a-f]*: e9 b0 00 7f sleep 0x7f mgl@1371: + *[0-9a-f]*: e9 b0 00 01 sleep 0x1 mgl@1371: + *[0-9a-f]*: e9 b0 00 fe sleep 0xfe mgl@1371: + *[0-9a-f]*: e9 b0 00 0f sleep 0xf mgl@1371: + *[0-9a-f]*: e9 b0 00 2b sleep 0x2b mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: eb b0 00 00 sync 0x0 mgl@1371: + *[0-9a-f]*: eb b0 00 ff sync 0xff mgl@1371: + *[0-9a-f]*: eb b0 00 80 sync 0x80 mgl@1371: + *[0-9a-f]*: eb b0 00 7f sync 0x7f mgl@1371: + *[0-9a-f]*: eb b0 00 01 sync 0x1 mgl@1371: + *[0-9a-f]*: eb b0 00 a6 sync 0xa6 mgl@1371: + *[0-9a-f]*: eb b0 00 e6 sync 0xe6 mgl@1371: + *[0-9a-f]*: eb b0 00 b4 sync 0xb4 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ed bf 00 00 bld pc,0x0 mgl@1371: + *[0-9a-f]*: ed bc 00 1f bld r12,0x1f mgl@1371: + *[0-9a-f]*: ed b5 00 10 bld r5,0x10 mgl@1371: + *[0-9a-f]*: ed b4 00 0f bld r4,0xf mgl@1371: + *[0-9a-f]*: ed be 00 01 bld lr,0x1 mgl@1371: + *[0-9a-f]*: ed b9 00 0f bld r9,0xf mgl@1371: + *[0-9a-f]*: ed b0 00 04 bld r0,0x4 mgl@1371: + *[0-9a-f]*: ed be 00 1a bld lr,0x1a mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ef bf 00 00 bst pc,0x0 mgl@1371: + *[0-9a-f]*: ef bc 00 1f bst r12,0x1f mgl@1371: + *[0-9a-f]*: ef b5 00 10 bst r5,0x10 mgl@1371: + *[0-9a-f]*: ef b4 00 0f bst r4,0xf mgl@1371: + *[0-9a-f]*: ef be 00 01 bst lr,0x1 mgl@1371: + *[0-9a-f]*: ef ba 00 1c bst r10,0x1c mgl@1371: + *[0-9a-f]*: ef b0 00 03 bst r0,0x3 mgl@1371: + *[0-9a-f]*: ef bd 00 02 bst sp,0x2 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: f1 bf 00 00 sats pc,0x0 mgl@1371: + *[0-9a-f]*: f1 bc 03 ff sats r12>>0x1f,0x1f mgl@1371: + *[0-9a-f]*: f1 b5 02 10 sats r5>>0x10,0x10 mgl@1371: + *[0-9a-f]*: f1 b4 01 ef sats r4>>0xf,0xf mgl@1371: + *[0-9a-f]*: f1 be 00 21 sats lr>>0x1,0x1 mgl@1371: + *[0-9a-f]*: f1 ba 02 63 sats r10>>0x3,0x13 mgl@1371: + *[0-9a-f]*: f1 ba 03 42 sats r10>>0x2,0x1a mgl@1371: + *[0-9a-f]*: f1 b1 00 34 sats r1>>0x14,0x1 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: f1 bf 04 00 satu pc,0x0 mgl@1371: + *[0-9a-f]*: f1 bc 07 ff satu r12>>0x1f,0x1f mgl@1371: + *[0-9a-f]*: f1 b5 06 10 satu r5>>0x10,0x10 mgl@1371: + *[0-9a-f]*: f1 b4 05 ef satu r4>>0xf,0xf mgl@1371: + *[0-9a-f]*: f1 be 04 21 satu lr>>0x1,0x1 mgl@1371: + *[0-9a-f]*: f1 bf 04 e5 satu pc>>0x5,0x7 mgl@1371: + *[0-9a-f]*: f1 b7 04 a5 satu r7>>0x5,0x5 mgl@1371: + *[0-9a-f]*: f1 b2 06 7a satu r2>>0x1a,0x13 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: f3 bf 00 00 satrnds pc,0x0 mgl@1371: + *[0-9a-f]*: f3 bc 03 ff satrnds r12>>0x1f,0x1f mgl@1371: + *[0-9a-f]*: f3 b5 02 10 satrnds r5>>0x10,0x10 mgl@1371: + *[0-9a-f]*: f3 b4 01 ef satrnds r4>>0xf,0xf mgl@1371: + *[0-9a-f]*: f3 be 00 21 satrnds lr>>0x1,0x1 mgl@1371: + *[0-9a-f]*: f3 b0 02 75 satrnds r0>>0x15,0x13 mgl@1371: + *[0-9a-f]*: f3 bd 00 40 satrnds sp,0x2 mgl@1371: + *[0-9a-f]*: f3 b7 03 a6 satrnds r7>>0x6,0x1d mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: f3 bf 04 00 satrndu pc,0x0 mgl@1371: + *[0-9a-f]*: f3 bc 07 ff satrndu r12>>0x1f,0x1f mgl@1371: + *[0-9a-f]*: f3 b5 06 10 satrndu r5>>0x10,0x10 mgl@1371: + *[0-9a-f]*: f3 b4 05 ef satrndu r4>>0xf,0xf mgl@1371: + *[0-9a-f]*: f3 be 04 21 satrndu lr>>0x1,0x1 mgl@1371: + *[0-9a-f]*: f3 bc 07 40 satrndu r12,0x1a mgl@1371: + *[0-9a-f]*: f3 b4 04 75 satrndu r4>>0x15,0x3 mgl@1371: + *[0-9a-f]*: f3 ba 06 03 satrndu r10>>0x3,0x10 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: f5 bf 00 00 subfeq pc,0 mgl@1371: + *[0-9a-f]*: f5 bc 0f ff subfal r12,-1 mgl@1371: + *[0-9a-f]*: f5 b5 08 80 subfls r5,-128 mgl@1371: + *[0-9a-f]*: f5 b4 07 7f subfpl r4,127 mgl@1371: + *[0-9a-f]*: f5 be 01 01 subfne lr,1 mgl@1371: + *[0-9a-f]*: f5 ba 08 08 subfls r10,8 mgl@1371: + *[0-9a-f]*: f5 bb 0d 63 subfvc r11,99 mgl@1371: + *[0-9a-f]*: f5 b2 0c 49 subfvs r2,73 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: f7 bf 00 00 subeq pc,0 mgl@1371: + *[0-9a-f]*: f7 bc 0f ff subal r12,-1 mgl@1371: + *[0-9a-f]*: f7 b5 08 80 subls r5,-128 mgl@1371: + *[0-9a-f]*: f7 b4 07 7f subpl r4,127 mgl@1371: + *[0-9a-f]*: f7 be 01 01 subne lr,1 mgl@1371: + *[0-9a-f]*: f7 bc 08 76 subls r12,118 mgl@1371: + *[0-9a-f]*: f7 be 0d f4 subvc lr,-12 mgl@1371: + *[0-9a-f]*: f7 b4 06 f3 submi r4,-13 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: f9 bf 00 00 moveq pc,0 mgl@1371: + *[0-9a-f]*: f9 bc 0f ff moval r12,-1 mgl@1371: + *[0-9a-f]*: f9 b5 08 80 movls r5,-128 mgl@1371: + *[0-9a-f]*: f9 b4 07 7f movpl r4,127 mgl@1371: + *[0-9a-f]*: f9 be 01 01 movne lr,1 mgl@1371: + *[0-9a-f]*: f9 b3 05 86 movlt r3,-122 mgl@1371: + *[0-9a-f]*: f9 b8 0d 02 movvc r8,2 mgl@1371: + *[0-9a-f]*: f9 b7 01 91 movne r7,-111 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e0 0f 18 00 cp\.b pc,r0 mgl@1371: + *[0-9a-f]*: fe 00 18 00 cp\.b r0,pc mgl@1371: + *[0-9a-f]*: f0 07 18 00 cp\.b r7,r8 mgl@1371: + *[0-9a-f]*: ee 08 18 00 cp\.b r8,r7 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e0 0f 19 00 cp\.h pc,r0 mgl@1371: + *[0-9a-f]*: fe 00 19 00 cp\.h r0,pc mgl@1371: + *[0-9a-f]*: f0 07 19 00 cp\.h r7,r8 mgl@1371: + *[0-9a-f]*: ee 08 19 00 cp\.h r8,r7 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 cf 00 7e ldm pc,r1-r6 mgl@1371: + *[0-9a-f]*: e1 cc ff ff ldm r12,r0-pc mgl@1371: + *[0-9a-f]*: e1 c5 80 00 ldm r5,pc mgl@1371: + *[0-9a-f]*: e1 c4 7f ff ldm r4,r0-lr mgl@1371: + *[0-9a-f]*: e1 ce 00 01 ldm lr,r0 mgl@1371: + *[0-9a-f]*: e1 c9 40 22 ldm r9,r1,r5,lr mgl@1371: + *[0-9a-f]*: e1 cb 81 ec ldm r11,r2-r3,r5-r8,pc mgl@1371: + *[0-9a-f]*: e1 c6 a2 09 ldm r6,r0,r3,r9,sp,pc mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e3 cf 03 c0 ldm pc\+\+,r6-r9 mgl@1371: + *[0-9a-f]*: e3 cc ff ff ldm r12\+\+,r0-pc mgl@1371: + *[0-9a-f]*: e3 c5 80 00 ldm r5\+\+,pc mgl@1371: + *[0-9a-f]*: e3 c4 7f ff ldm r4\+\+,r0-lr mgl@1371: + *[0-9a-f]*: e3 ce 00 01 ldm lr\+\+,r0 mgl@1371: + *[0-9a-f]*: e3 cc d5 38 ldm r12\+\+,r3-r5,r8,r10,r12,lr-pc mgl@1371: + *[0-9a-f]*: e3 ca c0 74 ldm r10\+\+,r2,r4-r6,lr-pc mgl@1371: + *[0-9a-f]*: e3 c6 7e 1a ldm r6\+\+,r1,r3-r4,r9-lr mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e5 cf 01 80 ldmts pc,r7-r8 mgl@1371: + *[0-9a-f]*: e5 cc ff ff ldmts r12,r0-pc mgl@1371: + *[0-9a-f]*: e5 c5 80 00 ldmts r5,pc mgl@1371: + *[0-9a-f]*: e5 c4 7f ff ldmts r4,r0-lr mgl@1371: + *[0-9a-f]*: e5 ce 00 01 ldmts lr,r0 mgl@1371: + *[0-9a-f]*: e5 c0 18 06 ldmts r0,r1-r2,r11-r12 mgl@1371: + *[0-9a-f]*: e5 ce 61 97 ldmts lr,r0-r2,r4,r7-r8,sp-lr mgl@1371: + *[0-9a-f]*: e5 cc c2 3b ldmts r12,r0-r1,r3-r5,r9,lr-pc mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e7 cf 02 00 ldmts pc\+\+,r9 mgl@1371: + *[0-9a-f]*: e7 cc ff ff ldmts r12\+\+,r0-pc mgl@1371: + *[0-9a-f]*: e7 c5 80 00 ldmts r5\+\+,pc mgl@1371: + *[0-9a-f]*: e7 c4 7f ff ldmts r4\+\+,r0-lr mgl@1371: + *[0-9a-f]*: e7 ce 00 01 ldmts lr\+\+,r0 mgl@1371: + *[0-9a-f]*: e7 cd 0a bd ldmts sp\+\+,r0,r2-r5,r7,r9,r11 mgl@1371: + *[0-9a-f]*: e7 c5 0c 8e ldmts r5\+\+,r1-r3,r7,r10-r11 mgl@1371: + *[0-9a-f]*: e7 c8 a1 9c ldmts r8\+\+,r2-r4,r7-r8,sp,pc mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e9 cf 00 80 stm pc,r7 mgl@1371: + *[0-9a-f]*: e9 cc ff ff stm r12,r0-pc mgl@1371: + *[0-9a-f]*: e9 c5 80 00 stm r5,pc mgl@1371: + *[0-9a-f]*: e9 c4 7f ff stm r4,r0-lr mgl@1371: + *[0-9a-f]*: e9 ce 00 01 stm lr,r0 mgl@1371: + *[0-9a-f]*: e9 cd 49 2c stm sp,r2-r3,r5,r8,r11,lr mgl@1371: + *[0-9a-f]*: e9 c4 4c 5f stm r4,r0-r4,r6,r10-r11,lr mgl@1371: + *[0-9a-f]*: e9 c9 f2 22 stm r9,r1,r5,r9,r12-pc mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: eb cf 00 70 stm --pc,r4-r6 mgl@1371: + *[0-9a-f]*: eb cc ff ff stm --r12,r0-pc mgl@1371: + *[0-9a-f]*: eb c5 80 00 stm --r5,pc mgl@1371: + *[0-9a-f]*: eb c4 7f ff stm --r4,r0-lr mgl@1371: + *[0-9a-f]*: eb ce 00 01 stm --lr,r0 mgl@1371: + *[0-9a-f]*: eb cb fb f1 stm --r11,r0,r4-r9,r11-pc mgl@1371: + *[0-9a-f]*: eb cb 56 09 stm --r11,r0,r3,r9-r10,r12,lr mgl@1371: + *[0-9a-f]*: eb c6 63 04 stm --r6,r2,r8-r9,sp-lr mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ed cf 01 00 stmts pc,r8 mgl@1371: + *[0-9a-f]*: ed cc ff ff stmts r12,r0-pc mgl@1371: + *[0-9a-f]*: ed c5 80 00 stmts r5,pc mgl@1371: + *[0-9a-f]*: ed c4 7f ff stmts r4,r0-lr mgl@1371: + *[0-9a-f]*: ed ce 00 01 stmts lr,r0 mgl@1371: + *[0-9a-f]*: ed c1 c6 5b stmts r1,r0-r1,r3-r4,r6,r9-r10,lr-pc mgl@1371: + *[0-9a-f]*: ed c3 1d c1 stmts r3,r0,r6-r8,r10-r12 mgl@1371: + *[0-9a-f]*: ed cb d6 d1 stmts r11,r0,r4,r6-r7,r9-r10,r12,lr-pc mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ef cf 01 c0 stmts --pc,r6-r8 mgl@1371: + *[0-9a-f]*: ef cc ff ff stmts --r12,r0-pc mgl@1371: + *[0-9a-f]*: ef c5 80 00 stmts --r5,pc mgl@1371: + *[0-9a-f]*: ef c4 7f ff stmts --r4,r0-lr mgl@1371: + *[0-9a-f]*: ef ce 00 01 stmts --lr,r0 mgl@1371: + *[0-9a-f]*: ef c2 36 19 stmts --r2,r0,r3-r4,r9-r10,r12-sp mgl@1371: + *[0-9a-f]*: ef c3 c0 03 stmts --r3,r0-r1,lr-pc mgl@1371: + *[0-9a-f]*: ef c0 44 7d stmts --r0,r0,r2-r6,r10,lr mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff df 00 00 ldins\.h pc:b,pc\[0\] mgl@1371: + *[0-9a-f]*: f9 dc 1f ff ldins\.h r12:t,r12\[-2\] mgl@1371: + *[0-9a-f]*: eb d5 18 00 ldins\.h r5:t,r5\[-4096\] mgl@1371: + *[0-9a-f]*: e9 d4 07 ff ldins\.h r4:b,r4\[4094\] mgl@1371: + *[0-9a-f]*: fd de 10 01 ldins\.h lr:t,lr\[2\] mgl@1371: + *[0-9a-f]*: fd d0 13 c5 ldins\.h r0:t,lr\[1930\] mgl@1371: + *[0-9a-f]*: ef d3 0e f5 ldins\.h r3:b,r7\[-534\] mgl@1371: + *[0-9a-f]*: f9 d2 0b 9a ldins\.h r2:b,r12\[-2252\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff df 40 00 ldins\.b pc:b,pc\[0\] mgl@1371: + *[0-9a-f]*: f9 dc 7f ff ldins\.b r12:t,r12\[-1\] mgl@1371: + *[0-9a-f]*: eb d5 68 00 ldins\.b r5:u,r5\[-2048\] mgl@1371: + *[0-9a-f]*: e9 d4 57 ff ldins\.b r4:l,r4\[2047\] mgl@1371: + *[0-9a-f]*: fd de 50 01 ldins\.b lr:l,lr\[1\] mgl@1371: + *[0-9a-f]*: e9 d6 7d 6a ldins\.b r6:t,r4\[-662\] mgl@1371: + *[0-9a-f]*: e3 d5 4f 69 ldins\.b r5:b,r1\[-151\] mgl@1371: + *[0-9a-f]*: f7 da 78 7d ldins\.b r10:t,r11\[-1923\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff df 20 00 ldswp\.sh pc,pc\[0\] mgl@1371: + *[0-9a-f]*: f9 dc 2f ff ldswp\.sh r12,r12\[-2\] mgl@1371: + *[0-9a-f]*: eb d5 28 00 ldswp\.sh r5,r5\[-4096\] mgl@1371: + *[0-9a-f]*: e9 d4 27 ff ldswp\.sh r4,r4\[4094\] mgl@1371: + *[0-9a-f]*: fd de 20 01 ldswp\.sh lr,lr\[2\] mgl@1371: + *[0-9a-f]*: f5 d9 27 84 ldswp\.sh r9,r10\[3848\] mgl@1371: + *[0-9a-f]*: f9 d4 2c 04 ldswp\.sh r4,r12\[-2040\] mgl@1371: + *[0-9a-f]*: e5 da 26 08 ldswp\.sh r10,r2\[3088\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff df 30 00 ldswp\.uh pc,pc\[0\] mgl@1371: + *[0-9a-f]*: f9 dc 3f ff ldswp\.uh r12,r12\[-2\] mgl@1371: + *[0-9a-f]*: eb d5 38 00 ldswp\.uh r5,r5\[-4096\] mgl@1371: + *[0-9a-f]*: e9 d4 37 ff ldswp\.uh r4,r4\[4094\] mgl@1371: + *[0-9a-f]*: fd de 30 01 ldswp\.uh lr,lr\[2\] mgl@1371: + *[0-9a-f]*: f3 d4 37 46 ldswp\.uh r4,r9\[3724\] mgl@1371: + *[0-9a-f]*: fb de 3c bc ldswp\.uh lr,sp\[-1672\] mgl@1371: + *[0-9a-f]*: f9 d8 38 7d ldswp\.uh r8,r12\[-3846\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff df 80 00 ldswp\.w pc,pc\[0\] mgl@1371: + *[0-9a-f]*: f9 dc 8f ff ldswp\.w r12,r12\[-4\] mgl@1371: + *[0-9a-f]*: eb d5 88 00 ldswp\.w r5,r5\[-8192\] mgl@1371: + *[0-9a-f]*: e9 d4 87 ff ldswp\.w r4,r4\[8188\] mgl@1371: + *[0-9a-f]*: fd de 80 01 ldswp\.w lr,lr\[4\] mgl@1371: + *[0-9a-f]*: ef dd 81 d1 ldswp\.w sp,r7\[1860\] mgl@1371: + *[0-9a-f]*: eb df 8c c1 ldswp\.w pc,r5\[-3324\] mgl@1371: + *[0-9a-f]*: f5 dc 8c c8 ldswp\.w r12,r10\[-3296\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff df 90 00 stswp\.h pc\[0\],pc mgl@1371: + *[0-9a-f]*: f9 dc 9f ff stswp\.h r12\[-2\],r12 mgl@1371: + *[0-9a-f]*: eb d5 98 00 stswp\.h r5\[-4096\],r5 mgl@1371: + *[0-9a-f]*: e9 d4 97 ff stswp\.h r4\[4094\],r4 mgl@1371: + *[0-9a-f]*: fd de 90 01 stswp\.h lr\[2\],lr mgl@1371: + *[0-9a-f]*: ef da 90 20 stswp\.h r7\[64\],r10 mgl@1371: + *[0-9a-f]*: f5 d2 95 e8 stswp\.h r10\[3024\],r2 mgl@1371: + *[0-9a-f]*: e1 da 9b 74 stswp\.h r0\[-2328\],r10 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff df a0 00 stswp\.w pc\[0\],pc mgl@1371: + *[0-9a-f]*: f9 dc af ff stswp\.w r12\[-4\],r12 mgl@1371: + *[0-9a-f]*: eb d5 a8 00 stswp\.w r5\[-8192\],r5 mgl@1371: + *[0-9a-f]*: e9 d4 a7 ff stswp\.w r4\[8188\],r4 mgl@1371: + *[0-9a-f]*: fd de a0 01 stswp\.w lr\[4\],lr mgl@1371: + *[0-9a-f]*: ff d8 a1 21 stswp\.w pc\[1156\],r8 mgl@1371: + *[0-9a-f]*: fb da a7 ce stswp\.w sp\[7992\],r10 mgl@1371: + *[0-9a-f]*: f1 d5 ae db stswp\.w r8\[-1172\],r5 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff ef 00 0f and pc,pc,pc mgl@1371: + *[0-9a-f]*: f9 ec 01 fc and r12,r12,r12<<0x1f mgl@1371: + *[0-9a-f]*: eb e5 01 05 and r5,r5,r5<<0x10 mgl@1371: + *[0-9a-f]*: e9 e4 00 f4 and r4,r4,r4<<0xf mgl@1371: + *[0-9a-f]*: fd ee 00 1e and lr,lr,lr<<0x1 mgl@1371: + *[0-9a-f]*: e5 e1 00 1a and r10,r2,r1<<0x1 mgl@1371: + *[0-9a-f]*: f1 eb 01 bc and r12,r8,r11<<0x1b mgl@1371: + *[0-9a-f]*: ef e0 00 3a and r10,r7,r0<<0x3 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff ef 02 0f and pc,pc,pc mgl@1371: + *[0-9a-f]*: f9 ec 03 fc and r12,r12,r12>>0x1f mgl@1371: + *[0-9a-f]*: eb e5 03 05 and r5,r5,r5>>0x10 mgl@1371: + *[0-9a-f]*: e9 e4 02 f4 and r4,r4,r4>>0xf mgl@1371: + *[0-9a-f]*: fd ee 02 1e and lr,lr,lr>>0x1 mgl@1371: + *[0-9a-f]*: f1 e7 03 1c and r12,r8,r7>>0x11 mgl@1371: + *[0-9a-f]*: e9 e9 03 4f and pc,r4,r9>>0x14 mgl@1371: + *[0-9a-f]*: f3 ea 02 ca and r10,r9,r10>>0xc mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff ef 10 0f or pc,pc,pc mgl@1371: + *[0-9a-f]*: f9 ec 11 fc or r12,r12,r12<<0x1f mgl@1371: + *[0-9a-f]*: eb e5 11 05 or r5,r5,r5<<0x10 mgl@1371: + *[0-9a-f]*: e9 e4 10 f4 or r4,r4,r4<<0xf mgl@1371: + *[0-9a-f]*: fd ee 10 1e or lr,lr,lr<<0x1 mgl@1371: + *[0-9a-f]*: fb eb 11 d8 or r8,sp,r11<<0x1d mgl@1371: + *[0-9a-f]*: f3 e2 11 cf or pc,r9,r2<<0x1c mgl@1371: + *[0-9a-f]*: e3 e2 10 35 or r5,r1,r2<<0x3 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff ef 12 0f or pc,pc,pc mgl@1371: + *[0-9a-f]*: f9 ec 13 fc or r12,r12,r12>>0x1f mgl@1371: + *[0-9a-f]*: eb e5 13 05 or r5,r5,r5>>0x10 mgl@1371: + *[0-9a-f]*: e9 e4 12 f4 or r4,r4,r4>>0xf mgl@1371: + *[0-9a-f]*: fd ee 12 1e or lr,lr,lr>>0x1 mgl@1371: + *[0-9a-f]*: fb ed 12 21 or r1,sp,sp>>0x2 mgl@1371: + *[0-9a-f]*: e3 e1 13 d0 or r0,r1,r1>>0x1d mgl@1371: + *[0-9a-f]*: f9 e8 12 84 or r4,r12,r8>>0x8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff ef 20 0f eor pc,pc,pc mgl@1371: + *[0-9a-f]*: f9 ec 21 fc eor r12,r12,r12<<0x1f mgl@1371: + *[0-9a-f]*: eb e5 21 05 eor r5,r5,r5<<0x10 mgl@1371: + *[0-9a-f]*: e9 e4 20 f4 eor r4,r4,r4<<0xf mgl@1371: + *[0-9a-f]*: fd ee 20 1e eor lr,lr,lr<<0x1 mgl@1371: + *[0-9a-f]*: f3 e4 20 ba eor r10,r9,r4<<0xb mgl@1371: + *[0-9a-f]*: e1 e1 21 f4 eor r4,r0,r1<<0x1f mgl@1371: + *[0-9a-f]*: e5 ec 20 d6 eor r6,r2,r12<<0xd mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff ef 22 0f eor pc,pc,pc mgl@1371: + *[0-9a-f]*: f9 ec 23 fc eor r12,r12,r12>>0x1f mgl@1371: + *[0-9a-f]*: eb e5 23 05 eor r5,r5,r5>>0x10 mgl@1371: + *[0-9a-f]*: e9 e4 22 f4 eor r4,r4,r4>>0xf mgl@1371: + *[0-9a-f]*: fd ee 22 1e eor lr,lr,lr>>0x1 mgl@1371: + *[0-9a-f]*: eb e5 23 65 eor r5,r5,r5>>0x16 mgl@1371: + *[0-9a-f]*: e3 ee 22 3a eor r10,r1,lr>>0x3 mgl@1371: + *[0-9a-f]*: fd ed 23 a7 eor r7,lr,sp>>0x1a mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff ef 8f 0f sthh\.w pc\[pc\],pc:b,pc:b mgl@1371: + *[0-9a-f]*: f9 ec bc 3c sthh\.w r12\[r12<<0x3\],r12:t,r12:t mgl@1371: + *[0-9a-f]*: eb e5 b5 25 sthh\.w r5\[r5<<0x2\],r5:t,r5:t mgl@1371: + *[0-9a-f]*: e9 e4 84 14 sthh\.w r4\[r4<<0x1\],r4:b,r4:b mgl@1371: + *[0-9a-f]*: fd ee be 1e sthh\.w lr\[lr<<0x1\],lr:t,lr:t mgl@1371: + *[0-9a-f]*: e3 ec b6 3d sthh\.w sp\[r6<<0x3\],r1:t,r12:t mgl@1371: + *[0-9a-f]*: f3 e9 b6 06 sthh\.w r6\[r6\],r9:t,r9:t mgl@1371: + *[0-9a-f]*: e1 eb 93 0a sthh\.w r10\[r3\],r0:b,r11:t mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff ef c0 0f sthh\.w pc\[0x0\],pc:b,pc:b mgl@1371: + *[0-9a-f]*: f9 ec ff fc sthh\.w r12\[0x3fc\],r12:t,r12:t mgl@1371: + *[0-9a-f]*: eb e5 f8 05 sthh\.w r5\[0x200\],r5:t,r5:t mgl@1371: + *[0-9a-f]*: e9 e4 c7 f4 sthh\.w r4\[0x1fc\],r4:b,r4:b mgl@1371: + *[0-9a-f]*: fd ee f0 1e sthh\.w lr\[0x4\],lr:t,lr:t mgl@1371: + *[0-9a-f]*: f3 e0 e6 54 sthh\.w r4\[0x194\],r9:t,r0:b mgl@1371: + *[0-9a-f]*: e5 ea e5 78 sthh\.w r8\[0x15c\],r2:t,r10:b mgl@1371: + *[0-9a-f]*: f3 e2 c2 bd sthh\.w sp\[0xac\],r9:b,r2:b mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a0 00 00 cop cp0,cr0,cr0,cr0,0x0 mgl@1371: + *[0-9a-f]*: e7 af ff ff cop cp7,cr15,cr15,cr15,0x7f mgl@1371: + *[0-9a-f]*: e3 a8 75 55 cop cp3,cr5,cr5,cr5,0x31 mgl@1371: + *[0-9a-f]*: e3 a8 44 44 cop cp2,cr4,cr4,cr4,0x30 mgl@1371: + *[0-9a-f]*: e5 ad a8 37 cop cp5,cr8,cr3,cr7,0x5a mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e9 a0 00 00 ldc\.w cp0,cr0,r0\[0x0\] mgl@1371: + *[0-9a-f]*: e9 af ef ff ldc\.w cp7,cr15,pc\[0x3fc\] mgl@1371: + *[0-9a-f]*: e9 a5 65 80 ldc\.w cp3,cr5,r5\[0x200\] mgl@1371: + *[0-9a-f]*: e9 a4 44 7f ldc\.w cp2,cr4,r4\[0x1fc\] mgl@1371: + *[0-9a-f]*: e9 ad 89 24 ldc\.w cp4,cr9,sp\[0x90\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ef a0 00 40 ldc\.w cp0,cr0,--r0 mgl@1371: + *[0-9a-f]*: ef af ef 40 ldc\.w cp7,cr15,--pc mgl@1371: + *[0-9a-f]*: ef a5 65 40 ldc\.w cp3,cr5,--r5 mgl@1371: + *[0-9a-f]*: ef a4 44 40 ldc\.w cp2,cr4,--r4 mgl@1371: + *[0-9a-f]*: ef ad 89 40 ldc\.w cp4,cr9,--sp mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ef a0 10 00 ldc\.w cp0,cr0,r0\[r0\] mgl@1371: + *[0-9a-f]*: ef af ff 3f ldc\.w cp7,cr15,pc\[pc<<0x3\] mgl@1371: + *[0-9a-f]*: ef a5 75 24 ldc\.w cp3,cr5,r5\[r4<<0x2\] mgl@1371: + *[0-9a-f]*: ef a4 54 13 ldc\.w cp2,cr4,r4\[r3<<0x1\] mgl@1371: + *[0-9a-f]*: ef ad 99 0c ldc\.w cp4,cr9,sp\[r12\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e9 a0 10 00 ldc\.d cp0,cr0,r0\[0x0\] mgl@1371: + *[0-9a-f]*: e9 af fe ff ldc\.d cp7,cr14,pc\[0x3fc\] mgl@1371: + *[0-9a-f]*: e9 a5 76 80 ldc\.d cp3,cr6,r5\[0x200\] mgl@1371: + *[0-9a-f]*: e9 a4 54 7f ldc\.d cp2,cr4,r4\[0x1fc\] mgl@1371: + *[0-9a-f]*: e9 ad 98 24 ldc\.d cp4,cr8,sp\[0x90\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ef a0 00 50 ldc\.d cp0,cr0,--r0 mgl@1371: + *[0-9a-f]*: ef af ee 50 ldc\.d cp7,cr14,--pc mgl@1371: + *[0-9a-f]*: ef a5 66 50 ldc\.d cp3,cr6,--r5 mgl@1371: + *[0-9a-f]*: ef a4 44 50 ldc\.d cp2,cr4,--r4 mgl@1371: + *[0-9a-f]*: ef ad 88 50 ldc\.d cp4,cr8,--sp mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ef a0 10 40 ldc\.d cp0,cr0,r0\[r0\] mgl@1371: + *[0-9a-f]*: ef af fe 7f ldc\.d cp7,cr14,pc\[pc<<0x3\] mgl@1371: + *[0-9a-f]*: ef a5 76 64 ldc\.d cp3,cr6,r5\[r4<<0x2\] mgl@1371: + *[0-9a-f]*: ef a4 54 53 ldc\.d cp2,cr4,r4\[r3<<0x1\] mgl@1371: + *[0-9a-f]*: ef ad 98 4c ldc\.d cp4,cr8,sp\[r12\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: eb a0 00 00 stc\.w cp0,r0\[0x0\],cr0 mgl@1371: + *[0-9a-f]*: eb af ef ff stc\.w cp7,pc\[0x3fc\],cr15 mgl@1371: + *[0-9a-f]*: eb a5 65 80 stc\.w cp3,r5\[0x200\],cr5 mgl@1371: + *[0-9a-f]*: eb a4 44 7f stc\.w cp2,r4\[0x1fc\],cr4 mgl@1371: + *[0-9a-f]*: eb ad 89 24 stc\.w cp4,sp\[0x90\],cr9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ef a0 00 60 stc\.w cp0,r0\+\+,cr0 mgl@1371: + *[0-9a-f]*: ef af ef 60 stc\.w cp7,pc\+\+,cr15 mgl@1371: + *[0-9a-f]*: ef a5 65 60 stc\.w cp3,r5\+\+,cr5 mgl@1371: + *[0-9a-f]*: ef a4 44 60 stc\.w cp2,r4\+\+,cr4 mgl@1371: + *[0-9a-f]*: ef ad 89 60 stc\.w cp4,sp\+\+,cr9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ef a0 10 80 stc\.w cp0,r0\[r0\],cr0 mgl@1371: + *[0-9a-f]*: ef af ff bf stc\.w cp7,pc\[pc<<0x3\],cr15 mgl@1371: + *[0-9a-f]*: ef a5 75 a4 stc\.w cp3,r5\[r4<<0x2\],cr5 mgl@1371: + *[0-9a-f]*: ef a4 54 93 stc\.w cp2,r4\[r3<<0x1\],cr4 mgl@1371: + *[0-9a-f]*: ef ad 99 8c stc\.w cp4,sp\[r12\],cr9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: eb a0 10 00 stc\.d cp0,r0\[0x0\],cr0 mgl@1371: + *[0-9a-f]*: eb af fe ff stc\.d cp7,pc\[0x3fc\],cr14 mgl@1371: + *[0-9a-f]*: eb a5 76 80 stc\.d cp3,r5\[0x200\],cr6 mgl@1371: + *[0-9a-f]*: eb a4 54 7f stc\.d cp2,r4\[0x1fc\],cr4 mgl@1371: + *[0-9a-f]*: eb ad 98 24 stc\.d cp4,sp\[0x90\],cr8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ef a0 00 70 stc\.d cp0,r0\+\+,cr0 mgl@1371: + *[0-9a-f]*: ef af ee 70 stc\.d cp7,pc\+\+,cr14 mgl@1371: + *[0-9a-f]*: ef a5 66 70 stc\.d cp3,r5\+\+,cr6 mgl@1371: + *[0-9a-f]*: ef a4 44 70 stc\.d cp2,r4\+\+,cr4 mgl@1371: + *[0-9a-f]*: ef ad 88 70 stc\.d cp4,sp\+\+,cr8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ef a0 10 c0 stc\.d cp0,r0\[r0\],cr0 mgl@1371: + *[0-9a-f]*: ef af fe ff stc\.d cp7,pc\[pc<<0x3\],cr14 mgl@1371: + *[0-9a-f]*: ef a5 76 e4 stc\.d cp3,r5\[r4<<0x2\],cr6 mgl@1371: + *[0-9a-f]*: ef a4 54 d3 stc\.d cp2,r4\[r3<<0x1\],cr4 mgl@1371: + *[0-9a-f]*: ef ad 98 cc stc\.d cp4,sp\[r12\],cr8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: f1 a0 00 00 ldc0\.w cr0,r0\[0x0\] mgl@1371: + *[0-9a-f]*: f1 af ff ff ldc0\.w cr15,pc\[0x3ffc\] mgl@1371: + *[0-9a-f]*: f1 a5 85 00 ldc0\.w cr5,r5\[0x2000\] mgl@1371: + *[0-9a-f]*: f1 a4 74 ff ldc0\.w cr4,r4\[0x1ffc\] mgl@1371: + *[0-9a-f]*: f1 ad 09 93 ldc0\.w cr9,sp\[0x24c\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: f3 a0 00 00 ldc0\.d cr0,r0\[0x0\] mgl@1371: + *[0-9a-f]*: f3 af fe ff ldc0\.d cr14,pc\[0x3ffc\] mgl@1371: + *[0-9a-f]*: f3 a5 86 00 ldc0\.d cr6,r5\[0x2000\] mgl@1371: + *[0-9a-f]*: f3 a4 74 ff ldc0\.d cr4,r4\[0x1ffc\] mgl@1371: + *[0-9a-f]*: f3 ad 08 93 ldc0\.d cr8,sp\[0x24c\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: f5 a0 00 00 stc0\.w r0\[0x0\],cr0 mgl@1371: + *[0-9a-f]*: f5 af ff ff stc0\.w pc\[0x3ffc\],cr15 mgl@1371: + *[0-9a-f]*: f5 a5 85 00 stc0\.w r5\[0x2000\],cr5 mgl@1371: + *[0-9a-f]*: f5 a4 74 ff stc0\.w r4\[0x1ffc\],cr4 mgl@1371: + *[0-9a-f]*: f5 ad 09 93 stc0\.w sp\[0x24c\],cr9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: f7 a0 00 00 stc0\.d r0\[0x0\],cr0 mgl@1371: + *[0-9a-f]*: f7 af fe ff stc0\.d pc\[0x3ffc\],cr14 mgl@1371: + *[0-9a-f]*: f7 a5 86 00 stc0\.d r5\[0x2000\],cr6 mgl@1371: + *[0-9a-f]*: f7 a4 74 ff stc0\.d r4\[0x1ffc\],cr4 mgl@1371: + *[0-9a-f]*: f7 ad 08 93 stc0\.d sp\[0x24c\],cr8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: f6 10 00 00 memc 0,0x0 mgl@1371: + *[0-9a-f]*: f6 1f ff ff memc -4,0x1f mgl@1371: + *[0-9a-f]*: f6 18 40 00 memc -65536,0x10 mgl@1371: + *[0-9a-f]*: f6 17 bf ff memc 65532,0xf mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: f8 10 00 00 mems 0,0x0 mgl@1371: + *[0-9a-f]*: f8 1f ff ff mems -4,0x1f mgl@1371: + *[0-9a-f]*: f8 18 40 00 mems -65536,0x10 mgl@1371: + *[0-9a-f]*: f8 17 bf ff mems 65532,0xf mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fa 10 00 00 memt 0,0x0 mgl@1371: + *[0-9a-f]*: fa 1f ff ff memt -4,0x1f mgl@1371: + *[0-9a-f]*: fa 18 40 00 memt -65536,0x10 mgl@1371: + *[0-9a-f]*: fa 17 bf ff memt 65532,0xf mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 70 00 00 stcond r0\[0\],r0 mgl@1371: + *[0-9a-f]*: ff 7f ff ff stcond pc\[-1\],pc mgl@1371: + *[0-9a-f]*: f1 77 80 00 stcond r8\[-32768\],r7 mgl@1371: + *[0-9a-f]*: ef 78 7f ff stcond r7\[32767\],r8 mgl@1371: + *[0-9a-f]*: eb 7a 12 34 stcond r5\[4660\],r10 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ed af 00 ff ldcm\.w cp0,pc,cr0-cr7 mgl@1371: + *[0-9a-f]*: ed a0 e0 01 ldcm\.w cp7,r0,cr0 mgl@1371: + *[0-9a-f]*: ed a4 90 7f ldcm\.w cp4,r4\+\+,cr0-cr6 mgl@1371: + *[0-9a-f]*: ed a7 60 80 ldcm\.w cp3,r7,cr7 mgl@1371: + *[0-9a-f]*: ed ac 30 72 ldcm\.w cp1,r12\+\+,cr1,cr4-cr6 mgl@1371: + *[0-9a-f]*: ed af 01 ff ldcm\.w cp0,pc,cr8-cr15 mgl@1371: + *[0-9a-f]*: ed a0 e1 01 ldcm\.w cp7,r0,cr8 mgl@1371: + *[0-9a-f]*: ed a4 91 7f ldcm\.w cp4,r4\+\+,cr8-cr14 mgl@1371: + *[0-9a-f]*: ed a7 61 80 ldcm\.w cp3,r7,cr15 mgl@1371: + *[0-9a-f]*: ed ac 31 72 ldcm\.w cp1,r12\+\+,cr9,cr12-cr14 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ed af 04 ff ldcm\.d cp0,pc,cr0-cr15 mgl@1371: + *[0-9a-f]*: ed a0 e4 01 ldcm\.d cp7,r0,cr0-cr1 mgl@1371: + *[0-9a-f]*: ed a4 94 7f ldcm\.d cp4,r4\+\+,cr0-cr13 mgl@1371: + *[0-9a-f]*: ed a7 64 80 ldcm\.d cp3,r7,cr14-cr15 mgl@1371: + *[0-9a-f]*: ed ac 54 93 ldcm\.d cp2,r12\+\+,cr0-cr3,cr8-cr9,cr14-cr15 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ed af 02 ff stcm\.w cp0,pc,cr0-cr7 mgl@1371: + *[0-9a-f]*: ed a0 e2 01 stcm\.w cp7,r0,cr0 mgl@1371: + *[0-9a-f]*: ed a4 92 7f stcm\.w cp4,--r4,cr0-cr6 mgl@1371: + *[0-9a-f]*: ed a7 62 80 stcm\.w cp3,r7,cr7 mgl@1371: + *[0-9a-f]*: ed ac 32 72 stcm\.w cp1,--r12,cr1,cr4-cr6 mgl@1371: + *[0-9a-f]*: ed af 03 ff stcm\.w cp0,pc,cr8-cr15 mgl@1371: + *[0-9a-f]*: ed a0 e3 01 stcm\.w cp7,r0,cr8 mgl@1371: + *[0-9a-f]*: ed a4 93 7f stcm\.w cp4,--r4,cr8-cr14 mgl@1371: + *[0-9a-f]*: ed a7 63 80 stcm\.w cp3,r7,cr15 mgl@1371: + *[0-9a-f]*: ed ac 33 72 stcm\.w cp1,--r12,cr9,cr12-cr14 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ed af 05 ff stcm\.d cp0,pc,cr0-cr15 mgl@1371: + *[0-9a-f]*: ed a0 e5 01 stcm\.d cp7,r0,cr0-cr1 mgl@1371: + *[0-9a-f]*: ed a4 95 7f stcm\.d cp4,--r4,cr0-cr13 mgl@1371: + *[0-9a-f]*: ed a7 65 80 stcm\.d cp3,r7,cr14-cr15 mgl@1371: + *[0-9a-f]*: ed ac 55 93 stcm\.d cp2,--r12,cr0-cr3,cr8-cr9,cr14-cr15 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ef af ef 00 mvcr\.w cp7,pc,cr15 mgl@1371: + *[0-9a-f]*: ef a0 00 00 mvcr\.w cp0,r0,cr0 mgl@1371: + *[0-9a-f]*: ef af 0f 00 mvcr\.w cp0,pc,cr15 mgl@1371: + *[0-9a-f]*: ef a0 ef 00 mvcr\.w cp7,r0,cr15 mgl@1371: + *[0-9a-f]*: ef af e0 00 mvcr\.w cp7,pc,cr0 mgl@1371: + *[0-9a-f]*: ef a7 88 00 mvcr\.w cp4,r7,cr8 mgl@1371: + *[0-9a-f]*: ef a8 67 00 mvcr\.w cp3,r8,cr7 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ef ae ee 10 mvcr\.d cp7,lr,cr14 mgl@1371: + *[0-9a-f]*: ef a0 00 10 mvcr\.d cp0,r0,cr0 mgl@1371: + *[0-9a-f]*: ef ae 0e 10 mvcr\.d cp0,lr,cr14 mgl@1371: + *[0-9a-f]*: ef a0 ee 10 mvcr\.d cp7,r0,cr14 mgl@1371: + *[0-9a-f]*: ef ae e0 10 mvcr\.d cp7,lr,cr0 mgl@1371: + *[0-9a-f]*: ef a6 88 10 mvcr\.d cp4,r6,cr8 mgl@1371: + *[0-9a-f]*: ef a8 66 10 mvcr\.d cp3,r8,cr6 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ef af ef 20 mvrc\.w cp7,cr15,pc mgl@1371: + *[0-9a-f]*: ef a0 00 20 mvrc\.w cp0,cr0,r0 mgl@1371: + *[0-9a-f]*: ef af 0f 20 mvrc\.w cp0,cr15,pc mgl@1371: + *[0-9a-f]*: ef a0 ef 20 mvrc\.w cp7,cr15,r0 mgl@1371: + *[0-9a-f]*: ef af e0 20 mvrc\.w cp7,cr0,pc mgl@1371: + *[0-9a-f]*: ef a7 88 20 mvrc\.w cp4,cr8,r7 mgl@1371: + *[0-9a-f]*: ef a8 67 20 mvrc\.w cp3,cr7,r8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ef ae ee 30 mvrc\.d cp7,cr14,lr mgl@1371: + *[0-9a-f]*: ef a0 00 30 mvrc\.d cp0,cr0,r0 mgl@1371: + *[0-9a-f]*: ef ae 0e 30 mvrc\.d cp0,cr14,lr mgl@1371: + *[0-9a-f]*: ef a0 ee 30 mvrc\.d cp7,cr14,r0 mgl@1371: + *[0-9a-f]*: ef ae e0 30 mvrc\.d cp7,cr0,lr mgl@1371: + *[0-9a-f]*: ef a6 88 30 mvrc\.d cp4,cr8,r6 mgl@1371: + *[0-9a-f]*: ef a8 66 30 mvrc\.d cp3,cr6,r8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff df b3 ff bfexts pc,pc,0x1f,0x1f mgl@1371: + *[0-9a-f]*: e1 d0 b0 00 bfexts r0,r0,0x0,0x0 mgl@1371: + *[0-9a-f]*: e1 df b3 ff bfexts r0,pc,0x1f,0x1f mgl@1371: + *[0-9a-f]*: ff d0 b3 ff bfexts pc,r0,0x1f,0x1f mgl@1371: + *[0-9a-f]*: ff df b0 1f bfexts pc,pc,0x0,0x1f mgl@1371: + *[0-9a-f]*: ff df b3 e0 bfexts pc,pc,0x1f,0x0 mgl@1371: + *[0-9a-f]*: ef d8 b1 f0 bfexts r7,r8,0xf,0x10 mgl@1371: + *[0-9a-f]*: f1 d7 b2 0f bfexts r8,r7,0x10,0xf mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff df c3 ff bfextu pc,pc,0x1f,0x1f mgl@1371: + *[0-9a-f]*: e1 d0 c0 00 bfextu r0,r0,0x0,0x0 mgl@1371: + *[0-9a-f]*: e1 df c3 ff bfextu r0,pc,0x1f,0x1f mgl@1371: + *[0-9a-f]*: ff d0 c3 ff bfextu pc,r0,0x1f,0x1f mgl@1371: + *[0-9a-f]*: ff df c0 1f bfextu pc,pc,0x0,0x1f mgl@1371: + *[0-9a-f]*: ff df c3 e0 bfextu pc,pc,0x1f,0x0 mgl@1371: + *[0-9a-f]*: ef d8 c1 f0 bfextu r7,r8,0xf,0x10 mgl@1371: + *[0-9a-f]*: f1 d7 c2 0f bfextu r8,r7,0x10,0xf mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff df d3 ff bfins pc,pc,0x1f,0x1f mgl@1371: + *[0-9a-f]*: e1 d0 d0 00 bfins r0,r0,0x0,0x0 mgl@1371: + *[0-9a-f]*: e1 df d3 ff bfins r0,pc,0x1f,0x1f mgl@1371: + *[0-9a-f]*: ff d0 d3 ff bfins pc,r0,0x1f,0x1f mgl@1371: + *[0-9a-f]*: ff df d0 1f bfins pc,pc,0x0,0x1f mgl@1371: + *[0-9a-f]*: ff df d3 e0 bfins pc,pc,0x1f,0x0 mgl@1371: + *[0-9a-f]*: ef d8 d1 f0 bfins r7,r8,0xf,0x10 mgl@1371: + *[0-9a-f]*: f1 d7 d2 0f bfins r8,r7,0x10,0xf mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fb bf 00 00 rsubeq pc,0 mgl@1371: + *[0-9a-f]*: fb bc 0f ff rsubal r12,-1 mgl@1371: + *[0-9a-f]*: fb b5 08 80 rsubls r5,-128 mgl@1371: + *[0-9a-f]*: fb b4 07 7f rsubpl r4,127 mgl@1371: + *[0-9a-f]*: fb be 01 01 rsubne lr,1 mgl@1371: + *[0-9a-f]*: fb bc 08 76 rsubls r12,118 mgl@1371: + *[0-9a-f]*: fb be 0d f4 rsubvc lr,-12 mgl@1371: + *[0-9a-f]*: fb b4 06 f3 rsubmi r4,-13 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff df e0 0f addeq pc,pc,pc mgl@1371: + *[0-9a-f]*: f9 dc ef 0c addal r12,r12,r12 mgl@1371: + *[0-9a-f]*: eb d5 e8 05 addls r5,r5,r5 mgl@1371: + *[0-9a-f]*: e9 d4 e7 04 addpl r4,r4,r4 mgl@1371: + *[0-9a-f]*: fd de e1 0e addne lr,lr,lr mgl@1371: + *[0-9a-f]*: e5 d1 e8 0a addls r10,r2,r1 mgl@1371: + *[0-9a-f]*: f1 db ed 0c addvc r12,r8,r11 mgl@1371: + *[0-9a-f]*: ef d0 e6 0a addmi r10,r7,r0 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff df e0 1f subeq pc,pc,pc mgl@1371: + *[0-9a-f]*: f9 dc ef 1c subal r12,r12,r12 mgl@1371: + *[0-9a-f]*: eb d5 e8 15 subls r5,r5,r5 mgl@1371: + *[0-9a-f]*: e9 d4 e7 14 subpl r4,r4,r4 mgl@1371: + *[0-9a-f]*: fd de e1 1e subne lr,lr,lr mgl@1371: + *[0-9a-f]*: e5 d1 e8 1a subls r10,r2,r1 mgl@1371: + *[0-9a-f]*: f1 db ed 1c subvc r12,r8,r11 mgl@1371: + *[0-9a-f]*: ef d0 e6 1a submi r10,r7,r0 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff df e0 2f andeq pc,pc,pc mgl@1371: + *[0-9a-f]*: f9 dc ef 2c andal r12,r12,r12 mgl@1371: + *[0-9a-f]*: eb d5 e8 25 andls r5,r5,r5 mgl@1371: + *[0-9a-f]*: e9 d4 e7 24 andpl r4,r4,r4 mgl@1371: + *[0-9a-f]*: fd de e1 2e andne lr,lr,lr mgl@1371: + *[0-9a-f]*: e5 d1 e8 2a andls r10,r2,r1 mgl@1371: + *[0-9a-f]*: f1 db ed 2c andvc r12,r8,r11 mgl@1371: + *[0-9a-f]*: ef d0 e6 2a andmi r10,r7,r0 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff df e0 3f oreq pc,pc,pc mgl@1371: + *[0-9a-f]*: f9 dc ef 3c oral r12,r12,r12 mgl@1371: + *[0-9a-f]*: eb d5 e8 35 orls r5,r5,r5 mgl@1371: + *[0-9a-f]*: e9 d4 e7 34 orpl r4,r4,r4 mgl@1371: + *[0-9a-f]*: fd de e1 3e orne lr,lr,lr mgl@1371: + *[0-9a-f]*: e5 d1 e8 3a orls r10,r2,r1 mgl@1371: + *[0-9a-f]*: f1 db ed 3c orvc r12,r8,r11 mgl@1371: + *[0-9a-f]*: ef d0 e6 3a ormi r10,r7,r0 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff df e0 4f eoreq pc,pc,pc mgl@1371: + *[0-9a-f]*: f9 dc ef 4c eoral r12,r12,r12 mgl@1371: + *[0-9a-f]*: eb d5 e8 45 eorls r5,r5,r5 mgl@1371: + *[0-9a-f]*: e9 d4 e7 44 eorpl r4,r4,r4 mgl@1371: + *[0-9a-f]*: fd de e1 4e eorne lr,lr,lr mgl@1371: + *[0-9a-f]*: e5 d1 e8 4a eorls r10,r2,r1 mgl@1371: + *[0-9a-f]*: f1 db ed 4c eorvc r12,r8,r11 mgl@1371: + *[0-9a-f]*: ef d0 e6 4a eormi r10,r7,r0 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff ff 01 ff ld.weq pc,pc[0x7fc] mgl@1371: + *[0-9a-f]*: f9 fc f3 ff ld.shal r12,r12[0x3fe] mgl@1371: + *[0-9a-f]*: eb f5 84 00 ld.shls r5,r5[0x0] mgl@1371: + *[0-9a-f]*: e9 f4 79 ff ld.ubpl r4,r4[0x1ff] mgl@1371: + *[0-9a-f]*: fd fe 16 00 ld.sbne lr,lr[0x0] mgl@1371: + *[0-9a-f]*: e5 fa 80 00 ld.wls r10,r2[0x0] mgl@1371: + *[0-9a-f]*: f1 fc d3 ff ld.shvc r12,r8[0x3fe] mgl@1371: + *[0-9a-f]*: ef fa 68 01 ld.ubmi r10,r7[0x1] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ff ff 0b ff st.weq pc[0x7fc],pc mgl@1371: + *[0-9a-f]*: f9 fc fd ff st.hal r12[0x3fe],r12 mgl@1371: + *[0-9a-f]*: eb f5 8c 00 st.hls r5[0x0],r5 mgl@1371: + *[0-9a-f]*: e9 f4 7f ff st.bpl r4[0x1ff],r4 mgl@1371: + *[0-9a-f]*: fd fe 1e 00 st.bne lr[0x0],lr mgl@1371: + *[0-9a-f]*: e5 fa 8a 00 st.wls r2[0x0],r10 mgl@1371: + *[0-9a-f]*: f1 fc dd ff st.hvc r8[0x3fe],r12 mgl@1371: + *[0-9a-f]*: ef fa 6e 01 st.bmi r7[0x1],r10 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: fc 1f ff ff movh pc,0xffff mgl@1371: + *[0-9a-f]*: fc 10 00 00 movh r0,0x0 mgl@1371: + *[0-9a-f]*: fc 15 00 01 movh r5,0x1 mgl@1371: + *[0-9a-f]*: fc 1c 7f ff movh r12,0x7fff mgl@1371: + mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/allinsn.exp mgl@1371: @@ -0,0 +1,5 @@ mgl@1371: +# AVR32 assembler testsuite. -*- Tcl -*- mgl@1371: + mgl@1371: +if [istarget avr32-*-*] { mgl@1371: + run_dump_test "allinsn" mgl@1371: +} mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/allinsn.s mgl@1371: @@ -0,0 +1,3330 @@ mgl@1371: + .data mgl@1371: +foodata: .word 42 mgl@1371: + .text mgl@1371: +footext: mgl@1371: + .text mgl@1371: + .global ld_d5 mgl@1371: +ld_d5: mgl@1371: + ld.d lr,pc[pc<<3] mgl@1371: + ld.d r0,r0[r0<<0] mgl@1371: + ld.d r6,r5[r5<<2] mgl@1371: + ld.d r4,r4[r4<<1] mgl@1371: + ld.d lr,lr[lr<<1] mgl@1371: + ld.d r10,r3[sp<<2] mgl@1371: + ld.d r8,r10[r6<<2] mgl@1371: + ld.d r2,r7[r9<<0] mgl@1371: + .text mgl@1371: + .global ld_w5 mgl@1371: +ld_w5: mgl@1371: + ld.w pc,pc[pc<<0] mgl@1371: + ld.w r12,r12[r12<<3] mgl@1371: + ld.w r5,r5[r5<<2] mgl@1371: + ld.w r4,r4[r4<<1] mgl@1371: + ld.w lr,lr[lr<<1] mgl@1371: + ld.w r2,r9[r9<<0] mgl@1371: + ld.w r11,r2[r6<<0] mgl@1371: + ld.w r0,r2[sp<<3] mgl@1371: + .text mgl@1371: + .global ld_sh5 mgl@1371: +ld_sh5: mgl@1371: + ld.sh pc,pc[pc<<0] mgl@1371: + ld.sh r12,r12[r12<<3] mgl@1371: + ld.sh r5,r5[r5<<2] mgl@1371: + ld.sh r4,r4[r4<<1] mgl@1371: + ld.sh lr,lr[lr<<1] mgl@1371: + ld.sh r11,r0[pc<<2] mgl@1371: + ld.sh r10,sp[r6<<2] mgl@1371: + ld.sh r12,r2[r2<<0] mgl@1371: + .text mgl@1371: + .global ld_uh5 mgl@1371: +ld_uh5: mgl@1371: + ld.uh pc,pc[pc<<0] mgl@1371: + ld.uh r12,r12[r12<<3] mgl@1371: + ld.uh r5,r5[r5<<2] mgl@1371: + ld.uh r4,r4[r4<<1] mgl@1371: + ld.uh lr,lr[lr<<1] mgl@1371: + ld.uh r8,pc[lr<<3] mgl@1371: + ld.uh r6,r1[pc<<1] mgl@1371: + ld.uh r6,lr[sp<<1] mgl@1371: + .text mgl@1371: + .global ld_sb2 mgl@1371: +ld_sb2: mgl@1371: + ld.sb pc,pc[pc<<0] mgl@1371: + ld.sb r12,r12[r12<<3] mgl@1371: + ld.sb r5,r5[r5<<2] mgl@1371: + ld.sb r4,r4[r4<<1] mgl@1371: + ld.sb lr,lr[lr<<1] mgl@1371: + ld.sb r9,r1[pc<<3] mgl@1371: + ld.sb r0,r3[r11<<1] mgl@1371: + ld.sb r10,r5[r5<<1] mgl@1371: + .text mgl@1371: + .global ld_ub5 mgl@1371: +ld_ub5: mgl@1371: + ld.ub pc,pc[pc<<0] mgl@1371: + ld.ub r12,r12[r12<<3] mgl@1371: + ld.ub r5,r5[r5<<2] mgl@1371: + ld.ub r4,r4[r4<<1] mgl@1371: + ld.ub lr,lr[lr<<1] mgl@1371: + ld.ub r6,r12[r7<<3] mgl@1371: + ld.ub r2,r6[r12<<0] mgl@1371: + ld.ub r0,r7[r11<<1] mgl@1371: + .text mgl@1371: + .global st_d5 mgl@1371: +st_d5: mgl@1371: + st.d pc[pc<<0],r14 mgl@1371: + st.d r12[r12<<3],r12 mgl@1371: + st.d r5[r5<<2],r6 mgl@1371: + st.d r4[r4<<1],r4 mgl@1371: + st.d lr[lr<<1],lr mgl@1371: + st.d r1[r9<<1],r4 mgl@1371: + st.d r10[r2<<1],r4 mgl@1371: + st.d r12[r6<<0],lr mgl@1371: + .text mgl@1371: + .global st_w5 mgl@1371: +st_w5: mgl@1371: + st.w pc[pc<<0],pc mgl@1371: + st.w r12[r12<<3],r12 mgl@1371: + st.w r5[r5<<2],r5 mgl@1371: + st.w r4[r4<<1],r4 mgl@1371: + st.w lr[lr<<1],lr mgl@1371: + st.w r1[r10<<0],r3 mgl@1371: + st.w r0[r10<<1],r9 mgl@1371: + st.w r4[r5<<3],pc mgl@1371: + .text mgl@1371: + .global st_h5 mgl@1371: +st_h5: mgl@1371: + st.h pc[pc<<0],pc mgl@1371: + st.h r12[r12<<3],r12 mgl@1371: + st.h r5[r5<<2],r5 mgl@1371: + st.h r4[r4<<1],r4 mgl@1371: + st.h lr[lr<<1],lr mgl@1371: + st.h r2[r9<<0],r11 mgl@1371: + st.h r5[r1<<2],r12 mgl@1371: + st.h pc[r8<<2],r3 mgl@1371: + .text mgl@1371: + .global st_b5 mgl@1371: +st_b5: mgl@1371: + st.b pc[pc<<0],pc mgl@1371: + st.b r12[r12<<3],r12 mgl@1371: + st.b r5[r5<<2],r5 mgl@1371: + st.b r4[r4<<1],r4 mgl@1371: + st.b lr[lr<<1],lr mgl@1371: + st.b r1[r8<<1],r6 mgl@1371: + st.b lr[lr<<3],r1 mgl@1371: + st.b r5[r0<<2],pc mgl@1371: + .text mgl@1371: + .global divs mgl@1371: +divs: mgl@1371: + divs pc,pc,pc mgl@1371: + divs r12,r12,r12 mgl@1371: + divs r5,r5,r5 mgl@1371: + divs r4,r4,r4 mgl@1371: + divs lr,lr,lr mgl@1371: + divs r3,pc,pc mgl@1371: + divs r9,r12,r2 mgl@1371: + divs r7,r4,r1 mgl@1371: + .text mgl@1371: + .global add1 mgl@1371: +add1: mgl@1371: + add pc,pc mgl@1371: + add r12,r12 mgl@1371: + add r5,r5 mgl@1371: + add r4,r4 mgl@1371: + add lr,lr mgl@1371: + add r12,r9 mgl@1371: + add r6,r3 mgl@1371: + add r10,r12 mgl@1371: + .text mgl@1371: + .global sub1 mgl@1371: +sub1: mgl@1371: + sub pc,pc mgl@1371: + sub r12,r12 mgl@1371: + sub r5,r5 mgl@1371: + sub r4,r4 mgl@1371: + sub lr,lr mgl@1371: + sub lr,r6 mgl@1371: + sub r0,sp mgl@1371: + sub r6,r12 mgl@1371: + .text mgl@1371: + .global rsub1 mgl@1371: +rsub1: mgl@1371: + rsub pc,pc mgl@1371: + rsub r12,r12 mgl@1371: + rsub r5,r5 mgl@1371: + rsub r4,r4 mgl@1371: + rsub lr,lr mgl@1371: + rsub r11,sp mgl@1371: + rsub r7,r4 mgl@1371: + rsub r9,r1 mgl@1371: + .text mgl@1371: + .global cp1 mgl@1371: +cp1: mgl@1371: + cp pc,pc mgl@1371: + cp r12,r12 mgl@1371: + cp r5,r5 mgl@1371: + cp r4,r4 mgl@1371: + cp lr,lr mgl@1371: + cp r6,r2 mgl@1371: + cp r0,r9 mgl@1371: + cp r3,sp mgl@1371: + .text mgl@1371: + .global or1 mgl@1371: +or1: mgl@1371: + or pc,pc mgl@1371: + or r12,r12 mgl@1371: + or r5,r5 mgl@1371: + or r4,r4 mgl@1371: + or lr,lr mgl@1371: + or r4,r9 mgl@1371: + or r11,r4 mgl@1371: + or r4,r0 mgl@1371: + .text mgl@1371: + .global eor1 mgl@1371: +eor1: mgl@1371: + eor pc,pc mgl@1371: + eor r12,r12 mgl@1371: + eor r5,r5 mgl@1371: + eor r4,r4 mgl@1371: + eor lr,lr mgl@1371: + eor r12,r11 mgl@1371: + eor r0,r1 mgl@1371: + eor r5,pc mgl@1371: + .text mgl@1371: + .global and1 mgl@1371: +and1: mgl@1371: + and pc,pc mgl@1371: + and r12,r12 mgl@1371: + and r5,r5 mgl@1371: + and r4,r4 mgl@1371: + and lr,lr mgl@1371: + and r8,r1 mgl@1371: + and r0,sp mgl@1371: + and r10,r5 mgl@1371: + .text mgl@1371: + .global tst mgl@1371: +tst: mgl@1371: + tst pc,pc mgl@1371: + tst r12,r12 mgl@1371: + tst r5,r5 mgl@1371: + tst r4,r4 mgl@1371: + tst lr,lr mgl@1371: + tst r0,r12 mgl@1371: + tst r10,r6 mgl@1371: + tst sp,r4 mgl@1371: + .text mgl@1371: + .global andn mgl@1371: +andn: mgl@1371: + andn pc,pc mgl@1371: + andn r12,r12 mgl@1371: + andn r5,r5 mgl@1371: + andn r4,r4 mgl@1371: + andn lr,lr mgl@1371: + andn r9,r12 mgl@1371: + andn r11,sp mgl@1371: + andn r12,r5 mgl@1371: + .text mgl@1371: + .global mov3 mgl@1371: +mov3: mgl@1371: + mov pc,pc mgl@1371: + mov r12,r12 mgl@1371: + mov r5,r5 mgl@1371: + mov r4,r4 mgl@1371: + mov lr,lr mgl@1371: + mov r5,r9 mgl@1371: + mov r11,r11 mgl@1371: + mov r2,lr mgl@1371: + .text mgl@1371: + .global st_w1 mgl@1371: +st_w1: mgl@1371: + st.w pc++,pc mgl@1371: + st.w r12++,r12 mgl@1371: + st.w r5++,r5 mgl@1371: + st.w r4++,r4 mgl@1371: + st.w lr++,lr mgl@1371: + st.w r1++,r11 mgl@1371: + st.w sp++,r0 mgl@1371: + st.w sp++,r1 mgl@1371: + .text mgl@1371: + .global st_h1 mgl@1371: +st_h1: mgl@1371: + st.h pc++,pc mgl@1371: + st.h r12++,r12 mgl@1371: + st.h r5++,r5 mgl@1371: + st.h r4++,r4 mgl@1371: + st.h lr++,lr mgl@1371: + st.h r12++,sp mgl@1371: + st.h r7++,lr mgl@1371: + st.h r7++,r4 mgl@1371: + .text mgl@1371: + .global st_b1 mgl@1371: +st_b1: mgl@1371: + st.b pc++,pc mgl@1371: + st.b r12++,r12 mgl@1371: + st.b r5++,r5 mgl@1371: + st.b r4++,r4 mgl@1371: + st.b lr++,lr mgl@1371: + st.b r9++,sp mgl@1371: + st.b r1++,sp mgl@1371: + st.b r0++,r4 mgl@1371: + .text mgl@1371: + .global st_w2 mgl@1371: +st_w2: mgl@1371: + st.w --pc,pc mgl@1371: + st.w --r12,r12 mgl@1371: + st.w --r5,r5 mgl@1371: + st.w --r4,r4 mgl@1371: + st.w --lr,lr mgl@1371: + st.w --r1,r7 mgl@1371: + st.w --r3,r9 mgl@1371: + st.w --r5,r5 mgl@1371: + .text mgl@1371: + .global st_h2 mgl@1371: +st_h2: mgl@1371: + st.h --pc,pc mgl@1371: + st.h --r12,r12 mgl@1371: + st.h --r5,r5 mgl@1371: + st.h --r4,r4 mgl@1371: + st.h --lr,lr mgl@1371: + st.h --r5,r7 mgl@1371: + st.h --r8,r8 mgl@1371: + st.h --r7,r2 mgl@1371: + .text mgl@1371: + .global st_b2 mgl@1371: +st_b2: mgl@1371: + st.b --pc,pc mgl@1371: + st.b --r12,r12 mgl@1371: + st.b --r5,r5 mgl@1371: + st.b --r4,r4 mgl@1371: + st.b --lr,lr mgl@1371: + st.b --sp,sp mgl@1371: + st.b --sp,r11 mgl@1371: + st.b --r4,r5 mgl@1371: + .text mgl@1371: + .global ld_w1 mgl@1371: +ld_w1: mgl@1371: + ld.w pc,pc++ mgl@1371: + ld.w r12,r12++ mgl@1371: + ld.w r5,r5++ mgl@1371: + ld.w r4,r4++ mgl@1371: + ld.w lr,lr++ mgl@1371: + ld.w r3,r7++ mgl@1371: + ld.w r3,lr++ mgl@1371: + ld.w r12,r5++ mgl@1371: + .text mgl@1371: + .global ld_sh1 mgl@1371: +ld_sh1: mgl@1371: + ld.sh pc,pc++ mgl@1371: + ld.sh r12,r12++ mgl@1371: + ld.sh r5,r5++ mgl@1371: + ld.sh r4,r4++ mgl@1371: + ld.sh lr,lr++ mgl@1371: + ld.sh r11,r2++ mgl@1371: + ld.sh r2,r8++ mgl@1371: + ld.sh r7,r6++ mgl@1371: + .text mgl@1371: + .global ld_uh1 mgl@1371: +ld_uh1: mgl@1371: + ld.uh pc,pc++ mgl@1371: + ld.uh r12,r12++ mgl@1371: + ld.uh r5,r5++ mgl@1371: + ld.uh r4,r4++ mgl@1371: + ld.uh lr,lr++ mgl@1371: + ld.uh r6,r7++ mgl@1371: + ld.uh r10,r11++ mgl@1371: + ld.uh lr,r4++ mgl@1371: + .text mgl@1371: + .global ld_ub1 mgl@1371: +ld_ub1: mgl@1371: + ld.ub pc,pc++ mgl@1371: + ld.ub r12,r12++ mgl@1371: + ld.ub r5,r5++ mgl@1371: + ld.ub r4,r4++ mgl@1371: + ld.ub lr,lr++ mgl@1371: + ld.ub r8,lr++ mgl@1371: + ld.ub r12,r12++ mgl@1371: + ld.ub r11,r10++ mgl@1371: + .text mgl@1371: + .global ld_w2 mgl@1371: +ld_w2: mgl@1371: + ld.w pc,--pc mgl@1371: + ld.w r12,--r12 mgl@1371: + ld.w r5,--r5 mgl@1371: + ld.w r4,--r4 mgl@1371: + ld.w lr,--lr mgl@1371: + ld.w r10,--lr mgl@1371: + ld.w r12,--r9 mgl@1371: + ld.w r6,--r5 mgl@1371: + .text mgl@1371: + .global ld_sh2 mgl@1371: +ld_sh2: mgl@1371: + ld.sh pc,--pc mgl@1371: + ld.sh r12,--r12 mgl@1371: + ld.sh r5,--r5 mgl@1371: + ld.sh r4,--r4 mgl@1371: + ld.sh lr,--lr mgl@1371: + ld.sh pc,--r10 mgl@1371: + ld.sh r6,--r3 mgl@1371: + ld.sh r4,--r6 mgl@1371: + .text mgl@1371: + .global ld_uh2 mgl@1371: +ld_uh2: mgl@1371: + ld.uh pc,--pc mgl@1371: + ld.uh r12,--r12 mgl@1371: + ld.uh r5,--r5 mgl@1371: + ld.uh r4,--r4 mgl@1371: + ld.uh lr,--lr mgl@1371: + ld.uh r3,--r2 mgl@1371: + ld.uh r1,--r0 mgl@1371: + ld.uh r2,--r9 mgl@1371: + .text mgl@1371: + .global ld_ub2 mgl@1371: +ld_ub2: mgl@1371: + ld.ub pc,--pc mgl@1371: + ld.ub r12,--r12 mgl@1371: + ld.ub r5,--r5 mgl@1371: + ld.ub r4,--r4 mgl@1371: + ld.ub lr,--lr mgl@1371: + ld.ub r1,--r1 mgl@1371: + ld.ub r0,--r6 mgl@1371: + ld.ub r2,--r7 mgl@1371: + .text mgl@1371: + .global ld_ub3 mgl@1371: +ld_ub3: mgl@1371: + ld.ub pc,pc[0] mgl@1371: + ld.ub r12,r12[7] mgl@1371: + ld.ub r5,r5[4] mgl@1371: + ld.ub r4,r4[3] mgl@1371: + ld.ub lr,lr[1] mgl@1371: + ld.ub r6,r9[6] mgl@1371: + ld.ub r2,lr[4] mgl@1371: + ld.ub r1,r8[0] mgl@1371: + .text mgl@1371: + .global sub3_sp mgl@1371: +sub3_sp: mgl@1371: + sub sp,0 mgl@1371: + sub sp,-4 mgl@1371: + sub sp,-512 mgl@1371: + sub sp,508 mgl@1371: + sub sp,4 mgl@1371: + sub sp,44 mgl@1371: + sub sp,8 mgl@1371: + sub sp,348 mgl@1371: + .text mgl@1371: + .global sub3 mgl@1371: +sub3: mgl@1371: + sub pc,0 mgl@1371: + sub r12,-1 mgl@1371: + sub r5,-128 mgl@1371: + sub r4,127 mgl@1371: + sub lr,1 mgl@1371: + sub r6,-41 mgl@1371: + sub r4,37 mgl@1371: + sub r12,56 mgl@1371: + .text mgl@1371: + .global mov1 mgl@1371: +mov1: mgl@1371: + mov pc,0 mgl@1371: + mov r12,-1 mgl@1371: + mov r5,-128 mgl@1371: + mov r4,127 mgl@1371: + mov lr,1 mgl@1371: + mov pc,14 mgl@1371: + mov r6,-100 mgl@1371: + mov lr,-122 mgl@1371: + .text mgl@1371: + .global lddsp mgl@1371: +lddsp: mgl@1371: + lddsp pc,sp[0] mgl@1371: + lddsp r12,sp[508] mgl@1371: + lddsp r5,sp[256] mgl@1371: + lddsp r4,sp[252] mgl@1371: + lddsp lr,sp[4] mgl@1371: + lddsp lr,sp[256] mgl@1371: + lddsp r12,sp[20] mgl@1371: + lddsp r9,sp[472] mgl@1371: + .text mgl@1371: + .global lddpc mgl@1371: +lddpc: mgl@1371: + lddpc pc,pc[0] mgl@1371: + lddpc r0,pc[508] mgl@1371: + lddpc r8,pc[256] mgl@1371: + lddpc r7,pc[252] mgl@1371: + lddpc lr,pc[4] mgl@1371: + lddpc sp,pc[472] mgl@1371: + lddpc r6,pc[120] mgl@1371: + lddpc r11,pc[28] mgl@1371: + .text mgl@1371: + .global stdsp mgl@1371: +stdsp: mgl@1371: + stdsp sp[0],pc mgl@1371: + stdsp sp[508],r12 mgl@1371: + stdsp sp[256],r5 mgl@1371: + stdsp sp[252],r4 mgl@1371: + stdsp sp[4],lr mgl@1371: + stdsp sp[304],pc mgl@1371: + stdsp sp[256],r0 mgl@1371: + stdsp sp[336],r5 mgl@1371: + .text mgl@1371: + .global cp2 mgl@1371: +cp2: mgl@1371: + cp pc,0 mgl@1371: + cp r12,-1 mgl@1371: + cp r5,-32 mgl@1371: + cp r4,31 mgl@1371: + cp lr,1 mgl@1371: + cp r8,3 mgl@1371: + cp lr,16 mgl@1371: + cp r7,-26 mgl@1371: + .text mgl@1371: + .global acr mgl@1371: +acr: mgl@1371: + acr pc mgl@1371: + acr r12 mgl@1371: + acr r5 mgl@1371: + acr r4 mgl@1371: + acr lr mgl@1371: + acr r2 mgl@1371: + acr r12 mgl@1371: + acr pc mgl@1371: + .text mgl@1371: + .global scr mgl@1371: +scr: mgl@1371: + scr pc mgl@1371: + scr r12 mgl@1371: + scr r5 mgl@1371: + scr r4 mgl@1371: + scr lr mgl@1371: + scr pc mgl@1371: + scr r6 mgl@1371: + scr r1 mgl@1371: + .text mgl@1371: + .global cpc0 mgl@1371: +cpc0: mgl@1371: + cpc pc mgl@1371: + cpc r12 mgl@1371: + cpc r5 mgl@1371: + cpc r4 mgl@1371: + cpc lr mgl@1371: + cpc pc mgl@1371: + cpc r4 mgl@1371: + cpc r9 mgl@1371: + .text mgl@1371: + .global neg mgl@1371: +neg: mgl@1371: + neg pc mgl@1371: + neg r12 mgl@1371: + neg r5 mgl@1371: + neg r4 mgl@1371: + neg lr mgl@1371: + neg r7 mgl@1371: + neg r1 mgl@1371: + neg r9 mgl@1371: + .text mgl@1371: + .global abs mgl@1371: +abs: mgl@1371: + abs pc mgl@1371: + abs r12 mgl@1371: + abs r5 mgl@1371: + abs r4 mgl@1371: + abs lr mgl@1371: + abs r6 mgl@1371: + abs r6 mgl@1371: + abs r4 mgl@1371: + .text mgl@1371: + .global castu_b mgl@1371: +castu_b: mgl@1371: + castu.b pc mgl@1371: + castu.b r12 mgl@1371: + castu.b r5 mgl@1371: + castu.b r4 mgl@1371: + castu.b lr mgl@1371: + castu.b r7 mgl@1371: + castu.b sp mgl@1371: + castu.b r9 mgl@1371: + .text mgl@1371: + .global casts_b mgl@1371: +casts_b: mgl@1371: + casts.b pc mgl@1371: + casts.b r12 mgl@1371: + casts.b r5 mgl@1371: + casts.b r4 mgl@1371: + casts.b lr mgl@1371: + casts.b r11 mgl@1371: + casts.b r1 mgl@1371: + casts.b r10 mgl@1371: + .text mgl@1371: + .global castu_h mgl@1371: +castu_h: mgl@1371: + castu.h pc mgl@1371: + castu.h r12 mgl@1371: + castu.h r5 mgl@1371: + castu.h r4 mgl@1371: + castu.h lr mgl@1371: + castu.h r10 mgl@1371: + castu.h r11 mgl@1371: + castu.h r1 mgl@1371: + .text mgl@1371: + .global casts_h mgl@1371: +casts_h: mgl@1371: + casts.h pc mgl@1371: + casts.h r12 mgl@1371: + casts.h r5 mgl@1371: + casts.h r4 mgl@1371: + casts.h lr mgl@1371: + casts.h r0 mgl@1371: + casts.h r5 mgl@1371: + casts.h r9 mgl@1371: + .text mgl@1371: + .global brev mgl@1371: +brev: mgl@1371: + brev pc mgl@1371: + brev r12 mgl@1371: + brev r5 mgl@1371: + brev r4 mgl@1371: + brev lr mgl@1371: + brev r5 mgl@1371: + brev r10 mgl@1371: + brev r8 mgl@1371: + .text mgl@1371: + .global swap_h mgl@1371: +swap_h: mgl@1371: + swap.h pc mgl@1371: + swap.h r12 mgl@1371: + swap.h r5 mgl@1371: + swap.h r4 mgl@1371: + swap.h lr mgl@1371: + swap.h r7 mgl@1371: + swap.h r0 mgl@1371: + swap.h r8 mgl@1371: + .text mgl@1371: + .global swap_b mgl@1371: +swap_b: mgl@1371: + swap.b pc mgl@1371: + swap.b r12 mgl@1371: + swap.b r5 mgl@1371: + swap.b r4 mgl@1371: + swap.b lr mgl@1371: + swap.b r10 mgl@1371: + swap.b r12 mgl@1371: + swap.b r1 mgl@1371: + .text mgl@1371: + .global swap_bh mgl@1371: +swap_bh: mgl@1371: + swap.bh pc mgl@1371: + swap.bh r12 mgl@1371: + swap.bh r5 mgl@1371: + swap.bh r4 mgl@1371: + swap.bh lr mgl@1371: + swap.bh r9 mgl@1371: + swap.bh r4 mgl@1371: + swap.bh r1 mgl@1371: + .text mgl@1371: + .global One_s_compliment mgl@1371: +One_s_compliment: mgl@1371: + com pc mgl@1371: + com r12 mgl@1371: + com r5 mgl@1371: + com r4 mgl@1371: + com lr mgl@1371: + com r2 mgl@1371: + com r2 mgl@1371: + com r7 mgl@1371: + .text mgl@1371: + .global tnbz mgl@1371: +tnbz: mgl@1371: + tnbz pc mgl@1371: + tnbz r12 mgl@1371: + tnbz r5 mgl@1371: + tnbz r4 mgl@1371: + tnbz lr mgl@1371: + tnbz r8 mgl@1371: + tnbz r12 mgl@1371: + tnbz pc mgl@1371: + .text mgl@1371: + .global rol mgl@1371: +rol: mgl@1371: + rol pc mgl@1371: + rol r12 mgl@1371: + rol r5 mgl@1371: + rol r4 mgl@1371: + rol lr mgl@1371: + rol r10 mgl@1371: + rol r9 mgl@1371: + rol r5 mgl@1371: + .text mgl@1371: + .global ror mgl@1371: +ror: mgl@1371: + ror pc mgl@1371: + ror r12 mgl@1371: + ror r5 mgl@1371: + ror r4 mgl@1371: + ror lr mgl@1371: + ror r8 mgl@1371: + ror r4 mgl@1371: + ror r7 mgl@1371: + .text mgl@1371: + .global icall mgl@1371: +icall: mgl@1371: + icall pc mgl@1371: + icall r12 mgl@1371: + icall r5 mgl@1371: + icall r4 mgl@1371: + icall lr mgl@1371: + icall r3 mgl@1371: + icall r1 mgl@1371: + icall r3 mgl@1371: + .text mgl@1371: + .global mustr mgl@1371: +mustr: mgl@1371: + mustr pc mgl@1371: + mustr r12 mgl@1371: + mustr r5 mgl@1371: + mustr r4 mgl@1371: + mustr lr mgl@1371: + mustr r1 mgl@1371: + mustr r4 mgl@1371: + mustr r12 mgl@1371: + .text mgl@1371: + .global musfr mgl@1371: +musfr: mgl@1371: + musfr pc mgl@1371: + musfr r12 mgl@1371: + musfr r5 mgl@1371: + musfr r4 mgl@1371: + musfr lr mgl@1371: + musfr r11 mgl@1371: + musfr r12 mgl@1371: + musfr r2 mgl@1371: + .text mgl@1371: + .global ret_cond mgl@1371: +ret_cond: mgl@1371: + reteq pc mgl@1371: + retal r12 mgl@1371: + retls r5 mgl@1371: + retpl r4 mgl@1371: + retne lr mgl@1371: + retgt r0 mgl@1371: + retgt r12 mgl@1371: + retge r10 mgl@1371: + .text mgl@1371: + .global sr_cond mgl@1371: +sr_cond: mgl@1371: + sreq pc mgl@1371: + sral r12 mgl@1371: + srls r5 mgl@1371: + srpl r4 mgl@1371: + srne lr mgl@1371: + srlt r0 mgl@1371: + sral sp mgl@1371: + srge r9 mgl@1371: + .text mgl@1371: + .global ld_w3 mgl@1371: +ld_w3: mgl@1371: + ld.w pc,pc[0] mgl@1371: + ld.w r12,r12[124] mgl@1371: + ld.w r5,r5[64] mgl@1371: + ld.w r4,r4[60] mgl@1371: + ld.w lr,lr[4] mgl@1371: + ld.w sp,r2[52] mgl@1371: + ld.w r9,r1[8] mgl@1371: + ld.w r5,sp[60] mgl@1371: + .text mgl@1371: + .global ld_sh3 mgl@1371: +ld_sh3: mgl@1371: + ld.sh pc,pc[0] mgl@1371: + ld.sh r12,r12[14] mgl@1371: + ld.sh r5,r5[8] mgl@1371: + ld.sh r4,r4[6] mgl@1371: + ld.sh lr,lr[2] mgl@1371: + ld.sh r4,r2[8] mgl@1371: + ld.sh sp,lr[10] mgl@1371: + ld.sh r2,r11[2] mgl@1371: + .text mgl@1371: + .global ld_uh3 mgl@1371: +ld_uh3: mgl@1371: + ld.uh pc,pc[0] mgl@1371: + ld.uh r12,r12[14] mgl@1371: + ld.uh r5,r5[8] mgl@1371: + ld.uh r4,r4[6] mgl@1371: + ld.uh lr,lr[2] mgl@1371: + ld.uh r10,r0[10] mgl@1371: + ld.uh r8,r11[8] mgl@1371: + ld.uh r10,r2[12] mgl@1371: + .text mgl@1371: + .global st_w3 mgl@1371: +st_w3: mgl@1371: + st.w pc[0],pc mgl@1371: + st.w r12[60],r12 mgl@1371: + st.w r5[32],r5 mgl@1371: + st.w r4[28],r4 mgl@1371: + st.w lr[4],lr mgl@1371: + st.w r7[44],r11 mgl@1371: + st.w r2[24],r6 mgl@1371: + st.w r4[12],r9 mgl@1371: + .text mgl@1371: + .global st_h3 mgl@1371: +st_h3: mgl@1371: + st.h pc[0],pc mgl@1371: + st.h r12[14],r12 mgl@1371: + st.h r5[8],r5 mgl@1371: + st.h r4[6],r4 mgl@1371: + st.h lr[2],lr mgl@1371: + st.h lr[10],r12 mgl@1371: + st.h r6[4],r0 mgl@1371: + st.h r5[12],sp mgl@1371: + .text mgl@1371: + .global st_b3 mgl@1371: +st_b3: mgl@1371: + st.b pc[0],pc mgl@1371: + st.b r12[7],r12 mgl@1371: + st.b r5[4],r5 mgl@1371: + st.b r4[3],r4 mgl@1371: + st.b lr[1],lr mgl@1371: + st.b r12[6],r9 mgl@1371: + st.b r2[3],lr mgl@1371: + st.b r1[3],r11 mgl@1371: + .text mgl@1371: + .global ldd mgl@1371: +ldd: mgl@1371: + ld.d r0,pc mgl@1371: + ld.d r14,r12 mgl@1371: + ld.d r8,r5 mgl@1371: + ld.d r6,r4 mgl@1371: + ld.d r2,lr mgl@1371: + ld.d r14,r7 mgl@1371: + ld.d r4,r4 mgl@1371: + ld.d r14,pc mgl@1371: + .text mgl@1371: + .global ldd_postinc mgl@1371: +ldd_postinc: mgl@1371: + ld.d r0,pc++ mgl@1371: + ld.d r14,r12++ mgl@1371: + ld.d r8,r5++ mgl@1371: + ld.d r6,r4++ mgl@1371: + ld.d r2,lr++ mgl@1371: + ld.d r14,r5++ mgl@1371: + ld.d r12,r11++ mgl@1371: + ld.d r2,r12++ mgl@1371: + .text mgl@1371: + .global ldd_predec mgl@1371: +ldd_predec: mgl@1371: + ld.d r0,--pc mgl@1371: + ld.d r14,--r12 mgl@1371: + ld.d r8,--r5 mgl@1371: + ld.d r6,--r4 mgl@1371: + ld.d r2,--lr mgl@1371: + ld.d r8,--r0 mgl@1371: + ld.d r10,--pc mgl@1371: + ld.d r2,--r4 mgl@1371: + .text mgl@1371: + .global std mgl@1371: +std: mgl@1371: + st.d pc,r0 mgl@1371: + st.d r12,r14 mgl@1371: + st.d r5,r8 mgl@1371: + st.d r4,r6 mgl@1371: + st.d lr,r2 mgl@1371: + st.d r0,r12 mgl@1371: + st.d sp,r4 mgl@1371: + st.d r12,r12 mgl@1371: + .text mgl@1371: + .global std_postinc mgl@1371: +std_postinc: mgl@1371: + st.d pc++,r0 mgl@1371: + st.d r12++,r14 mgl@1371: + st.d r5++,r8 mgl@1371: + st.d r4++,r6 mgl@1371: + st.d lr++,r2 mgl@1371: + st.d sp++,r6 mgl@1371: + st.d r10++,r6 mgl@1371: + st.d r7++,r2 mgl@1371: + .text mgl@1371: + .global std_predec mgl@1371: +std_predec: mgl@1371: + st.d --pc,r0 mgl@1371: + st.d --r12,r14 mgl@1371: + st.d --r5,r8 mgl@1371: + st.d --r4,r6 mgl@1371: + st.d --lr,r2 mgl@1371: + st.d --r3,r6 mgl@1371: + st.d --lr,r2 mgl@1371: + st.d --r0,r4 mgl@1371: + .text mgl@1371: + .global mul mgl@1371: +mul: mgl@1371: + mul pc,pc mgl@1371: + mul r12,r12 mgl@1371: + mul r5,r5 mgl@1371: + mul r4,r4 mgl@1371: + mul lr,lr mgl@1371: + mul r10,lr mgl@1371: + mul r0,r8 mgl@1371: + mul r8,r5 mgl@1371: + .text mgl@1371: + .global asr_imm5 mgl@1371: +asr_imm5: mgl@1371: + asr pc,0 mgl@1371: + asr r12,31 mgl@1371: + asr r5,16 mgl@1371: + asr r4,15 mgl@1371: + asr lr,1 mgl@1371: + asr r6,23 mgl@1371: + asr r6,18 mgl@1371: + asr r5,8 mgl@1371: + .text mgl@1371: + .global lsl_imm5 mgl@1371: +lsl_imm5: mgl@1371: + lsl pc,0 mgl@1371: + lsl r12,31 mgl@1371: + lsl r5,16 mgl@1371: + lsl r4,15 mgl@1371: + lsl lr,1 mgl@1371: + lsl r12,13 mgl@1371: + lsl r6,16 mgl@1371: + lsl r1,25 mgl@1371: + .text mgl@1371: + .global lsr_imm5 mgl@1371: +lsr_imm5: mgl@1371: + lsr pc,0 mgl@1371: + lsr r12,31 mgl@1371: + lsr r5,16 mgl@1371: + lsr r4,15 mgl@1371: + lsr lr,1 mgl@1371: + lsr r0,1 mgl@1371: + lsr r8,10 mgl@1371: + lsr r7,26 mgl@1371: + .text mgl@1371: + .global sbr mgl@1371: +sbr: mgl@1371: + sbr pc,0 mgl@1371: + sbr r12,31 mgl@1371: + sbr r5,16 mgl@1371: + sbr r4,15 mgl@1371: + sbr lr,1 mgl@1371: + sbr r8,31 mgl@1371: + sbr r6,22 mgl@1371: + sbr r1,23 mgl@1371: + .text mgl@1371: + .global cbr mgl@1371: +cbr: mgl@1371: + cbr pc,0 mgl@1371: + cbr r12,31 mgl@1371: + cbr r5,16 mgl@1371: + cbr r4,15 mgl@1371: + cbr lr,1 mgl@1371: + cbr r12,10 mgl@1371: + cbr r7,22 mgl@1371: + cbr r8,9 mgl@1371: + .text mgl@1371: + .global brc1 mgl@1371: +brc1: mgl@1371: + breq 0 mgl@1371: + brpl -2 mgl@1371: + brge -256 mgl@1371: + brcs 254 mgl@1371: + brne 2 mgl@1371: + brcs 230 mgl@1371: + breq -18 mgl@1371: + breq 12 mgl@1371: + .text mgl@1371: + .global rjmp mgl@1371: +rjmp: mgl@1371: + rjmp 0 mgl@1371: + rjmp -2 mgl@1371: + rjmp -1024 mgl@1371: + rjmp 1022 mgl@1371: + rjmp 2 mgl@1371: + rjmp -962 mgl@1371: + rjmp 14 mgl@1371: + rjmp -516 mgl@1371: + .text mgl@1371: + .global rcall1 mgl@1371: +rcall1: mgl@1371: + rcall 0 mgl@1371: + rcall -2 mgl@1371: + rcall -1024 mgl@1371: + rcall 1022 mgl@1371: + rcall 2 mgl@1371: + rcall 216 mgl@1371: + rcall -530 mgl@1371: + rcall -972 mgl@1371: + .text mgl@1371: + .global acall mgl@1371: +acall: mgl@1371: + acall 0 mgl@1371: + acall 1020 mgl@1371: + acall 512 mgl@1371: + acall 508 mgl@1371: + acall 4 mgl@1371: + acall 356 mgl@1371: + acall 304 mgl@1371: + acall 172 mgl@1371: + .text mgl@1371: + .global scall mgl@1371: +scall: mgl@1371: + scall mgl@1371: + scall mgl@1371: + scall mgl@1371: + scall mgl@1371: + scall mgl@1371: + scall mgl@1371: + scall mgl@1371: + scall mgl@1371: + .text mgl@1371: + .global popm mgl@1371: +popm: mgl@1371: + /* popm with no argument fails currently */ mgl@1371: + popm pc mgl@1371: + popm r0-r11,pc,r12=-1 mgl@1371: + popm lr mgl@1371: + popm r0-r11,pc,r12=1 mgl@1371: + popm r0-r3 mgl@1371: + popm r4-r10,pc mgl@1371: + popm r0-r3,r11,pc,r12=0 mgl@1371: + popm r0-r7,r10-r12,lr mgl@1371: + .text mgl@1371: + .global pushm mgl@1371: +pushm: mgl@1371: + pushm pc mgl@1371: + pushm r0-r12,lr,pc mgl@1371: + pushm pc mgl@1371: + pushm r0-r12,lr mgl@1371: + pushm r0-r3 mgl@1371: + pushm r8-r10,lr,pc mgl@1371: + pushm r0-r3,r10 mgl@1371: + pushm r8-r9,r12 mgl@1371: + .text mgl@1371: + .global popm_n mgl@1371: +popm_n: mgl@1371: + popm pc mgl@1371: + popm r0-r11,pc,r12=-1 mgl@1371: + popm lr mgl@1371: + popm r0-r11,pc,r12=1 mgl@1371: + popm r0-r3 mgl@1371: + popm r4-r10,pc mgl@1371: + popm r0-r3,r11,pc,r12=0 mgl@1371: + popm r0-r7,r10-r12,lr mgl@1371: + .text mgl@1371: + .global pushm_n mgl@1371: +pushm_n: mgl@1371: + pushm pc mgl@1371: + pushm r0-r12,lr,pc mgl@1371: + pushm pc mgl@1371: + pushm r0-r12,lr mgl@1371: + pushm r0-r3 mgl@1371: + pushm r8-r10,lr,pc mgl@1371: + pushm r0-r3,r10 mgl@1371: + pushm r8-r9,r12 mgl@1371: + .text mgl@1371: + .global csrfcz mgl@1371: +csrfcz: mgl@1371: + csrfcz 0 mgl@1371: + csrfcz 31 mgl@1371: + csrfcz 16 mgl@1371: + csrfcz 15 mgl@1371: + csrfcz 1 mgl@1371: + csrfcz 5 mgl@1371: + csrfcz 13 mgl@1371: + csrfcz 23 mgl@1371: + .text mgl@1371: + .global ssrf mgl@1371: +ssrf: mgl@1371: + ssrf 0 mgl@1371: + ssrf 31 mgl@1371: + ssrf 16 mgl@1371: + ssrf 15 mgl@1371: + ssrf 1 mgl@1371: + ssrf 29 mgl@1371: + ssrf 13 mgl@1371: + ssrf 13 mgl@1371: + .text mgl@1371: + .global csrf mgl@1371: +csrf: mgl@1371: + csrf 0 mgl@1371: + csrf 31 mgl@1371: + csrf 16 mgl@1371: + csrf 15 mgl@1371: + csrf 1 mgl@1371: + csrf 10 mgl@1371: + csrf 15 mgl@1371: + csrf 11 mgl@1371: + .text mgl@1371: + .global rete mgl@1371: +rete: mgl@1371: + rete mgl@1371: + .text mgl@1371: + .global rets mgl@1371: +rets: mgl@1371: + rets mgl@1371: + .text mgl@1371: + .global retd mgl@1371: +retd: mgl@1371: + retd mgl@1371: + .text mgl@1371: + .global retj mgl@1371: +retj: mgl@1371: + retj mgl@1371: + .text mgl@1371: + .global tlbr mgl@1371: +tlbr: mgl@1371: + tlbr mgl@1371: + .text mgl@1371: + .global tlbs mgl@1371: +tlbs: mgl@1371: + tlbs mgl@1371: + .text mgl@1371: + .global tlbw mgl@1371: +tlbw: mgl@1371: + tlbw mgl@1371: + .text mgl@1371: + .global breakpoint mgl@1371: +breakpoint: mgl@1371: + breakpoint mgl@1371: + .text mgl@1371: + .global incjosp mgl@1371: +incjosp: mgl@1371: + incjosp 1 mgl@1371: + incjosp 2 mgl@1371: + incjosp 3 mgl@1371: + incjosp 4 mgl@1371: + incjosp -4 mgl@1371: + incjosp -3 mgl@1371: + incjosp -2 mgl@1371: + incjosp -1 mgl@1371: + .text mgl@1371: + .global nop mgl@1371: +nop: mgl@1371: + nop mgl@1371: + .text mgl@1371: + .global popjc mgl@1371: +popjc: mgl@1371: + popjc mgl@1371: + .text mgl@1371: + .global pushjc mgl@1371: +pushjc: mgl@1371: + pushjc mgl@1371: + .text mgl@1371: + .global add2 mgl@1371: +add2: mgl@1371: + add pc,pc,pc<<0 mgl@1371: + add r12,r12,r12<<3 mgl@1371: + add r5,r5,r5<<2 mgl@1371: + add r4,r4,r4<<1 mgl@1371: + add lr,lr,lr<<1 mgl@1371: + add r0,r12,r0<<1 mgl@1371: + add r9,r12,r4<<0 mgl@1371: + add r12,r12,r7<<2 mgl@1371: + .text mgl@1371: + .global sub2 mgl@1371: +sub2: mgl@1371: + sub pc,pc,pc<<0 mgl@1371: + sub r12,r12,r12<<3 mgl@1371: + sub r5,r5,r5<<2 mgl@1371: + sub r4,r4,r4<<1 mgl@1371: + sub lr,lr,lr<<1 mgl@1371: + sub sp,r3,r4<<0 mgl@1371: + sub r3,r7,r3<<0 mgl@1371: + sub sp,r10,sp<<1 mgl@1371: + .text mgl@1371: + .global divu mgl@1371: +divu: mgl@1371: + divu pc,pc,pc mgl@1371: + divu r12,r12,r12 mgl@1371: + divu r5,r5,r5 mgl@1371: + divu r4,r4,r4 mgl@1371: + divu lr,lr,lr mgl@1371: + divu sp,r4,pc mgl@1371: + divu r5,r5,sp mgl@1371: + divu r10,sp,r0 mgl@1371: + .text mgl@1371: + .global addhh_w mgl@1371: +addhh_w: mgl@1371: + addhh.w pc,pc:b,pc:b mgl@1371: + addhh.w r12,r12:t,r12:t mgl@1371: + addhh.w r5,r5:t,r5:t mgl@1371: + addhh.w r4,r4:b,r4:b mgl@1371: + addhh.w lr,lr:t,lr:t mgl@1371: + addhh.w r0,r0:b,r3:b mgl@1371: + addhh.w lr,r12:t,r7:b mgl@1371: + addhh.w r3,r10:t,r2:b mgl@1371: + .text mgl@1371: + .global subhh_w mgl@1371: +subhh_w: mgl@1371: + subhh.w pc,pc:b,pc:b mgl@1371: + subhh.w r12,r12:t,r12:t mgl@1371: + subhh.w r5,r5:t,r5:t mgl@1371: + subhh.w r4,r4:b,r4:b mgl@1371: + subhh.w lr,lr:t,lr:t mgl@1371: + subhh.w r10,r1:t,r7:b mgl@1371: + subhh.w pc,r10:t,lr:t mgl@1371: + subhh.w r3,r0:t,r12:b mgl@1371: + .text mgl@1371: + .global adc mgl@1371: +adc: mgl@1371: + adc pc,pc,pc mgl@1371: + adc r12,r12,r12 mgl@1371: + adc r5,r5,r5 mgl@1371: + adc r4,r4,r4 mgl@1371: + adc lr,lr,lr mgl@1371: + adc r4,r0,r7 mgl@1371: + adc sp,r4,r3 mgl@1371: + adc r2,r12,r0 mgl@1371: + .text mgl@1371: + .global sbc mgl@1371: +sbc: mgl@1371: + sbc pc,pc,pc mgl@1371: + sbc r12,r12,r12 mgl@1371: + sbc r5,r5,r5 mgl@1371: + sbc r4,r4,r4 mgl@1371: + sbc lr,lr,lr mgl@1371: + sbc r6,r7,r9 mgl@1371: + sbc r0,r8,r5 mgl@1371: + sbc r1,r0,r4 mgl@1371: + .text mgl@1371: + .global mul_2 mgl@1371: +mul_2: mgl@1371: + mul pc,pc,pc mgl@1371: + mul r12,r12,r12 mgl@1371: + mul r5,r5,r5 mgl@1371: + mul r4,r4,r4 mgl@1371: + mul lr,lr,lr mgl@1371: + mul pc,r0,r0 mgl@1371: + mul r8,pc,lr mgl@1371: + mul r4,r12,pc mgl@1371: + .text mgl@1371: + .global mac mgl@1371: +mac: mgl@1371: + mac pc,pc,pc mgl@1371: + mac r12,r12,r12 mgl@1371: + mac r5,r5,r5 mgl@1371: + mac r4,r4,r4 mgl@1371: + mac lr,lr,lr mgl@1371: + mac r10,r4,r0 mgl@1371: + mac r7,lr,r0 mgl@1371: + mac r2,r9,r12 mgl@1371: + .text mgl@1371: + .global mulsd mgl@1371: +mulsd: mgl@1371: + muls.d pc,pc,pc mgl@1371: + muls.d r12,r12,r12 mgl@1371: + muls.d r5,r5,r5 mgl@1371: + muls.d r4,r4,r4 mgl@1371: + muls.d lr,lr,lr mgl@1371: + muls.d r2,r8,lr mgl@1371: + muls.d r4,r0,r11 mgl@1371: + muls.d r5,lr,r6 mgl@1371: + .text mgl@1371: + .global macsd mgl@1371: +macsd: mgl@1371: + macs.d r0,pc,pc mgl@1371: + macs.d r14,r12,r12 mgl@1371: + macs.d r8,r5,r5 mgl@1371: + macs.d r6,r4,r4 mgl@1371: + macs.d r2,lr,lr mgl@1371: + macs.d r8,r1,r9 mgl@1371: + macs.d r14,r8,r8 mgl@1371: + macs.d r4,r3,r12 mgl@1371: + .text mgl@1371: + .global mulud mgl@1371: +mulud: mgl@1371: + mulu.d r0,pc,pc mgl@1371: + mulu.d r14,r12,r12 mgl@1371: + mulu.d r8,r5,r5 mgl@1371: + mulu.d r6,r4,r4 mgl@1371: + mulu.d r2,lr,lr mgl@1371: + mulu.d r6,r5,r0 mgl@1371: + mulu.d r4,r6,r1 mgl@1371: + mulu.d r8,r8,r2 mgl@1371: + .text mgl@1371: + .global macud mgl@1371: +macud: mgl@1371: + macu.d r0,pc,pc mgl@1371: + macu.d r14,r12,r12 mgl@1371: + macu.d r8,r5,r5 mgl@1371: + macu.d r6,r4,r4 mgl@1371: + macu.d r2,lr,lr mgl@1371: + macu.d r6,sp,r11 mgl@1371: + macu.d r2,r4,r8 mgl@1371: + macu.d r6,r10,r9 mgl@1371: + .text mgl@1371: + .global asr_1 mgl@1371: +asr_1: mgl@1371: + asr pc,pc,pc mgl@1371: + asr r12,r12,r12 mgl@1371: + asr r5,r5,r5 mgl@1371: + asr r4,r4,r4 mgl@1371: + asr lr,lr,lr mgl@1371: + asr pc,r6,pc mgl@1371: + asr r0,r6,r12 mgl@1371: + asr r4,sp,r0 mgl@1371: + .text mgl@1371: + .global lsl_1 mgl@1371: +lsl_1: mgl@1371: + lsl pc,pc,pc mgl@1371: + lsl r12,r12,r12 mgl@1371: + lsl r5,r5,r5 mgl@1371: + lsl r4,r4,r4 mgl@1371: + lsl lr,lr,lr mgl@1371: + lsl lr,r5,lr mgl@1371: + lsl r5,pc,r3 mgl@1371: + lsl r1,pc,r9 mgl@1371: + .text mgl@1371: + .global lsr_1 mgl@1371: +lsr_1: mgl@1371: + lsr pc,pc,pc mgl@1371: + lsr r12,r12,r12 mgl@1371: + lsr r5,r5,r5 mgl@1371: + lsr r4,r4,r4 mgl@1371: + lsr lr,lr,lr mgl@1371: + lsr r2,r4,r1 mgl@1371: + lsr r5,r1,r6 mgl@1371: + lsr sp,r6,r7 mgl@1371: + .text mgl@1371: + .global xchg mgl@1371: +xchg: mgl@1371: + xchg pc,pc,pc mgl@1371: + xchg r12,r12,r12 mgl@1371: + xchg r5,r5,r5 mgl@1371: + xchg r4,r4,r4 mgl@1371: + xchg lr,lr,lr mgl@1371: + xchg lr,r4,sp mgl@1371: + xchg r1,r5,r12 mgl@1371: + xchg lr,r12,r0 mgl@1371: + .text mgl@1371: + .global max mgl@1371: +max: mgl@1371: + max pc,pc,pc mgl@1371: + max r12,r12,r12 mgl@1371: + max r5,r5,r5 mgl@1371: + max r4,r4,r4 mgl@1371: + max lr,lr,lr mgl@1371: + max lr,r2,sp mgl@1371: + max r4,r10,r9 mgl@1371: + max lr,r9,lr mgl@1371: + .text mgl@1371: + .global min mgl@1371: +min: mgl@1371: + min pc,pc,pc mgl@1371: + min r12,r12,r12 mgl@1371: + min r5,r5,r5 mgl@1371: + min r4,r4,r4 mgl@1371: + min lr,lr,lr mgl@1371: + min r9,r7,r8 mgl@1371: + min sp,r5,r5 mgl@1371: + min r4,r1,r4 mgl@1371: + .text mgl@1371: + .global addabs mgl@1371: +addabs: mgl@1371: + addabs pc,pc,pc mgl@1371: + addabs r12,r12,r12 mgl@1371: + addabs r5,r5,r5 mgl@1371: + addabs r4,r4,r4 mgl@1371: + addabs lr,lr,lr mgl@1371: + addabs r7,r10,r0 mgl@1371: + addabs r9,r9,r7 mgl@1371: + addabs r2,r8,r12 mgl@1371: + .text mgl@1371: + .global mulnhh_w mgl@1371: +mulnhh_w: mgl@1371: + mulnhh.w pc,pc:b,pc:b mgl@1371: + mulnhh.w r12,r12:t,r12:t mgl@1371: + mulnhh.w r5,r5:t,r5:t mgl@1371: + mulnhh.w r4,r4:b,r4:b mgl@1371: + mulnhh.w lr,lr:t,lr:t mgl@1371: + mulnhh.w r11,sp:t,r9:b mgl@1371: + mulnhh.w sp,r4:b,lr:t mgl@1371: + mulnhh.w r12,r2:t,r11:b mgl@1371: + .text mgl@1371: + .global mulnwh_d mgl@1371: +mulnwh_d: mgl@1371: + mulnwh.d r0,pc,pc:b mgl@1371: + mulnwh.d r14,r12,r12:t mgl@1371: + mulnwh.d r8,r5,r5:t mgl@1371: + mulnwh.d r6,r4,r4:b mgl@1371: + mulnwh.d r2,lr,lr:t mgl@1371: + mulnwh.d r14,r3,r2:t mgl@1371: + mulnwh.d r4,r5,r9:b mgl@1371: + mulnwh.d r12,r4,r4:t mgl@1371: + .text mgl@1371: + .global machh_w mgl@1371: +machh_w: mgl@1371: + machh.w pc,pc:b,pc:b mgl@1371: + machh.w r12,r12:t,r12:t mgl@1371: + machh.w r5,r5:t,r5:t mgl@1371: + machh.w r4,r4:b,r4:b mgl@1371: + machh.w lr,lr:t,lr:t mgl@1371: + machh.w lr,r5:b,r1:t mgl@1371: + machh.w r9,r6:b,r7:b mgl@1371: + machh.w r5,lr:t,r12:b mgl@1371: + .text mgl@1371: + .global machh_d mgl@1371: +machh_d: mgl@1371: + machh.d r0,pc:b,pc:b mgl@1371: + machh.d r14,r12:t,r12:t mgl@1371: + machh.d r8,r5:t,r5:t mgl@1371: + machh.d r6,r4:b,r4:b mgl@1371: + machh.d r2,lr:t,lr:t mgl@1371: + machh.d r10,r0:b,r8:b mgl@1371: + machh.d r14,r4:b,r5:t mgl@1371: + machh.d r8,r0:b,r4:t mgl@1371: + .text mgl@1371: + .global macsathh_w mgl@1371: +macsathh_w: mgl@1371: + macsathh.w pc,pc:b,pc:b mgl@1371: + macsathh.w r12,r12:t,r12:t mgl@1371: + macsathh.w r5,r5:t,r5:t mgl@1371: + macsathh.w r4,r4:b,r4:b mgl@1371: + macsathh.w lr,lr:t,lr:t mgl@1371: + macsathh.w r7,r7:t,pc:t mgl@1371: + macsathh.w r4,r2:t,r4:b mgl@1371: + macsathh.w r4,r8:t,r3:t mgl@1371: + .text mgl@1371: + .global mulhh_w mgl@1371: +mulhh_w: mgl@1371: + mulhh.w pc,pc:b,pc:b mgl@1371: + mulhh.w r12,r12:t,r12:t mgl@1371: + mulhh.w r5,r5:t,r5:t mgl@1371: + mulhh.w r4,r4:b,r4:b mgl@1371: + mulhh.w lr,lr:t,lr:t mgl@1371: + mulhh.w r7,r4:t,r9:b mgl@1371: + mulhh.w pc,r3:t,r7:t mgl@1371: + mulhh.w pc,r4:b,r9:t mgl@1371: + .text mgl@1371: + .global mulsathh_h mgl@1371: +mulsathh_h: mgl@1371: + mulsathh.h pc,pc:b,pc:b mgl@1371: + mulsathh.h r12,r12:t,r12:t mgl@1371: + mulsathh.h r5,r5:t,r5:t mgl@1371: + mulsathh.h r4,r4:b,r4:b mgl@1371: + mulsathh.h lr,lr:t,lr:t mgl@1371: + mulsathh.h r3,r1:b,sp:b mgl@1371: + mulsathh.h r11,lr:t,r11:b mgl@1371: + mulsathh.h r8,r8:b,r11:t mgl@1371: + .text mgl@1371: + .global mulsathh_w mgl@1371: +mulsathh_w: mgl@1371: + mulsathh.w pc,pc:b,pc:b mgl@1371: + mulsathh.w r12,r12:t,r12:t mgl@1371: + mulsathh.w r5,r5:t,r5:t mgl@1371: + mulsathh.w r4,r4:b,r4:b mgl@1371: + mulsathh.w lr,lr:t,lr:t mgl@1371: + mulsathh.w lr,r11:t,r6:b mgl@1371: + mulsathh.w r6,r6:b,r7:t mgl@1371: + mulsathh.w r10,r2:b,r3:b mgl@1371: + .text mgl@1371: + .global mulsatrndhh_h mgl@1371: +mulsatrndhh_h: mgl@1371: + mulsatrndhh.h pc,pc:b,pc:b mgl@1371: + mulsatrndhh.h r12,r12:t,r12:t mgl@1371: + mulsatrndhh.h r5,r5:t,r5:t mgl@1371: + mulsatrndhh.h r4,r4:b,r4:b mgl@1371: + mulsatrndhh.h lr,lr:t,lr:t mgl@1371: + mulsatrndhh.h r11,r6:b,r9:b mgl@1371: + mulsatrndhh.h r11,r3:b,r8:t mgl@1371: + mulsatrndhh.h r5,sp:t,r7:t mgl@1371: + .text mgl@1371: + .global mulsatrndwh_w mgl@1371: +mulsatrndwh_w: mgl@1371: + mulsatrndwh.w pc,pc,pc:b mgl@1371: + mulsatrndwh.w r12,r12,r12:t mgl@1371: + mulsatrndwh.w r5,r5,r5:t mgl@1371: + mulsatrndwh.w r4,r4,r4:b mgl@1371: + mulsatrndwh.w lr,lr,lr:t mgl@1371: + mulsatrndwh.w r5,r12,r0:b mgl@1371: + mulsatrndwh.w r7,r10,pc:b mgl@1371: + mulsatrndwh.w r10,r8,r5:t mgl@1371: + .text mgl@1371: + .global macwh_d mgl@1371: +macwh_d: mgl@1371: + macwh.d r0,pc,pc:b mgl@1371: + macwh.d r14,r12,r12:t mgl@1371: + macwh.d r8,r5,r5:t mgl@1371: + macwh.d r6,r4,r4:b mgl@1371: + macwh.d r2,lr,lr:t mgl@1371: + macwh.d r4,r10,r12:t mgl@1371: + macwh.d r4,r7,sp:b mgl@1371: + macwh.d r14,r9,r11:b mgl@1371: + .text mgl@1371: + .global mulwh_d mgl@1371: +mulwh_d: mgl@1371: + mulwh.d r0,pc,pc:b mgl@1371: + mulwh.d r14,r12,r12:t mgl@1371: + mulwh.d r8,r5,r5:t mgl@1371: + mulwh.d r6,r4,r4:b mgl@1371: + mulwh.d r2,lr,lr:t mgl@1371: + mulwh.d r12,r5,r1:b mgl@1371: + mulwh.d r0,r1,r3:t mgl@1371: + mulwh.d r0,r9,r2:b mgl@1371: + .text mgl@1371: + .global mulsatwh_w mgl@1371: +mulsatwh_w: mgl@1371: + mulsatwh.w pc,pc,pc:b mgl@1371: + mulsatwh.w r12,r12,r12:t mgl@1371: + mulsatwh.w r5,r5,r5:t mgl@1371: + mulsatwh.w r4,r4,r4:b mgl@1371: + mulsatwh.w lr,lr,lr:t mgl@1371: + mulsatwh.w r11,pc,r10:t mgl@1371: + mulsatwh.w sp,r12,r9:t mgl@1371: + mulsatwh.w r0,r3,r2:t mgl@1371: + .text mgl@1371: + .global ldw7 mgl@1371: +ldw7: mgl@1371: + ld.w pc,pc[pc:b<<2] mgl@1371: + ld.w r12,r12[r12:t<<2] mgl@1371: + ld.w r5,r5[r5:u<<2] mgl@1371: + ld.w r4,r4[r4:l<<2] mgl@1371: + ld.w lr,lr[lr:l<<2] mgl@1371: + ld.w r9,r10[r6:l<<2] mgl@1371: + ld.w r2,r10[r10:b<<2] mgl@1371: + ld.w r11,r5[pc:b<<2] mgl@1371: + .text mgl@1371: + .global satadd_w mgl@1371: +satadd_w: mgl@1371: + satadd.w pc,pc,pc mgl@1371: + satadd.w r12,r12,r12 mgl@1371: + satadd.w r5,r5,r5 mgl@1371: + satadd.w r4,r4,r4 mgl@1371: + satadd.w lr,lr,lr mgl@1371: + satadd.w r4,r8,r11 mgl@1371: + satadd.w r3,r12,r6 mgl@1371: + satadd.w r3,lr,r9 mgl@1371: + .text mgl@1371: + .global satsub_w1 mgl@1371: +satsub_w1: mgl@1371: + satsub.w pc,pc,pc mgl@1371: + satsub.w r12,r12,r12 mgl@1371: + satsub.w r5,r5,r5 mgl@1371: + satsub.w r4,r4,r4 mgl@1371: + satsub.w lr,lr,lr mgl@1371: + satsub.w r8,sp,r0 mgl@1371: + satsub.w r9,r8,r4 mgl@1371: + satsub.w pc,lr,r2 mgl@1371: + .text mgl@1371: + .global satadd_h mgl@1371: +satadd_h: mgl@1371: + satadd.h pc,pc,pc mgl@1371: + satadd.h r12,r12,r12 mgl@1371: + satadd.h r5,r5,r5 mgl@1371: + satadd.h r4,r4,r4 mgl@1371: + satadd.h lr,lr,lr mgl@1371: + satadd.h r7,r3,r9 mgl@1371: + satadd.h r1,r0,r2 mgl@1371: + satadd.h r1,r4,lr mgl@1371: + .text mgl@1371: + .global satsub_h mgl@1371: +satsub_h: mgl@1371: + satsub.h pc,pc,pc mgl@1371: + satsub.h r12,r12,r12 mgl@1371: + satsub.h r5,r5,r5 mgl@1371: + satsub.h r4,r4,r4 mgl@1371: + satsub.h lr,lr,lr mgl@1371: + satsub.h lr,lr,r3 mgl@1371: + satsub.h r11,r6,r5 mgl@1371: + satsub.h r3,sp,r0 mgl@1371: + .text mgl@1371: + .global mul3 mgl@1371: +mul3: mgl@1371: + mul pc,pc,0 mgl@1371: + mul r12,r12,-1 mgl@1371: + mul r5,r5,-128 mgl@1371: + mul r4,r4,127 mgl@1371: + mul lr,lr,1 mgl@1371: + mul r12,r2,-7 mgl@1371: + mul r1,pc,95 mgl@1371: + mul r4,r6,19 mgl@1371: + .text mgl@1371: + .global rsub2 mgl@1371: +rsub2: mgl@1371: + rsub pc,pc,0 mgl@1371: + rsub r12,r12,-1 mgl@1371: + rsub r5,r5,-128 mgl@1371: + rsub r4,r4,127 mgl@1371: + rsub lr,lr,1 mgl@1371: + rsub r9,lr,96 mgl@1371: + rsub r11,r1,56 mgl@1371: + rsub r0,r7,-87 mgl@1371: + .text mgl@1371: + .global clz mgl@1371: +clz: mgl@1371: + clz pc,pc mgl@1371: + clz r12,r12 mgl@1371: + clz r5,r5 mgl@1371: + clz r4,r4 mgl@1371: + clz lr,lr mgl@1371: + clz r2,r3 mgl@1371: + clz r5,r11 mgl@1371: + clz pc,r3 mgl@1371: + .text mgl@1371: + .global cpc1 mgl@1371: +cpc1: mgl@1371: + cpc pc,pc mgl@1371: + cpc r12,r12 mgl@1371: + cpc r5,r5 mgl@1371: + cpc r4,r4 mgl@1371: + cpc lr,lr mgl@1371: + cpc pc,r4 mgl@1371: + cpc r5,r9 mgl@1371: + cpc r6,r7 mgl@1371: + .text mgl@1371: + .global asr3 mgl@1371: +asr3: mgl@1371: + asr pc,pc,0 mgl@1371: + asr r12,r12,31 mgl@1371: + asr r5,r5,16 mgl@1371: + asr r4,r4,15 mgl@1371: + asr lr,lr,1 mgl@1371: + asr r4,r11,19 mgl@1371: + asr sp,pc,26 mgl@1371: + asr r11,sp,8 mgl@1371: + .text mgl@1371: + .global lsl3 mgl@1371: +lsl3: mgl@1371: + lsl pc,pc,0 mgl@1371: + lsl r12,r12,31 mgl@1371: + lsl r5,r5,16 mgl@1371: + lsl r4,r4,15 mgl@1371: + lsl lr,lr,1 mgl@1371: + lsl r8,r10,17 mgl@1371: + lsl r2,lr,3 mgl@1371: + lsl lr,r11,14 mgl@1371: + .text mgl@1371: + .global lsr3 mgl@1371: +lsr3: mgl@1371: + lsr pc,pc,0 mgl@1371: + lsr r12,r12,31 mgl@1371: + lsr r5,r5,16 mgl@1371: + lsr r4,r4,15 mgl@1371: + lsr lr,lr,1 mgl@1371: + lsr r4,r3,31 mgl@1371: + lsr pc,r9,14 mgl@1371: + lsr r3,r0,6 mgl@1371: +/* .text mgl@1371: + .global extract_b mgl@1371: +extract_b: mgl@1371: + extract.b pc,pc:b mgl@1371: + extract.b r12,r12:t mgl@1371: + extract.b r5,r5:u mgl@1371: + extract.b r4,r4:l mgl@1371: + extract.b lr,lr:l mgl@1371: + extract.b r2,r5:l mgl@1371: + extract.b r12,r3:l mgl@1371: + extract.b sp,r3:l mgl@1371: + .text mgl@1371: + .global insert_b mgl@1371: +insert_b: mgl@1371: + insert.b pc:b,pc mgl@1371: + insert.b r12:t,r12 mgl@1371: + insert.b r5:u,r5 mgl@1371: + insert.b r4:l,r4 mgl@1371: + insert.b lr:l,lr mgl@1371: + insert.b r12:u,r3 mgl@1371: + insert.b r10:l,lr mgl@1371: + insert.b r11:l,r12 mgl@1371: + .text mgl@1371: + .global extract_h mgl@1371: +extract_h: mgl@1371: + extract.h pc,pc:b mgl@1371: + extract.h r12,r12:t mgl@1371: + extract.h r5,r5:t mgl@1371: + extract.h r4,r4:b mgl@1371: + extract.h lr,lr:t mgl@1371: + extract.h r11,lr:b mgl@1371: + extract.h r10,r0:b mgl@1371: + extract.h r11,r12:b mgl@1371: + .text mgl@1371: + .global insert_h mgl@1371: +insert_h: mgl@1371: + insert.h pc:b,pc mgl@1371: + insert.h r12:t,r12 mgl@1371: + insert.h r5:t,r5 mgl@1371: + insert.h r4:b,r4 mgl@1371: + insert.h lr:t,lr mgl@1371: + insert.h r12:t,r11 mgl@1371: + insert.h r7:b,r6 mgl@1371: + insert.h r1:t,r11 */ mgl@1371: + .text mgl@1371: + .global movc1 mgl@1371: +movc1: mgl@1371: + moveq pc,pc mgl@1371: + moval r12,r12 mgl@1371: + movls r5,r5 mgl@1371: + movpl r4,r4 mgl@1371: + movne lr,lr mgl@1371: + movne pc,r11 mgl@1371: + movmi r10,r2 mgl@1371: + movls r8,r12 mgl@1371: + .text mgl@1371: + .global padd_h mgl@1371: +padd_h: mgl@1371: + padd.h pc,pc,pc mgl@1371: + padd.h r12,r12,r12 mgl@1371: + padd.h r5,r5,r5 mgl@1371: + padd.h r4,r4,r4 mgl@1371: + padd.h lr,lr,lr mgl@1371: + padd.h r8,r2,r7 mgl@1371: + padd.h r0,r0,r3 mgl@1371: + padd.h sp,r11,r6 mgl@1371: + .text mgl@1371: + .global psub_h mgl@1371: +psub_h: mgl@1371: + psub.h pc,pc,pc mgl@1371: + psub.h r12,r12,r12 mgl@1371: + psub.h r5,r5,r5 mgl@1371: + psub.h r4,r4,r4 mgl@1371: + psub.h lr,lr,lr mgl@1371: + psub.h lr,r6,r8 mgl@1371: + psub.h r0,r1,sp mgl@1371: + psub.h pc,pc,sp mgl@1371: + .text mgl@1371: + .global paddx_h mgl@1371: +paddx_h: mgl@1371: + paddx.h pc,pc,pc mgl@1371: + paddx.h r12,r12,r12 mgl@1371: + paddx.h r5,r5,r5 mgl@1371: + paddx.h r4,r4,r4 mgl@1371: + paddx.h lr,lr,lr mgl@1371: + paddx.h pc,pc,r1 mgl@1371: + paddx.h r10,r4,r5 mgl@1371: + paddx.h r5,pc,r2 mgl@1371: + .text mgl@1371: + .global psubx_h mgl@1371: +psubx_h: mgl@1371: + psubx.h pc,pc,pc mgl@1371: + psubx.h r12,r12,r12 mgl@1371: + psubx.h r5,r5,r5 mgl@1371: + psubx.h r4,r4,r4 mgl@1371: + psubx.h lr,lr,lr mgl@1371: + psubx.h r5,r12,r5 mgl@1371: + psubx.h r3,r8,r3 mgl@1371: + psubx.h r5,r2,r3 mgl@1371: + .text mgl@1371: + .global padds_sh mgl@1371: +padds_sh: mgl@1371: + padds.sh pc,pc,pc mgl@1371: + padds.sh r12,r12,r12 mgl@1371: + padds.sh r5,r5,r5 mgl@1371: + padds.sh r4,r4,r4 mgl@1371: + padds.sh lr,lr,lr mgl@1371: + padds.sh r9,lr,r2 mgl@1371: + padds.sh r6,r8,r1 mgl@1371: + padds.sh r6,r4,r10 mgl@1371: + .text mgl@1371: + .global psubs_sh mgl@1371: +psubs_sh: mgl@1371: + psubs.sh pc,pc,pc mgl@1371: + psubs.sh r12,r12,r12 mgl@1371: + psubs.sh r5,r5,r5 mgl@1371: + psubs.sh r4,r4,r4 mgl@1371: + psubs.sh lr,lr,lr mgl@1371: + psubs.sh r6,lr,r11 mgl@1371: + psubs.sh r2,r12,r4 mgl@1371: + psubs.sh r0,r9,r0 mgl@1371: + .text mgl@1371: + .global paddxs_sh mgl@1371: +paddxs_sh: mgl@1371: + paddxs.sh pc,pc,pc mgl@1371: + paddxs.sh r12,r12,r12 mgl@1371: + paddxs.sh r5,r5,r5 mgl@1371: + paddxs.sh r4,r4,r4 mgl@1371: + paddxs.sh lr,lr,lr mgl@1371: + paddxs.sh r0,r3,r9 mgl@1371: + paddxs.sh pc,r10,r11 mgl@1371: + paddxs.sh pc,r10,pc mgl@1371: + .text mgl@1371: + .global psubxs_sh mgl@1371: +psubxs_sh: mgl@1371: + psubxs.sh pc,pc,pc mgl@1371: + psubxs.sh r12,r12,r12 mgl@1371: + psubxs.sh r5,r5,r5 mgl@1371: + psubxs.sh r4,r4,r4 mgl@1371: + psubxs.sh lr,lr,lr mgl@1371: + psubxs.sh r7,r4,r4 mgl@1371: + psubxs.sh r7,r8,r3 mgl@1371: + psubxs.sh pc,r6,r5 mgl@1371: + .text mgl@1371: + .global padds_uh mgl@1371: +padds_uh: mgl@1371: + padds.uh pc,pc,pc mgl@1371: + padds.uh r12,r12,r12 mgl@1371: + padds.uh r5,r5,r5 mgl@1371: + padds.uh r4,r4,r4 mgl@1371: + padds.uh lr,lr,lr mgl@1371: + padds.uh r12,r11,r7 mgl@1371: + padds.uh r7,r8,lr mgl@1371: + padds.uh r6,r9,r7 mgl@1371: + .text mgl@1371: + .global psubs_uh mgl@1371: +psubs_uh: mgl@1371: + psubs.uh pc,pc,pc mgl@1371: + psubs.uh r12,r12,r12 mgl@1371: + psubs.uh r5,r5,r5 mgl@1371: + psubs.uh r4,r4,r4 mgl@1371: + psubs.uh lr,lr,lr mgl@1371: + psubs.uh lr,r10,r6 mgl@1371: + psubs.uh sp,r2,pc mgl@1371: + psubs.uh r2,r9,r2 mgl@1371: + .text mgl@1371: + .global paddxs_uh mgl@1371: +paddxs_uh: mgl@1371: + paddxs.uh pc,pc,pc mgl@1371: + paddxs.uh r12,r12,r12 mgl@1371: + paddxs.uh r5,r5,r5 mgl@1371: + paddxs.uh r4,r4,r4 mgl@1371: + paddxs.uh lr,lr,lr mgl@1371: + paddxs.uh r7,r9,r5 mgl@1371: + paddxs.uh r9,r1,r4 mgl@1371: + paddxs.uh r5,r2,r3 mgl@1371: + .text mgl@1371: + .global psubxs_uh mgl@1371: +psubxs_uh: mgl@1371: + psubxs.uh pc,pc,pc mgl@1371: + psubxs.uh r12,r12,r12 mgl@1371: + psubxs.uh r5,r5,r5 mgl@1371: + psubxs.uh r4,r4,r4 mgl@1371: + psubxs.uh lr,lr,lr mgl@1371: + psubxs.uh sp,r5,sp mgl@1371: + psubxs.uh sp,r6,r6 mgl@1371: + psubxs.uh r3,r11,r8 mgl@1371: + .text mgl@1371: + .global paddh_sh mgl@1371: +paddh_sh: mgl@1371: + paddh.sh pc,pc,pc mgl@1371: + paddh.sh r12,r12,r12 mgl@1371: + paddh.sh r5,r5,r5 mgl@1371: + paddh.sh r4,r4,r4 mgl@1371: + paddh.sh lr,lr,lr mgl@1371: + paddh.sh r12,sp,r3 mgl@1371: + paddh.sh pc,r5,r3 mgl@1371: + paddh.sh r8,r8,sp mgl@1371: + .text mgl@1371: + .global psubh_sh mgl@1371: +psubh_sh: mgl@1371: + psubh.sh pc,pc,pc mgl@1371: + psubh.sh r12,r12,r12 mgl@1371: + psubh.sh r5,r5,r5 mgl@1371: + psubh.sh r4,r4,r4 mgl@1371: + psubh.sh lr,lr,lr mgl@1371: + psubh.sh r1,r5,r8 mgl@1371: + psubh.sh r7,r3,r6 mgl@1371: + psubh.sh r4,r3,r3 mgl@1371: + .text mgl@1371: + .global paddxh_sh mgl@1371: +paddxh_sh: mgl@1371: + paddxh.sh pc,pc,pc mgl@1371: + paddxh.sh r12,r12,r12 mgl@1371: + paddxh.sh r5,r5,r5 mgl@1371: + paddxh.sh r4,r4,r4 mgl@1371: + paddxh.sh lr,lr,lr mgl@1371: + paddxh.sh r6,r0,r4 mgl@1371: + paddxh.sh r9,r8,r9 mgl@1371: + paddxh.sh r3,r0,sp mgl@1371: + .text mgl@1371: + .global psubxh_sh mgl@1371: +psubxh_sh: mgl@1371: + psubxh.sh pc,pc,pc mgl@1371: + psubxh.sh r12,r12,r12 mgl@1371: + psubxh.sh r5,r5,r5 mgl@1371: + psubxh.sh r4,r4,r4 mgl@1371: + psubxh.sh lr,lr,lr mgl@1371: + psubxh.sh r4,pc,r12 mgl@1371: + psubxh.sh r8,r4,r6 mgl@1371: + psubxh.sh r12,r9,r4 mgl@1371: + .text mgl@1371: + .global paddsub_h mgl@1371: +paddsub_h: mgl@1371: + paddsub.h pc,pc:b,pc:b mgl@1371: + paddsub.h r12,r12:t,r12:t mgl@1371: + paddsub.h r5,r5:t,r5:t mgl@1371: + paddsub.h r4,r4:b,r4:b mgl@1371: + paddsub.h lr,lr:t,lr:t mgl@1371: + paddsub.h r5,r2:t,lr:b mgl@1371: + paddsub.h r7,r1:b,r8:b mgl@1371: + paddsub.h r6,r10:t,r5:t mgl@1371: + .text mgl@1371: + .global psubadd_h mgl@1371: +psubadd_h: mgl@1371: + psubadd.h pc,pc:b,pc:b mgl@1371: + psubadd.h r12,r12:t,r12:t mgl@1371: + psubadd.h r5,r5:t,r5:t mgl@1371: + psubadd.h r4,r4:b,r4:b mgl@1371: + psubadd.h lr,lr:t,lr:t mgl@1371: + psubadd.h r9,r11:t,r8:t mgl@1371: + psubadd.h r10,r7:t,lr:t mgl@1371: + psubadd.h r6,pc:t,pc:b mgl@1371: + .text mgl@1371: + .global paddsubs_sh mgl@1371: +paddsubs_sh: mgl@1371: + paddsubs.sh pc,pc:b,pc:b mgl@1371: + paddsubs.sh r12,r12:t,r12:t mgl@1371: + paddsubs.sh r5,r5:t,r5:t mgl@1371: + paddsubs.sh r4,r4:b,r4:b mgl@1371: + paddsubs.sh lr,lr:t,lr:t mgl@1371: + paddsubs.sh r0,lr:t,r0:b mgl@1371: + paddsubs.sh r9,r2:t,r4:t mgl@1371: + paddsubs.sh r12,r9:t,sp:t mgl@1371: + .text mgl@1371: + .global psubadds_sh mgl@1371: +psubadds_sh: mgl@1371: + psubadds.sh pc,pc:b,pc:b mgl@1371: + psubadds.sh r12,r12:t,r12:t mgl@1371: + psubadds.sh r5,r5:t,r5:t mgl@1371: + psubadds.sh r4,r4:b,r4:b mgl@1371: + psubadds.sh lr,lr:t,lr:t mgl@1371: + psubadds.sh pc,lr:b,r1:t mgl@1371: + psubadds.sh r11,r3:b,r12:b mgl@1371: + psubadds.sh r10,r2:t,r8:t mgl@1371: + .text mgl@1371: + .global paddsubs_uh mgl@1371: +paddsubs_uh: mgl@1371: + paddsubs.uh pc,pc:b,pc:b mgl@1371: + paddsubs.uh r12,r12:t,r12:t mgl@1371: + paddsubs.uh r5,r5:t,r5:t mgl@1371: + paddsubs.uh r4,r4:b,r4:b mgl@1371: + paddsubs.uh lr,lr:t,lr:t mgl@1371: + paddsubs.uh r9,r2:b,r3:b mgl@1371: + paddsubs.uh sp,sp:b,r7:t mgl@1371: + paddsubs.uh lr,r0:b,r10:t mgl@1371: + .text mgl@1371: + .global psubadds_uh mgl@1371: +psubadds_uh: mgl@1371: + psubadds.uh pc,pc:b,pc:b mgl@1371: + psubadds.uh r12,r12:t,r12:t mgl@1371: + psubadds.uh r5,r5:t,r5:t mgl@1371: + psubadds.uh r4,r4:b,r4:b mgl@1371: + psubadds.uh lr,lr:t,lr:t mgl@1371: + psubadds.uh r12,r9:t,pc:t mgl@1371: + psubadds.uh r8,r6:b,r8:b mgl@1371: + psubadds.uh r8,r8:b,r4:b mgl@1371: + .text mgl@1371: + .global paddsubh_sh mgl@1371: +paddsubh_sh: mgl@1371: + paddsubh.sh pc,pc:b,pc:b mgl@1371: + paddsubh.sh r12,r12:t,r12:t mgl@1371: + paddsubh.sh r5,r5:t,r5:t mgl@1371: + paddsubh.sh r4,r4:b,r4:b mgl@1371: + paddsubh.sh lr,lr:t,lr:t mgl@1371: + paddsubh.sh r8,r9:t,r9:b mgl@1371: + paddsubh.sh r0,sp:t,r1:t mgl@1371: + paddsubh.sh r3,r1:b,r0:t mgl@1371: + .text mgl@1371: + .global psubaddh_sh mgl@1371: +psubaddh_sh: mgl@1371: + psubaddh.sh pc,pc:b,pc:b mgl@1371: + psubaddh.sh r12,r12:t,r12:t mgl@1371: + psubaddh.sh r5,r5:t,r5:t mgl@1371: + psubaddh.sh r4,r4:b,r4:b mgl@1371: + psubaddh.sh lr,lr:t,lr:t mgl@1371: + psubaddh.sh r7,r3:t,r10:b mgl@1371: + psubaddh.sh r7,r2:t,r1:t mgl@1371: + psubaddh.sh r11,r3:b,r6:b mgl@1371: + .text mgl@1371: + .global padd_b mgl@1371: +padd_b: mgl@1371: + padd.b pc,pc,pc mgl@1371: + padd.b r12,r12,r12 mgl@1371: + padd.b r5,r5,r5 mgl@1371: + padd.b r4,r4,r4 mgl@1371: + padd.b lr,lr,lr mgl@1371: + padd.b r2,r6,pc mgl@1371: + padd.b r8,r9,r12 mgl@1371: + padd.b r5,r12,r3 mgl@1371: + .text mgl@1371: + .global psub_b mgl@1371: +psub_b: mgl@1371: + psub.b pc,pc,pc mgl@1371: + psub.b r12,r12,r12 mgl@1371: + psub.b r5,r5,r5 mgl@1371: + psub.b r4,r4,r4 mgl@1371: + psub.b lr,lr,lr mgl@1371: + psub.b r0,r12,pc mgl@1371: + psub.b r7,sp,r10 mgl@1371: + psub.b r5,sp,r12 mgl@1371: + .text mgl@1371: + .global padds_sb mgl@1371: +padds_sb: mgl@1371: + padds.sb pc,pc,pc mgl@1371: + padds.sb r12,r12,r12 mgl@1371: + padds.sb r5,r5,r5 mgl@1371: + padds.sb r4,r4,r4 mgl@1371: + padds.sb lr,lr,lr mgl@1371: + padds.sb sp,r11,r4 mgl@1371: + padds.sb r11,r10,r11 mgl@1371: + padds.sb r5,r12,r6 mgl@1371: + .text mgl@1371: + .global psubs_sb mgl@1371: +psubs_sb: mgl@1371: + psubs.sb pc,pc,pc mgl@1371: + psubs.sb r12,r12,r12 mgl@1371: + psubs.sb r5,r5,r5 mgl@1371: + psubs.sb r4,r4,r4 mgl@1371: + psubs.sb lr,lr,lr mgl@1371: + psubs.sb r7,r6,r8 mgl@1371: + psubs.sb r12,r10,r9 mgl@1371: + psubs.sb pc,r11,r0 mgl@1371: + .text mgl@1371: + .global padds_ub mgl@1371: +padds_ub: mgl@1371: + padds.ub pc,pc,pc mgl@1371: + padds.ub r12,r12,r12 mgl@1371: + padds.ub r5,r5,r5 mgl@1371: + padds.ub r4,r4,r4 mgl@1371: + padds.ub lr,lr,lr mgl@1371: + padds.ub r3,r2,r11 mgl@1371: + padds.ub r10,r8,r1 mgl@1371: + padds.ub r11,r8,r10 mgl@1371: + .text mgl@1371: + .global psubs_ub mgl@1371: +psubs_ub: mgl@1371: + psubs.ub pc,pc,pc mgl@1371: + psubs.ub r12,r12,r12 mgl@1371: + psubs.ub r5,r5,r5 mgl@1371: + psubs.ub r4,r4,r4 mgl@1371: + psubs.ub lr,lr,lr mgl@1371: + psubs.ub r0,r2,r7 mgl@1371: + psubs.ub lr,r5,r3 mgl@1371: + psubs.ub r6,r7,r9 mgl@1371: + .text mgl@1371: + .global paddh_ub mgl@1371: +paddh_ub: mgl@1371: + paddh.ub pc,pc,pc mgl@1371: + paddh.ub r12,r12,r12 mgl@1371: + paddh.ub r5,r5,r5 mgl@1371: + paddh.ub r4,r4,r4 mgl@1371: + paddh.ub lr,lr,lr mgl@1371: + paddh.ub lr,r1,r0 mgl@1371: + paddh.ub r2,r7,r7 mgl@1371: + paddh.ub r2,r1,r2 mgl@1371: + .text mgl@1371: + .global psubh_ub mgl@1371: +psubh_ub: mgl@1371: + psubh.ub pc,pc,pc mgl@1371: + psubh.ub r12,r12,r12 mgl@1371: + psubh.ub r5,r5,r5 mgl@1371: + psubh.ub r4,r4,r4 mgl@1371: + psubh.ub lr,lr,lr mgl@1371: + psubh.ub r0,r1,r6 mgl@1371: + psubh.ub r4,lr,r10 mgl@1371: + psubh.ub r9,r8,r1 mgl@1371: + .text mgl@1371: + .global pmax_ub mgl@1371: +pmax_ub: mgl@1371: + pmax.ub pc,pc,pc mgl@1371: + pmax.ub r12,r12,r12 mgl@1371: + pmax.ub r5,r5,r5 mgl@1371: + pmax.ub r4,r4,r4 mgl@1371: + pmax.ub lr,lr,lr mgl@1371: + pmax.ub pc,r2,r11 mgl@1371: + pmax.ub r12,r1,r1 mgl@1371: + pmax.ub r5,r2,r0 mgl@1371: + .text mgl@1371: + .global pmax_sh mgl@1371: +pmax_sh: mgl@1371: + pmax.sh pc,pc,pc mgl@1371: + pmax.sh r12,r12,r12 mgl@1371: + pmax.sh r5,r5,r5 mgl@1371: + pmax.sh r4,r4,r4 mgl@1371: + pmax.sh lr,lr,lr mgl@1371: + pmax.sh lr,r6,r12 mgl@1371: + pmax.sh r2,pc,r5 mgl@1371: + pmax.sh pc,r2,r7 mgl@1371: + .text mgl@1371: + .global pmin_ub mgl@1371: +pmin_ub: mgl@1371: + pmin.ub pc,pc,pc mgl@1371: + pmin.ub r12,r12,r12 mgl@1371: + pmin.ub r5,r5,r5 mgl@1371: + pmin.ub r4,r4,r4 mgl@1371: + pmin.ub lr,lr,lr mgl@1371: + pmin.ub r8,r1,r5 mgl@1371: + pmin.ub r1,r8,r3 mgl@1371: + pmin.ub r0,r2,r7 mgl@1371: + .text mgl@1371: + .global pmin_sh mgl@1371: +pmin_sh: mgl@1371: + pmin.sh pc,pc,pc mgl@1371: + pmin.sh r12,r12,r12 mgl@1371: + pmin.sh r5,r5,r5 mgl@1371: + pmin.sh r4,r4,r4 mgl@1371: + pmin.sh lr,lr,lr mgl@1371: + pmin.sh r8,r4,r10 mgl@1371: + pmin.sh lr,r10,r12 mgl@1371: + pmin.sh r2,r6,r2 mgl@1371: + .text mgl@1371: + .global pavg_ub mgl@1371: +pavg_ub: mgl@1371: + pavg.ub pc,pc,pc mgl@1371: + pavg.ub r12,r12,r12 mgl@1371: + pavg.ub r5,r5,r5 mgl@1371: + pavg.ub r4,r4,r4 mgl@1371: + pavg.ub lr,lr,lr mgl@1371: + pavg.ub r0,r1,r6 mgl@1371: + pavg.ub r8,r3,r6 mgl@1371: + pavg.ub pc,r12,r10 mgl@1371: + .text mgl@1371: + .global pavg_sh mgl@1371: +pavg_sh: mgl@1371: + pavg.sh pc,pc,pc mgl@1371: + pavg.sh r12,r12,r12 mgl@1371: + pavg.sh r5,r5,r5 mgl@1371: + pavg.sh r4,r4,r4 mgl@1371: + pavg.sh lr,lr,lr mgl@1371: + pavg.sh r9,pc,sp mgl@1371: + pavg.sh pc,sp,r3 mgl@1371: + pavg.sh r6,r1,r9 mgl@1371: + .text mgl@1371: + .global pabs_sb mgl@1371: +pabs_sb: mgl@1371: + pabs.sb pc,pc mgl@1371: + pabs.sb r12,r12 mgl@1371: + pabs.sb r5,r5 mgl@1371: + pabs.sb r4,r4 mgl@1371: + pabs.sb lr,lr mgl@1371: + pabs.sb r11,r6 mgl@1371: + pabs.sb lr,r9 mgl@1371: + pabs.sb sp,r7 mgl@1371: + .text mgl@1371: + .global pabs_sh mgl@1371: +pabs_sh: mgl@1371: + pabs.sh pc,pc mgl@1371: + pabs.sh r12,r12 mgl@1371: + pabs.sh r5,r5 mgl@1371: + pabs.sh r4,r4 mgl@1371: + pabs.sh lr,lr mgl@1371: + pabs.sh pc,r3 mgl@1371: + pabs.sh r5,r7 mgl@1371: + pabs.sh r4,r0 mgl@1371: + .text mgl@1371: + .global psad mgl@1371: +psad: mgl@1371: + psad pc,pc,pc mgl@1371: + psad r12,r12,r12 mgl@1371: + psad r5,r5,r5 mgl@1371: + psad r4,r4,r4 mgl@1371: + psad lr,lr,lr mgl@1371: + psad r9,r11,r11 mgl@1371: + psad lr,r4,sp mgl@1371: + psad lr,r4,r5 mgl@1371: + .text mgl@1371: + .global pasr_b mgl@1371: +pasr_b: mgl@1371: + pasr.b pc,pc,0 mgl@1371: + pasr.b r12,r12,7 mgl@1371: + pasr.b r5,r5,4 mgl@1371: + pasr.b r4,r4,3 mgl@1371: + pasr.b lr,lr,1 mgl@1371: + pasr.b pc,r7,1 mgl@1371: + pasr.b sp,lr,6 mgl@1371: + pasr.b sp,r3,2 mgl@1371: + .text mgl@1371: + .global plsl_b mgl@1371: +plsl_b: mgl@1371: + plsl.b pc,pc,0 mgl@1371: + plsl.b r12,r12,7 mgl@1371: + plsl.b r5,r5,4 mgl@1371: + plsl.b r4,r4,3 mgl@1371: + plsl.b lr,lr,1 mgl@1371: + plsl.b r2,r11,4 mgl@1371: + plsl.b r8,r5,7 mgl@1371: + plsl.b pc,r0,2 mgl@1371: + .text mgl@1371: + .global plsr_b mgl@1371: +plsr_b: mgl@1371: + plsr.b pc,pc,0 mgl@1371: + plsr.b r12,r12,7 mgl@1371: + plsr.b r5,r5,4 mgl@1371: + plsr.b r4,r4,3 mgl@1371: + plsr.b lr,lr,1 mgl@1371: + plsr.b r12,r1,2 mgl@1371: + plsr.b r6,pc,7 mgl@1371: + plsr.b r12,r11,2 mgl@1371: + .text mgl@1371: + .global pasr_h mgl@1371: +pasr_h: mgl@1371: + pasr.h pc,pc,0 mgl@1371: + pasr.h r12,r12,15 mgl@1371: + pasr.h r5,r5,8 mgl@1371: + pasr.h r4,r4,7 mgl@1371: + pasr.h lr,lr,1 mgl@1371: + pasr.h r0,r11,10 mgl@1371: + pasr.h r4,r6,8 mgl@1371: + pasr.h r6,r2,4 mgl@1371: + .text mgl@1371: + .global plsl_h mgl@1371: +plsl_h: mgl@1371: + plsl.h pc,pc,0 mgl@1371: + plsl.h r12,r12,15 mgl@1371: + plsl.h r5,r5,8 mgl@1371: + plsl.h r4,r4,7 mgl@1371: + plsl.h lr,lr,1 mgl@1371: + plsl.h r5,r10,9 mgl@1371: + plsl.h sp,lr,8 mgl@1371: + plsl.h r0,lr,7 mgl@1371: + .text mgl@1371: + .global plsr_h mgl@1371: +plsr_h: mgl@1371: + plsr.h pc,pc,0 mgl@1371: + plsr.h r12,r12,15 mgl@1371: + plsr.h r5,r5,8 mgl@1371: + plsr.h r4,r4,7 mgl@1371: + plsr.h lr,lr,1 mgl@1371: + plsr.h r11,r0,15 mgl@1371: + plsr.h lr,r3,3 mgl@1371: + plsr.h r8,lr,10 mgl@1371: + .text mgl@1371: + .global packw_sh mgl@1371: +packw_sh: mgl@1371: + packw.sh pc,pc,pc mgl@1371: + packw.sh r12,r12,r12 mgl@1371: + packw.sh r5,r5,r5 mgl@1371: + packw.sh r4,r4,r4 mgl@1371: + packw.sh lr,lr,lr mgl@1371: + packw.sh sp,r11,r10 mgl@1371: + packw.sh r8,r2,r12 mgl@1371: + packw.sh r8,r1,r5 mgl@1371: + .text mgl@1371: + .global punpckub_h mgl@1371: +punpckub_h: mgl@1371: + punpckub.h pc,pc:b mgl@1371: + punpckub.h r12,r12:t mgl@1371: + punpckub.h r5,r5:t mgl@1371: + punpckub.h r4,r4:b mgl@1371: + punpckub.h lr,lr:t mgl@1371: + punpckub.h r6,r1:t mgl@1371: + punpckub.h lr,r5:b mgl@1371: + punpckub.h lr,r2:t mgl@1371: + .text mgl@1371: + .global punpcksb_h mgl@1371: +punpcksb_h: mgl@1371: + punpcksb.h pc,pc:b mgl@1371: + punpcksb.h r12,r12:t mgl@1371: + punpcksb.h r5,r5:t mgl@1371: + punpcksb.h r4,r4:b mgl@1371: + punpcksb.h lr,lr:t mgl@1371: + punpcksb.h r4,r7:t mgl@1371: + punpcksb.h r6,lr:b mgl@1371: + punpcksb.h r12,r12:t mgl@1371: + .text mgl@1371: + .global packsh_ub mgl@1371: +packsh_ub: mgl@1371: + packsh.ub pc,pc,pc mgl@1371: + packsh.ub r12,r12,r12 mgl@1371: + packsh.ub r5,r5,r5 mgl@1371: + packsh.ub r4,r4,r4 mgl@1371: + packsh.ub lr,lr,lr mgl@1371: + packsh.ub r3,r6,r3 mgl@1371: + packsh.ub r8,r0,r3 mgl@1371: + packsh.ub r9,r3,lr mgl@1371: + .text mgl@1371: + .global packsh_sb mgl@1371: +packsh_sb: mgl@1371: + packsh.sb pc,pc,pc mgl@1371: + packsh.sb r12,r12,r12 mgl@1371: + packsh.sb r5,r5,r5 mgl@1371: + packsh.sb r4,r4,r4 mgl@1371: + packsh.sb lr,lr,lr mgl@1371: + packsh.sb r6,r8,r1 mgl@1371: + packsh.sb lr,r9,r8 mgl@1371: + packsh.sb sp,r6,r6 mgl@1371: + .text mgl@1371: + .global andl mgl@1371: +andl: mgl@1371: + andl pc,0 mgl@1371: + andl r12,65535 mgl@1371: + andl r5,32768 mgl@1371: + andl r4,32767 mgl@1371: + andl lr,1 mgl@1371: + andl pc,23128 mgl@1371: + andl r8,47262 mgl@1371: + andl r7,13719 mgl@1371: + .text mgl@1371: + .global andl_coh mgl@1371: +andl_coh: mgl@1371: + andl pc,0,COH mgl@1371: + andl r12,65535,COH mgl@1371: + andl r5,32768,COH mgl@1371: + andl r4,32767,COH mgl@1371: + andl lr,1,COH mgl@1371: + andl r6,22753,COH mgl@1371: + andl r0,40653,COH mgl@1371: + andl r4,48580,COH mgl@1371: + .text mgl@1371: + .global andh mgl@1371: +andh: mgl@1371: + andh pc,0 mgl@1371: + andh r12,65535 mgl@1371: + andh r5,32768 mgl@1371: + andh r4,32767 mgl@1371: + andh lr,1 mgl@1371: + andh r12,52312 mgl@1371: + andh r3,8675 mgl@1371: + andh r2,42987 mgl@1371: + .text mgl@1371: + .global andh_coh mgl@1371: +andh_coh: mgl@1371: + andh pc,0,COH mgl@1371: + andh r12,65535,COH mgl@1371: + andh r5,32768,COH mgl@1371: + andh r4,32767,COH mgl@1371: + andh lr,1,COH mgl@1371: + andh r11,34317,COH mgl@1371: + andh r8,52982,COH mgl@1371: + andh r10,23683,COH mgl@1371: + .text mgl@1371: + .global orl mgl@1371: +orl: mgl@1371: + orl pc,0 mgl@1371: + orl r12,65535 mgl@1371: + orl r5,32768 mgl@1371: + orl r4,32767 mgl@1371: + orl lr,1 mgl@1371: + orl sp,16766 mgl@1371: + orl r0,21181 mgl@1371: + orl pc,44103 mgl@1371: + .text mgl@1371: + .global orh mgl@1371: +orh: mgl@1371: + orh pc,0 mgl@1371: + orh r12,65535 mgl@1371: + orh r5,32768 mgl@1371: + orh r4,32767 mgl@1371: + orh lr,1 mgl@1371: + orh r8,28285 mgl@1371: + orh r12,30492 mgl@1371: + orh r1,59930 mgl@1371: + .text mgl@1371: + .global eorl mgl@1371: +eorl: mgl@1371: + eorl pc,0 mgl@1371: + eorl r12,65535 mgl@1371: + eorl r5,32768 mgl@1371: + eorl r4,32767 mgl@1371: + eorl lr,1 mgl@1371: + eorl r4,51129 mgl@1371: + eorl r6,64477 mgl@1371: + eorl r1,20913 mgl@1371: + .text mgl@1371: + .global eorh mgl@1371: +eorh: mgl@1371: + eorh pc,0 mgl@1371: + eorh r12,65535 mgl@1371: + eorh r5,32768 mgl@1371: + eorh r4,32767 mgl@1371: + eorh lr,1 mgl@1371: + eorh r0,11732 mgl@1371: + eorh r10,38069 mgl@1371: + eorh r9,57130 mgl@1371: + .text mgl@1371: + .global mcall mgl@1371: +mcall: mgl@1371: + mcall pc[0] mgl@1371: + mcall r12[-4] mgl@1371: + mcall r5[-131072] mgl@1371: + mcall r4[131068] mgl@1371: + mcall lr[4] mgl@1371: + mcall sp[61180] mgl@1371: + mcall r4[-35000] mgl@1371: + mcall r0[9924] mgl@1371: + .text mgl@1371: + .global pref mgl@1371: +pref: mgl@1371: + pref pc[0] mgl@1371: + pref r12[-1] mgl@1371: + pref r5[-32768] mgl@1371: + pref r4[32767] mgl@1371: + pref lr[1] mgl@1371: + pref r7[7748] mgl@1371: + pref r7[-7699] mgl@1371: + pref r2[-25892] mgl@1371: + .text mgl@1371: + .global cache mgl@1371: +cache: mgl@1371: + cache pc[0],0 mgl@1371: + cache r12[-1],31 mgl@1371: + cache r5[-1024],16 mgl@1371: + cache r4[1023],15 mgl@1371: + cache lr[1],1 mgl@1371: + cache r3[-964],17 mgl@1371: + cache r4[-375],22 mgl@1371: + cache r3[-888],17 mgl@1371: + .text mgl@1371: + .global sub4 mgl@1371: +sub4: mgl@1371: + sub pc,0 mgl@1371: + sub r12,-1 mgl@1371: + sub r5,-1048576 mgl@1371: + sub r4,1048575 mgl@1371: + sub lr,1 mgl@1371: + sub r2,-619156 mgl@1371: + sub lr,461517 mgl@1371: + sub r8,-185051 mgl@1371: + .text mgl@1371: + .global cp3 mgl@1371: +cp3: mgl@1371: + cp pc,0 mgl@1371: + cp r12,-1 mgl@1371: + cp r5,-1048576 mgl@1371: + cp r4,1048575 mgl@1371: + cp lr,1 mgl@1371: + cp r1,124078 mgl@1371: + cp r0,-378909 mgl@1371: + cp r4,-243180 mgl@1371: + .text mgl@1371: + .global mov2 mgl@1371: +mov2: mgl@1371: + mov pc,0 mgl@1371: + mov r12,-1 mgl@1371: + mov r5,-1048576 mgl@1371: + mov r4,1048575 mgl@1371: + mov lr,1 mgl@1371: + mov r5,-317021 mgl@1371: + mov sp,-749164 mgl@1371: + mov r5,940179 mgl@1371: + .text mgl@1371: + .global brc2 mgl@1371: +brc2: mgl@1371: + breq 0 mgl@1371: + bral -2 mgl@1371: + brls -2097152 mgl@1371: + brpl 2097150 mgl@1371: + brne 2 mgl@1371: + brhi -1796966 mgl@1371: + brqs 1321368 mgl@1371: + brls -577434 mgl@1371: + .text mgl@1371: + .global rcall2 mgl@1371: +rcall2: mgl@1371: + rcall 0 mgl@1371: + rcall -2 mgl@1371: + rcall -2097152 mgl@1371: + rcall 2097150 mgl@1371: + rcall 2 mgl@1371: + rcall 496820 mgl@1371: + rcall 1085092 mgl@1371: + rcall -1058 mgl@1371: + .text mgl@1371: + .global sub5 mgl@1371: +sub5: mgl@1371: + sub pc,pc,0 mgl@1371: + sub r12,r12,-1 mgl@1371: + sub r5,r5,-32768 mgl@1371: + sub r4,r4,32767 mgl@1371: + sub lr,lr,1 mgl@1371: + sub pc,pc,-12744 mgl@1371: + sub r7,r7,-27365 mgl@1371: + sub r2,r9,-17358 mgl@1371: + .text mgl@1371: + .global satsub_w2 mgl@1371: +satsub_w2: mgl@1371: + satsub.w pc,pc,0 mgl@1371: + satsub.w r12,r12,-1 mgl@1371: + satsub.w r5,r5,-32768 mgl@1371: + satsub.w r4,r4,32767 mgl@1371: + satsub.w lr,lr,1 mgl@1371: + satsub.w r2,lr,-2007 mgl@1371: + satsub.w r7,r12,-784 mgl@1371: + satsub.w r4,r7,23180 mgl@1371: + .text mgl@1371: + .global ld_d4 mgl@1371: +ld_d4: mgl@1371: + ld.d r0,pc[0] mgl@1371: + ld.d r14,r12[-1] mgl@1371: + ld.d r8,r5[-32768] mgl@1371: + ld.d r6,r4[32767] mgl@1371: + ld.d r2,lr[1] mgl@1371: + ld.d r14,r11[14784] mgl@1371: + ld.d r6,r9[-18905] mgl@1371: + ld.d r2,r3[-6355] mgl@1371: + .text mgl@1371: + .global ld_w4 mgl@1371: +ld_w4: mgl@1371: + ld.w pc,pc[0] mgl@1371: + ld.w r12,r12[-1] mgl@1371: + ld.w r5,r5[-32768] mgl@1371: + ld.w r4,r4[32767] mgl@1371: + ld.w lr,lr[1] mgl@1371: + ld.w r0,r12[-22133] mgl@1371: + ld.w sp,pc[-20521] mgl@1371: + /* ld.w r3,r5[29035] */ mgl@1371: + nop mgl@1371: + .text mgl@1371: + .global ld_sh4 mgl@1371: +ld_sh4: mgl@1371: + ld.sh pc,pc[0] mgl@1371: + ld.sh r12,r12[-1] mgl@1371: + ld.sh r5,r5[-32768] mgl@1371: + ld.sh r4,r4[32767] mgl@1371: + ld.sh lr,lr[1] mgl@1371: + ld.sh r6,r10[30930] mgl@1371: + ld.sh r6,r10[21973] mgl@1371: + /* ld.sh r11,r10[-2058] */ mgl@1371: + nop mgl@1371: + .text mgl@1371: + .global ld_uh4 mgl@1371: +ld_uh4: mgl@1371: + ld.uh pc,pc[0] mgl@1371: + ld.uh r12,r12[-1] mgl@1371: + ld.uh r5,r5[-32768] mgl@1371: + ld.uh r4,r4[32767] mgl@1371: + ld.uh lr,lr[1] mgl@1371: + ld.uh r1,r9[-13354] mgl@1371: + ld.uh lr,r11[21337] mgl@1371: + /* ld.uh r2,lr[-25370] */ mgl@1371: + nop mgl@1371: + .text mgl@1371: + .global ld_sb1 mgl@1371: +ld_sb1: mgl@1371: + ld.sb pc,pc[0] mgl@1371: + ld.sb r12,r12[-1] mgl@1371: + ld.sb r5,r5[-32768] mgl@1371: + ld.sb r4,r4[32767] mgl@1371: + ld.sb lr,lr[1] mgl@1371: + ld.sb r7,sp[-28663] mgl@1371: + ld.sb r2,r1[-5879] mgl@1371: + ld.sb r12,r3[18734] mgl@1371: + .text mgl@1371: + .global ld_ub4 mgl@1371: +ld_ub4: mgl@1371: + ld.ub pc,pc[0] mgl@1371: + ld.ub r12,r12[-1] mgl@1371: + ld.ub r5,r5[-32768] mgl@1371: + ld.ub r4,r4[32767] mgl@1371: + ld.ub lr,lr[1] mgl@1371: + ld.ub pc,r4[8277] mgl@1371: + ld.ub r5,r12[19172] mgl@1371: + ld.ub r10,lr[26347] mgl@1371: + .text mgl@1371: + .global st_d4 mgl@1371: +st_d4: mgl@1371: + st.d pc[0],r0 mgl@1371: + st.d r12[-1],r14 mgl@1371: + st.d r5[-32768],r8 mgl@1371: + st.d r4[32767],r6 mgl@1371: + st.d lr[1],r2 mgl@1371: + st.d r5[13200],r10 mgl@1371: + st.d r5[9352],r10 mgl@1371: + st.d r5[32373],r4 mgl@1371: + .text mgl@1371: + .global st_w4 mgl@1371: +st_w4: mgl@1371: + st.w pc[0],pc mgl@1371: + st.w r12[-1],r12 mgl@1371: + st.w r5[-32768],r5 mgl@1371: + st.w r4[32767],r4 mgl@1371: + st.w lr[1],lr mgl@1371: + st.w sp[6136],r7 mgl@1371: + st.w r6[27087],r12 mgl@1371: + /* st.w r3[20143],r7 */ mgl@1371: + nop mgl@1371: + .text mgl@1371: + .global st_h4 mgl@1371: +st_h4: mgl@1371: + st.h pc[0],pc mgl@1371: + st.h r12[-1],r12 mgl@1371: + st.h r5[-32768],r5 mgl@1371: + st.h r4[32767],r4 mgl@1371: + st.h lr[1],lr mgl@1371: + st.h r4[-9962],r7 mgl@1371: + st.h r9[-16250],r3 mgl@1371: + /* st.h r8[-28810],r7 */ mgl@1371: + nop mgl@1371: + .text mgl@1371: + .global st_b4 mgl@1371: +st_b4: mgl@1371: + st.b pc[0],pc mgl@1371: + st.b r12[-1],r12 mgl@1371: + st.b r5[-32768],r5 mgl@1371: + st.b r4[32767],r4 mgl@1371: + st.b lr[1],lr mgl@1371: + st.b r12[30102],r6 mgl@1371: + st.b r5[28977],r1 mgl@1371: + st.b r0[5470],r1 mgl@1371: + .text mgl@1371: + .global mfsr mgl@1371: +mfsr: mgl@1371: + mfsr pc,0 mgl@1371: + mfsr r12,1020 mgl@1371: + mfsr r5,512 mgl@1371: + mfsr r4,508 mgl@1371: + mfsr lr,4 mgl@1371: + mfsr r2,696 mgl@1371: + mfsr r4,260 mgl@1371: + mfsr r10,1016 mgl@1371: + .text mgl@1371: + .global mtsr mgl@1371: +mtsr: mgl@1371: + mtsr 0,pc mgl@1371: + mtsr 1020,r12 mgl@1371: + mtsr 512,r5 mgl@1371: + mtsr 508,r4 mgl@1371: + mtsr 4,lr mgl@1371: + mtsr 224,r10 mgl@1371: + mtsr 836,r12 mgl@1371: + mtsr 304,r9 mgl@1371: + .text mgl@1371: + .global mfdr mgl@1371: +mfdr: mgl@1371: + mfdr pc,0 mgl@1371: + mfdr r12,1020 mgl@1371: + mfdr r5,512 mgl@1371: + mfdr r4,508 mgl@1371: + mfdr lr,4 mgl@1371: + mfdr r6,932 mgl@1371: + mfdr r5,36 mgl@1371: + mfdr r9,300 mgl@1371: + .text mgl@1371: + .global mtdr mgl@1371: +mtdr: mgl@1371: + mtdr 0,pc mgl@1371: + mtdr 1020,r12 mgl@1371: + mtdr 512,r5 mgl@1371: + mtdr 508,r4 mgl@1371: + mtdr 4,lr mgl@1371: + mtdr 180,r8 mgl@1371: + mtdr 720,r10 mgl@1371: + mtdr 408,lr mgl@1371: + .text mgl@1371: + .global sleep mgl@1371: +sleep: mgl@1371: + sleep 0 mgl@1371: + sleep 255 mgl@1371: + sleep 128 mgl@1371: + sleep 127 mgl@1371: + sleep 1 mgl@1371: + sleep 254 mgl@1371: + sleep 15 mgl@1371: + sleep 43 mgl@1371: + .text mgl@1371: + .global sync mgl@1371: +sync: mgl@1371: + sync 0 mgl@1371: + sync 255 mgl@1371: + sync 128 mgl@1371: + sync 127 mgl@1371: + sync 1 mgl@1371: + sync 166 mgl@1371: + sync 230 mgl@1371: + sync 180 mgl@1371: + .text mgl@1371: + .global bld mgl@1371: +bld: mgl@1371: + bld pc,0 mgl@1371: + bld r12,31 mgl@1371: + bld r5,16 mgl@1371: + bld r4,15 mgl@1371: + bld lr,1 mgl@1371: + bld r9,15 mgl@1371: + bld r0,4 mgl@1371: + bld lr,26 mgl@1371: + .text mgl@1371: + .global bst mgl@1371: +bst: mgl@1371: + bst pc,0 mgl@1371: + bst r12,31 mgl@1371: + bst r5,16 mgl@1371: + bst r4,15 mgl@1371: + bst lr,1 mgl@1371: + bst r10,28 mgl@1371: + bst r0,3 mgl@1371: + bst sp,2 mgl@1371: + .text mgl@1371: + .global sats mgl@1371: +sats: mgl@1371: + sats pc>>0,0 mgl@1371: + sats r12>>31,31 mgl@1371: + sats r5>>16,16 mgl@1371: + sats r4>>15,15 mgl@1371: + sats lr>>1,1 mgl@1371: + sats r10>>3,19 mgl@1371: + sats r10>>2,26 mgl@1371: + sats r1>>20,1 mgl@1371: + .text mgl@1371: + .global satu mgl@1371: +satu: mgl@1371: + satu pc>>0,0 mgl@1371: + satu r12>>31,31 mgl@1371: + satu r5>>16,16 mgl@1371: + satu r4>>15,15 mgl@1371: + satu lr>>1,1 mgl@1371: + satu pc>>5,7 mgl@1371: + satu r7>>5,5 mgl@1371: + satu r2>>26,19 mgl@1371: + .text mgl@1371: + .global satrnds mgl@1371: +satrnds: mgl@1371: + satrnds pc>>0,0 mgl@1371: + satrnds r12>>31,31 mgl@1371: + satrnds r5>>16,16 mgl@1371: + satrnds r4>>15,15 mgl@1371: + satrnds lr>>1,1 mgl@1371: + satrnds r0>>21,19 mgl@1371: + satrnds sp>>0,2 mgl@1371: + satrnds r7>>6,29 mgl@1371: + .text mgl@1371: + .global satrndu mgl@1371: +satrndu: mgl@1371: + satrndu pc>>0,0 mgl@1371: + satrndu r12>>31,31 mgl@1371: + satrndu r5>>16,16 mgl@1371: + satrndu r4>>15,15 mgl@1371: + satrndu lr>>1,1 mgl@1371: + satrndu r12>>0,26 mgl@1371: + satrndu r4>>21,3 mgl@1371: + satrndu r10>>3,16 mgl@1371: + .text mgl@1371: + .global subfc mgl@1371: +subfc: mgl@1371: + subfeq pc,0 mgl@1371: + subfal r12,-1 mgl@1371: + subfls r5,-128 mgl@1371: + subfpl r4,127 mgl@1371: + subfne lr,1 mgl@1371: + subfls r10,8 mgl@1371: + subfvc r11,99 mgl@1371: + subfvs r2,73 mgl@1371: + .text mgl@1371: + .global subc mgl@1371: +subc: mgl@1371: + subeq pc,0 mgl@1371: + subal r12,-1 mgl@1371: + subls r5,-128 mgl@1371: + subpl r4,127 mgl@1371: + subne lr,1 mgl@1371: + subls r12,118 mgl@1371: + subvc lr,-12 mgl@1371: + submi r4,-13 mgl@1371: + .text mgl@1371: + .global movc2 mgl@1371: +movc2: mgl@1371: + moveq pc,0 mgl@1371: + moval r12,-1 mgl@1371: + movls r5,-128 mgl@1371: + movpl r4,127 mgl@1371: + movne lr,1 mgl@1371: + movlt r3,-122 mgl@1371: + movvc r8,2 mgl@1371: + movne r7,-111 mgl@1371: + .text mgl@1371: + .global cp_b mgl@1371: +cp_b: mgl@1371: + cp.b pc,r0 mgl@1371: + cp.b r0,pc mgl@1371: + cp.b r7,r8 mgl@1371: + cp.b r8,r7 mgl@1371: + .text mgl@1371: + .global cp_h mgl@1371: +cp_h: mgl@1371: + cp.h pc,r0 mgl@1371: + cp.h r0,pc mgl@1371: + cp.h r7,r8 mgl@1371: + cp.h r8,r7 mgl@1371: + .text mgl@1371: + .global ldm mgl@1371: +ldm: mgl@1371: + ldm pc,r1-r6 mgl@1371: + ldm r12,r0-r15 mgl@1371: + ldm r5,r15 mgl@1371: + ldm r4,r0-r14 mgl@1371: + ldm lr,r0 mgl@1371: + ldm r9,r1,r5,r14 mgl@1371: + ldm r11,r2-r3,r5-r8,r15 mgl@1371: + ldm r6,r0,r3,r9,r13,r15 mgl@1371: + .text mgl@1371: + .global ldm_pu mgl@1371: +ldm_pu: mgl@1371: + ldm pc++,r6-r9 mgl@1371: + ldm r12++,r0-r15 mgl@1371: + ldm r5++,r15 mgl@1371: + ldm r4++,r0-r14 mgl@1371: + ldm lr++,r0 mgl@1371: + ldm r12++,r3-r5,r8,r10,r12,r14-r15 mgl@1371: + ldm r10++,r2,r4-r6,r14-r15 mgl@1371: + ldm r6++,r1,r3-r4,r9-r14 mgl@1371: + .text mgl@1371: + .global ldmts mgl@1371: +ldmts: mgl@1371: + ldmts pc,r7-r8 mgl@1371: + ldmts r12,r0-r15 mgl@1371: + ldmts r5,r15 mgl@1371: + ldmts r4,r0-r14 mgl@1371: + ldmts lr,r0 mgl@1371: + ldmts r0,r1-r2,r11-r12 mgl@1371: + ldmts lr,r0-r2,r4,r7-r8,r13-r14 mgl@1371: + ldmts r12,r0-r1,r3-r5,r9,r14-r15 mgl@1371: + .text mgl@1371: + .global ldmts_pu mgl@1371: +ldmts_pu: mgl@1371: + ldmts pc++,r9 mgl@1371: + ldmts r12++,r0-r15 mgl@1371: + ldmts r5++,r15 mgl@1371: + ldmts r4++,r0-r14 mgl@1371: + ldmts lr++,r0 mgl@1371: + ldmts sp++,r0,r2-r5,r7,r9,r11 mgl@1371: + ldmts r5++,r1-r3,r7,r10-r11 mgl@1371: + ldmts r8++,r2-r4,r7-r8,r13,r15 mgl@1371: + .text mgl@1371: + .global stm mgl@1371: +stm: mgl@1371: + stm pc,r7 mgl@1371: + stm r12,r0-r15 mgl@1371: + stm r5,r15 mgl@1371: + stm r4,r0-r14 mgl@1371: + stm lr,r0 mgl@1371: + stm sp,r2-r3,r5,r8,r11,r14 mgl@1371: + stm r4,r0-r4,r6,r10-r11,r14 mgl@1371: + stm r9,r1,r5,r9,r12-r15 mgl@1371: + .text mgl@1371: + .global stm_pu mgl@1371: +stm_pu: mgl@1371: + stm --pc,r4-r6 mgl@1371: + stm --r12,r0-r15 mgl@1371: + stm --r5,r15 mgl@1371: + stm --r4,r0-r14 mgl@1371: + stm --lr,r0 mgl@1371: + stm --r11,r0,r4-r9,r11-r15 mgl@1371: + stm --r11,r0,r3,r9-r10,r12,r14 mgl@1371: + stm --r6,r2,r8-r9,r13-r14 mgl@1371: + .text mgl@1371: + .global stmts mgl@1371: +stmts: mgl@1371: + stmts pc,r8 mgl@1371: + stmts r12,r0-r15 mgl@1371: + stmts r5,r15 mgl@1371: + stmts r4,r0-r14 mgl@1371: + stmts lr,r0 mgl@1371: + stmts r1,r0-r1,r3-r4,r6,r9-r10,r14-r15 mgl@1371: + stmts r3,r0,r6-r8,r10-r12 mgl@1371: + stmts r11,r0,r4,r6-r7,r9-r10,r12,r14-r15 mgl@1371: + .text mgl@1371: + .global stmts_pu mgl@1371: +stmts_pu: mgl@1371: + stmts --pc,r6-r8 mgl@1371: + stmts --r12,r0-r15 mgl@1371: + stmts --r5,r15 mgl@1371: + stmts --r4,r0-r14 mgl@1371: + stmts --lr,r0 mgl@1371: + stmts --r2,r0,r3-r4,r9-r10,r12-r13 mgl@1371: + stmts --r3,r0-r1,r14-r15 mgl@1371: + stmts --r0,r0,r2-r6,r10,r14 mgl@1371: + .text mgl@1371: + .global ldins_h mgl@1371: +ldins_h: mgl@1371: + ldins.h pc:b,pc[0] mgl@1371: + ldins.h r12:t,r12[-2] mgl@1371: + ldins.h r5:t,r5[-4096] mgl@1371: + ldins.h r4:b,r4[4094] mgl@1371: + ldins.h lr:t,lr[2] mgl@1371: + ldins.h r0:t,lr[1930] mgl@1371: + ldins.h r3:b,r7[-534] mgl@1371: + ldins.h r2:b,r12[-2252] mgl@1371: + .text mgl@1371: + .global ldins_b mgl@1371: +ldins_b: mgl@1371: + ldins.b pc:b,pc[0] mgl@1371: + ldins.b r12:t,r12[-1] mgl@1371: + ldins.b r5:u,r5[-2048] mgl@1371: + ldins.b r4:l,r4[2047] mgl@1371: + ldins.b lr:l,lr[1] mgl@1371: + ldins.b r6:t,r4[-662] mgl@1371: + ldins.b r5:b,r1[-151] mgl@1371: + ldins.b r10:t,r11[-1923] mgl@1371: + .text mgl@1371: + .global ldswp_sh mgl@1371: +ldswp_sh: mgl@1371: + ldswp.sh pc,pc[0] mgl@1371: + ldswp.sh r12,r12[-2] mgl@1371: + ldswp.sh r5,r5[-4096] mgl@1371: + ldswp.sh r4,r4[4094] mgl@1371: + ldswp.sh lr,lr[2] mgl@1371: + ldswp.sh r9,r10[3848] mgl@1371: + ldswp.sh r4,r12[-2040] mgl@1371: + ldswp.sh r10,r2[3088] mgl@1371: + .text mgl@1371: + .global ldswp_uh mgl@1371: +ldswp_uh: mgl@1371: + ldswp.uh pc,pc[0] mgl@1371: + ldswp.uh r12,r12[-2] mgl@1371: + ldswp.uh r5,r5[-4096] mgl@1371: + ldswp.uh r4,r4[4094] mgl@1371: + ldswp.uh lr,lr[2] mgl@1371: + ldswp.uh r4,r9[3724] mgl@1371: + ldswp.uh lr,sp[-1672] mgl@1371: + ldswp.uh r8,r12[-3846] mgl@1371: + .text mgl@1371: + .global ldswp_w mgl@1371: +ldswp_w: mgl@1371: + ldswp.w pc,pc[0] mgl@1371: + ldswp.w r12,r12[-4] mgl@1371: + ldswp.w r5,r5[-8192] mgl@1371: + ldswp.w r4,r4[8188] mgl@1371: + ldswp.w lr,lr[4] mgl@1371: + ldswp.w sp,r7[1860] mgl@1371: + ldswp.w pc,r5[-3324] mgl@1371: + ldswp.w r12,r10[-3296] mgl@1371: + .text mgl@1371: + .global stswp_h mgl@1371: +stswp_h: mgl@1371: + stswp.h pc[0],pc mgl@1371: + stswp.h r12[-2],r12 mgl@1371: + stswp.h r5[-4096],r5 mgl@1371: + stswp.h r4[4094],r4 mgl@1371: + stswp.h lr[2],lr mgl@1371: + stswp.h r7[64],r10 mgl@1371: + stswp.h r10[3024],r2 mgl@1371: + stswp.h r0[-2328],r10 mgl@1371: + .text mgl@1371: + .global stswp_w mgl@1371: +stswp_w: mgl@1371: + stswp.w pc[0],pc mgl@1371: + stswp.w r12[-4],r12 mgl@1371: + stswp.w r5[-8192],r5 mgl@1371: + stswp.w r4[8188],r4 mgl@1371: + stswp.w lr[4],lr mgl@1371: + stswp.w pc[1156],r8 mgl@1371: + stswp.w sp[7992],r10 mgl@1371: + stswp.w r8[-1172],r5 mgl@1371: + .text mgl@1371: + .global and2 mgl@1371: +and2: mgl@1371: + and pc,pc,pc<<0 mgl@1371: + and r12,r12,r12<<31 mgl@1371: + and r5,r5,r5<<16 mgl@1371: + and r4,r4,r4<<15 mgl@1371: + and lr,lr,lr<<1 mgl@1371: + and r10,r2,r1<<1 mgl@1371: + and r12,r8,r11<<27 mgl@1371: + and r10,r7,r0<<3 mgl@1371: + .text mgl@1371: + .global and3 mgl@1371: +and3: mgl@1371: + and pc,pc,pc>>0 mgl@1371: + and r12,r12,r12>>31 mgl@1371: + and r5,r5,r5>>16 mgl@1371: + and r4,r4,r4>>15 mgl@1371: + and lr,lr,lr>>1 mgl@1371: + and r12,r8,r7>>17 mgl@1371: + and pc,r4,r9>>20 mgl@1371: + and r10,r9,r10>>12 mgl@1371: + .text mgl@1371: + .global or2 mgl@1371: +or2: mgl@1371: + or pc,pc,pc<<0 mgl@1371: + or r12,r12,r12<<31 mgl@1371: + or r5,r5,r5<<16 mgl@1371: + or r4,r4,r4<<15 mgl@1371: + or lr,lr,lr<<1 mgl@1371: + or r8,sp,r11<<29 mgl@1371: + or pc,r9,r2<<28 mgl@1371: + or r5,r1,r2<<3 mgl@1371: + .text mgl@1371: + .global or3 mgl@1371: +or3: mgl@1371: + or pc,pc,pc>>0 mgl@1371: + or r12,r12,r12>>31 mgl@1371: + or r5,r5,r5>>16 mgl@1371: + or r4,r4,r4>>15 mgl@1371: + or lr,lr,lr>>1 mgl@1371: + or r1,sp,sp>>2 mgl@1371: + or r0,r1,r1>>29 mgl@1371: + or r4,r12,r8>>8 mgl@1371: + .text mgl@1371: + .global eor2 mgl@1371: +eor2: mgl@1371: + eor pc,pc,pc<<0 mgl@1371: + eor r12,r12,r12<<31 mgl@1371: + eor r5,r5,r5<<16 mgl@1371: + eor r4,r4,r4<<15 mgl@1371: + eor lr,lr,lr<<1 mgl@1371: + eor r10,r9,r4<<11 mgl@1371: + eor r4,r0,r1<<31 mgl@1371: + eor r6,r2,r12<<13 mgl@1371: + .text mgl@1371: + .global eor3 mgl@1371: +eor3: mgl@1371: + eor pc,pc,pc>>0 mgl@1371: + eor r12,r12,r12>>31 mgl@1371: + eor r5,r5,r5>>16 mgl@1371: + eor r4,r4,r4>>15 mgl@1371: + eor lr,lr,lr>>1 mgl@1371: + eor r5,r5,r5>>22 mgl@1371: + eor r10,r1,lr>>3 mgl@1371: + eor r7,lr,sp>>26 mgl@1371: + .text mgl@1371: + .global sthh_w2 mgl@1371: +sthh_w2: mgl@1371: + sthh.w pc[pc<<0],pc:b,pc:b mgl@1371: + sthh.w r12[r12<<3],r12:t,r12:t mgl@1371: + sthh.w r5[r5<<2],r5:t,r5:t mgl@1371: + sthh.w r4[r4<<1],r4:b,r4:b mgl@1371: + sthh.w lr[lr<<1],lr:t,lr:t mgl@1371: + sthh.w sp[r6<<3],r1:t,r12:t mgl@1371: + sthh.w r6[r6<<0],r9:t,r9:t mgl@1371: + sthh.w r10[r3<<0],r0:b,r11:t mgl@1371: + .text mgl@1371: + .global sthh_w1 mgl@1371: +sthh_w1: mgl@1371: + sthh.w pc[0],pc:b,pc:b mgl@1371: + sthh.w r12[1020],r12:t,r12:t mgl@1371: + sthh.w r5[512],r5:t,r5:t mgl@1371: + sthh.w r4[508],r4:b,r4:b mgl@1371: + sthh.w lr[4],lr:t,lr:t mgl@1371: + sthh.w r4[404],r9:t,r0:b mgl@1371: + sthh.w r8[348],r2:t,r10:b mgl@1371: + sthh.w sp[172],r9:b,r2:b mgl@1371: + .text mgl@1371: + .global cop mgl@1371: +cop: mgl@1371: + cop cp0,cr0,cr0,cr0,0 mgl@1371: + cop cp7,cr15,cr15,cr15,0x7f mgl@1371: + cop cp3,cr5,cr5,cr5,0x31 mgl@1371: + cop cp2,cr4,cr4,cr4,0x30 mgl@1371: + cop cp5,cr8,cr3,cr7,0x5a mgl@1371: + .text mgl@1371: + .global ldc_w1 mgl@1371: +ldc_w1: mgl@1371: + ldc.w cp0,cr0,r0[0] mgl@1371: + ldc.w cp7,cr15,pc[255<<2] mgl@1371: + ldc.w cp3,cr5,r5[128<<2] mgl@1371: + ldc.w cp2,cr4,r4[127<<2] mgl@1371: + ldc.w cp4,cr9,r13[36<<2] mgl@1371: + .text mgl@1371: + .global ldc_w2 mgl@1371: +ldc_w2: mgl@1371: + ldc.w cp0,cr0,--r0 mgl@1371: + ldc.w cp7,cr15,--pc mgl@1371: + ldc.w cp3,cr5,--r5 mgl@1371: + ldc.w cp2,cr4,--r4 mgl@1371: + ldc.w cp4,cr9,--r13 mgl@1371: + .text mgl@1371: + .global ldc_w3 mgl@1371: +ldc_w3: mgl@1371: + ldc.w cp0,cr0,r0[r0] mgl@1371: + ldc.w cp7,cr15,pc[pc<<3] mgl@1371: + ldc.w cp3,cr5,r5[r4<<2] mgl@1371: + ldc.w cp2,cr4,r4[r3<<1] mgl@1371: + ldc.w cp4,cr9,r13[r12<<0] mgl@1371: + .text mgl@1371: + .global ldc_d1 mgl@1371: +ldc_d1: mgl@1371: + ldc.d cp0,cr0,r0[0] mgl@1371: + ldc.d cp7,cr14,pc[255<<2] mgl@1371: + ldc.d cp3,cr6,r5[128<<2] mgl@1371: + ldc.d cp2,cr4,r4[127<<2] mgl@1371: + ldc.d cp4,cr8,r13[36<<2] mgl@1371: + .text mgl@1371: + .global ldc_d2 mgl@1371: +ldc_d2: mgl@1371: + ldc.d cp0,cr0,--r0 mgl@1371: + ldc.d cp7,cr14,--pc mgl@1371: + ldc.d cp3,cr6,--r5 mgl@1371: + ldc.d cp2,cr4,--r4 mgl@1371: + ldc.d cp4,cr8,--r13 mgl@1371: + .text mgl@1371: + .global ldc_d3 mgl@1371: +ldc_d3: mgl@1371: + ldc.d cp0,cr0,r0[r0] mgl@1371: + ldc.d cp7,cr14,pc[pc<<3] mgl@1371: + ldc.d cp3,cr6,r5[r4<<2] mgl@1371: + ldc.d cp2,cr4,r4[r3<<1] mgl@1371: + ldc.d cp4,cr8,r13[r12<<0] mgl@1371: + .text mgl@1371: + .global stc_w1 mgl@1371: +stc_w1: mgl@1371: + stc.w cp0,r0[0],cr0 mgl@1371: + stc.w cp7,pc[255<<2],cr15 mgl@1371: + stc.w cp3,r5[128<<2],cr5 mgl@1371: + stc.w cp2,r4[127<<2],cr4 mgl@1371: + stc.w cp4,r13[36<<2],cr9 mgl@1371: + .text mgl@1371: + .global stc_w2 mgl@1371: +stc_w2: mgl@1371: + stc.w cp0,r0++,cr0 mgl@1371: + stc.w cp7,pc++,cr15 mgl@1371: + stc.w cp3,r5++,cr5 mgl@1371: + stc.w cp2,r4++,cr4 mgl@1371: + stc.w cp4,r13++,cr9 mgl@1371: + .text mgl@1371: + .global stc_w3 mgl@1371: +stc_w3: mgl@1371: + stc.w cp0,r0[r0],cr0 mgl@1371: + stc.w cp7,pc[pc<<3],cr15 mgl@1371: + stc.w cp3,r5[r4<<2],cr5 mgl@1371: + stc.w cp2,r4[r3<<1],cr4 mgl@1371: + stc.w cp4,r13[r12<<0],cr9 mgl@1371: + .text mgl@1371: + .global stc_d1 mgl@1371: +stc_d1: mgl@1371: + stc.d cp0,r0[0],cr0 mgl@1371: + stc.d cp7,pc[255<<2],cr14 mgl@1371: + stc.d cp3,r5[128<<2],cr6 mgl@1371: + stc.d cp2,r4[127<<2],cr4 mgl@1371: + stc.d cp4,r13[36<<2],cr8 mgl@1371: + .text mgl@1371: + .global stc_d2 mgl@1371: +stc_d2: mgl@1371: + stc.d cp0,r0++,cr0 mgl@1371: + stc.d cp7,pc++,cr14 mgl@1371: + stc.d cp3,r5++,cr6 mgl@1371: + stc.d cp2,r4++,cr4 mgl@1371: + stc.d cp4,r13++,cr8 mgl@1371: + .text mgl@1371: + .global stc_d3 mgl@1371: +stc_d3: mgl@1371: + stc.d cp0,r0[r0],cr0 mgl@1371: + stc.d cp7,pc[pc<<3],cr14 mgl@1371: + stc.d cp3,r5[r4<<2],cr6 mgl@1371: + stc.d cp2,r4[r3<<1],cr4 mgl@1371: + stc.d cp4,r13[r12<<0],cr8 mgl@1371: + .text mgl@1371: + .global ldc0_w mgl@1371: +ldc0_w: mgl@1371: + ldc0.w cr0,r0[0] mgl@1371: + ldc0.w cr15,pc[4095<<2] mgl@1371: + ldc0.w cr5,r5[2048<<2] mgl@1371: + ldc0.w cr4,r4[2047<<2] mgl@1371: + ldc0.w cr9,r13[147<<2] mgl@1371: + .text mgl@1371: + .global ldc0_d mgl@1371: +ldc0_d: mgl@1371: + ldc0.d cr0,r0[0] mgl@1371: + ldc0.d cr14,pc[4095<<2] mgl@1371: + ldc0.d cr6,r5[2048<<2] mgl@1371: + ldc0.d cr4,r4[2047<<2] mgl@1371: + ldc0.d cr8,r13[147<<2] mgl@1371: + .text mgl@1371: + .global stc0_w mgl@1371: +stc0_w: mgl@1371: + stc0.w r0[0],cr0 mgl@1371: + stc0.w pc[4095<<2],cr15 mgl@1371: + stc0.w r5[2048<<2],cr5 mgl@1371: + stc0.w r4[2047<<2],cr4 mgl@1371: + stc0.w r13[147<<2],cr9 mgl@1371: + .text mgl@1371: + .global stc0_d mgl@1371: +stc0_d: mgl@1371: + stc0.d r0[0],cr0 mgl@1371: + stc0.d pc[4095<<2],cr14 mgl@1371: + stc0.d r5[2048<<2],cr6 mgl@1371: + stc0.d r4[2047<<2],cr4 mgl@1371: + stc0.d r13[147<<2],cr8 mgl@1371: + .text mgl@1371: + .global memc mgl@1371: +memc: mgl@1371: + memc 0, 0 mgl@1371: + memc -4, 31 mgl@1371: + memc -65536, 16 mgl@1371: + memc 65532, 15 mgl@1371: + .text mgl@1371: + .global mems mgl@1371: +mems: mgl@1371: + mems 0, 0 mgl@1371: + mems -4, 31 mgl@1371: + mems -65536, 16 mgl@1371: + mems 65532, 15 mgl@1371: + .text mgl@1371: + .global memt mgl@1371: +memt: mgl@1371: + memt 0, 0 mgl@1371: + memt -4, 31 mgl@1371: + memt -65536, 16 mgl@1371: + memt 65532, 15 mgl@1371: + mgl@1371: + .text mgl@1371: + .global stcond mgl@1371: +stcond: mgl@1371: + stcond r0[0], r0 mgl@1371: + stcond pc[-1], pc mgl@1371: + stcond r8[-32768], r7 mgl@1371: + stcond r7[32767], r8 mgl@1371: + stcond r5[0x1234], r10 mgl@1371: + mgl@1371: +ldcm_w: mgl@1371: + ldcm.w cp0,pc,cr0-cr7 mgl@1371: + ldcm.w cp7,r0,cr0 mgl@1371: + ldcm.w cp4,r4++,cr0-cr6 mgl@1371: + ldcm.w cp3,r7,cr7 mgl@1371: + ldcm.w cp1,r12++,cr1,cr4-cr6 mgl@1371: + ldcm.w cp0,pc,cr8-cr15 mgl@1371: + ldcm.w cp7,r0,cr8 mgl@1371: + ldcm.w cp4,r4++,cr8-cr14 mgl@1371: + ldcm.w cp3,r7,cr15 mgl@1371: + ldcm.w cp1,r12++,cr9,cr12-cr14 mgl@1371: + mgl@1371: +ldcm_d: mgl@1371: + ldcm.d cp0,pc,cr0-cr15 mgl@1371: + ldcm.d cp7,r0,cr0,cr1 mgl@1371: + ldcm.d cp4,r4++,cr0-cr13 mgl@1371: + ldcm.d cp3,r7,cr14-cr15 mgl@1371: + ldcm.d cp2,r12++,cr0-cr3,cr8-cr9,cr14-cr15 mgl@1371: + mgl@1371: +stcm_w: mgl@1371: + stcm.w cp0,pc,cr0-cr7 mgl@1371: + stcm.w cp7,r0,cr0 mgl@1371: + stcm.w cp4,--r4,cr0-cr6 mgl@1371: + stcm.w cp3,r7,cr7 mgl@1371: + stcm.w cp1,--r12,cr1,cr4-cr6 mgl@1371: + stcm.w cp0,pc,cr8-cr15 mgl@1371: + stcm.w cp7,r0,cr8 mgl@1371: + stcm.w cp4,--r4,cr8-cr14 mgl@1371: + stcm.w cp3,r7,cr15 mgl@1371: + stcm.w cp1,--r12,cr9,cr12-cr14 mgl@1371: + mgl@1371: +stcm_d: mgl@1371: + stcm.d cp0,pc,cr0-cr15 mgl@1371: + stcm.d cp7,r0,cr0,cr1 mgl@1371: + stcm.d cp4,--r4,cr0-cr13 mgl@1371: + stcm.d cp3,r7,cr14-cr15 mgl@1371: + stcm.d cp2,--r12,cr0-cr3,cr8-cr9,cr14-cr15 mgl@1371: + mgl@1371: +mvcr_w: mgl@1371: + mvcr.w cp7,pc,cr15 mgl@1371: + mvcr.w cp0,r0,cr0 mgl@1371: + mvcr.w cp0,pc,cr15 mgl@1371: + mvcr.w cp7,r0,cr15 mgl@1371: + mvcr.w cp7,pc,cr0 mgl@1371: + mvcr.w cp4,r7,cr8 mgl@1371: + mvcr.w cp3,r8,cr7 mgl@1371: + mgl@1371: +mvcr_d: mgl@1371: + mvcr.d cp7,lr,cr14 mgl@1371: + mvcr.d cp0,r0,cr0 mgl@1371: + mvcr.d cp0,lr,cr14 mgl@1371: + mvcr.d cp7,r0,cr14 mgl@1371: + mvcr.d cp7,lr,cr0 mgl@1371: + mvcr.d cp4,r6,cr8 mgl@1371: + mvcr.d cp3,r8,cr6 mgl@1371: + mgl@1371: +mvrc_w: mgl@1371: + mvrc.w cp7,cr15,pc mgl@1371: + mvrc.w cp0,cr0,r0 mgl@1371: + mvrc.w cp0,cr15,pc mgl@1371: + mvrc.w cp7,cr15,r0 mgl@1371: + mvrc.w cp7,cr0,pc mgl@1371: + mvrc.w cp4,cr8,r7 mgl@1371: + mvrc.w cp3,cr7,r8 mgl@1371: + mgl@1371: +mvrc_d: mgl@1371: + mvrc.d cp7,cr14,lr mgl@1371: + mvrc.d cp0,cr0,r0 mgl@1371: + mvrc.d cp0,cr14,lr mgl@1371: + mvrc.d cp7,cr14,r0 mgl@1371: + mvrc.d cp7,cr0,lr mgl@1371: + mvrc.d cp4,cr8,r6 mgl@1371: + mvrc.d cp3,cr6,r8 mgl@1371: + mgl@1371: +bfexts: mgl@1371: + bfexts pc,pc,31,31 mgl@1371: + bfexts r0,r0,0,0 mgl@1371: + bfexts r0,pc,31,31 mgl@1371: + bfexts pc,r0,31,31 mgl@1371: + bfexts pc,pc,0,31 mgl@1371: + bfexts pc,pc,31,0 mgl@1371: + bfexts r7,r8,15,16 mgl@1371: + bfexts r8,r7,16,15 mgl@1371: + mgl@1371: +bfextu: mgl@1371: + bfextu pc,pc,31,31 mgl@1371: + bfextu r0,r0,0,0 mgl@1371: + bfextu r0,pc,31,31 mgl@1371: + bfextu pc,r0,31,31 mgl@1371: + bfextu pc,pc,0,31 mgl@1371: + bfextu pc,pc,31,0 mgl@1371: + bfextu r7,r8,15,16 mgl@1371: + bfextu r8,r7,16,15 mgl@1371: + mgl@1371: +bfins: mgl@1371: + bfins pc,pc,31,31 mgl@1371: + bfins r0,r0,0,0 mgl@1371: + bfins r0,pc,31,31 mgl@1371: + bfins pc,r0,31,31 mgl@1371: + bfins pc,pc,0,31 mgl@1371: + bfins pc,pc,31,0 mgl@1371: + bfins r7,r8,15,16 mgl@1371: + bfins r8,r7,16,15 mgl@1371: + mgl@1371: +rsubc: mgl@1371: + rsubeq pc,0 mgl@1371: + rsubal r12,-1 mgl@1371: + rsubls r5,-128 mgl@1371: + rsubpl r4,127 mgl@1371: + rsubne lr,1 mgl@1371: + rsubls r12,118 mgl@1371: + rsubvc lr,-12 mgl@1371: + rsubmi r4,-13 mgl@1371: + mgl@1371: +addc: mgl@1371: + addeq pc,pc,pc mgl@1371: + addal r12,r12,r12 mgl@1371: + addls r5,r5,r5 mgl@1371: + addpl r4,r4,r4 mgl@1371: + addne lr,lr,lr mgl@1371: + addls r10,r2,r1 mgl@1371: + addvc r12,r8,r11 mgl@1371: + addmi r10,r7,r0 mgl@1371: + mgl@1371: +subc2: mgl@1371: + subeq pc,pc,pc mgl@1371: + subal r12,r12,r12 mgl@1371: + subls r5,r5,r5 mgl@1371: + subpl r4,r4,r4 mgl@1371: + subne lr,lr,lr mgl@1371: + subls r10,r2,r1 mgl@1371: + subvc r12,r8,r11 mgl@1371: + submi r10,r7,r0 mgl@1371: + mgl@1371: +andc: mgl@1371: + andeq pc,pc,pc mgl@1371: + andal r12,r12,r12 mgl@1371: + andls r5,r5,r5 mgl@1371: + andpl r4,r4,r4 mgl@1371: + andne lr,lr,lr mgl@1371: + andls r10,r2,r1 mgl@1371: + andvc r12,r8,r11 mgl@1371: + andmi r10,r7,r0 mgl@1371: + mgl@1371: +orc: mgl@1371: + oreq pc,pc,pc mgl@1371: + oral r12,r12,r12 mgl@1371: + orls r5,r5,r5 mgl@1371: + orpl r4,r4,r4 mgl@1371: + orne lr,lr,lr mgl@1371: + orls r10,r2,r1 mgl@1371: + orvc r12,r8,r11 mgl@1371: + ormi r10,r7,r0 mgl@1371: + mgl@1371: +eorc: mgl@1371: + eoreq pc,pc,pc mgl@1371: + eoral r12,r12,r12 mgl@1371: + eorls r5,r5,r5 mgl@1371: + eorpl r4,r4,r4 mgl@1371: + eorne lr,lr,lr mgl@1371: + eorls r10,r2,r1 mgl@1371: + eorvc r12,r8,r11 mgl@1371: + eormi r10,r7,r0 mgl@1371: + mgl@1371: +ldcond: mgl@1371: + ld.weq pc,pc[2044] mgl@1371: + ld.shal r12,r12[1022] mgl@1371: + ld.uhls r5,r5[0] mgl@1371: + ld.ubpl r4,r4[511] mgl@1371: + ld.sbne lr,lr[0] mgl@1371: + ld.wls r10,r2[0] mgl@1371: + ld.shvc r12,r8[0x3fe] mgl@1371: + ld.ubmi r10,r7[1] mgl@1371: + mgl@1371: +stcond2: mgl@1371: + st.weq pc[2044],pc mgl@1371: + st.hal r12[1022],r12 mgl@1371: + st.hls r5[0],r5 mgl@1371: + st.bpl r4[511],r4 mgl@1371: + st.bne lr[0],lr mgl@1371: + st.wls r2[0],r10 mgl@1371: + st.hvc r8[0x3fe],r12 mgl@1371: + st.bmi r7[1],r10 mgl@1371: + mgl@1371: +movh: mgl@1371: + movh pc, 65535 mgl@1371: + movh r0, 0 mgl@1371: + movh r5, 1 mgl@1371: + movh r12, 32767 mgl@1371: + mgl@1371: + mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/avr32.exp mgl@1371: @@ -0,0 +1,23 @@ mgl@1371: +# AVR32 assembler testsuite. -*- Tcl -*- mgl@1371: + mgl@1371: +if [istarget avr32-*-*] { mgl@1371: + run_dump_test "hwrd-lwrd" mgl@1371: + run_dump_test "pcrel" mgl@1371: + run_dump_test "aliases" mgl@1371: + run_dump_test "dwarf2" mgl@1371: + run_dump_test "pic_reloc" mgl@1371: + run_dump_test "fpinsn" mgl@1371: + run_dump_test "pico" mgl@1371: + run_dump_test "lda_pic" mgl@1371: + run_dump_test "lda_pic_linkrelax" mgl@1371: + run_dump_test "lda_nopic" mgl@1371: + run_dump_test "lda_nopic_linkrelax" mgl@1371: + run_dump_test "call_pic" mgl@1371: + run_dump_test "call_pic_linkrelax" mgl@1371: + run_dump_test "call_nopic" mgl@1371: + run_dump_test "call_nopic_linkrelax" mgl@1371: + run_dump_test "jmptable" mgl@1371: + run_dump_test "jmptable_linkrelax" mgl@1371: + run_dump_test "symdiff" mgl@1371: + run_dump_test "symdiff_linkrelax" mgl@1371: +} mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/call_nopic.d mgl@1371: @@ -0,0 +1,36 @@ mgl@1371: +#source: call.s mgl@1371: +#as: mgl@1371: +#objdump: -dr mgl@1371: +#name: call_nopic mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: d7 03 nop mgl@1371: + mgl@1371: +00000002 : mgl@1371: + \.\.\. mgl@1371: + 1ffffe: 00 00 add r0,r0 mgl@1371: + 200000: f0 a0 00 00 rcall 0 mgl@1371: + 200004: f0 1f 00 0c mcall 200034 mgl@1371: + 200008: f0 1f 00 0c mcall 200038 mgl@1371: + 20000c: f0 1f 00 0c mcall 20003c mgl@1371: + 200010: f0 1f 00 0c mcall 200040 mgl@1371: + \.\.\. mgl@1371: + 200030: ee b0 ff ff rcall 40002e mgl@1371: + \.\.\. mgl@1371: + 200034: R_AVR32_32_CPENT \.text\+0x2 mgl@1371: + 200038: R_AVR32_32_CPENT \.text\.init mgl@1371: + 20003c: R_AVR32_32_CPENT undefined mgl@1371: + 200040: R_AVR32_32_CPENT \.text\+0x40002c mgl@1371: + mgl@1371: +0040002c : mgl@1371: + 40002c: d7 03 nop mgl@1371: +0040002e : mgl@1371: + 40002e: d7 03 nop mgl@1371: +Disassembly of section \.text\.init: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: e2 c0 00 00 sub r0,r1,0 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/call_nopic_linkrelax.d mgl@1371: @@ -0,0 +1,43 @@ mgl@1371: +#source: call.s mgl@1371: +#as: --linkrelax mgl@1371: +#objdump: -dr mgl@1371: +#name: call_nopic_linkrelax mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: d7 03 nop mgl@1371: + mgl@1371: +00000002 : mgl@1371: + \.\.\. mgl@1371: + 1ffffe: 00 00 add r0,r0 mgl@1371: + 200000: e0 a0 00 00 rcall 200000 mgl@1371: + 200000: R_AVR32_22H_PCREL \.text mgl@1371: + 200004: f0 1f 00 00 mcall 200004 mgl@1371: + 200004: R_AVR32_CPCALL \.text\+0x200034 mgl@1371: + 200008: f0 1f 00 00 mcall 200008 mgl@1371: + 200008: R_AVR32_CPCALL \.text\+0x200038 mgl@1371: + 20000c: f0 1f 00 00 mcall 20000c mgl@1371: + 20000c: R_AVR32_CPCALL \.text\+0x20003c mgl@1371: + 200010: f0 1f 00 00 mcall 200010 mgl@1371: + 200010: R_AVR32_CPCALL \.text\+0x200040 mgl@1371: + \.\.\. mgl@1371: + 200030: e0 a0 00 00 rcall 200030 mgl@1371: + 200030: R_AVR32_22H_PCREL \.text\+0x40002e mgl@1371: + \.\.\. mgl@1371: + 200034: R_AVR32_ALIGN \*ABS\*\+0x2 mgl@1371: + 200034: R_AVR32_32_CPENT \.text\+0x2 mgl@1371: + 200038: R_AVR32_32_CPENT \.text\.init mgl@1371: + 20003c: R_AVR32_32_CPENT undefined mgl@1371: + 200040: R_AVR32_32_CPENT \.text\+0x40002c mgl@1371: + mgl@1371: +0040002c : mgl@1371: + 40002c: d7 03 nop mgl@1371: +0040002e : mgl@1371: + 40002e: d7 03 nop mgl@1371: +Disassembly of section \.text\.init: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: e2 c0 00 00 sub r0,r1,0 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/call_pic.d mgl@1371: @@ -0,0 +1,36 @@ mgl@1371: +#source: call.s mgl@1371: +#as: --pic mgl@1371: +#objdump: -dr mgl@1371: +#name: call_pic mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: d7 03 nop mgl@1371: + mgl@1371: +00000002 : mgl@1371: + \.\.\. mgl@1371: + 1ffffe: 00 00 add r0,r0 mgl@1371: + 200000: f0 a0 00 00 rcall 0 mgl@1371: + 200004: f0 16 00 00 mcall r6\[0\] mgl@1371: + 200004: R_AVR32_GOT18SW toofar_negative mgl@1371: + 200008: f0 16 00 00 mcall r6\[0\] mgl@1371: + 200008: R_AVR32_GOT18SW different_section mgl@1371: + 20000c: f0 16 00 00 mcall r6\[0\] mgl@1371: + 20000c: R_AVR32_GOT18SW undefined mgl@1371: + 200010: f0 16 00 00 mcall r6\[0\] mgl@1371: + 200010: R_AVR32_GOT18SW toofar_positive mgl@1371: + \.\.\. mgl@1371: + 200030: ee b0 ff ff rcall 40002e mgl@1371: + \.\.\. mgl@1371: + mgl@1371: +0040002c : mgl@1371: + 40002c: d7 03 nop mgl@1371: +0040002e : mgl@1371: + 40002e: d7 03 nop mgl@1371: +Disassembly of section \.text\.init: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: e2 c0 00 00 sub r0,r1,0 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/call_pic_linkrelax.d mgl@1371: @@ -0,0 +1,47 @@ mgl@1371: +#source: call.s mgl@1371: +#as: --pic --linkrelax mgl@1371: +#objdump: -dr mgl@1371: +#name: call_pic_linkrelax mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: d7 03 nop mgl@1371: + mgl@1371: +00000002 : mgl@1371: + \.\.\. mgl@1371: + 1ffffe: 00 00 add r0,r0 mgl@1371: + 200000: e0 a0 00 00 rcall 200000 mgl@1371: + 200000: R_AVR32_22H_PCREL \.text mgl@1371: + 200004: e0 6e 00 00 mov lr,0 mgl@1371: + 200004: R_AVR32_GOTCALL toofar_negative mgl@1371: + 200008: ec 0e 03 2e ld\.w lr,r6\[lr<<0x2\] mgl@1371: + 20000c: 5d 1e icall lr mgl@1371: + 20000e: e0 6e 00 00 mov lr,0 mgl@1371: + 20000e: R_AVR32_GOTCALL different_section mgl@1371: + 200012: ec 0e 03 2e ld\.w lr,r6\[lr<<0x2\] mgl@1371: + 200016: 5d 1e icall lr mgl@1371: + 200018: e0 6e 00 00 mov lr,0 mgl@1371: + 200018: R_AVR32_GOTCALL undefined mgl@1371: + 20001c: ec 0e 03 2e ld\.w lr,r6\[lr<<0x2\] mgl@1371: + 200020: 5d 1e icall lr mgl@1371: + 200022: e0 6e 00 00 mov lr,0 mgl@1371: + 200022: R_AVR32_GOTCALL toofar_positive mgl@1371: + 200026: ec 0e 03 2e ld\.w lr,r6\[lr<<0x2\] mgl@1371: + 20002a: 5d 1e icall lr mgl@1371: + 20002c: 00 00 add r0,r0 mgl@1371: + 20002e: 00 00 add r0,r0 mgl@1371: + 200030: e0 a0 00 00 rcall 200030 mgl@1371: + 200030: R_AVR32_22H_PCREL \.text\+0x40002e mgl@1371: + \.\.\. mgl@1371: + mgl@1371: +0040002c : mgl@1371: + 40002c: d7 03 nop mgl@1371: +0040002e : mgl@1371: + 40002e: d7 03 nop mgl@1371: +Disassembly of section \.text\.init: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: e2 c0 00 00 sub r0,r1,0 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/call.s mgl@1371: @@ -0,0 +1,30 @@ mgl@1371: + mgl@1371: + .text mgl@1371: + .global call_test mgl@1371: +call_test: mgl@1371: +far_negative: mgl@1371: + nop mgl@1371: +toofar_negative: mgl@1371: + mgl@1371: + .org 0x200000 mgl@1371: + mgl@1371: + call far_negative mgl@1371: + call toofar_negative mgl@1371: + call different_section mgl@1371: + call undefined mgl@1371: + call toofar_positive mgl@1371: + .org 0x200030 mgl@1371: + call far_positive mgl@1371: + mgl@1371: + .cpool mgl@1371: + mgl@1371: + .org 0x40002c mgl@1371: + mgl@1371: +toofar_positive: mgl@1371: + nop mgl@1371: +far_positive: mgl@1371: + nop mgl@1371: + mgl@1371: + .section .text.init,"ax",@progbits mgl@1371: +different_section: mgl@1371: + sub r0, r1, 0 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/dwarf2.d mgl@1371: @@ -0,0 +1,42 @@ mgl@1371: +#readelf: -wl mgl@1371: +#name: dwarf2 mgl@1371: +#source: dwarf2.s mgl@1371: + mgl@1371: +Dump of debug contents of section \.debug_line: mgl@1371: + mgl@1371: + Length: 53 mgl@1371: + DWARF Version: 2 mgl@1371: + Prologue Length: 26 mgl@1371: + Minimum Instruction Length: 1 mgl@1371: + Initial value of 'is_stmt': 1 mgl@1371: + Line Base: -5 mgl@1371: + Line Range: 14 mgl@1371: + Opcode Base: 10 mgl@1371: + \(Pointer size: 4\) mgl@1371: + mgl@1371: + Opcodes: mgl@1371: + Opcode 1 has 0 args mgl@1371: + Opcode 2 has 1 args mgl@1371: + Opcode 3 has 1 args mgl@1371: + Opcode 4 has 1 args mgl@1371: + Opcode 5 has 1 args mgl@1371: + Opcode 6 has 0 args mgl@1371: + Opcode 7 has 0 args mgl@1371: + Opcode 8 has 0 args mgl@1371: + Opcode 9 has 1 args mgl@1371: + mgl@1371: + The Directory Table is empty\. mgl@1371: + mgl@1371: + The File Name Table: mgl@1371: + Entry Dir Time Size Name mgl@1371: + 1 0 0 0 main\.c mgl@1371: + mgl@1371: + Line Number Statements: mgl@1371: + Extended opcode 2: set Address to 0x0 mgl@1371: + Advance Line by 87 to 88 mgl@1371: + Copy mgl@1371: + Advance Line by 23 to 111 mgl@1371: + Special opcode .*: advance Address by 4 to 0x4 and Line by 0 to 111 mgl@1371: + Special opcode .*: advance Address by 10 to 0xe and Line by 1 to 112 mgl@1371: + Advance PC by 530 to 220 mgl@1371: + Extended opcode 1: End of Sequence mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/dwarf2.s mgl@1371: @@ -0,0 +1,67 @@ mgl@1371: +# Source file used to test DWARF2 information for AVR32. mgl@1371: + mgl@1371: + .file "main.c" mgl@1371: + mgl@1371: + .section .debug_abbrev,"",@progbits mgl@1371: +.Ldebug_abbrev0: mgl@1371: + .section .debug_info,"",@progbits mgl@1371: +.Ldebug_info0: mgl@1371: + .section .debug_line,"",@progbits mgl@1371: +.Ldebug_line0: mgl@1371: + mgl@1371: + .text mgl@1371: + .align 1 mgl@1371: + .globl main mgl@1371: + .type main, @function mgl@1371: +.Ltext0: mgl@1371: +main: mgl@1371: + .file 1 "main.c" mgl@1371: + .loc 1 88 0 mgl@1371: + pushm r0-r7,lr mgl@1371: + sub sp, 4 mgl@1371: + .loc 1 111 0 mgl@1371: + lddpc r12, .LC1 mgl@1371: + lddpc r7, .LC1 mgl@1371: + icall r7 mgl@1371: + .loc 1 112 0 mgl@1371: + lddpc r6, .LC4 mgl@1371: + mgl@1371: + .align 2 mgl@1371: +.LC4: .int 0 mgl@1371: + mgl@1371: + .fill 256, 2, 0 mgl@1371: + mgl@1371: + .align 2 mgl@1371: +.LC1: mgl@1371: + .int 0 mgl@1371: +.LC2: mgl@1371: + .int 0 mgl@1371: +.LC3: mgl@1371: + .int 0 mgl@1371: + .size main, . - main mgl@1371: + mgl@1371: +.Letext0: mgl@1371: + mgl@1371: + .section .debug_info mgl@1371: + .int .Ledebug_info0 - .Ldebug_info0 // size mgl@1371: + .short 2 // version mgl@1371: + .int .Ldebug_abbrev0 // abbrev offset mgl@1371: + .byte 4 // bytes per addr mgl@1371: + mgl@1371: + .uleb128 1 // abbrev 1 mgl@1371: + .int .Ldebug_line0 // DW_AT_stmt_list mgl@1371: + .int .Letext0 // DW_AT_high_pc mgl@1371: + .int .Ltext0 // DW_AT_low_pc mgl@1371: + mgl@1371: +.Ledebug_info0: mgl@1371: + mgl@1371: + .section .debug_abbrev mgl@1371: + .uleb128 0x01 mgl@1371: + .uleb128 0x11 // DW_TAG_compile_unit mgl@1371: + .byte 0 // DW_CHILDREN_no mgl@1371: + .uleb128 0x10, 0x6 // DW_AT_stmt_list mgl@1371: + .uleb128 0x12, 0x1 // DW_AT_high_pc mgl@1371: + .uleb128 0x11, 0x1 // DW_AT_low_pc mgl@1371: + .uleb128 0, 0 mgl@1371: + mgl@1371: + .byte 0 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/fpinsn.d mgl@1371: @@ -0,0 +1,271 @@ mgl@1371: +#as: mgl@1371: +#objdump: -dr mgl@1371: +#name: fpinsn mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a2 0f ff cop cp0,cr15,cr15,cr15,0x4 mgl@1371: + *[0-9a-f]*: e1 a2 00 00 cop cp0,cr0,cr0,cr0,0x4 mgl@1371: + *[0-9a-f]*: e1 a2 00 ff cop cp0,cr0,cr15,cr15,0x4 mgl@1371: + *[0-9a-f]*: e1 a2 0f 0f cop cp0,cr15,cr0,cr15,0x4 mgl@1371: + *[0-9a-f]*: e1 a2 0f f0 cop cp0,cr15,cr15,cr0,0x4 mgl@1371: + *[0-9a-f]*: e1 a2 07 88 cop cp0,cr7,cr8,cr8,0x4 mgl@1371: + *[0-9a-f]*: e1 a2 08 78 cop cp0,cr8,cr7,cr8,0x4 mgl@1371: + *[0-9a-f]*: e1 a2 08 87 cop cp0,cr8,cr8,cr7,0x4 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a2 1f ff cop cp0,cr15,cr15,cr15,0x5 mgl@1371: + *[0-9a-f]*: e1 a2 10 00 cop cp0,cr0,cr0,cr0,0x5 mgl@1371: + *[0-9a-f]*: e1 a2 10 ff cop cp0,cr0,cr15,cr15,0x5 mgl@1371: + *[0-9a-f]*: e1 a2 1f 0f cop cp0,cr15,cr0,cr15,0x5 mgl@1371: + *[0-9a-f]*: e1 a2 1f f0 cop cp0,cr15,cr15,cr0,0x5 mgl@1371: + *[0-9a-f]*: e1 a2 17 88 cop cp0,cr7,cr8,cr8,0x5 mgl@1371: + *[0-9a-f]*: e1 a2 18 78 cop cp0,cr8,cr7,cr8,0x5 mgl@1371: + *[0-9a-f]*: e1 a2 18 87 cop cp0,cr8,cr8,cr7,0x5 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a0 0f ff cop cp0,cr15,cr15,cr15,0x0 mgl@1371: + *[0-9a-f]*: e1 a0 00 00 cop cp0,cr0,cr0,cr0,0x0 mgl@1371: + *[0-9a-f]*: e1 a0 00 ff cop cp0,cr0,cr15,cr15,0x0 mgl@1371: + *[0-9a-f]*: e1 a0 0f 0f cop cp0,cr15,cr0,cr15,0x0 mgl@1371: + *[0-9a-f]*: e1 a0 0f f0 cop cp0,cr15,cr15,cr0,0x0 mgl@1371: + *[0-9a-f]*: e1 a0 07 88 cop cp0,cr7,cr8,cr8,0x0 mgl@1371: + *[0-9a-f]*: e1 a0 08 78 cop cp0,cr8,cr7,cr8,0x0 mgl@1371: + *[0-9a-f]*: e1 a0 08 87 cop cp0,cr8,cr8,cr7,0x0 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a0 1f ff cop cp0,cr15,cr15,cr15,0x1 mgl@1371: + *[0-9a-f]*: e1 a0 10 00 cop cp0,cr0,cr0,cr0,0x1 mgl@1371: + *[0-9a-f]*: e1 a0 10 ff cop cp0,cr0,cr15,cr15,0x1 mgl@1371: + *[0-9a-f]*: e1 a0 1f 0f cop cp0,cr15,cr0,cr15,0x1 mgl@1371: + *[0-9a-f]*: e1 a0 1f f0 cop cp0,cr15,cr15,cr0,0x1 mgl@1371: + *[0-9a-f]*: e1 a0 17 88 cop cp0,cr7,cr8,cr8,0x1 mgl@1371: + *[0-9a-f]*: e1 a0 18 78 cop cp0,cr8,cr7,cr8,0x1 mgl@1371: + *[0-9a-f]*: e1 a0 18 87 cop cp0,cr8,cr8,cr7,0x1 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a1 0f ff cop cp0,cr15,cr15,cr15,0x2 mgl@1371: + *[0-9a-f]*: e1 a1 00 00 cop cp0,cr0,cr0,cr0,0x2 mgl@1371: + *[0-9a-f]*: e1 a1 00 ff cop cp0,cr0,cr15,cr15,0x2 mgl@1371: + *[0-9a-f]*: e1 a1 0f 0f cop cp0,cr15,cr0,cr15,0x2 mgl@1371: + *[0-9a-f]*: e1 a1 0f f0 cop cp0,cr15,cr15,cr0,0x2 mgl@1371: + *[0-9a-f]*: e1 a1 07 88 cop cp0,cr7,cr8,cr8,0x2 mgl@1371: + *[0-9a-f]*: e1 a1 08 78 cop cp0,cr8,cr7,cr8,0x2 mgl@1371: + *[0-9a-f]*: e1 a1 08 87 cop cp0,cr8,cr8,cr7,0x2 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a1 1f ff cop cp0,cr15,cr15,cr15,0x3 mgl@1371: + *[0-9a-f]*: e1 a1 10 00 cop cp0,cr0,cr0,cr0,0x3 mgl@1371: + *[0-9a-f]*: e1 a1 10 ff cop cp0,cr0,cr15,cr15,0x3 mgl@1371: + *[0-9a-f]*: e1 a1 1f 0f cop cp0,cr15,cr0,cr15,0x3 mgl@1371: + *[0-9a-f]*: e1 a1 1f f0 cop cp0,cr15,cr15,cr0,0x3 mgl@1371: + *[0-9a-f]*: e1 a1 17 88 cop cp0,cr7,cr8,cr8,0x3 mgl@1371: + *[0-9a-f]*: e1 a1 18 78 cop cp0,cr8,cr7,cr8,0x3 mgl@1371: + *[0-9a-f]*: e1 a1 18 87 cop cp0,cr8,cr8,cr7,0x3 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a3 0f ff cop cp0,cr15,cr15,cr15,0x6 mgl@1371: + *[0-9a-f]*: e1 a3 00 00 cop cp0,cr0,cr0,cr0,0x6 mgl@1371: + *[0-9a-f]*: e1 a3 00 ff cop cp0,cr0,cr15,cr15,0x6 mgl@1371: + *[0-9a-f]*: e1 a3 0f 0f cop cp0,cr15,cr0,cr15,0x6 mgl@1371: + *[0-9a-f]*: e1 a3 0f f0 cop cp0,cr15,cr15,cr0,0x6 mgl@1371: + *[0-9a-f]*: e1 a3 07 88 cop cp0,cr7,cr8,cr8,0x6 mgl@1371: + *[0-9a-f]*: e1 a3 08 78 cop cp0,cr8,cr7,cr8,0x6 mgl@1371: + *[0-9a-f]*: e1 a3 08 87 cop cp0,cr8,cr8,cr7,0x6 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a3 1f ff cop cp0,cr15,cr15,cr15,0x7 mgl@1371: + *[0-9a-f]*: e1 a3 10 00 cop cp0,cr0,cr0,cr0,0x7 mgl@1371: + *[0-9a-f]*: e1 a3 10 ff cop cp0,cr0,cr15,cr15,0x7 mgl@1371: + *[0-9a-f]*: e1 a3 1f 0f cop cp0,cr15,cr0,cr15,0x7 mgl@1371: + *[0-9a-f]*: e1 a3 1f f0 cop cp0,cr15,cr15,cr0,0x7 mgl@1371: + *[0-9a-f]*: e1 a3 17 88 cop cp0,cr7,cr8,cr8,0x7 mgl@1371: + *[0-9a-f]*: e1 a3 18 78 cop cp0,cr8,cr7,cr8,0x7 mgl@1371: + *[0-9a-f]*: e1 a3 18 87 cop cp0,cr8,cr8,cr7,0x7 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a4 0f f0 cop cp0,cr15,cr15,cr0,0x8 mgl@1371: + *[0-9a-f]*: e1 a4 00 00 cop cp0,cr0,cr0,cr0,0x8 mgl@1371: + *[0-9a-f]*: e1 a4 00 f0 cop cp0,cr0,cr15,cr0,0x8 mgl@1371: + *[0-9a-f]*: e1 a4 0f 00 cop cp0,cr15,cr0,cr0,0x8 mgl@1371: + *[0-9a-f]*: e1 a4 07 80 cop cp0,cr7,cr8,cr0,0x8 mgl@1371: + *[0-9a-f]*: e1 a4 08 70 cop cp0,cr8,cr7,cr0,0x8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a4 1f f0 cop cp0,cr15,cr15,cr0,0x9 mgl@1371: + *[0-9a-f]*: e1 a4 10 00 cop cp0,cr0,cr0,cr0,0x9 mgl@1371: + *[0-9a-f]*: e1 a4 10 f0 cop cp0,cr0,cr15,cr0,0x9 mgl@1371: + *[0-9a-f]*: e1 a4 1f 00 cop cp0,cr15,cr0,cr0,0x9 mgl@1371: + *[0-9a-f]*: e1 a4 17 80 cop cp0,cr7,cr8,cr0,0x9 mgl@1371: + *[0-9a-f]*: e1 a4 18 70 cop cp0,cr8,cr7,cr0,0x9 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a6 10 ff cop cp0,cr0,cr15,cr15,0xd mgl@1371: + *[0-9a-f]*: e1 a6 10 00 cop cp0,cr0,cr0,cr0,0xd mgl@1371: + *[0-9a-f]*: e1 a6 10 0f cop cp0,cr0,cr0,cr15,0xd mgl@1371: + *[0-9a-f]*: e1 a6 10 f0 cop cp0,cr0,cr15,cr0,0xd mgl@1371: + *[0-9a-f]*: e1 a6 10 78 cop cp0,cr0,cr7,cr8,0xd mgl@1371: + *[0-9a-f]*: e1 a6 10 87 cop cp0,cr0,cr8,cr7,0xd mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e5 a2 0e ee cop cp0,cr14,cr14,cr14,0x44 mgl@1371: + *[0-9a-f]*: e5 a2 00 00 cop cp0,cr0,cr0,cr0,0x44 mgl@1371: + *[0-9a-f]*: e5 a2 00 ee cop cp0,cr0,cr14,cr14,0x44 mgl@1371: + *[0-9a-f]*: e5 a2 0e 0e cop cp0,cr14,cr0,cr14,0x44 mgl@1371: + *[0-9a-f]*: e5 a2 0e e0 cop cp0,cr14,cr14,cr0,0x44 mgl@1371: + *[0-9a-f]*: e5 a2 06 88 cop cp0,cr6,cr8,cr8,0x44 mgl@1371: + *[0-9a-f]*: e5 a2 08 68 cop cp0,cr8,cr6,cr8,0x44 mgl@1371: + *[0-9a-f]*: e5 a2 08 86 cop cp0,cr8,cr8,cr6,0x44 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e5 a2 1e ee cop cp0,cr14,cr14,cr14,0x45 mgl@1371: + *[0-9a-f]*: e5 a2 10 00 cop cp0,cr0,cr0,cr0,0x45 mgl@1371: + *[0-9a-f]*: e5 a2 10 ee cop cp0,cr0,cr14,cr14,0x45 mgl@1371: + *[0-9a-f]*: e5 a2 1e 0e cop cp0,cr14,cr0,cr14,0x45 mgl@1371: + *[0-9a-f]*: e5 a2 1e e0 cop cp0,cr14,cr14,cr0,0x45 mgl@1371: + *[0-9a-f]*: e5 a2 16 88 cop cp0,cr6,cr8,cr8,0x45 mgl@1371: + *[0-9a-f]*: e5 a2 18 68 cop cp0,cr8,cr6,cr8,0x45 mgl@1371: + *[0-9a-f]*: e5 a2 18 86 cop cp0,cr8,cr8,cr6,0x45 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e5 a0 0e ee cop cp0,cr14,cr14,cr14,0x40 mgl@1371: + *[0-9a-f]*: e5 a0 00 00 cop cp0,cr0,cr0,cr0,0x40 mgl@1371: + *[0-9a-f]*: e5 a0 00 ee cop cp0,cr0,cr14,cr14,0x40 mgl@1371: + *[0-9a-f]*: e5 a0 0e 0e cop cp0,cr14,cr0,cr14,0x40 mgl@1371: + *[0-9a-f]*: e5 a0 0e e0 cop cp0,cr14,cr14,cr0,0x40 mgl@1371: + *[0-9a-f]*: e5 a0 06 88 cop cp0,cr6,cr8,cr8,0x40 mgl@1371: + *[0-9a-f]*: e5 a0 08 68 cop cp0,cr8,cr6,cr8,0x40 mgl@1371: + *[0-9a-f]*: e5 a0 08 86 cop cp0,cr8,cr8,cr6,0x40 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e5 a0 1e ee cop cp0,cr14,cr14,cr14,0x41 mgl@1371: + *[0-9a-f]*: e5 a0 10 00 cop cp0,cr0,cr0,cr0,0x41 mgl@1371: + *[0-9a-f]*: e5 a0 10 ee cop cp0,cr0,cr14,cr14,0x41 mgl@1371: + *[0-9a-f]*: e5 a0 1e 0e cop cp0,cr14,cr0,cr14,0x41 mgl@1371: + *[0-9a-f]*: e5 a0 1e e0 cop cp0,cr14,cr14,cr0,0x41 mgl@1371: + *[0-9a-f]*: e5 a0 16 88 cop cp0,cr6,cr8,cr8,0x41 mgl@1371: + *[0-9a-f]*: e5 a0 18 68 cop cp0,cr8,cr6,cr8,0x41 mgl@1371: + *[0-9a-f]*: e5 a0 18 86 cop cp0,cr8,cr8,cr6,0x41 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e5 a1 0e ee cop cp0,cr14,cr14,cr14,0x42 mgl@1371: + *[0-9a-f]*: e5 a1 00 00 cop cp0,cr0,cr0,cr0,0x42 mgl@1371: + *[0-9a-f]*: e5 a1 00 ee cop cp0,cr0,cr14,cr14,0x42 mgl@1371: + *[0-9a-f]*: e5 a1 0e 0e cop cp0,cr14,cr0,cr14,0x42 mgl@1371: + *[0-9a-f]*: e5 a1 0e e0 cop cp0,cr14,cr14,cr0,0x42 mgl@1371: + *[0-9a-f]*: e5 a1 06 88 cop cp0,cr6,cr8,cr8,0x42 mgl@1371: + *[0-9a-f]*: e5 a1 08 68 cop cp0,cr8,cr6,cr8,0x42 mgl@1371: + *[0-9a-f]*: e5 a1 08 86 cop cp0,cr8,cr8,cr6,0x42 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e5 a1 1e ee cop cp0,cr14,cr14,cr14,0x43 mgl@1371: + *[0-9a-f]*: e5 a1 10 00 cop cp0,cr0,cr0,cr0,0x43 mgl@1371: + *[0-9a-f]*: e5 a1 10 ee cop cp0,cr0,cr14,cr14,0x43 mgl@1371: + *[0-9a-f]*: e5 a1 1e 0e cop cp0,cr14,cr0,cr14,0x43 mgl@1371: + *[0-9a-f]*: e5 a1 1e e0 cop cp0,cr14,cr14,cr0,0x43 mgl@1371: + *[0-9a-f]*: e5 a1 16 88 cop cp0,cr6,cr8,cr8,0x43 mgl@1371: + *[0-9a-f]*: e5 a1 18 68 cop cp0,cr8,cr6,cr8,0x43 mgl@1371: + *[0-9a-f]*: e5 a1 18 86 cop cp0,cr8,cr8,cr6,0x43 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e5 a3 0e ee cop cp0,cr14,cr14,cr14,0x46 mgl@1371: + *[0-9a-f]*: e5 a3 00 00 cop cp0,cr0,cr0,cr0,0x46 mgl@1371: + *[0-9a-f]*: e5 a3 00 ee cop cp0,cr0,cr14,cr14,0x46 mgl@1371: + *[0-9a-f]*: e5 a3 0e 0e cop cp0,cr14,cr0,cr14,0x46 mgl@1371: + *[0-9a-f]*: e5 a3 0e e0 cop cp0,cr14,cr14,cr0,0x46 mgl@1371: + *[0-9a-f]*: e5 a3 06 88 cop cp0,cr6,cr8,cr8,0x46 mgl@1371: + *[0-9a-f]*: e5 a3 08 68 cop cp0,cr8,cr6,cr8,0x46 mgl@1371: + *[0-9a-f]*: e5 a3 08 86 cop cp0,cr8,cr8,cr6,0x46 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e5 a3 1e ee cop cp0,cr14,cr14,cr14,0x47 mgl@1371: + *[0-9a-f]*: e5 a3 10 00 cop cp0,cr0,cr0,cr0,0x47 mgl@1371: + *[0-9a-f]*: e5 a3 10 ee cop cp0,cr0,cr14,cr14,0x47 mgl@1371: + *[0-9a-f]*: e5 a3 1e 0e cop cp0,cr14,cr0,cr14,0x47 mgl@1371: + *[0-9a-f]*: e5 a3 1e e0 cop cp0,cr14,cr14,cr0,0x47 mgl@1371: + *[0-9a-f]*: e5 a3 16 88 cop cp0,cr6,cr8,cr8,0x47 mgl@1371: + *[0-9a-f]*: e5 a3 18 68 cop cp0,cr8,cr6,cr8,0x47 mgl@1371: + *[0-9a-f]*: e5 a3 18 86 cop cp0,cr8,cr8,cr6,0x47 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e5 a4 0e e0 cop cp0,cr14,cr14,cr0,0x48 mgl@1371: + *[0-9a-f]*: e5 a4 00 00 cop cp0,cr0,cr0,cr0,0x48 mgl@1371: + *[0-9a-f]*: e5 a4 00 e0 cop cp0,cr0,cr14,cr0,0x48 mgl@1371: + *[0-9a-f]*: e5 a4 0e 00 cop cp0,cr14,cr0,cr0,0x48 mgl@1371: + *[0-9a-f]*: e5 a4 06 80 cop cp0,cr6,cr8,cr0,0x48 mgl@1371: + *[0-9a-f]*: e5 a4 08 60 cop cp0,cr8,cr6,cr0,0x48 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e5 a4 1e e0 cop cp0,cr14,cr14,cr0,0x49 mgl@1371: + *[0-9a-f]*: e5 a4 10 00 cop cp0,cr0,cr0,cr0,0x49 mgl@1371: + *[0-9a-f]*: e5 a4 10 e0 cop cp0,cr0,cr14,cr0,0x49 mgl@1371: + *[0-9a-f]*: e5 a4 1e 00 cop cp0,cr14,cr0,cr0,0x49 mgl@1371: + *[0-9a-f]*: e5 a4 16 80 cop cp0,cr6,cr8,cr0,0x49 mgl@1371: + *[0-9a-f]*: e5 a4 18 60 cop cp0,cr8,cr6,cr0,0x49 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e5 a6 10 ee cop cp0,cr0,cr14,cr14,0x4d mgl@1371: + *[0-9a-f]*: e5 a6 10 00 cop cp0,cr0,cr0,cr0,0x4d mgl@1371: + *[0-9a-f]*: e5 a6 10 0e cop cp0,cr0,cr0,cr14,0x4d mgl@1371: + *[0-9a-f]*: e5 a6 10 e0 cop cp0,cr0,cr14,cr0,0x4d mgl@1371: + *[0-9a-f]*: e5 a6 10 68 cop cp0,cr0,cr6,cr8,0x4d mgl@1371: + *[0-9a-f]*: e5 a6 10 86 cop cp0,cr0,cr8,cr6,0x4d mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a5 0f f0 cop cp0,cr15,cr15,cr0,0xa mgl@1371: + *[0-9a-f]*: e1 a5 00 00 cop cp0,cr0,cr0,cr0,0xa mgl@1371: + *[0-9a-f]*: e1 a5 0f 00 cop cp0,cr15,cr0,cr0,0xa mgl@1371: + *[0-9a-f]*: e1 a5 00 f0 cop cp0,cr0,cr15,cr0,0xa mgl@1371: + *[0-9a-f]*: e1 a5 08 70 cop cp0,cr8,cr7,cr0,0xa mgl@1371: + *[0-9a-f]*: e1 a5 07 80 cop cp0,cr7,cr8,cr0,0xa mgl@1371: + *[0-9a-f]*: ef af 0f 00 mvcr.w cp0,pc,cr15 mgl@1371: + *[0-9a-f]*: ef a0 00 00 mvcr.w cp0,r0,cr0 mgl@1371: + *[0-9a-f]*: ef af 00 00 mvcr.w cp0,pc,cr0 mgl@1371: + *[0-9a-f]*: ef a0 0f 00 mvcr.w cp0,r0,cr15 mgl@1371: + *[0-9a-f]*: ef a8 07 00 mvcr.w cp0,r8,cr7 mgl@1371: + *[0-9a-f]*: ef a7 08 00 mvcr.w cp0,r7,cr8 mgl@1371: + *[0-9a-f]*: ef af 0f 20 mvrc.w cp0,cr15,pc mgl@1371: + *[0-9a-f]*: ef a0 00 20 mvrc.w cp0,cr0,r0 mgl@1371: + *[0-9a-f]*: ef a0 0f 20 mvrc.w cp0,cr15,r0 mgl@1371: + *[0-9a-f]*: ef af 00 20 mvrc.w cp0,cr0,pc mgl@1371: + *[0-9a-f]*: ef a7 08 20 mvrc.w cp0,cr8,r7 mgl@1371: + *[0-9a-f]*: ef a8 07 20 mvrc.w cp0,cr7,r8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e5 a5 0e e0 cop cp0,cr14,cr14,cr0,0x4a mgl@1371: + *[0-9a-f]*: e5 a5 00 00 cop cp0,cr0,cr0,cr0,0x4a mgl@1371: + *[0-9a-f]*: e5 a5 0e 00 cop cp0,cr14,cr0,cr0,0x4a mgl@1371: + *[0-9a-f]*: e5 a5 00 e0 cop cp0,cr0,cr14,cr0,0x4a mgl@1371: + *[0-9a-f]*: e5 a5 08 60 cop cp0,cr8,cr6,cr0,0x4a mgl@1371: + *[0-9a-f]*: e5 a5 06 80 cop cp0,cr6,cr8,cr0,0x4a mgl@1371: + *[0-9a-f]*: ef ae 0e 10 mvcr.d cp0,lr,cr14 mgl@1371: + *[0-9a-f]*: ef a0 00 10 mvcr.d cp0,r0,cr0 mgl@1371: + *[0-9a-f]*: ef ae 00 10 mvcr.d cp0,lr,cr0 mgl@1371: + *[0-9a-f]*: ef a0 0e 10 mvcr.d cp0,r0,cr14 mgl@1371: + *[0-9a-f]*: ef a8 06 10 mvcr.d cp0,r8,cr6 mgl@1371: + *[0-9a-f]*: ef a6 08 10 mvcr.d cp0,r6,cr8 mgl@1371: + *[0-9a-f]*: ef ae 0e 30 mvrc.d cp0,cr14,lr mgl@1371: + *[0-9a-f]*: ef a0 00 30 mvrc.d cp0,cr0,r0 mgl@1371: + *[0-9a-f]*: ef a0 0e 30 mvrc.d cp0,cr14,r0 mgl@1371: + *[0-9a-f]*: ef ae 00 30 mvrc.d cp0,cr0,lr mgl@1371: + *[0-9a-f]*: ef a6 08 30 mvrc.d cp0,cr8,r6 mgl@1371: + *[0-9a-f]*: ef a8 06 30 mvrc.d cp0,cr6,r8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a7 1f e0 cop cp0,cr15,cr14,cr0,0xf mgl@1371: + *[0-9a-f]*: e1 a7 10 00 cop cp0,cr0,cr0,cr0,0xf mgl@1371: + *[0-9a-f]*: e1 a7 1f 00 cop cp0,cr15,cr0,cr0,0xf mgl@1371: + *[0-9a-f]*: e1 a7 10 e0 cop cp0,cr0,cr14,cr0,0xf mgl@1371: + *[0-9a-f]*: e1 a7 18 60 cop cp0,cr8,cr6,cr0,0xf mgl@1371: + *[0-9a-f]*: e1 a7 17 80 cop cp0,cr7,cr8,cr0,0xf mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a8 0e f0 cop cp0,cr14,cr15,cr0,0x10 mgl@1371: + *[0-9a-f]*: e1 a8 00 00 cop cp0,cr0,cr0,cr0,0x10 mgl@1371: + *[0-9a-f]*: e1 a8 0e 00 cop cp0,cr14,cr0,cr0,0x10 mgl@1371: + *[0-9a-f]*: e1 a8 00 f0 cop cp0,cr0,cr15,cr0,0x10 mgl@1371: + *[0-9a-f]*: e1 a8 08 70 cop cp0,cr8,cr7,cr0,0x10 mgl@1371: + *[0-9a-f]*: e1 a8 06 80 cop cp0,cr6,cr8,cr0,0x10 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/fpinsn.s mgl@1371: @@ -0,0 +1,266 @@ mgl@1371: + mgl@1371: + .text mgl@1371: + .global fadd_s mgl@1371: +fadd_s: mgl@1371: + fadd.s fr15, fr15, fr15 mgl@1371: + fadd.s fr0, fr0, fr0 mgl@1371: + fadd.s fr0, fr15, fr15 mgl@1371: + fadd.s fr15, fr0, fr15 mgl@1371: + fadd.s fr15, fr15, fr0 mgl@1371: + fadd.s fr7, fr8, fr8 mgl@1371: + fadd.s fr8, fr7, fr8 mgl@1371: + fadd.s fr8, fr8, fr7 mgl@1371: + .global fsub_s mgl@1371: +fsub_s: mgl@1371: + fsub.s fr15, fr15, fr15 mgl@1371: + fsub.s fr0, fr0, fr0 mgl@1371: + fsub.s fr0, fr15, fr15 mgl@1371: + fsub.s fr15, fr0, fr15 mgl@1371: + fsub.s fr15, fr15, fr0 mgl@1371: + fsub.s fr7, fr8, fr8 mgl@1371: + fsub.s fr8, fr7, fr8 mgl@1371: + fsub.s fr8, fr8, fr7 mgl@1371: + .global fmac_s mgl@1371: +fmac_s: mgl@1371: + fmac.s fr15, fr15, fr15 mgl@1371: + fmac.s fr0, fr0, fr0 mgl@1371: + fmac.s fr0, fr15, fr15 mgl@1371: + fmac.s fr15, fr0, fr15 mgl@1371: + fmac.s fr15, fr15, fr0 mgl@1371: + fmac.s fr7, fr8, fr8 mgl@1371: + fmac.s fr8, fr7, fr8 mgl@1371: + fmac.s fr8, fr8, fr7 mgl@1371: + .global fnmac_s mgl@1371: +fnmac_s: mgl@1371: + fnmac.s fr15, fr15, fr15 mgl@1371: + fnmac.s fr0, fr0, fr0 mgl@1371: + fnmac.s fr0, fr15, fr15 mgl@1371: + fnmac.s fr15, fr0, fr15 mgl@1371: + fnmac.s fr15, fr15, fr0 mgl@1371: + fnmac.s fr7, fr8, fr8 mgl@1371: + fnmac.s fr8, fr7, fr8 mgl@1371: + fnmac.s fr8, fr8, fr7 mgl@1371: + .global fmsc_s mgl@1371: +fmsc_s: mgl@1371: + fmsc.s fr15, fr15, fr15 mgl@1371: + fmsc.s fr0, fr0, fr0 mgl@1371: + fmsc.s fr0, fr15, fr15 mgl@1371: + fmsc.s fr15, fr0, fr15 mgl@1371: + fmsc.s fr15, fr15, fr0 mgl@1371: + fmsc.s fr7, fr8, fr8 mgl@1371: + fmsc.s fr8, fr7, fr8 mgl@1371: + fmsc.s fr8, fr8, fr7 mgl@1371: + .global fnmsc_s mgl@1371: +fnmsc_s: mgl@1371: + fnmsc.s fr15, fr15, fr15 mgl@1371: + fnmsc.s fr0, fr0, fr0 mgl@1371: + fnmsc.s fr0, fr15, fr15 mgl@1371: + fnmsc.s fr15, fr0, fr15 mgl@1371: + fnmsc.s fr15, fr15, fr0 mgl@1371: + fnmsc.s fr7, fr8, fr8 mgl@1371: + fnmsc.s fr8, fr7, fr8 mgl@1371: + fnmsc.s fr8, fr8, fr7 mgl@1371: + .global fmul_s mgl@1371: +fmul_s: mgl@1371: + fmul.s fr15, fr15, fr15 mgl@1371: + fmul.s fr0, fr0, fr0 mgl@1371: + fmul.s fr0, fr15, fr15 mgl@1371: + fmul.s fr15, fr0, fr15 mgl@1371: + fmul.s fr15, fr15, fr0 mgl@1371: + fmul.s fr7, fr8, fr8 mgl@1371: + fmul.s fr8, fr7, fr8 mgl@1371: + fmul.s fr8, fr8, fr7 mgl@1371: + .global fnmul_s mgl@1371: +fnmul_s: mgl@1371: + fnmul.s fr15, fr15, fr15 mgl@1371: + fnmul.s fr0, fr0, fr0 mgl@1371: + fnmul.s fr0, fr15, fr15 mgl@1371: + fnmul.s fr15, fr0, fr15 mgl@1371: + fnmul.s fr15, fr15, fr0 mgl@1371: + fnmul.s fr7, fr8, fr8 mgl@1371: + fnmul.s fr8, fr7, fr8 mgl@1371: + fnmul.s fr8, fr8, fr7 mgl@1371: + .global fneg_s mgl@1371: +fneg_s: mgl@1371: + fneg.s fr15, fr15 mgl@1371: + fneg.s fr0, fr0 mgl@1371: + fneg.s fr0, fr15 mgl@1371: + fneg.s fr15, fr0 mgl@1371: + fneg.s fr7, fr8 mgl@1371: + fneg.s fr8, fr7 mgl@1371: + .global fabs_s mgl@1371: +fabs_s: mgl@1371: + fabs.s fr15, fr15 mgl@1371: + fabs.s fr0, fr0 mgl@1371: + fabs.s fr0, fr15 mgl@1371: + fabs.s fr15, fr0 mgl@1371: + fabs.s fr7, fr8 mgl@1371: + fabs.s fr8, fr7 mgl@1371: + .global fcmp_s mgl@1371: +fcmp_s: mgl@1371: + fcmp.s fr15, fr15 mgl@1371: + fcmp.s fr0, fr0 mgl@1371: + fcmp.s fr0, fr15 mgl@1371: + fcmp.s fr15, fr0 mgl@1371: + fcmp.s fr7, fr8 mgl@1371: + fcmp.s fr8, fr7 mgl@1371: + .global fadd_d mgl@1371: +fadd_d: mgl@1371: + fadd.d fr14, fr14, fr14 mgl@1371: + fadd.d fr0, fr0, fr0 mgl@1371: + fadd.d fr0, fr14, fr14 mgl@1371: + fadd.d fr14, fr0, fr14 mgl@1371: + fadd.d fr14, fr14, fr0 mgl@1371: + fadd.d fr6, fr8, fr8 mgl@1371: + fadd.d fr8, fr6, fr8 mgl@1371: + fadd.d fr8, fr8, fr6 mgl@1371: + .global fsub_d mgl@1371: +fsub_d: mgl@1371: + fsub.d fr14, fr14, fr14 mgl@1371: + fsub.d fr0, fr0, fr0 mgl@1371: + fsub.d fr0, fr14, fr14 mgl@1371: + fsub.d fr14, fr0, fr14 mgl@1371: + fsub.d fr14, fr14, fr0 mgl@1371: + fsub.d fr6, fr8, fr8 mgl@1371: + fsub.d fr8, fr6, fr8 mgl@1371: + fsub.d fr8, fr8, fr6 mgl@1371: + .global fmac_d mgl@1371: +fmac_d: mgl@1371: + fmac.d fr14, fr14, fr14 mgl@1371: + fmac.d fr0, fr0, fr0 mgl@1371: + fmac.d fr0, fr14, fr14 mgl@1371: + fmac.d fr14, fr0, fr14 mgl@1371: + fmac.d fr14, fr14, fr0 mgl@1371: + fmac.d fr6, fr8, fr8 mgl@1371: + fmac.d fr8, fr6, fr8 mgl@1371: + fmac.d fr8, fr8, fr6 mgl@1371: + .global fnmac_d mgl@1371: +fnmac_d: mgl@1371: + fnmac.d fr14, fr14, fr14 mgl@1371: + fnmac.d fr0, fr0, fr0 mgl@1371: + fnmac.d fr0, fr14, fr14 mgl@1371: + fnmac.d fr14, fr0, fr14 mgl@1371: + fnmac.d fr14, fr14, fr0 mgl@1371: + fnmac.d fr6, fr8, fr8 mgl@1371: + fnmac.d fr8, fr6, fr8 mgl@1371: + fnmac.d fr8, fr8, fr6 mgl@1371: + .global fmsc_d mgl@1371: +fmsc_d: mgl@1371: + fmsc.d fr14, fr14, fr14 mgl@1371: + fmsc.d fr0, fr0, fr0 mgl@1371: + fmsc.d fr0, fr14, fr14 mgl@1371: + fmsc.d fr14, fr0, fr14 mgl@1371: + fmsc.d fr14, fr14, fr0 mgl@1371: + fmsc.d fr6, fr8, fr8 mgl@1371: + fmsc.d fr8, fr6, fr8 mgl@1371: + fmsc.d fr8, fr8, fr6 mgl@1371: + .global fnmsc_d mgl@1371: +fnmsc_d: mgl@1371: + fnmsc.d fr14, fr14, fr14 mgl@1371: + fnmsc.d fr0, fr0, fr0 mgl@1371: + fnmsc.d fr0, fr14, fr14 mgl@1371: + fnmsc.d fr14, fr0, fr14 mgl@1371: + fnmsc.d fr14, fr14, fr0 mgl@1371: + fnmsc.d fr6, fr8, fr8 mgl@1371: + fnmsc.d fr8, fr6, fr8 mgl@1371: + fnmsc.d fr8, fr8, fr6 mgl@1371: + .global fmul_d mgl@1371: +fmul_d: mgl@1371: + fmul.d fr14, fr14, fr14 mgl@1371: + fmul.d fr0, fr0, fr0 mgl@1371: + fmul.d fr0, fr14, fr14 mgl@1371: + fmul.d fr14, fr0, fr14 mgl@1371: + fmul.d fr14, fr14, fr0 mgl@1371: + fmul.d fr6, fr8, fr8 mgl@1371: + fmul.d fr8, fr6, fr8 mgl@1371: + fmul.d fr8, fr8, fr6 mgl@1371: + .global fnmul_d mgl@1371: +fnmul_d: mgl@1371: + fnmul.d fr14, fr14, fr14 mgl@1371: + fnmul.d fr0, fr0, fr0 mgl@1371: + fnmul.d fr0, fr14, fr14 mgl@1371: + fnmul.d fr14, fr0, fr14 mgl@1371: + fnmul.d fr14, fr14, fr0 mgl@1371: + fnmul.d fr6, fr8, fr8 mgl@1371: + fnmul.d fr8, fr6, fr8 mgl@1371: + fnmul.d fr8, fr8, fr6 mgl@1371: + .global fneg_d mgl@1371: +fneg_d: mgl@1371: + fneg.d fr14, fr14 mgl@1371: + fneg.d fr0, fr0 mgl@1371: + fneg.d fr0, fr14 mgl@1371: + fneg.d fr14, fr0 mgl@1371: + fneg.d fr6, fr8 mgl@1371: + fneg.d fr8, fr6 mgl@1371: + .global fabs_d mgl@1371: +fabs_d: mgl@1371: + fabs.d fr14, fr14 mgl@1371: + fabs.d fr0, fr0 mgl@1371: + fabs.d fr0, fr14 mgl@1371: + fabs.d fr14, fr0 mgl@1371: + fabs.d fr6, fr8 mgl@1371: + fabs.d fr8, fr6 mgl@1371: + .global fcmp_d mgl@1371: +fcmp_d: mgl@1371: + fcmp.d fr14, fr14 mgl@1371: + fcmp.d fr0, fr0 mgl@1371: + fcmp.d fr0, fr14 mgl@1371: + fcmp.d fr14, fr0 mgl@1371: + fcmp.d fr6, fr8 mgl@1371: + fcmp.d fr8, fr6 mgl@1371: + .global fmov_s mgl@1371: +fmov_s: mgl@1371: + fmov.s fr15, fr15 mgl@1371: + fmov.s fr0, fr0 mgl@1371: + fmov.s fr15, fr0 mgl@1371: + fmov.s fr0, fr15 mgl@1371: + fmov.s fr8, fr7 mgl@1371: + fmov.s fr7, fr8 mgl@1371: + fmov.s pc, fr15 mgl@1371: + fmov.s r0, fr0 mgl@1371: + fmov.s pc, fr0 mgl@1371: + fmov.s r0, fr15 mgl@1371: + fmov.s r8, fr7 mgl@1371: + fmov.s r7, fr8 mgl@1371: + fmov.s fr15, pc mgl@1371: + fmov.s fr0, r0 mgl@1371: + fmov.s fr15, r0 mgl@1371: + fmov.s fr0, pc mgl@1371: + fmov.s fr8, r7 mgl@1371: + fmov.s fr7, r8 mgl@1371: + .global fmov_d mgl@1371: +fmov_d: mgl@1371: + fmov.d fr14, fr14 mgl@1371: + fmov.d fr0, fr0 mgl@1371: + fmov.d fr14, fr0 mgl@1371: + fmov.d fr0, fr14 mgl@1371: + fmov.d fr8, fr6 mgl@1371: + fmov.d fr6, fr8 mgl@1371: + fmov.d lr, fr14 mgl@1371: + fmov.d r0, fr0 mgl@1371: + fmov.d lr, fr0 mgl@1371: + fmov.d r0, fr14 mgl@1371: + fmov.d r8, fr6 mgl@1371: + fmov.d r6, fr8 mgl@1371: + fmov.d fr14, lr mgl@1371: + fmov.d fr0, r0 mgl@1371: + fmov.d fr14, r0 mgl@1371: + fmov.d fr0, lr mgl@1371: + fmov.d fr8, r6 mgl@1371: + fmov.d fr6, r8 mgl@1371: + .global fcasts_d mgl@1371: +fcasts_d: mgl@1371: + fcasts.d fr15, fr14 mgl@1371: + fcasts.d fr0, fr0 mgl@1371: + fcasts.d fr15, fr0 mgl@1371: + fcasts.d fr0, fr14 mgl@1371: + fcasts.d fr8, fr6 mgl@1371: + fcasts.d fr7, fr8 mgl@1371: + .global fcastd_s mgl@1371: +fcastd_s: mgl@1371: + fcastd.s fr14, fr15 mgl@1371: + fcastd.s fr0, fr0 mgl@1371: + fcastd.s fr14, fr0 mgl@1371: + fcastd.s fr0, fr15 mgl@1371: + fcastd.s fr8, fr7 mgl@1371: + fcastd.s fr6, fr8 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/hwrd-lwrd.d mgl@1371: @@ -0,0 +1,47 @@ mgl@1371: +#as: mgl@1371: +#objdump: -dr mgl@1371: +#name: hwrd-lwrd mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: e0 60 87 65 mov r0,34661 mgl@1371: + 4: e0 60 12 34 mov r0,4660 mgl@1371: + 8: e0 60 00 00 mov r0,0 mgl@1371: + 8: R_AVR32_HI16 \.text\+0x60 mgl@1371: + c: e0 60 00 00 mov r0,0 mgl@1371: + c: R_AVR32_HI16 extsym1 mgl@1371: + 10: ea 10 87 65 orh r0,0x8765 mgl@1371: + 14: ea 10 12 34 orh r0,0x1234 mgl@1371: + 18: ea 10 00 00 orh r0,0x0 mgl@1371: + 18: R_AVR32_HI16 \.text\+0x60 mgl@1371: + 1c: ea 10 00 00 orh r0,0x0 mgl@1371: + 1c: R_AVR32_HI16 extsym1 mgl@1371: + 20: e4 10 87 65 andh r0,0x8765 mgl@1371: + 24: e4 10 12 34 andh r0,0x1234 mgl@1371: + 28: e4 10 00 00 andh r0,0x0 mgl@1371: + 28: R_AVR32_HI16 \.text\+0x60 mgl@1371: + 2c: e4 10 00 00 andh r0,0x0 mgl@1371: + 2c: R_AVR32_HI16 extsym1 mgl@1371: + mgl@1371: +00000030 : mgl@1371: + 30: e0 60 43 21 mov r0,17185 mgl@1371: + 34: e0 60 56 78 mov r0,22136 mgl@1371: + 38: e0 60 00 00 mov r0,0 mgl@1371: + 38: R_AVR32_LO16 \.text\+0x60 mgl@1371: + 3c: e0 60 00 00 mov r0,0 mgl@1371: + 3c: R_AVR32_LO16 extsym1 mgl@1371: + 40: e8 10 43 21 orl r0,0x4321 mgl@1371: + 44: e8 10 56 78 orl r0,0x5678 mgl@1371: + 48: e8 10 00 00 orl r0,0x0 mgl@1371: + 48: R_AVR32_LO16 \.text\+0x60 mgl@1371: + 4c: e8 10 00 00 orl r0,0x0 mgl@1371: + 4c: R_AVR32_LO16 extsym1 mgl@1371: + 50: e0 10 43 21 andl r0,0x4321 mgl@1371: + 54: e0 10 56 78 andl r0,0x5678 mgl@1371: + 58: e0 10 00 00 andl r0,0x0 mgl@1371: + 58: R_AVR32_LO16 \.text\+0x60 mgl@1371: + 5c: e0 10 00 00 andl r0,0x0 mgl@1371: + 5c: R_AVR32_LO16 extsym1 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/hwrd-lwrd.s mgl@1371: @@ -0,0 +1,39 @@ mgl@1371: + mgl@1371: + .equ sym1, 0x12345678 mgl@1371: + mgl@1371: + .text mgl@1371: + .global test_hwrd mgl@1371: +test_hwrd: mgl@1371: + mov r0, hi(0x87654321) mgl@1371: + mov r0, hi(sym1) mgl@1371: + mov r0, hi(sym2) mgl@1371: + mov r0, hi(extsym1) mgl@1371: + mgl@1371: + orh r0, hi(0x87654321) mgl@1371: + orh r0, hi(sym1) mgl@1371: + orh r0, hi(sym2) mgl@1371: + orh r0, hi(extsym1) mgl@1371: + mgl@1371: + andh r0, hi(0x87654321) mgl@1371: + andh r0, hi(sym1) mgl@1371: + andh r0, hi(sym2) mgl@1371: + andh r0, hi(extsym1) mgl@1371: + mgl@1371: + .global test_lwrd mgl@1371: +test_lwrd: mgl@1371: + mov r0, lo(0x87654321) mgl@1371: + mov r0, lo(sym1) mgl@1371: + mov r0, lo(sym2) mgl@1371: + mov r0, lo(extsym1) mgl@1371: + mgl@1371: + orl r0, lo(0x87654321) mgl@1371: + orl r0, lo(sym1) mgl@1371: + orl r0, lo(sym2) mgl@1371: + orl r0, lo(extsym1) mgl@1371: + mgl@1371: + andl r0, lo(0x87654321) mgl@1371: + andl r0, lo(sym1) mgl@1371: + andl r0, lo(sym2) mgl@1371: + andl r0, lo(extsym1) mgl@1371: + mgl@1371: +sym2: mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/jmptable.d mgl@1371: @@ -0,0 +1,20 @@ mgl@1371: +#source: jmptable.s mgl@1371: +#as: mgl@1371: +#objdump: -dr mgl@1371: +#name: jmptable mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: fe c8 ff f4 sub r8,pc,-12 mgl@1371: + 4: f0 00 00 2f add pc,r8,r0<<0x2 mgl@1371: + 8: d7 03 nop mgl@1371: + a: 00 00 add r0,r0 mgl@1371: + c: c0 38 rjmp 12 mgl@1371: + e: c0 38 rjmp 14 mgl@1371: + 10: c0 38 rjmp 16 mgl@1371: + 12: d7 03 nop mgl@1371: + 14: d7 03 nop mgl@1371: + 16: d7 03 nop mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/jmptable_linkrelax.d mgl@1371: @@ -0,0 +1,25 @@ mgl@1371: +#source: jmptable.s mgl@1371: +#as: --linkrelax mgl@1371: +#objdump: -dr mgl@1371: +#name: jmptable_linkrelax mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: fe c8 00 00 sub r8,pc,0 mgl@1371: + 0: R_AVR32_16N_PCREL \.text\+0xc mgl@1371: + 4: f0 00 00 2f add pc,r8,r0<<0x2 mgl@1371: + 8: d7 03 nop mgl@1371: + a: 00 00 add r0,r0 mgl@1371: + a: R_AVR32_ALIGN \*ABS\*\+0x2 mgl@1371: + c: c0 08 rjmp c mgl@1371: + c: R_AVR32_11H_PCREL \.text\+0x12 mgl@1371: + e: c0 08 rjmp e mgl@1371: + e: R_AVR32_11H_PCREL \.text\+0x14 mgl@1371: + 10: c0 08 rjmp 10 mgl@1371: + 10: R_AVR32_11H_PCREL \.text\+0x16 mgl@1371: + 12: d7 03 nop mgl@1371: + 14: d7 03 nop mgl@1371: + 16: d7 03 nop mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/jmptable.s mgl@1371: @@ -0,0 +1,14 @@ mgl@1371: + mgl@1371: + .text mgl@1371: + .global jmptable_test mgl@1371: +jmptable_test: mgl@1371: + sub r8, pc, -(.L1 - .) mgl@1371: + add pc, r8, r0 << 2 mgl@1371: + nop mgl@1371: + .align 2 mgl@1371: +.L1: rjmp 1f mgl@1371: + rjmp 2f mgl@1371: + rjmp 3f mgl@1371: +1: nop mgl@1371: +2: nop mgl@1371: +3: nop mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/lda_nopic.d mgl@1371: @@ -0,0 +1,32 @@ mgl@1371: +#source: lda.s mgl@1371: +#as: mgl@1371: +#objdump: -dr mgl@1371: +#name: lda_nopic mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: f2 c8 00 00 sub r8,r9,0 mgl@1371: + mgl@1371: +00000004 : mgl@1371: + 4: f6 ca 00 00 sub r10,r11,0 mgl@1371: + ... mgl@1371: + 8000: fe c0 7f fc sub r0,pc,32764 mgl@1371: + 8004: 48 31 lddpc r1,8010 mgl@1371: + 8006: 48 42 lddpc r2,8014 mgl@1371: + 8008: 48 43 lddpc r3,8018 mgl@1371: + 800a: 48 54 lddpc r4,801c mgl@1371: + 800c: fe c5 80 04 sub r5,pc,-32764 mgl@1371: + ... mgl@1371: + 8010: R_AVR32_32_CPENT \.text mgl@1371: + 8014: R_AVR32_32_CPENT \.data mgl@1371: + 8018: R_AVR32_32_CPENT undefined mgl@1371: + 801c: R_AVR32_32_CPENT \.text\+0x1001c mgl@1371: + mgl@1371: +00010008 : mgl@1371: + 10008: fa cc 00 00 sub r12,sp,0 mgl@1371: + ... mgl@1371: +0001001c : mgl@1371: + 1001c: fe ce 00 00 sub lr,pc,0 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/lda_nopic_linkrelax.d mgl@1371: @@ -0,0 +1,41 @@ mgl@1371: +#source: lda.s mgl@1371: +#as: --linkrelax mgl@1371: +#objdump: -dr mgl@1371: +#name: lda_nopic_linkrelax mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: f2 c8 00 00 sub r8,r9,0 mgl@1371: + mgl@1371: +00000004 : mgl@1371: + 4: f6 ca 00 00 sub r10,r11,0 mgl@1371: + \.\.\. mgl@1371: + 8000: 48 00 lddpc r0,8000 mgl@1371: + 8000: R_AVR32_9W_CP \.text\+0x800c mgl@1371: + 8002: 48 01 lddpc r1,8000 mgl@1371: + 8002: R_AVR32_9W_CP \.text\+0x8010 mgl@1371: + 8004: 48 02 lddpc r2,8004 mgl@1371: + 8004: R_AVR32_9W_CP \.text\+0x8014 mgl@1371: + 8006: 48 03 lddpc r3,8004 mgl@1371: + 8006: R_AVR32_9W_CP \.text\+0x8018 mgl@1371: + 8008: 48 04 lddpc r4,8008 mgl@1371: + 8008: R_AVR32_9W_CP \.text\+0x801c mgl@1371: + 800a: 48 05 lddpc r5,8008 mgl@1371: + 800a: R_AVR32_9W_CP \.text\+0x8020 mgl@1371: + \.\.\. mgl@1371: + 800c: R_AVR32_ALIGN \*ABS\*\+0x2 mgl@1371: + 800c: R_AVR32_32_CPENT \.text\+0x4 mgl@1371: + 8010: R_AVR32_32_CPENT \.text mgl@1371: + 8014: R_AVR32_32_CPENT \.data mgl@1371: + 8018: R_AVR32_32_CPENT undefined mgl@1371: + 801c: R_AVR32_32_CPENT \.text\+0x10020 mgl@1371: + 8020: R_AVR32_32_CPENT \.text\+0x1000c mgl@1371: + mgl@1371: +0001000c : mgl@1371: + 1000c: fa cc 00 00 sub r12,sp,0 mgl@1371: + \.\.\. mgl@1371: +00010020 : mgl@1371: + 10020: fe ce 00 00 sub lr,pc,0 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/lda_pic.d mgl@1371: @@ -0,0 +1,32 @@ mgl@1371: +#source: lda.s mgl@1371: +#as: --pic mgl@1371: +#objdump: -dr mgl@1371: +#name: lda_pic mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: f2 c8 00 00 sub r8,r9,0 mgl@1371: + mgl@1371: +00000004 : mgl@1371: + 4: f6 ca 00 00 sub r10,r11,0 mgl@1371: + ... mgl@1371: + 8000: fe c0 7f fc sub r0,pc,32764 mgl@1371: + 8004: ec f1 00 00 ld.w r1,r6\[0\] mgl@1371: + 8004: R_AVR32_GOT16S toofar_negative mgl@1371: + 8008: ec f2 00 00 ld.w r2,r6\[0\] mgl@1371: + 8008: R_AVR32_GOT16S different_section mgl@1371: + 800c: ec f3 00 00 ld.w r3,r6\[0\] mgl@1371: + 800c: R_AVR32_GOT16S undefined mgl@1371: + 8010: ec f4 00 00 ld.w r4,r6\[0\] mgl@1371: + 8010: R_AVR32_GOT16S toofar_positive mgl@1371: + 8014: fe c5 80 14 sub r5,pc,-32748 mgl@1371: + ... mgl@1371: + mgl@1371: +00010000 : mgl@1371: + 10000: fa cc 00 00 sub r12,sp,0 mgl@1371: + ... mgl@1371: +00010014 : mgl@1371: + 10014: fe ce 00 00 sub lr,pc,0 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/lda_pic_linkrelax.d mgl@1371: @@ -0,0 +1,40 @@ mgl@1371: +#source: lda.s mgl@1371: +#as: --pic --linkrelax mgl@1371: +#objdump: -dr mgl@1371: +#name: lda_pic_linkrelax mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: f2 c8 00 00 sub r8,r9,0 mgl@1371: + mgl@1371: +00000004 : mgl@1371: + 4: f6 ca 00 00 sub r10,r11,0 mgl@1371: + ... mgl@1371: + 8000: e0 60 00 00 mov r0,0 mgl@1371: + 8000: R_AVR32_LDA_GOT far_negative mgl@1371: + 8004: ec 00 03 20 ld\.w r0,r6\[r0<<0x2\] mgl@1371: + 8008: e0 61 00 00 mov r1,0 mgl@1371: + 8008: R_AVR32_LDA_GOT toofar_negative mgl@1371: + 800c: ec 01 03 21 ld\.w r1,r6\[r1<<0x2\] mgl@1371: + 8010: e0 62 00 00 mov r2,0 mgl@1371: + 8010: R_AVR32_LDA_GOT different_section mgl@1371: + 8014: ec 02 03 22 ld\.w r2,r6\[r2<<0x2\] mgl@1371: + 8018: e0 63 00 00 mov r3,0 mgl@1371: + 8018: R_AVR32_LDA_GOT undefined mgl@1371: + 801c: ec 03 03 23 ld\.w r3,r6\[r3<<0x2\] mgl@1371: + 8020: e0 64 00 00 mov r4,0 mgl@1371: + 8020: R_AVR32_LDA_GOT toofar_positive mgl@1371: + 8024: ec 04 03 24 ld\.w r4,r6\[r4<<0x2\] mgl@1371: + 8028: e0 65 00 00 mov r5,0 mgl@1371: + 8028: R_AVR32_LDA_GOT far_positive mgl@1371: + 802c: ec 05 03 25 ld\.w r5,r6\[r5<<0x2\] mgl@1371: + ... mgl@1371: + mgl@1371: +00010018 : mgl@1371: + 10018: fa cc 00 00 sub r12,sp,0 mgl@1371: + ... mgl@1371: +0001002c : mgl@1371: + 1002c: fe ce 00 00 sub lr,pc,0 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/lda.s mgl@1371: @@ -0,0 +1,30 @@ mgl@1371: + mgl@1371: + .text mgl@1371: + .global lda_test mgl@1371: +lda_test: mgl@1371: +toofar_negative: mgl@1371: + sub r8, r9, 0 mgl@1371: +far_negative: mgl@1371: + sub r10, r11, 0 mgl@1371: + mgl@1371: + .fill 32760, 1, 0x00 mgl@1371: + mgl@1371: + lda.w r0, far_negative mgl@1371: + lda.w r1, toofar_negative mgl@1371: + lda.w r2, different_section mgl@1371: + lda.w r3, undefined mgl@1371: + lda.w r4, toofar_positive mgl@1371: + lda.w r5, far_positive mgl@1371: + mgl@1371: + .cpool mgl@1371: + mgl@1371: + .fill 32744, 1, 0x00 mgl@1371: +far_positive: mgl@1371: + sub r12, sp, 0 mgl@1371: + .fill 16, 1, 0x00 mgl@1371: +toofar_positive: mgl@1371: + sub lr, pc, 0 mgl@1371: + mgl@1371: + .data mgl@1371: +different_section: mgl@1371: + .long 0x12345678 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/pcrel.d mgl@1371: @@ -0,0 +1,64 @@ mgl@1371: +#as: mgl@1371: +#objdump: -dr mgl@1371: +#name: pcrel mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: d7 03 nop mgl@1371: + 2: c0 28 rjmp 6 mgl@1371: + 4: d7 03 nop mgl@1371: + 6: e0 8f 00 00 bral 6 mgl@1371: + 6: R_AVR32_22H_PCREL extsym10 mgl@1371: + mgl@1371: +0000000a : mgl@1371: + a: d7 03 nop mgl@1371: +0000000c : mgl@1371: + c: c0 2c rcall 10 mgl@1371: + e: d7 03 nop mgl@1371: + 10: e0 a0 00 00 rcall 10 mgl@1371: + 10: R_AVR32_22H_PCREL extsym21 mgl@1371: + mgl@1371: +00000014 : mgl@1371: + 14: c0 31 brne 1a mgl@1371: + 16: e0 8f 00 00 bral 16 mgl@1371: + 16: R_AVR32_22H_PCREL test_branch mgl@1371: + 1a: e0 80 00 00 breq 1a mgl@1371: + 1a: R_AVR32_22H_PCREL extsym21 mgl@1371: + mgl@1371: +0000001e : mgl@1371: + 1e: 48 30 lddpc r0,28 mgl@1371: + 20: 48 20 lddpc r0,28 mgl@1371: + 22: fe f0 00 00 ld.w r0,pc\[0\] mgl@1371: + 22: R_AVR32_16B_PCREL extsym16 mgl@1371: + \.\.\. mgl@1371: + mgl@1371: +00000028 : mgl@1371: + 28: d7 03 nop mgl@1371: + 2a: d7 03 nop mgl@1371: + mgl@1371: +0000002c : mgl@1371: + 2c: 48 20 lddpc r0,34 mgl@1371: + 2e: 48 30 lddpc r0,38 mgl@1371: + 30: 48 20 lddpc r0,38 mgl@1371: + 32: 00 00 add r0,r0 mgl@1371: + 34: d7 03 nop mgl@1371: + 36: d7 03 nop mgl@1371: + 38: d7 03 nop mgl@1371: + 3a: d7 03 nop mgl@1371: + mgl@1371: +Disassembly of section \.text\.init: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: e0 a0 .. .. rcall [0-9a-f]+ <.*> mgl@1371: + 0: R_AVR32_22H_PCREL test_rcall mgl@1371: + 4: d7 03 nop mgl@1371: + 6: e0 a0 .. .. rcall [0-9a-f]+ <.*> mgl@1371: + 6: R_AVR32_22H_PCREL test_rcall mgl@1371: + a: e0 a0 .. .. rcall [0-9a-z]+ <.*> mgl@1371: + a: R_AVR32_22H_PCREL \.text\+0xc mgl@1371: + e: d7 03 nop mgl@1371: + 10: e0 a0 .. .. rcall [0-9a-f]+ <.*> mgl@1371: + 10: R_AVR32_22H_PCREL \.text\+0xc mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/pcrel.s mgl@1371: @@ -0,0 +1,57 @@ mgl@1371: + mgl@1371: + .text mgl@1371: + .global test_rjmp mgl@1371: +test_rjmp: mgl@1371: + nop mgl@1371: + rjmp 0f mgl@1371: + nop mgl@1371: +0: rjmp extsym10 mgl@1371: + mgl@1371: + .global test_rcall mgl@1371: +test_rcall: mgl@1371: + nop mgl@1371: +test_rcall2: mgl@1371: + rcall 0f mgl@1371: + nop mgl@1371: +0: rcall extsym21 mgl@1371: + mgl@1371: + .global test_branch mgl@1371: +test_branch: mgl@1371: + brne 0f mgl@1371: + /* This will generate a reloc since test_branch is global */ mgl@1371: + bral test_branch mgl@1371: +0: breq extsym21 mgl@1371: + mgl@1371: + .global test_lddpc mgl@1371: +test_lddpc: mgl@1371: + lddpc r0,sym1 mgl@1371: + lddpc r0,sym1 mgl@1371: + lddpc r0,extsym16 mgl@1371: + mgl@1371: + .align 2 mgl@1371: +sym1: nop mgl@1371: + nop mgl@1371: + mgl@1371: + .global test_local mgl@1371: +test_local: mgl@1371: + lddpc r0, .LC1 mgl@1371: + lddpc r0, .LC2 mgl@1371: + lddpc r0, .LC1 + 0x4 mgl@1371: + mgl@1371: + .align 2 mgl@1371: +.LC1: mgl@1371: + nop mgl@1371: + nop mgl@1371: +.LC2: mgl@1371: + nop mgl@1371: + nop mgl@1371: + mgl@1371: + .section .text.init,"ax" mgl@1371: + .global test_inter_section mgl@1371: +test_inter_section: mgl@1371: + rcall test_rcall mgl@1371: + nop mgl@1371: + rcall test_rcall mgl@1371: + rcall test_rcall2 mgl@1371: + nop mgl@1371: + rcall test_rcall2 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/pico.d mgl@1371: @@ -0,0 +1,149 @@ mgl@1371: +#as: mgl@1371: +#objdump: -dr mgl@1371: +#name: pico mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a6 20 00 cop cp1,cr0,cr0,cr0,0xc mgl@1371: + *[0-9a-f]*: e1 a7 2b bb cop cp1,cr11,cr11,cr11,0xe mgl@1371: + *[0-9a-f]*: e1 a6 3a 05 cop cp1,cr10,cr0,cr5,0xd mgl@1371: + *[0-9a-f]*: e1 a7 36 90 cop cp1,cr6,cr9,cr0,0xf mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a4 20 00 cop cp1,cr0,cr0,cr0,0x8 mgl@1371: + *[0-9a-f]*: e1 a5 2b bb cop cp1,cr11,cr11,cr11,0xa mgl@1371: + *[0-9a-f]*: e1 a4 3a 05 cop cp1,cr10,cr0,cr5,0x9 mgl@1371: + *[0-9a-f]*: e1 a5 36 90 cop cp1,cr6,cr9,cr0,0xb mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a2 20 00 cop cp1,cr0,cr0,cr0,0x4 mgl@1371: + *[0-9a-f]*: e1 a3 2b bb cop cp1,cr11,cr11,cr11,0x6 mgl@1371: + *[0-9a-f]*: e1 a2 3a 05 cop cp1,cr10,cr0,cr5,0x5 mgl@1371: + *[0-9a-f]*: e1 a3 36 90 cop cp1,cr6,cr9,cr0,0x7 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e1 a0 20 00 cop cp1,cr0,cr0,cr0,0x0 mgl@1371: + *[0-9a-f]*: e1 a1 2b bb cop cp1,cr11,cr11,cr11,0x2 mgl@1371: + *[0-9a-f]*: e1 a0 3a 05 cop cp1,cr10,cr0,cr5,0x1 mgl@1371: + *[0-9a-f]*: e1 a1 36 90 cop cp1,cr6,cr9,cr0,0x3 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e9 af 3e ff ldc\.d cp1,cr14,pc\[0x3fc\] mgl@1371: + *[0-9a-f]*: e9 a0 30 ff ldc\.d cp1,cr0,r0\[0x3fc\] mgl@1371: + *[0-9a-f]*: e9 a0 30 00 ldc\.d cp1,cr0,r0\[0x0\] mgl@1371: + *[0-9a-f]*: ef a8 26 50 ldc\.d cp1,cr6,--r8 mgl@1371: + *[0-9a-f]*: ef a7 28 50 ldc\.d cp1,cr8,--r7 mgl@1371: + *[0-9a-f]*: ef aa 32 65 ldc\.d cp1,cr2,r10\[r5<<0x2\] mgl@1371: + *[0-9a-f]*: ef a3 3c 46 ldc\.d cp1,cr12,r3\[r6\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: e9 af 2f ff ldc\.w cp1,cr15,pc\[0x3fc\] mgl@1371: + *[0-9a-f]*: e9 a0 20 ff ldc\.w cp1,cr0,r0\[0x3fc\] mgl@1371: + *[0-9a-f]*: e9 a0 20 00 ldc\.w cp1,cr0,r0\[0x0\] mgl@1371: + *[0-9a-f]*: ef a8 27 40 ldc\.w cp1,cr7,--r8 mgl@1371: + *[0-9a-f]*: ef a7 28 40 ldc\.w cp1,cr8,--r7 mgl@1371: + *[0-9a-f]*: ef aa 31 25 ldc\.w cp1,cr1,r10\[r5<<0x2\] mgl@1371: + *[0-9a-f]*: ef a3 3d 06 ldc\.w cp1,cr13,r3\[r6\] mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ed af 24 ff ldcm\.d cp1,pc,cr0-cr15 mgl@1371: + *[0-9a-f]*: ed a0 24 01 ldcm\.d cp1,r0,cr0-cr1 mgl@1371: + *[0-9a-f]*: ed a7 24 80 ldcm\.d cp1,r7,cr14-cr15 mgl@1371: + *[0-9a-f]*: ed a8 24 7f ldcm\.d cp1,r8,cr0-cr13 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ed af 34 ff ldcm\.d cp1,pc\+\+,cr0-cr15 mgl@1371: + *[0-9a-f]*: ed a0 34 01 ldcm\.d cp1,r0\+\+,cr0-cr1 mgl@1371: + *[0-9a-f]*: ed a7 34 80 ldcm\.d cp1,r7\+\+,cr14-cr15 mgl@1371: + *[0-9a-f]*: ed a8 34 7f ldcm\.d cp1,r8\+\+,cr0-cr13 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ed af 20 ff ldcm\.w cp1,pc,cr0-cr7 mgl@1371: + *[0-9a-f]*: ed a0 20 01 ldcm\.w cp1,r0,cr0 mgl@1371: + *[0-9a-f]*: ed a7 20 80 ldcm\.w cp1,r7,cr7 mgl@1371: + *[0-9a-f]*: ed a8 20 7f ldcm\.w cp1,r8,cr0-cr6 mgl@1371: + *[0-9a-f]*: ed af 21 ff ldcm\.w cp1,pc,cr8-cr15 mgl@1371: + *[0-9a-f]*: ed a0 21 01 ldcm\.w cp1,r0,cr8 mgl@1371: + *[0-9a-f]*: ed a7 21 80 ldcm\.w cp1,r7,cr15 mgl@1371: + *[0-9a-f]*: ed a8 21 7f ldcm\.w cp1,r8,cr8-cr14 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ed af 30 ff ldcm\.w cp1,pc\+\+,cr0-cr7 mgl@1371: + *[0-9a-f]*: ed a0 30 01 ldcm\.w cp1,r0\+\+,cr0 mgl@1371: + *[0-9a-f]*: ed a7 30 80 ldcm\.w cp1,r7\+\+,cr7 mgl@1371: + *[0-9a-f]*: ed a8 30 7f ldcm\.w cp1,r8\+\+,cr0-cr6 mgl@1371: + *[0-9a-f]*: ed af 31 ff ldcm\.w cp1,pc\+\+,cr8-cr15 mgl@1371: + *[0-9a-f]*: ed a0 31 01 ldcm\.w cp1,r0\+\+,cr8 mgl@1371: + *[0-9a-f]*: ed a7 31 80 ldcm\.w cp1,r7\+\+,cr15 mgl@1371: + *[0-9a-f]*: ed a8 31 7f ldcm\.w cp1,r8\+\+,cr8-cr14 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ef ae 2e 30 mvrc\.d cp1,cr14,lr mgl@1371: + *[0-9a-f]*: ef a0 20 30 mvrc\.d cp1,cr0,r0 mgl@1371: + *[0-9a-f]*: ef a8 26 30 mvrc\.d cp1,cr6,r8 mgl@1371: + *[0-9a-f]*: ef a6 28 30 mvrc\.d cp1,cr8,r6 mgl@1371: + *[0-9a-f]*: ef ae 2e 10 mvcr\.d cp1,lr,cr14 mgl@1371: + *[0-9a-f]*: ef a0 20 10 mvcr\.d cp1,r0,cr0 mgl@1371: + *[0-9a-f]*: ef a8 26 10 mvcr\.d cp1,r8,cr6 mgl@1371: + *[0-9a-f]*: ef a6 28 10 mvcr\.d cp1,r6,cr8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ef af 2f 20 mvrc\.w cp1,cr15,pc mgl@1371: + *[0-9a-f]*: ef a0 20 20 mvrc\.w cp1,cr0,r0 mgl@1371: + *[0-9a-f]*: ef a8 27 20 mvrc\.w cp1,cr7,r8 mgl@1371: + *[0-9a-f]*: ef a7 28 20 mvrc\.w cp1,cr8,r7 mgl@1371: + *[0-9a-f]*: ef af 2f 00 mvcr\.w cp1,pc,cr15 mgl@1371: + *[0-9a-f]*: ef a0 20 00 mvcr\.w cp1,r0,cr0 mgl@1371: + *[0-9a-f]*: ef a8 27 00 mvcr\.w cp1,r8,cr7 mgl@1371: + *[0-9a-f]*: ef a7 28 00 mvcr\.w cp1,r7,cr8 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: eb af 3e ff stc\.d cp1,pc\[0x3fc\],cr14 mgl@1371: + *[0-9a-f]*: eb a0 30 00 stc\.d cp1,r0\[0x0\],cr0 mgl@1371: + *[0-9a-f]*: ef a8 26 70 stc\.d cp1,r8\+\+,cr6 mgl@1371: + *[0-9a-f]*: ef a7 28 70 stc\.d cp1,r7\+\+,cr8 mgl@1371: + *[0-9a-f]*: ef aa 32 e5 stc\.d cp1,r10\[r5<<0x2\],cr2 mgl@1371: + *[0-9a-f]*: ef a3 3c c6 stc\.d cp1,r3\[r6\],cr12 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: eb af 2f ff stc\.w cp1,pc\[0x3fc\],cr15 mgl@1371: + *[0-9a-f]*: eb a0 20 00 stc\.w cp1,r0\[0x0\],cr0 mgl@1371: + *[0-9a-f]*: ef a8 27 60 stc\.w cp1,r8\+\+,cr7 mgl@1371: + *[0-9a-f]*: ef a7 28 60 stc\.w cp1,r7\+\+,cr8 mgl@1371: + *[0-9a-f]*: ef aa 31 a5 stc\.w cp1,r10\[r5<<0x2\],cr1 mgl@1371: + *[0-9a-f]*: ef a3 3d 86 stc\.w cp1,r3\[r6\],cr13 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ed af 25 ff stcm\.d cp1,pc,cr0-cr15 mgl@1371: + *[0-9a-f]*: ed a0 25 01 stcm\.d cp1,r0,cr0-cr1 mgl@1371: + *[0-9a-f]*: ed a7 25 80 stcm\.d cp1,r7,cr14-cr15 mgl@1371: + *[0-9a-f]*: ed a8 25 7f stcm\.d cp1,r8,cr0-cr13 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ed af 35 ff stcm\.d cp1,--pc,cr0-cr15 mgl@1371: + *[0-9a-f]*: ed a0 35 01 stcm\.d cp1,--r0,cr0-cr1 mgl@1371: + *[0-9a-f]*: ed a7 35 80 stcm\.d cp1,--r7,cr14-cr15 mgl@1371: + *[0-9a-f]*: ed a8 35 7f stcm\.d cp1,--r8,cr0-cr13 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ed af 22 ff stcm\.w cp1,pc,cr0-cr7 mgl@1371: + *[0-9a-f]*: ed a0 22 01 stcm\.w cp1,r0,cr0 mgl@1371: + *[0-9a-f]*: ed a7 22 80 stcm\.w cp1,r7,cr7 mgl@1371: + *[0-9a-f]*: ed a8 22 7f stcm\.w cp1,r8,cr0-cr6 mgl@1371: + *[0-9a-f]*: ed af 23 ff stcm\.w cp1,pc,cr8-cr15 mgl@1371: + *[0-9a-f]*: ed a0 23 01 stcm\.w cp1,r0,cr8 mgl@1371: + *[0-9a-f]*: ed a7 23 80 stcm\.w cp1,r7,cr15 mgl@1371: + *[0-9a-f]*: ed a8 23 7f stcm\.w cp1,r8,cr8-cr14 mgl@1371: + mgl@1371: +[0-9a-f]* : mgl@1371: + *[0-9a-f]*: ed af 32 ff stcm\.w cp1,--pc,cr0-cr7 mgl@1371: + *[0-9a-f]*: ed a0 32 01 stcm\.w cp1,--r0,cr0 mgl@1371: + *[0-9a-f]*: ed a7 32 80 stcm\.w cp1,--r7,cr7 mgl@1371: + *[0-9a-f]*: ed a8 32 7f stcm\.w cp1,--r8,cr0-cr6 mgl@1371: + *[0-9a-f]*: ed af 33 ff stcm\.w cp1,--pc,cr8-cr15 mgl@1371: + *[0-9a-f]*: ed a0 33 01 stcm\.w cp1,--r0,cr8 mgl@1371: + *[0-9a-f]*: ed a7 33 80 stcm\.w cp1,--r7,cr15 mgl@1371: + *[0-9a-f]*: ed a8 33 7f stcm\.w cp1,--r8,cr8-cr14 mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/pico.s mgl@1371: @@ -0,0 +1,144 @@ mgl@1371: + mgl@1371: + .text mgl@1371: + .global picosvmac mgl@1371: +picosvmac: mgl@1371: + picosvmac out0, in0, in0, in0 mgl@1371: + picosvmac out2, in11, in11, in11 mgl@1371: + picosvmac out1, in10, in0, in5 mgl@1371: + picosvmac out3, in6, in9, in0 mgl@1371: + .global picosvmul mgl@1371: +picosvmul: mgl@1371: + picosvmul out0, in0, in0, in0 mgl@1371: + picosvmul out2, in11, in11, in11 mgl@1371: + picosvmul out1, in10, in0, in5 mgl@1371: + picosvmul out3, in6, in9, in0 mgl@1371: + .global picovmac mgl@1371: +picovmac: mgl@1371: + picovmac out0, in0, in0, in0 mgl@1371: + picovmac out2, in11, in11, in11 mgl@1371: + picovmac out1, in10, in0, in5 mgl@1371: + picovmac out3, in6, in9, in0 mgl@1371: + .global picovmul mgl@1371: +picovmul: mgl@1371: + picovmul out0, in0, in0, in0 mgl@1371: + picovmul out2, in11, in11, in11 mgl@1371: + picovmul out1, in10, in0, in5 mgl@1371: + picovmul out3, in6, in9, in0 mgl@1371: + .global picold_d mgl@1371: +picold_d: mgl@1371: + picold.d vmu2_out, pc[1020] mgl@1371: + picold.d inpix2, r0[1020] mgl@1371: + picold.d inpix2, r0[0] mgl@1371: + picold.d coeff0_a, --r8 mgl@1371: + picold.d coeff1_a, --r7 mgl@1371: + picold.d inpix0, r10[r5 << 2] mgl@1371: + picold.d vmu0_out, r3[r6 << 0] mgl@1371: + .global picold_w mgl@1371: +picold_w: mgl@1371: + picold.w config, pc[1020] mgl@1371: + picold.w inpix2, r0[1020] mgl@1371: + picold.w inpix2, r0[0] mgl@1371: + picold.w coeff0_b, --r8 mgl@1371: + picold.w coeff1_a, --r7 mgl@1371: + picold.w inpix1, r10[r5 << 2] mgl@1371: + picold.w vmu1_out, r3[r6 << 0] mgl@1371: + .global picoldm_d mgl@1371: +picoldm_d: mgl@1371: + picoldm.d pc, inpix2-config mgl@1371: + picoldm.d r0, inpix2, inpix1 mgl@1371: + picoldm.d r7, vmu2_out, config mgl@1371: + picoldm.d r8, inpix2-vmu1_out mgl@1371: + .global picoldm_d_pu mgl@1371: +picoldm_d_pu: mgl@1371: + picoldm.d pc++, inpix2, inpix1, inpix0, outpix2, outpix1, outpix0, coeff0_a, coeff0_b, coeff1_a, coeff1_b, coeff2_a, coeff2_b, vmu0_out, vmu1_out, vmu2_out, config mgl@1371: + picoldm.d r0++, inpix2, inpix1 mgl@1371: + picoldm.d r7++, vmu2_out, config mgl@1371: + picoldm.d r8++, inpix2, inpix1, inpix0, outpix2, outpix1, outpix0, coeff0_a, coeff0_b, coeff1_a, coeff1_b, coeff2_a, coeff2_b, vmu0_out, vmu1_out mgl@1371: + .global picoldm_w mgl@1371: +picoldm_w: mgl@1371: + picoldm.w pc, inpix2-coeff0_b mgl@1371: + picoldm.w r0, inpix2 mgl@1371: + picoldm.w r7, coeff0_b mgl@1371: + picoldm.w r8, inpix2-coeff0_a mgl@1371: + picoldm.w pc, coeff1_a-config mgl@1371: + picoldm.w r0, coeff1_a mgl@1371: + picoldm.w r7, config mgl@1371: + picoldm.w r8, coeff1_a-vmu2_out mgl@1371: + .global picoldm_w_pu mgl@1371: +picoldm_w_pu: mgl@1371: + picoldm.w pc++, inpix2-coeff0_b mgl@1371: + picoldm.w r0++, inpix2 mgl@1371: + picoldm.w r7++, coeff0_b mgl@1371: + picoldm.w r8++, inpix2-coeff0_a mgl@1371: + picoldm.w pc++, coeff1_a-config mgl@1371: + picoldm.w r0++, coeff1_a mgl@1371: + picoldm.w r7++, config mgl@1371: + picoldm.w r8++, coeff1_a-vmu2_out mgl@1371: + .global picomv_d mgl@1371: +picomv_d: mgl@1371: + picomv.d vmu2_out, lr mgl@1371: + picomv.d inpix2, r0 mgl@1371: + picomv.d coeff0_a, r8 mgl@1371: + picomv.d coeff1_a, r6 mgl@1371: + picomv.d pc, vmu2_out mgl@1371: + picomv.d r0, inpix2 mgl@1371: + picomv.d r8, coeff0_a mgl@1371: + picomv.d r6, coeff1_a mgl@1371: + .global picomv_w mgl@1371: +picomv_w: mgl@1371: + picomv.w config, pc mgl@1371: + picomv.w inpix2, r0 mgl@1371: + picomv.w coeff0_b, r8 mgl@1371: + picomv.w coeff1_a, r7 mgl@1371: + picomv.w pc, config mgl@1371: + picomv.w r0, inpix2 mgl@1371: + picomv.w r8, coeff0_b mgl@1371: + picomv.w r7, coeff1_a mgl@1371: + .global picost_d mgl@1371: +picost_d: mgl@1371: + picost.d pc[1020], vmu2_out mgl@1371: + picost.d r0[0], inpix2 mgl@1371: + picost.d r8++, coeff0_a mgl@1371: + picost.d r7++, coeff1_a mgl@1371: + picost.d r10[r5 << 2], inpix0 mgl@1371: + picost.d r3[r6 << 0], vmu0_out mgl@1371: + .global picost_w mgl@1371: +picost_w: mgl@1371: + picost.w pc[1020], config mgl@1371: + picost.w r0[0], inpix2 mgl@1371: + picost.w r8++, coeff0_b mgl@1371: + picost.w r7++, coeff1_a mgl@1371: + picost.w r10[r5 << 2], inpix1 mgl@1371: + picost.w r3[r6 << 0], vmu1_out mgl@1371: + .global picostm_d mgl@1371: +picostm_d: mgl@1371: + picostm.d pc, inpix2-config mgl@1371: + picostm.d r0, inpix2, inpix1 mgl@1371: + picostm.d r7, vmu2_out, config mgl@1371: + picostm.d r8, inpix2-vmu1_out mgl@1371: + .global picostm_d_pu mgl@1371: +picostm_d_pu: mgl@1371: + picostm.d --pc, inpix2, inpix1, inpix0, outpix2, outpix1, outpix0, coeff0_a, coeff0_b, coeff1_a, coeff1_b, coeff2_a, coeff2_b, vmu0_out, vmu1_out, vmu2_out, config mgl@1371: + picostm.d --r0, inpix2, inpix1 mgl@1371: + picostm.d --r7, vmu2_out, config mgl@1371: + picostm.d --r8, inpix2, inpix1, inpix0, outpix2, outpix1, outpix0, coeff0_a, coeff0_b, coeff1_a, coeff1_b, coeff2_a, coeff2_b, vmu0_out, vmu1_out mgl@1371: + .global picostm_w mgl@1371: +picostm_w: mgl@1371: + picostm.w pc, inpix2-coeff0_b mgl@1371: + picostm.w r0, inpix2 mgl@1371: + picostm.w r7, coeff0_b mgl@1371: + picostm.w r8, inpix2-coeff0_a mgl@1371: + picostm.w pc, coeff1_a-config mgl@1371: + picostm.w r0, coeff1_a mgl@1371: + picostm.w r7, config mgl@1371: + picostm.w r8, coeff1_a-vmu2_out mgl@1371: + .global picostm_w_pu mgl@1371: +picostm_w_pu: mgl@1371: + picostm.w --pc, inpix2-coeff0_b mgl@1371: + picostm.w --r0, inpix2 mgl@1371: + picostm.w --r7, coeff0_b mgl@1371: + picostm.w --r8, inpix2-coeff0_a mgl@1371: + picostm.w --pc, coeff1_a-config mgl@1371: + picostm.w --r0, coeff1_a mgl@1371: + picostm.w --r7, config mgl@1371: + picostm.w --r8, coeff1_a-vmu2_out mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/pic_reloc.d mgl@1371: @@ -0,0 +1,27 @@ mgl@1371: +#as: mgl@1371: +#objdump: -dr mgl@1371: +#name: pic_reloc mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: f0 16 00 00 mcall r6\[0\] mgl@1371: + 0: R_AVR32_GOT18SW extfunc mgl@1371: + 4: f0 16 00 00 mcall r6\[0\] mgl@1371: + 4: R_AVR32_GOT18SW \.L1 mgl@1371: + 8: f0 16 00 00 mcall r6\[0\] mgl@1371: + 8: R_AVR32_GOT18SW \.L2 mgl@1371: + c: f0 16 00 00 mcall r6\[0\] mgl@1371: + c: R_AVR32_GOT18SW mcall_got mgl@1371: + mgl@1371: +00000010 : mgl@1371: + 10: ec f0 00 00 ld.w r0,r6\[0\] mgl@1371: + 10: R_AVR32_GOT16S extvar mgl@1371: + 14: ec f0 00 00 ld.w r0,r6\[0\] mgl@1371: + 14: R_AVR32_GOT16S \.L3 mgl@1371: + 18: ec f0 00 00 ld.w r0,r6\[0\] mgl@1371: + 18: R_AVR32_GOT16S \.L4 mgl@1371: + 1c: ec f0 00 00 ld.w r0,r6\[0\] mgl@1371: + 1c: R_AVR32_GOT16S ldw_got mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/pic_reloc.s mgl@1371: @@ -0,0 +1,18 @@ mgl@1371: + mgl@1371: + .text mgl@1371: + .global mcall_got mgl@1371: +mcall_got: mgl@1371: +.L1: mgl@1371: + mcall r6[extfunc@got] mgl@1371: + mcall r6[.L1@got] mgl@1371: + mcall r6[.L2@got] mgl@1371: + mcall r6[mcall_got@got] mgl@1371: +.L2: mgl@1371: + mgl@1371: + .global ldw_got mgl@1371: +ldw_got: mgl@1371: +.L3: ld.w r0,r6[extvar@got] mgl@1371: + ld.w r0,r6[.L3@got] mgl@1371: + ld.w r0,r6[.L4@got] mgl@1371: + ld.w r0,r6[ldw_got@got] mgl@1371: +.L4: mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/symdiff.d mgl@1371: @@ -0,0 +1,24 @@ mgl@1371: +#source: symdiff.s mgl@1371: +#as: mgl@1371: +#objdump: -dr mgl@1371: +#name: symdiff mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: 00 00 add r0,r0 mgl@1371: + 2: 00 04 add r4,r0 mgl@1371: + mgl@1371: +00000004 : mgl@1371: + 4: 00 04 add r4,r0 mgl@1371: + mgl@1371: +00000006 : mgl@1371: + 6: 04 00 add r0,r2 mgl@1371: + mgl@1371: +00000008 : mgl@1371: + 8: d7 03 nop mgl@1371: + a: d7 03 nop mgl@1371: + c: d7 03 nop mgl@1371: + e: d7 03 nop mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/symdiff_linkrelax.d mgl@1371: @@ -0,0 +1,28 @@ mgl@1371: +#source: symdiff.s mgl@1371: +#as: --linkrelax mgl@1371: +#objdump: -dr mgl@1371: +#name: symdiff_linkrelax mgl@1371: + mgl@1371: +.*: +file format .* mgl@1371: + mgl@1371: +Disassembly of section \.text: mgl@1371: + mgl@1371: +00000000 : mgl@1371: + 0: 00 00 add r0,r0 mgl@1371: + 0: R_AVR32_DIFF32 \.text\+0xa mgl@1371: + 2: 00 04 add r4,r0 mgl@1371: + mgl@1371: +00000004 : mgl@1371: + 4: 00 04 add r4,r0 mgl@1371: + 4: R_AVR32_DIFF16 \.text\+0xa mgl@1371: + mgl@1371: +00000006 : mgl@1371: + 6: 04 00 add r0,r2 mgl@1371: + 6: R_AVR32_DIFF8 \.text\+0xa mgl@1371: + 7: R_AVR32_ALIGN \*ABS\*\+0x1 mgl@1371: + mgl@1371: +00000008 : mgl@1371: + 8: d7 03 nop mgl@1371: + a: d7 03 nop mgl@1371: + c: d7 03 nop mgl@1371: + e: d7 03 nop mgl@1371: --- /dev/null mgl@1371: +++ b/gas/testsuite/gas/avr32/symdiff.s mgl@1371: @@ -0,0 +1,19 @@ mgl@1371: + mgl@1371: + .text mgl@1371: + .global diff32 mgl@1371: +diff32: mgl@1371: + .long .L2 - .L1 mgl@1371: + .global diff16 mgl@1371: +diff16: mgl@1371: + .short .L2 - .L1 mgl@1371: + .global diff8 mgl@1371: +diff8: mgl@1371: + .byte .L2 - .L1 mgl@1371: + mgl@1371: + .global symdiff_test mgl@1371: + .align 1 mgl@1371: +symdiff_test: mgl@1371: + nop mgl@1371: +.L1: nop mgl@1371: + nop mgl@1371: +.L2: nop mgl@1371: --- a/gas/write.c mgl@1371: +++ b/gas/write.c mgl@1371: @@ -1955,6 +1955,10 @@ relax_frag (segT segment, fragS *fragP, mgl@1371: mgl@1371: #endif /* defined (TC_GENERIC_RELAX_TABLE) */ mgl@1371: mgl@1371: +#ifdef TC_RELAX_ALIGN mgl@1371: +#define RELAX_ALIGN(SEG, FRAG, ADDR) TC_RELAX_ALIGN(SEG, FRAG, ADDR) mgl@1371: +#else mgl@1371: +#define RELAX_ALIGN(SEG, FRAG, ADDR) relax_align(ADDR, (FRAG)->fr_offset) mgl@1371: /* Relax_align. Advance location counter to next address that has 'alignment' mgl@1371: lowest order bits all 0s, return size of adjustment made. */ mgl@1371: static relax_addressT mgl@1371: @@ -1974,6 +1978,7 @@ relax_align (register relax_addressT add mgl@1371: #endif mgl@1371: return (new_address - address); mgl@1371: } mgl@1371: +#endif mgl@1371: mgl@1371: /* Now we have a segment, not a crowd of sub-segments, we can make mgl@1371: fr_address values. mgl@1371: @@ -2017,7 +2022,7 @@ relax_segment (struct frag *segment_frag mgl@1371: case rs_align_code: mgl@1371: case rs_align_test: mgl@1371: { mgl@1371: - addressT offset = relax_align (address, (int) fragP->fr_offset); mgl@1371: + addressT offset = RELAX_ALIGN(segment, fragP, address); mgl@1371: mgl@1371: if (fragP->fr_subtype != 0 && offset > fragP->fr_subtype) mgl@1371: offset = 0; mgl@1371: @@ -2218,10 +2223,10 @@ relax_segment (struct frag *segment_frag mgl@1371: { mgl@1371: addressT oldoff, newoff; mgl@1371: mgl@1371: - oldoff = relax_align (was_address + fragP->fr_fix, mgl@1371: - (int) offset); mgl@1371: - newoff = relax_align (address + fragP->fr_fix, mgl@1371: - (int) offset); mgl@1371: + oldoff = RELAX_ALIGN (segment, fragP, mgl@1371: + was_address + fragP->fr_fix); mgl@1371: + newoff = RELAX_ALIGN (segment, fragP, mgl@1371: + address + fragP->fr_fix); mgl@1371: mgl@1371: if (fragP->fr_subtype != 0) mgl@1371: { mgl@1371: --- a/include/dis-asm.h mgl@1371: +++ b/include/dis-asm.h mgl@1371: @@ -204,13 +204,14 @@ typedef struct disassemble_info mgl@1371: mgl@1371: } disassemble_info; mgl@1371: mgl@1371: - mgl@1371: + mgl@1371: /* Standard disassemblers. Disassemble one instruction at the given mgl@1371: target address. Return number of octets processed. */ mgl@1371: typedef int (*disassembler_ftype) (bfd_vma, disassemble_info *); mgl@1371: mgl@1371: extern int print_insn_alpha (bfd_vma, disassemble_info *); mgl@1371: extern int print_insn_avr (bfd_vma, disassemble_info *); mgl@1371: +extern int print_insn_avr32 (bfd_vma, disassemble_info *); mgl@1371: extern int print_insn_bfin (bfd_vma, disassemble_info *); mgl@1371: extern int print_insn_big_arm (bfd_vma, disassemble_info *); mgl@1371: extern int print_insn_big_mips (bfd_vma, disassemble_info *); mgl@1371: @@ -242,7 +243,7 @@ extern int print_insn_little_arm (bfd_vm mgl@1371: extern int print_insn_little_mips (bfd_vma, disassemble_info *); mgl@1371: extern int print_insn_little_or32 (bfd_vma, disassemble_info *); mgl@1371: extern int print_insn_little_powerpc (bfd_vma, disassemble_info *); mgl@1371: -extern int print_insn_little_score (bfd_vma, disassemble_info *); mgl@1371: +extern int print_insn_little_score (bfd_vma, disassemble_info *); mgl@1371: extern int print_insn_m32c (bfd_vma, disassemble_info *); mgl@1371: extern int print_insn_m32r (bfd_vma, disassemble_info *); mgl@1371: extern int print_insn_m68hc11 (bfd_vma, disassemble_info *); mgl@1371: @@ -290,7 +291,9 @@ extern void print_i386_disassembler_opti mgl@1371: extern void print_mips_disassembler_options (FILE *); mgl@1371: extern void print_ppc_disassembler_options (FILE *); mgl@1371: extern void print_arm_disassembler_options (FILE *); mgl@1371: +extern void print_avr32_disassembler_options (FILE *); mgl@1371: extern void parse_arm_disassembler_option (char *); mgl@1371: +extern void parse_avr32_disassembler_option (char *); mgl@1371: extern int get_arm_regname_num_options (void); mgl@1371: extern int set_arm_regname_option (int); mgl@1371: extern int get_arm_regnames (int, const char **, const char **, const char *const **); mgl@1371: @@ -306,7 +309,7 @@ extern void disassemble_init_for_target mgl@1371: /* Document any target specific options available from the disassembler. */ mgl@1371: extern void disassembler_usage (FILE *); mgl@1371: mgl@1371: - mgl@1371: + mgl@1371: /* This block of definitions is for particular callers who read instructions mgl@1371: into a buffer before calling the instruction decoder. */ mgl@1371: mgl@1371: --- /dev/null mgl@1371: +++ b/include/elf/avr32.h mgl@1371: @@ -0,0 +1,98 @@ mgl@1371: +/* AVR32 ELF support for BFD. mgl@1371: + Copyright 2003-2006 Atmel Corporation. mgl@1371: + mgl@1371: + Written by Haavard Skinnemoen, Atmel Norway, mgl@1371: + mgl@1371: + This file is part of BFD, the Binary File Descriptor library. mgl@1371: + mgl@1371: + This program is free software; you can redistribute it and/or mgl@1371: + modify it under the terms of the GNU General Public License as mgl@1371: + published by the Free Software Foundation; either version 2 of the mgl@1371: + License, or (at your option) any later version. mgl@1371: + mgl@1371: + This program is distributed in the hope that it will be useful, but mgl@1371: + WITHOUT ANY WARRANTY; without even the implied warranty of mgl@1371: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU mgl@1371: + General Public License for more details. mgl@1371: + mgl@1371: + You should have received a copy of the GNU General Public License mgl@1371: + along with this program; if not, write to the Free Software mgl@1371: + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA mgl@1371: + 02111-1307, USA. */ mgl@1371: + mgl@1371: +#include "elf/reloc-macros.h" mgl@1371: + mgl@1371: +/* CPU-specific flags for the ELF header e_flags field */ mgl@1371: +#define EF_AVR32_LINKRELAX 0x01 mgl@1371: +#define EF_AVR32_PIC 0x02 mgl@1371: + mgl@1371: +START_RELOC_NUMBERS (elf_avr32_reloc_type) mgl@1371: + RELOC_NUMBER (R_AVR32_NONE, 0) mgl@1371: + mgl@1371: + /* Data Relocations */ mgl@1371: + RELOC_NUMBER (R_AVR32_32, 1) mgl@1371: + RELOC_NUMBER (R_AVR32_16, 2) mgl@1371: + RELOC_NUMBER (R_AVR32_8, 3) mgl@1371: + RELOC_NUMBER (R_AVR32_32_PCREL, 4) mgl@1371: + RELOC_NUMBER (R_AVR32_16_PCREL, 5) mgl@1371: + RELOC_NUMBER (R_AVR32_8_PCREL, 6) mgl@1371: + RELOC_NUMBER (R_AVR32_DIFF32, 7) mgl@1371: + RELOC_NUMBER (R_AVR32_DIFF16, 8) mgl@1371: + RELOC_NUMBER (R_AVR32_DIFF8, 9) mgl@1371: + RELOC_NUMBER (R_AVR32_GOT32, 10) mgl@1371: + RELOC_NUMBER (R_AVR32_GOT16, 11) mgl@1371: + RELOC_NUMBER (R_AVR32_GOT8, 12) mgl@1371: + mgl@1371: + /* Normal Code Relocations */ mgl@1371: + RELOC_NUMBER (R_AVR32_21S, 13) mgl@1371: + RELOC_NUMBER (R_AVR32_16U, 14) mgl@1371: + RELOC_NUMBER (R_AVR32_16S, 15) mgl@1371: + RELOC_NUMBER (R_AVR32_8S, 16) mgl@1371: + RELOC_NUMBER (R_AVR32_8S_EXT, 17) mgl@1371: + mgl@1371: + /* PC-Relative Code Relocations */ mgl@1371: + RELOC_NUMBER (R_AVR32_22H_PCREL, 18) mgl@1371: + RELOC_NUMBER (R_AVR32_18W_PCREL, 19) mgl@1371: + RELOC_NUMBER (R_AVR32_16B_PCREL, 20) mgl@1371: + RELOC_NUMBER (R_AVR32_16N_PCREL, 21) mgl@1371: + RELOC_NUMBER (R_AVR32_14UW_PCREL, 22) mgl@1371: + RELOC_NUMBER (R_AVR32_11H_PCREL, 23) mgl@1371: + RELOC_NUMBER (R_AVR32_10UW_PCREL, 24) mgl@1371: + RELOC_NUMBER (R_AVR32_9H_PCREL, 25) mgl@1371: + RELOC_NUMBER (R_AVR32_9UW_PCREL, 26) mgl@1371: + mgl@1371: + /* Special Code Relocations */ mgl@1371: + RELOC_NUMBER (R_AVR32_HI16, 27) mgl@1371: + RELOC_NUMBER (R_AVR32_LO16, 28) mgl@1371: + mgl@1371: + /* PIC Relocations */ mgl@1371: + RELOC_NUMBER (R_AVR32_GOTPC, 29) mgl@1371: + RELOC_NUMBER (R_AVR32_GOTCALL, 30) mgl@1371: + RELOC_NUMBER (R_AVR32_LDA_GOT, 31) mgl@1371: + RELOC_NUMBER (R_AVR32_GOT21S, 32) mgl@1371: + RELOC_NUMBER (R_AVR32_GOT18SW, 33) mgl@1371: + RELOC_NUMBER (R_AVR32_GOT16S, 34) mgl@1371: + RELOC_NUMBER (R_AVR32_GOT7UW, 35) mgl@1371: + mgl@1371: + /* Constant Pool Relocations */ mgl@1371: + RELOC_NUMBER (R_AVR32_32_CPENT, 36) mgl@1371: + RELOC_NUMBER (R_AVR32_CPCALL, 37) mgl@1371: + RELOC_NUMBER (R_AVR32_16_CP, 38) mgl@1371: + RELOC_NUMBER (R_AVR32_9W_CP, 39) mgl@1371: + mgl@1371: + /* Dynamic Relocations */ mgl@1371: + RELOC_NUMBER (R_AVR32_RELATIVE, 40) mgl@1371: + RELOC_NUMBER (R_AVR32_GLOB_DAT, 41) mgl@1371: + RELOC_NUMBER (R_AVR32_JMP_SLOT, 42) mgl@1371: + mgl@1371: + /* Linkrelax Information */ mgl@1371: + RELOC_NUMBER (R_AVR32_ALIGN, 43) mgl@1371: + mgl@1371: + RELOC_NUMBER (R_AVR32_15S, 44) mgl@1371: + mgl@1371: +END_RELOC_NUMBERS (R_AVR32_max) mgl@1371: + mgl@1371: +/* Processor specific dynamic array tags. */ mgl@1371: + mgl@1371: +/* The total size in bytes of the Global Offset Table */ mgl@1371: +#define DT_AVR32_GOTSZ 0x70000001 mgl@1371: --- a/include/elf/common.h mgl@1371: +++ b/include/elf/common.h mgl@1371: @@ -259,6 +259,9 @@ mgl@1371: /* V850 backend magic number. Written in the absense of an ABI. */ mgl@1371: #define EM_CYGNUS_V850 0x9080 mgl@1371: mgl@1371: +/* AVR32 magic number, picked by IAR Systems. */ mgl@1371: +#define EM_AVR32 0x18ad mgl@1371: + mgl@1371: /* old S/390 backend magic number. Written in the absence of an ABI. */ mgl@1371: #define EM_S390_OLD 0xa390 mgl@1371: mgl@1371: --- a/ld/configdoc.texi mgl@1371: +++ b/ld/configdoc.texi mgl@1371: @@ -7,6 +7,7 @@ mgl@1371: @set H8300 mgl@1371: @set HPPA mgl@1371: @set I960 mgl@1371: +@set AVR32 mgl@1371: @set M68HC11 mgl@1371: @set MMIX mgl@1371: @set MSP430 mgl@1371: --- a/ld/configure.tgt mgl@1371: +++ b/ld/configure.tgt mgl@1371: @@ -109,6 +109,9 @@ xscale-*-elf) targ_emul=armelf mgl@1371: avr-*-*) targ_emul=avr2 mgl@1371: targ_extra_emuls="avr1 avr3 avr4 avr5 avr6" mgl@1371: ;; mgl@1371: +avr32-*-none) targ_emul=avr32elf_ap7000 mgl@1371: + targ_extra_emuls="avr32elf_ap7001 avr32elf_ap7002 avr32elf_ap7200 avr32elf_uc3a0128 avr32elf_uc3a0256 avr32elf_uc3a0512 avr32elf_uc3a0512es avr32elf_uc3a1128 avr32elf_uc3a1256 avr32elf_uc3a1512es avr32elf_uc3a1512 avr32elf_uc3a364 avr32elf_uc3a364s avr32elf_uc3a3128 avr32elf_uc3a3128s avr32elf_uc3a3256 avr32elf_uc3a3256s avr32elf_uc3b064 avr32elf_uc3b0128 avr32elf_uc3b0256es avr32elf_uc3b0256 avr32elf_uc3b164 avr32elf_uc3b1128 avr32elf_uc3b1256es avr32elf_uc3b1256" ;; mgl@1371: +avr32-*-linux*) targ_emul=avr32linux ;; mgl@1371: bfin-*-elf) targ_emul=elf32bfin; mgl@1371: targ_extra_emuls="elf32bfinfd" mgl@1371: targ_extra_libpath=$targ_extra_emuls mgl@1371: --- /dev/null mgl@1371: +++ b/ld/emulparams/avr32elf.sh mgl@1371: @@ -0,0 +1,163 @@ mgl@1371: +# This script is called from ld/genscript.sh mgl@1371: +# There is a difference on how 'bash' and POSIX handles mgl@1371: +# the '.' (source) command in a script. mgl@1371: +# genscript.sh calls this script with argument ${EMULATION_NAME} mgl@1371: +# but that will fail on POSIX compilant shells like 'sh' or 'dash' mgl@1371: +# therefor I use the variable directly instead of $1 mgl@1371: +EMULATION=${EMULATION_NAME} mgl@1371: +SCRIPT_NAME=elf_xip mgl@1371: +TEMPLATE_NAME=elf32 mgl@1371: +EXTRA_EM_FILE=avr32elf mgl@1371: +OUTPUT_FORMAT="elf32-avr32" mgl@1371: +ARCH=avr32 mgl@1371: +MAXPAGESIZE=4096 mgl@1371: +ENTRY=_start mgl@1371: +EMBEDDED=yes mgl@1371: +NO_SMALL_DATA=yes mgl@1371: +NOP=0xd703d703 mgl@1371: + mgl@1371: +DATA_SEGMENT_ALIGN=8 mgl@1371: +BSS_ALIGNMENT=8 mgl@1371: + mgl@1371: +RO_LMA_REGION="FLASH" mgl@1371: +RO_VMA_REGION="FLASH" mgl@1371: +RW_LMA_REGION="FLASH" mgl@1371: +RW_VMA_REGION="CPUSRAM" mgl@1371: + mgl@1371: +STACK_SIZE=0x1000 mgl@1371: +STACK_ADDR="ORIGIN(CPUSRAM) + LENGTH(CPUSRAM) - ${STACK_SIZE}" mgl@1371: + mgl@1371: +DATA_SEGMENT_END="__heap_start__ = ALIGN(8); mgl@1371: + . = ${STACK_ADDR}; mgl@1371: + __heap_end__ = .;" mgl@1371: + mgl@1371: +case "$EMULATION" in mgl@1371: +avr32elf_ap*) mgl@1371: + MACHINE=ap mgl@1371: + INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH mgl@1371: + . = . & 0x9fffffff;" mgl@1371: + TEXT_START_ADDR=0xa0000000 mgl@1371: + case "$EMULATION" in mgl@1371: + avr32elf_ap700[0-2]) mgl@1371: + MEMORY="MEMORY mgl@1371: + { mgl@1371: + FLASH (rxai) : ORIGIN = 0x00000000, LENGTH = 64M mgl@1371: + CPUSRAM (rwxa) : ORIGIN = 0x24000000, LENGTH = 32K mgl@1371: + }" mgl@1371: + ;; mgl@1371: + avr32elf_ap7200) mgl@1371: + MEMORY="MEMORY mgl@1371: + { mgl@1371: + FLASH (rxai) : ORIGIN = 0x00000000, LENGTH = 64M mgl@1371: + CPUSRAM (rwxa) : ORIGIN = 0x08000000, LENGTH = 64K mgl@1371: + }" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + mgl@1371: +avr32elf_uc3*) mgl@1371: + MACHINE=uc mgl@1371: + INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" mgl@1371: + TEXT_START_ADDR=0x80000000 mgl@1371: + OTHER_SECTIONS=".userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE mgl@1371: + .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE" mgl@1371: + mgl@1371: + case "$EMULATION" in mgl@1371: + avr32elf_uc3a[01]512*) mgl@1371: + MEMORY="MEMORY mgl@1371: + { mgl@1371: + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 512K mgl@1371: + CPUSRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 64K mgl@1371: + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 mgl@1371: + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 mgl@1371: + }" mgl@1371: + ;; mgl@1371: + mgl@1371: + avr32elf_uc3a[01]256) mgl@1371: + MEMORY="MEMORY mgl@1371: + { mgl@1371: + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 256K mgl@1371: + CPUSRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 64K mgl@1371: + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 mgl@1371: + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 mgl@1371: + }" mgl@1371: + ;; mgl@1371: + mgl@1371: + avr32elf_uc3b[01]256*) mgl@1371: + MEMORY="MEMORY mgl@1371: + { mgl@1371: + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 256K mgl@1371: + CPUSRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 32K mgl@1371: + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 mgl@1371: + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 mgl@1371: + }" mgl@1371: + ;; mgl@1371: + mgl@1371: + avr32elf_uc3[ab][01]128) mgl@1371: + MEMORY="MEMORY mgl@1371: + { mgl@1371: + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 128K mgl@1371: + CPUSRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 32K mgl@1371: + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 mgl@1371: + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 mgl@1371: + }" mgl@1371: + ;; mgl@1371: + mgl@1371: + avr32elf_uc3b[01]64) mgl@1371: + MEMORY="MEMORY mgl@1371: + { mgl@1371: + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 64K mgl@1371: + CPUSRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 16K mgl@1371: + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 mgl@1371: + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 mgl@1371: + }" mgl@1371: + ;; mgl@1371: + mgl@1371: + avr32elf_uc3a3256*) mgl@1371: + MEMORY="MEMORY mgl@1371: + { mgl@1371: + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 256K mgl@1371: + CPUSRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 64K mgl@1371: + HSBSRAM (wxa!ri) : ORIGIN = 0xFF000000, LENGTH = 64K mgl@1371: + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 mgl@1371: + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 mgl@1371: + }" mgl@1371: + OTHER_SECTIONS ="${OTHER_SECTIONS} mgl@1371: + .hsbsram : { *(.hsbsram .hsbsram.*) } >HSBSRAM AT>FLASH :FLASH mgl@1371: +" mgl@1371: + mgl@1371: + ;; mgl@1371: + mgl@1371: + avr32elf_uc3a3128*) mgl@1371: + MEMORY="MEMORY mgl@1371: + { mgl@1371: + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 128K mgl@1371: + CPUSRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 64K mgl@1371: + HSBSRAM (wxa!ri) : ORIGIN = 0xFF000000, LENGTH = 64K mgl@1371: + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 mgl@1371: + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 mgl@1371: + }" mgl@1371: + OTHER_SECTIONS ="${OTHER_SECTIONS} mgl@1371: + .hsbsram : { *(.hsbsram .hsbsram.*) } >HSBSRAM AT>FLASH :FLASH mgl@1371: +" mgl@1371: + ;; mgl@1371: + mgl@1371: + avr32elf_uc3a364*) mgl@1371: + MEMORY="MEMORY mgl@1371: + { mgl@1371: + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 64K mgl@1371: + CPUSRAM (wxa!ri) : ORIGIN = 0x00000000, LENGTH = 64K mgl@1371: + HSBSRAM (wxa!ri) : ORIGIN = 0xFF000000, LENGTH = 64K mgl@1371: + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 mgl@1371: + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 mgl@1371: + }" mgl@1371: + OTHER_SECTIONS ="${OTHER_SECTIONS} mgl@1371: + .hsbsram : { *(.hsbsram .hsbsram.*) } >HSBSRAM AT>FLASH :FLASH mgl@1371: +" mgl@1371: + ;; mgl@1371: + mgl@1371: + mgl@1371: + esac mgl@1371: + ;; mgl@1371: + mgl@1371: +esac mgl@1371: --- /dev/null mgl@1371: +++ b/ld/emulparams/avr32linux.sh mgl@1371: @@ -0,0 +1,14 @@ mgl@1371: +ARCH=avr32 mgl@1371: +SCRIPT_NAME=elf mgl@1371: +TEMPLATE_NAME=elf32 mgl@1371: +EXTRA_EM_FILE=avr32elf mgl@1371: +OUTPUT_FORMAT="elf32-avr32" mgl@1371: +GENERATE_SHLIB_SCRIPT=yes mgl@1371: +MAXPAGESIZE=0x1000 mgl@1371: +TEXT_START_ADDR=0x00001000 mgl@1371: +NOP=0xd703d703 mgl@1371: + mgl@1371: +# This appears to place the GOT before the data section, which is mgl@1371: +# essential for uClinux. We don't use those .s* sections on AVR32 mgl@1371: +# anyway, so it shouldn't hurt for regular Linux either... mgl@1371: +NO_SMALL_DATA=yes mgl@1371: --- /dev/null mgl@1371: +++ b/ld/emultempl/avr32elf.em mgl@1371: @@ -0,0 +1,133 @@ mgl@1371: +# This shell script emits a C file. -*- C -*- mgl@1371: +# Copyright (C) 2007 Atmel Corporation mgl@1371: +# mgl@1371: +# This file is part of GLD, the Gnu Linker. mgl@1371: +# mgl@1371: +# This program is free software; you can redistribute it and/or modify mgl@1371: +# it under the terms of the GNU General Public License as published by mgl@1371: +# the Free Software Foundation; either version 2 of the License, or mgl@1371: +# (at your option) any later version. mgl@1371: +# mgl@1371: +# This program is distributed in the hope that it will be useful, mgl@1371: +# but WITHOUT ANY WARRANTY; without even the implied warranty of mgl@1371: +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the mgl@1371: +# GNU General Public License for more details. mgl@1371: +# mgl@1371: +# You should have received a copy of the GNU General Public License mgl@1371: +# along with this program; if not, write to the Free Software mgl@1371: +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. mgl@1371: +# mgl@1371: + mgl@1371: +# This file is sourced from elf32.em, and defines extra avr32-elf mgl@1371: +# specific routines. mgl@1371: +# mgl@1371: + mgl@1371: +# Generate linker script for writable rodata mgl@1371: +LD_FLAG=rodata-writable mgl@1371: +DATA_ALIGNMENT=${DATA_ALIGNMENT_} mgl@1371: +RELOCATING=" " mgl@1371: +WRITABLE_RODATA=" " mgl@1371: +( echo "/* Linker script for writable rodata */" mgl@1371: + . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} mgl@1371: + . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc mgl@1371: +) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xwr mgl@1371: + mgl@1371: + mgl@1371: +cat >> e${EMULATION_NAME}.c <>e${EMULATION_NAME}.c <> e${EMULATION_NAME}.c mgl@1371: +echo ';' >> e${EMULATION_NAME}.c mgl@1371: +else mgl@1371: +# Scripts read from the filesystem. mgl@1371: + mgl@1371: +cat >>e${EMULATION_NAME}.c <>e${EMULATION_NAME}.c <LMA_REGION: Output Section LMA. (line 6) mgl@1371: * automatic data imports: WIN32. (line 170) mgl@1371: +* AVR32 options: AVR32. (line 6) mgl@1371: * back end: BFD. (line 6) mgl@1371: * BASE (MRI): MRI. (line 54) mgl@1371: * BE8: ARM. (line 23) mgl@1371: @@ -7018,6 +7046,7 @@ Node: H8/300183897 mgl@1371: Node: i960185522 mgl@1371: Node: M68HC11/68HC12187207 mgl@1371: Node: ARM188910 mgl@1371: +Node: AVR32182578 mgl@1371: Node: HPPA ELF32193760 mgl@1371: Node: MMIX195383 mgl@1371: Node: MSP430196600 mgl@1371: --- a/ld/ld.texinfo mgl@1371: +++ b/ld/ld.texinfo mgl@1371: @@ -21,6 +21,7 @@ mgl@1371: @set UsesEnvVars mgl@1371: @set GENERIC mgl@1371: @set ARM mgl@1371: +@set AVR32 mgl@1371: @set H8300 mgl@1371: @set HPPA mgl@1371: @set I960 mgl@1371: @@ -139,6 +140,9 @@ section entitled ``GNU Free Documentatio mgl@1371: @ifset ARM mgl@1371: * ARM:: ld and the ARM family mgl@1371: @end ifset mgl@1371: +@ifset AVR32 mgl@1371: +* AVR32:: ld and AVR32 processors mgl@1371: +@end ifset mgl@1371: @ifset HPPA mgl@1371: * HPPA ELF32:: ld and HPPA 32-bit ELF mgl@1371: @end ifset mgl@1371: @@ -5248,6 +5252,9 @@ functionality are not listed. mgl@1371: @ifset ARM mgl@1371: * ARM:: @command{ld} and the ARM family mgl@1371: @end ifset mgl@1371: +@ifset AVR32 mgl@1371: +* AVR32:: @command{ld} and AVR32 processors mgl@1371: +@end ifset mgl@1371: @ifset HPPA mgl@1371: * HPPA ELF32:: @command{ld} and HPPA 32-bit ELF mgl@1371: @end ifset mgl@1371: @@ -5589,6 +5596,52 @@ not be diagnosed. mgl@1371: @end ifclear mgl@1371: @end ifset mgl@1371: mgl@1371: +@ifset AVR32 mgl@1371: +@ifclear GENERIC mgl@1371: +@raisesections mgl@1371: +@end ifclear mgl@1371: + mgl@1371: +@node AVR32 mgl@1371: +@section @command{ld} and AVR32 processors mgl@1371: +@cindex AVR32 options mgl@1371: +@table @option mgl@1371: +@kindex --direct-data mgl@1371: +@kindex --no-direct-data mgl@1371: +@item --direct-data mgl@1371: +@item --no-direct-data mgl@1371: +Taking the address of a symbol can often be done by using a direct mgl@1371: +@code{mov} or pc-relative @code{sub} instruction, which is faster than mgl@1371: +using a PC- or GOT-relative load, especially on the uC3 mgl@1371: +processors. However, this does not always work when dealing with mgl@1371: +symbols in the @code{.data} section so this optimization is disabled mgl@1371: +by default. mgl@1371: + mgl@1371: +Specifying @option{--direct-data} will enable this optimization. Note mgl@1371: +that this may cause @samp{relocation truncated to fit} errors for mgl@1371: +certain large programs. If this happens, the optimization can be mgl@1371: +turned off by specifying @option{--no-direct-data}. mgl@1371: + mgl@1371: +All known issues with direct data optimizations are detected at link mgl@1371: +time, so if the linker doesn't complain, the result should run just mgl@1371: +fine. mgl@1371: + mgl@1371: +@kindex --rodata-writable mgl@1371: +@kindex --no-rodata-writable mgl@1371: +@item --rodata-writable mgl@1371: +@item --no-rodata-writable mgl@1371: +Using the @option{--rodata-writable} options will cause the linker mgl@1371: +to try and use a linker script where read-only data will be placed mgl@1371: +in the same section as writable data. This can give great performance mgl@1371: +gain on cacheless processors where read-only data normally is placed in mgl@1371: +flash, and writable data is placed in internal sram. This will however mgl@1371: +come at the expence of a larger memory footprint. mgl@1371: +@end table mgl@1371: + mgl@1371: +@ifclear GENERIC mgl@1371: +@lowersections mgl@1371: +@end ifclear mgl@1371: +@end ifset mgl@1371: + mgl@1371: @ifset HPPA mgl@1371: @ifclear GENERIC mgl@1371: @raisesections mgl@1371: --- a/ld/Makefile.am mgl@1371: +++ b/ld/Makefile.am mgl@1371: @@ -137,7 +137,34 @@ ALL_EMULATIONS = \ mgl@1371: eavr3.o \ mgl@1371: eavr4.o \ mgl@1371: eavr5.o \ mgl@1371: - eavr6.o \ mgl@1371: + eavr6.o \ mgl@1371: + eavr32elf_ap7000.o \ mgl@1371: + eavr32elf_ap7001.o \ mgl@1371: + eavr32elf_ap7002.o \ mgl@1371: + eavr32elf_ap7200.o \ mgl@1371: + eavr32elf_uc3a0128.o \ mgl@1371: + eavr32elf_uc3a0256.o \ mgl@1371: + eavr32elf_uc3a0512.o \ mgl@1371: + eavr32elf_uc3a0512es.o \ mgl@1371: + eavr32elf_uc3a1128.o \ mgl@1371: + eavr32elf_uc3a1256.o \ mgl@1371: + eavr32elf_uc3a1512es.o \ mgl@1371: + eavr32elf_uc3a1512.o \ mgl@1371: + eavr32elf_uc3a364.o \ mgl@1371: + eavr32elf_uc3a364s.o \ mgl@1371: + eavr32elf_uc3a3128.o \ mgl@1371: + eavr32elf_uc3a3128s.o \ mgl@1371: + eavr32elf_uc3a3256.o \ mgl@1371: + eavr32elf_uc3a3256s.o \ mgl@1371: + eavr32elf_uc3b064.o \ mgl@1371: + eavr32elf_uc3b0128.o \ mgl@1371: + eavr32elf_uc3b0256es.o \ mgl@1371: + eavr32elf_uc3b0256.o \ mgl@1371: + eavr32elf_uc3b164.o \ mgl@1371: + eavr32elf_uc3b1128.o \ mgl@1371: + eavr32elf_uc3b1256es.o \ mgl@1371: + eavr32elf_uc3b1256.o \ mgl@1371: + eavr32linux.o \ mgl@1371: ecoff_i860.o \ mgl@1371: ecoff_sparc.o \ mgl@1371: eelf32_spu.o \ mgl@1371: @@ -622,6 +649,114 @@ eavr6.c: $(srcdir)/emulparams/avr6.sh $( mgl@1371: $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \ mgl@1371: ${GEN_DEPENDS} mgl@1371: ${GENSCRIPTS} avr6 "$(tdir_avr2)" mgl@1371: +eavr32elf_ap7000.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_ap7000 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_ap7001.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_ap7001 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_ap7002.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_ap7002 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_ap7200.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_ap7200 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a0128.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a0128 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a0256.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a0256 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a0512.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a0512 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a0512es.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a0512es "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a1128.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a1128 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a1256.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a1256 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a1512.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a1512 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a1512es.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a1512es "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a364.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a364 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a364s.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a364s "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a3128.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a3128 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a3128s.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a3128s "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a3256.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a3256 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a3256s.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a3256s "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3b064.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3b064 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3b0128.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3b0128 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3b0256.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3b0256 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3b0256es.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3b0256es "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3b164.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3b164 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3b1128.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3b1128 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3b1256.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3b1256 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3b1256es.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3b1256es "$(tdir_avr32)" avr32elf mgl@1371: +eavr32linux.c: $(srcdir)/emulparams/avr32linux.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32linux "$(tdir_avr32)" mgl@1371: ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \ mgl@1371: $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS} mgl@1371: ${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)" mgl@1371: @@ -1877,7 +2012,9 @@ install-exec-local: ld-new$(EXEEXT) mgl@1371: || $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT); \ mgl@1371: fi mgl@1371: mgl@1371: -install-data-local: mgl@1371: +# We want install to imply install-info as per GNU standards, despite the mgl@1371: +# cygnus option. mgl@1371: +install-data-local: install-info mgl@1371: $(mkinstalldirs) $(DESTDIR)$(scriptdir)/ldscripts mgl@1371: for f in ldscripts/*; do \ mgl@1371: $(INSTALL_DATA) $$f $(DESTDIR)$(scriptdir)/$$f ; \ mgl@1371: --- /dev/null mgl@1371: +++ b/ld/scripttempl/elf_xip.sc mgl@1371: @@ -0,0 +1,456 @@ mgl@1371: +# mgl@1371: +# Unusual variables checked by this code: mgl@1371: +# NOP - four byte opcode for no-op (defaults to 0) mgl@1371: +# NO_SMALL_DATA - no .sbss/.sbss2/.sdata/.sdata2 sections if not mgl@1371: +# empty. mgl@1371: +# SMALL_DATA_CTOR - .ctors contains small data. mgl@1371: +# SMALL_DATA_DTOR - .dtors contains small data. mgl@1371: +# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start mgl@1371: +# INITIAL_READONLY_SECTIONS - at start of text segment mgl@1371: +# OTHER_READONLY_SECTIONS - other than .text .init .rodata ... mgl@1371: +# (e.g., .PARISC.milli) mgl@1371: +# OTHER_TEXT_SECTIONS - these get put in .text when relocating mgl@1371: +# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ... mgl@1371: +# (e.g., .PARISC.global) mgl@1371: +# OTHER_RELRO_SECTIONS - other than .data.rel.ro ... mgl@1371: +# (e.g. PPC32 .fixup, .got[12]) mgl@1371: +# OTHER_BSS_SECTIONS - other than .bss .sbss ... mgl@1371: +# OTHER_SECTIONS - at the end mgl@1371: +# EXECUTABLE_SYMBOLS - symbols that must be defined for an mgl@1371: +# executable (e.g., _DYNAMIC_LINK) mgl@1371: +# TEXT_START_ADDR - the first byte of the text segment, after any mgl@1371: +# headers. mgl@1371: +# TEXT_BASE_ADDRESS - the first byte of the text segment. mgl@1371: +# TEXT_START_SYMBOLS - symbols that appear at the start of the mgl@1371: +# .text section. mgl@1371: +# DATA_START_SYMBOLS - symbols that appear at the start of the mgl@1371: +# .data section. mgl@1371: +# OTHER_GOT_SYMBOLS - symbols defined just before .got. mgl@1371: +# OTHER_GOT_SECTIONS - sections just after .got. mgl@1371: +# OTHER_SDATA_SECTIONS - sections just after .sdata. mgl@1371: +# OTHER_BSS_SYMBOLS - symbols that appear at the start of the mgl@1371: +# .bss section besides __bss_start. mgl@1371: +# DATA_PLT - .plt should be in data segment, not text segment. mgl@1371: +# PLT_BEFORE_GOT - .plt just before .got when .plt is in data segement. mgl@1371: +# BSS_PLT - .plt should be in bss segment mgl@1371: +# TEXT_DYNAMIC - .dynamic in text segment, not data segment. mgl@1371: +# EMBEDDED - whether this is for an embedded system. mgl@1371: +# SHLIB_TEXT_START_ADDR - if set, add to SIZEOF_HEADERS to set mgl@1371: +# start address of shared library. mgl@1371: +# INPUT_FILES - INPUT command of files to always include mgl@1371: +# WRITABLE_RODATA - if set, the .rodata section should be writable mgl@1371: +# INIT_START, INIT_END - statements just before and just after mgl@1371: +# combination of .init sections. mgl@1371: +# FINI_START, FINI_END - statements just before and just after mgl@1371: +# combination of .fini sections. mgl@1371: +# STACK_ADDR - start of a .stack section. mgl@1371: +# OTHER_END_SYMBOLS - symbols to place right at the end of the script. mgl@1371: +# SEPARATE_GOTPLT - if set, .got.plt should be separate output section, mgl@1371: +# so that .got can be in the RELRO area. It should be set to mgl@1371: +# the number of bytes in the beginning of .got.plt which can be mgl@1371: +# in the RELRO area as well. mgl@1371: +# mgl@1371: +# When adding sections, do note that the names of some sections are used mgl@1371: +# when specifying the start address of the next. mgl@1371: +# mgl@1371: + mgl@1371: +# Many sections come in three flavours. There is the 'real' section, mgl@1371: +# like ".data". Then there are the per-procedure or per-variable mgl@1371: +# sections, generated by -ffunction-sections and -fdata-sections in GCC, mgl@1371: +# and useful for --gc-sections, which for a variable "foo" might be mgl@1371: +# ".data.foo". Then there are the linkonce sections, for which the linker mgl@1371: +# eliminates duplicates, which are named like ".gnu.linkonce.d.foo". mgl@1371: +# The exact correspondences are: mgl@1371: +# mgl@1371: +# Section Linkonce section mgl@1371: +# .text .gnu.linkonce.t.foo mgl@1371: +# .rodata .gnu.linkonce.r.foo mgl@1371: +# .data .gnu.linkonce.d.foo mgl@1371: +# .bss .gnu.linkonce.b.foo mgl@1371: +# .sdata .gnu.linkonce.s.foo mgl@1371: +# .sbss .gnu.linkonce.sb.foo mgl@1371: +# .sdata2 .gnu.linkonce.s2.foo mgl@1371: +# .sbss2 .gnu.linkonce.sb2.foo mgl@1371: +# .debug_info .gnu.linkonce.wi.foo mgl@1371: +# .tdata .gnu.linkonce.td.foo mgl@1371: +# .tbss .gnu.linkonce.tb.foo mgl@1371: +# mgl@1371: +# Each of these can also have corresponding .rel.* and .rela.* sections. mgl@1371: + mgl@1371: +test -z "$ENTRY" && ENTRY=_start mgl@1371: +test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT} mgl@1371: +test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} mgl@1371: +if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi mgl@1371: +test -z "${ELFSIZE}" && ELFSIZE=32 mgl@1371: +test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8" mgl@1371: +test "$LD_FLAG" = "N" && DATA_ADDR=. mgl@1371: +test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE="" mgl@1371: +test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE="" mgl@1371: +test -n "$RELRO_NOW" && unset SEPARATE_GOTPLT mgl@1371: +if test -n "$RELOCATING"; then mgl@1371: + RO_REGION="${RO_VMA_REGION+ >}${RO_VMA_REGION}${RO_LMA_REGION+ AT>}${RO_LMA_REGION}" mgl@1371: + RW_REGION="${RW_VMA_REGION+ >}${RW_VMA_REGION}${RW_LMA_REGION+ AT>}${RW_LMA_REGION}" mgl@1371: +else mgl@1371: + RO_REGION="" mgl@1371: + RW_REGION="" mgl@1371: +fi mgl@1371: +INTERP=".interp ${RELOCATING-0} : { *(.interp) }${RO_REGION}" mgl@1371: +PLT=".plt ${RELOCATING-0} : { *(.plt) }" mgl@1371: +if test -z "$GOT"; then mgl@1371: + if test -z "$SEPARATE_GOTPLT"; then mgl@1371: + GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) }" mgl@1371: + else mgl@1371: + GOT=".got ${RELOCATING-0} : { *(.got) }" mgl@1371: + GOTPLT="${RELOCATING+${DATA_SEGMENT_RELRO_GOTPLT_END}} mgl@1371: + .got.plt ${RELOCATING-0} : { *(.got.plt) }" mgl@1371: + fi mgl@1371: +fi mgl@1371: +DALIGN=".dalign : { . = ALIGN(${DATA_SEGMENT_ALIGN}); PROVIDE(_data_lma = .); }${RO_REGION}" mgl@1371: +BALIGN=".balign : { . = ALIGN(${BSS_ALIGNMENT}); _edata = .; }${RW_REGION}" mgl@1371: +DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }" mgl@1371: +RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" mgl@1371: +DATARELRO=".data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) }${RW_REGION}" mgl@1371: +STACKNOTE="/DISCARD/ : { *(.note.GNU-stack) }" mgl@1371: +if test -z "${NO_SMALL_DATA}"; then mgl@1371: + SBSS=".sbss ${RELOCATING-0} : mgl@1371: + { mgl@1371: + ${RELOCATING+PROVIDE (__sbss_start = .);} mgl@1371: + ${RELOCATING+PROVIDE (___sbss_start = .);} mgl@1371: + ${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)} mgl@1371: + *(.dynsbss) mgl@1371: + *(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*}) mgl@1371: + *(.scommon) mgl@1371: + ${RELOCATING+PROVIDE (__sbss_end = .);} mgl@1371: + ${RELOCATING+PROVIDE (___sbss_end = .);} mgl@1371: + }${RW_REGION}" mgl@1371: + SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }${RW_REGION}" mgl@1371: + SDATA="/* We want the small data sections together, so single-instruction offsets mgl@1371: + can access them all, and initialized data all before uninitialized, so mgl@1371: + we can shorten the on-disk segment size. */ mgl@1371: + .sdata ${RELOCATING-0} : mgl@1371: + { mgl@1371: + ${RELOCATING+${SDATA_START_SYMBOLS}} mgl@1371: + ${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)} mgl@1371: + *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*}) mgl@1371: + }${RW_REGION}" mgl@1371: + SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }${RW_REGION}" mgl@1371: + REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) }${RO_REGION} mgl@1371: + .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }" mgl@1371: + REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) }${RO_REGION} mgl@1371: + .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }${RO_REGION}" mgl@1371: + REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) }${RO_REGION} mgl@1371: + .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }${RO_REGION}" mgl@1371: + REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) }${RO_REGION} mgl@1371: + .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }${RO_REGION}" mgl@1371: +else mgl@1371: + NO_SMALL_DATA=" " mgl@1371: +fi mgl@1371: +test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" " mgl@1371: +CTOR=".ctors ${CONSTRUCTING-0} : mgl@1371: + { mgl@1371: + ${CONSTRUCTING+${CTOR_START}} mgl@1371: + /* gcc uses crtbegin.o to find the start of mgl@1371: + the constructors, so we make sure it is mgl@1371: + first. Because this is a wildcard, it mgl@1371: + doesn't matter if the user does not mgl@1371: + actually link against crtbegin.o; the mgl@1371: + linker won't look for a file to match a mgl@1371: + wildcard. The wildcard also means that it mgl@1371: + doesn't matter which directory crtbegin.o mgl@1371: + is in. */ mgl@1371: + mgl@1371: + KEEP (*crtbegin*.o(.ctors)) mgl@1371: + mgl@1371: + /* We don't want to include the .ctor section from mgl@1371: + from the crtend.o file until after the sorted ctors. mgl@1371: + The .ctor section from the crtend file contains the mgl@1371: + end of ctors marker and it must be last */ mgl@1371: + mgl@1371: + KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors)) mgl@1371: + KEEP (*(SORT(.ctors.*))) mgl@1371: + KEEP (*(.ctors)) mgl@1371: + ${CONSTRUCTING+${CTOR_END}} mgl@1371: + }" mgl@1371: +DTOR=".dtors ${CONSTRUCTING-0} : mgl@1371: + { mgl@1371: + ${CONSTRUCTING+${DTOR_START}} mgl@1371: + KEEP (*crtbegin*.o(.dtors)) mgl@1371: + KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors)) mgl@1371: + KEEP (*(SORT(.dtors.*))) mgl@1371: + KEEP (*(.dtors)) mgl@1371: + ${CONSTRUCTING+${DTOR_END}} mgl@1371: + }" mgl@1371: +STACK=".stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} : mgl@1371: + { mgl@1371: + ${RELOCATING+_stack = .;} mgl@1371: + *(.stack) mgl@1371: + ${RELOCATING+${STACK_SIZE+. = ${STACK_SIZE};}} mgl@1371: + ${RELOCATING+_estack = .;} mgl@1371: + }${RW_REGION}" mgl@1371: + mgl@1371: +# if this is for an embedded system, don't add SIZEOF_HEADERS. mgl@1371: +if [ -z "$EMBEDDED" ]; then mgl@1371: + test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR} + SIZEOF_HEADERS" mgl@1371: +else mgl@1371: + test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}" mgl@1371: +fi mgl@1371: + mgl@1371: +cat <: mgl@1371: +a0000000: d7 03 nop mgl@1371: +a0000002: d7 03 nop mgl@1371: + mgl@1371: +a0000004 : mgl@1371: +a0000004: d7 03 nop mgl@1371: +a0000006: c0 28 rjmp a000000a mgl@1371: +a0000008: d7 03 nop mgl@1371: +a000000a: e0 8f 01 fb bral a0000400 mgl@1371: + mgl@1371: +a000000e : mgl@1371: +a000000e: d7 03 nop mgl@1371: +a0000010 : mgl@1371: +a0000010: c0 2c rcall a0000014 mgl@1371: +a0000012: d7 03 nop mgl@1371: +a0000014: ee b0 ff f6 rcall a0200000 mgl@1371: + mgl@1371: +a0000018 : mgl@1371: +a0000018: c0 31 brne a000001e mgl@1371: +a000001a: fe 9f ff ff bral a0000018 mgl@1371: +a000001e: ee 90 ff f1 breq a0200000 mgl@1371: + mgl@1371: +a0000022 : mgl@1371: +a0000022: 48 30 lddpc r0,a000002c mgl@1371: +a0000024: 48 20 lddpc r0,a000002c mgl@1371: +a0000026: fe f0 7f da ld.w r0,pc\[32730\] mgl@1371: + ... mgl@1371: + mgl@1371: +a000002c : mgl@1371: +a000002c: d7 03 nop mgl@1371: +a000002e: d7 03 nop mgl@1371: + mgl@1371: +a0000030 : mgl@1371: +a0000030: 48 20 lddpc r0,a0000038 mgl@1371: +a0000032: 48 30 lddpc r0,a000003c mgl@1371: +a0000034: 48 20 lddpc r0,a000003c mgl@1371: +a0000036: 00 00 add r0,r0 mgl@1371: +a0000038: d7 03 nop mgl@1371: +a000003a: d7 03 nop mgl@1371: +a000003c: d7 03 nop mgl@1371: +a000003e: d7 03 nop mgl@1371: + mgl@1371: +Disassembly of section \.text\.init: mgl@1371: +a0000040 : mgl@1371: +a0000040: fe b0 ff e7 rcall a000000e mgl@1371: +a0000044: d7 03 nop mgl@1371: +a0000046: fe b0 ff e4 rcall a000000e mgl@1371: +a000004a: fe b0 ff e3 rcall a0000010 mgl@1371: +a000004e: d7 03 nop mgl@1371: +a0000050: fe b0 ff e0 rcall a0000010 mgl@1371: + mgl@1371: +Disassembly of section \.text\.pcrel10: mgl@1371: + mgl@1371: +a0000400 : mgl@1371: +a0000400: d7 03 nop mgl@1371: + mgl@1371: +Disassembly of section \.text\.pcrel16: mgl@1371: + mgl@1371: +a0008000 : mgl@1371: +a0008000: d7 03 nop mgl@1371: + mgl@1371: +Disassembly of section \.text\.pcrel21: mgl@1371: +a0200000 : mgl@1371: +a0200000: d7 03 nop mgl@1371: --- /dev/null mgl@1371: +++ b/ld/testsuite/ld-avr32/pcrel.ld mgl@1371: @@ -0,0 +1,23 @@ mgl@1371: +ENTRY(_start) mgl@1371: +SECTIONS mgl@1371: +{ mgl@1371: + .text 0xa0000000: mgl@1371: + { mgl@1371: + *(.text) mgl@1371: + } mgl@1371: + mgl@1371: + .text.pcrel10 0xa0000400: mgl@1371: + { mgl@1371: + *(.text.pcrel10) mgl@1371: + } mgl@1371: + mgl@1371: + .text.pcrel16 0xa0008000: mgl@1371: + { mgl@1371: + *(.text.pcrel16) mgl@1371: + } mgl@1371: + mgl@1371: + .text.pcrel21 0xa0200000: mgl@1371: + { mgl@1371: + *(.text.pcrel21) mgl@1371: + } mgl@1371: +} mgl@1371: --- /dev/null mgl@1371: +++ b/ld/testsuite/ld-avr32/symbols.s mgl@1371: @@ -0,0 +1,20 @@ mgl@1371: + .text mgl@1371: + .global _start mgl@1371: +_start: mgl@1371: + nop mgl@1371: + nop mgl@1371: + mgl@1371: + .section .text.pcrel10,"ax" mgl@1371: + .global extsym10 mgl@1371: +extsym10: mgl@1371: + nop mgl@1371: + mgl@1371: + .section .text.pcrel16,"ax" mgl@1371: + .global extsym16 mgl@1371: +extsym16: mgl@1371: + nop mgl@1371: + mgl@1371: + .section .text.pcrel21,"ax" mgl@1371: + .global extsym21 mgl@1371: +extsym21: mgl@1371: + nop mgl@1371: --- /dev/null mgl@1371: +++ b/opcodes/avr32-asm.c mgl@1371: @@ -0,0 +1,264 @@ mgl@1371: +/* Assembler interface for AVR32. mgl@1371: + Copyright 2005, 2006 Atmel Corporation. mgl@1371: + mgl@1371: + Written by Haavard Skinnemoen, Atmel Norway, mgl@1371: + mgl@1371: + This file is part of libopcodes. mgl@1371: + mgl@1371: + This program is free software; you can redistribute it and/or mgl@1371: + modify it under the terms of the GNU General Public License as mgl@1371: + published by the Free Software Foundation; either version 2 of the mgl@1371: + License, or (at your option) any later version. mgl@1371: + mgl@1371: + This program is distributed in the hope that it will be useful, but mgl@1371: + WITHOUT ANY WARRANTY; without even the implied warranty of mgl@1371: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU mgl@1371: + General Public License for more details. mgl@1371: + mgl@1371: + You should have received a copy of the GNU General Public License mgl@1371: + along with this program; if not, write to the Free Software mgl@1371: + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA mgl@1371: + 02111-1307, USA. */ mgl@1371: + mgl@1371: +#include mgl@1371: + mgl@1371: +#include "avr32-opc.h" mgl@1371: +#include "avr32-asm.h" mgl@1371: + mgl@1371: +/* Structure for a register hash table entry. */ mgl@1371: +struct reg_entry mgl@1371: +{ mgl@1371: + const char *name; mgl@1371: + int number; mgl@1371: +}; mgl@1371: + mgl@1371: +/* Integer Registers. */ mgl@1371: +static const struct reg_entry reg_table[] = mgl@1371: + { mgl@1371: + /* Primary names (used by the disassembler) */ mgl@1371: + { "r0", 0 }, { "r1", 1 }, { "r2", 2 }, { "r3", 3 }, mgl@1371: + { "r4", 4 }, { "r5", 5 }, { "r6", 6 }, { "r7", 7 }, mgl@1371: + { "r8", 8 }, { "r9", 9 }, { "r10", 10 }, { "r11", 11 }, mgl@1371: + { "r12", 12 }, { "sp", 13 }, { "lr", 14 }, { "pc", 15 }, mgl@1371: + /* Alternatives to sp, lr and pc. */ mgl@1371: + { "r13", 13 }, { "r14", 14 }, { "r15", 15 }, mgl@1371: + }; mgl@1371: +#define AVR32_NR_INTREGS (sizeof(reg_table)/sizeof(reg_table[0])) mgl@1371: + mgl@1371: +/* Coprocessor Registers. */ mgl@1371: +static const struct reg_entry cr_table[] = mgl@1371: + { mgl@1371: + { "cr0", 0 }, { "cr1", 1 }, { "cr2", 2 }, { "cr3", 3 }, mgl@1371: + { "cr4", 4 }, { "cr5", 5 }, { "cr6", 6 }, { "cr7", 7 }, mgl@1371: + { "cr8", 8 }, { "cr9", 9 }, { "cr10", 10 }, { "cr11", 11 }, mgl@1371: + { "cr12", 12 }, { "cr13", 13 }, { "cr14", 14 }, { "cr15", 15 }, mgl@1371: + }; mgl@1371: +#define AVR32_NR_CPREGS (sizeof(cr_table)/sizeof(cr_table[0])) mgl@1371: + mgl@1371: +/* Floating-point Registers. */ mgl@1371: +static const struct reg_entry fr_table[] = mgl@1371: + { mgl@1371: + { "fr0", 0 }, { "fr1", 1 }, { "fr2", 2 }, { "fr3", 3 }, mgl@1371: + { "fr4", 4 }, { "fr5", 5 }, { "fr6", 6 }, { "fr7", 7 }, mgl@1371: + { "fr8", 8 }, { "fr9", 9 }, { "fr10", 10 }, { "fr11", 11 }, mgl@1371: + { "fr12", 12 }, { "fr13", 13 }, { "fr14", 14 }, { "fr15", 15 }, mgl@1371: + }; mgl@1371: +#define AVR32_NR_FPREGS (sizeof(fr_table)/sizeof(fr_table[0])) mgl@1371: + mgl@1371: +/* PiCo Registers. */ mgl@1371: +static const struct reg_entry pico_table[] = mgl@1371: + { mgl@1371: + { "inpix2", 0 }, { "inpix1", 1 }, { "inpix0", 2 }, mgl@1371: + { "outpix2", 3 }, { "outpix1", 4 }, { "outpix0", 5 }, mgl@1371: + { "coeff0_a", 6 }, { "coeff0_b", 7 }, { "coeff1_a", 8 }, mgl@1371: + { "coeff1_b", 9 }, { "coeff2_a", 10 }, { "coeff2_b", 11 }, mgl@1371: + { "vmu0_out", 12 }, { "vmu1_out", 13 }, { "vmu2_out", 14 }, mgl@1371: + { "config", 15 }, mgl@1371: + }; mgl@1371: +#define AVR32_NR_PICOREGS (sizeof(pico_table)/sizeof(pico_table[0])) mgl@1371: + mgl@1371: +int mgl@1371: +avr32_parse_intreg(const char *str) mgl@1371: +{ mgl@1371: + unsigned int i; mgl@1371: + mgl@1371: + for (i = 0; i < AVR32_NR_INTREGS; i++) mgl@1371: + { mgl@1371: + if (strcasecmp(reg_table[i].name, str) == 0) mgl@1371: + return reg_table[i].number; mgl@1371: + } mgl@1371: + mgl@1371: + return -1; mgl@1371: +} mgl@1371: + mgl@1371: +int mgl@1371: +avr32_parse_cpreg(const char *str) mgl@1371: +{ mgl@1371: + unsigned int i; mgl@1371: + mgl@1371: + for (i = 0; i < AVR32_NR_CPREGS; i++) mgl@1371: + { mgl@1371: + if (strcasecmp(cr_table[i].name, str) == 0) mgl@1371: + return cr_table[i].number; mgl@1371: + } mgl@1371: + mgl@1371: + return -1; mgl@1371: +} mgl@1371: + mgl@1371: +int avr32_parse_fpreg(const char *str) mgl@1371: +{ mgl@1371: + unsigned int i; mgl@1371: + mgl@1371: + for (i = 0; i < AVR32_NR_FPREGS; i++) mgl@1371: + { mgl@1371: + if (strcasecmp(fr_table[i].name, str) == 0) mgl@1371: + return fr_table[i].number; mgl@1371: + } mgl@1371: + mgl@1371: + return -1; mgl@1371: +} mgl@1371: + mgl@1371: +int avr32_parse_picoreg(const char *str) mgl@1371: +{ mgl@1371: + unsigned int i; mgl@1371: + mgl@1371: + for (i = 0; i < AVR32_NR_PICOREGS; i++) mgl@1371: + { mgl@1371: + if (strcasecmp(pico_table[i].name, str) == 0) mgl@1371: + return pico_table[i].number; mgl@1371: + } mgl@1371: + mgl@1371: + return -1; mgl@1371: +} mgl@1371: + mgl@1371: +static unsigned long mgl@1371: +parse_reglist(char *str, char **endptr, int (*parse_reg)(const char *)) mgl@1371: +{ mgl@1371: + int reg_from, reg_to; mgl@1371: + unsigned long result = 0; mgl@1371: + char *p1, *p2, c; mgl@1371: + mgl@1371: + while (*str) mgl@1371: + { mgl@1371: + for (p1 = str; *p1; p1++) mgl@1371: + if (*p1 == ',' || *p1 == '-') mgl@1371: + break; mgl@1371: + mgl@1371: + c = *p1, *p1 = 0; mgl@1371: + reg_from = parse_reg(str); mgl@1371: + *p1 = c; mgl@1371: + mgl@1371: + if (reg_from < 0) mgl@1371: + break; mgl@1371: + mgl@1371: + if (*p1 == '-') mgl@1371: + { mgl@1371: + for (p2 = ++p1; *p2; p2++) mgl@1371: + if (*p2 == ',') mgl@1371: + break; mgl@1371: + mgl@1371: + c = *p2, *p2 = 0; mgl@1371: + /* printf("going to parse reg_to from `%s'\n", p1); */ mgl@1371: + reg_to = parse_reg(p1); mgl@1371: + *p2 = c; mgl@1371: + mgl@1371: + if (reg_to < 0) mgl@1371: + break; mgl@1371: + mgl@1371: + while (reg_from <= reg_to) mgl@1371: + result |= (1 << reg_from++); mgl@1371: + p1 = p2; mgl@1371: + } mgl@1371: + else mgl@1371: + result |= (1 << reg_from); mgl@1371: + mgl@1371: + str = p1; mgl@1371: + if (*str) ++str; mgl@1371: + } mgl@1371: + mgl@1371: + if (endptr) mgl@1371: + *endptr = str; mgl@1371: + mgl@1371: + return result; mgl@1371: +} mgl@1371: + mgl@1371: +unsigned long mgl@1371: +avr32_parse_reglist(char *str, char **endptr) mgl@1371: +{ mgl@1371: + return parse_reglist(str, endptr, avr32_parse_intreg); mgl@1371: +} mgl@1371: + mgl@1371: +unsigned long mgl@1371: +avr32_parse_cpreglist(char *str, char **endptr) mgl@1371: +{ mgl@1371: + return parse_reglist(str, endptr, avr32_parse_cpreg); mgl@1371: +} mgl@1371: + mgl@1371: +unsigned long mgl@1371: +avr32_parse_pico_reglist(char *str, char **endptr) mgl@1371: +{ mgl@1371: + return parse_reglist(str, endptr, avr32_parse_picoreg); mgl@1371: +} mgl@1371: + mgl@1371: +int mgl@1371: +avr32_make_regmask8(unsigned long regmask16, unsigned long *regmask8) mgl@1371: +{ mgl@1371: + unsigned long result = 0; mgl@1371: + mgl@1371: + /* printf("convert regmask16 0x%04lx\n", regmask16); */ mgl@1371: + mgl@1371: + if (regmask16 & 0xf) mgl@1371: + { mgl@1371: + if ((regmask16 & 0xf) == 0xf) mgl@1371: + result |= 1 << 0; mgl@1371: + else mgl@1371: + return -1; mgl@1371: + } mgl@1371: + if (regmask16 & 0xf0) mgl@1371: + { mgl@1371: + if ((regmask16 & 0xf0) == 0xf0) mgl@1371: + result |= 1 << 1; mgl@1371: + else mgl@1371: + return -1; mgl@1371: + } mgl@1371: + if (regmask16 & 0x300) mgl@1371: + { mgl@1371: + if ((regmask16 & 0x300) == 0x300) mgl@1371: + result |= 1 << 2; mgl@1371: + else mgl@1371: + return -1; mgl@1371: + } mgl@1371: + if (regmask16 & (1 << 13)) mgl@1371: + return -1; mgl@1371: + mgl@1371: + if (regmask16 & (1 << 10)) mgl@1371: + result |= 1 << 3; mgl@1371: + if (regmask16 & (1 << 11)) mgl@1371: + result |= 1 << 4; mgl@1371: + if (regmask16 & (1 << 12)) mgl@1371: + result |= 1 << 5; mgl@1371: + if (regmask16 & (1 << 14)) mgl@1371: + result |= 1 << 6; mgl@1371: + if (regmask16 & (1 << 15)) mgl@1371: + result |= 1 << 7; mgl@1371: + mgl@1371: + *regmask8 = result; mgl@1371: + mgl@1371: + return 0; mgl@1371: +} mgl@1371: + mgl@1371: +#if 0 mgl@1371: +struct reg_map mgl@1371: +{ mgl@1371: + const struct reg_entry *names; mgl@1371: + int nr_regs; mgl@1371: + struct hash_control *htab; mgl@1371: + const char *errmsg; mgl@1371: +}; mgl@1371: + mgl@1371: +struct reg_map all_reg_maps[] = mgl@1371: + { mgl@1371: + { reg_table, AVR32_NR_INTREGS, NULL, N_("integral register expected") }, mgl@1371: + { cr_table, AVR32_NR_CPREGS, NULL, N_("coprocessor register expected") }, mgl@1371: + }; mgl@1371: +#endif mgl@1371: --- /dev/null mgl@1371: +++ b/opcodes/avr32-asm.h mgl@1371: @@ -0,0 +1,42 @@ mgl@1371: +/* Assembler interface for AVR32. mgl@1371: + Copyright 2005, 2006 Atmel Corporation. mgl@1371: + mgl@1371: + Written by Haavard Skinnemoen, Atmel Norway, mgl@1371: + mgl@1371: + This file is part of libopcodes. mgl@1371: + mgl@1371: + This program is free software; you can redistribute it and/or mgl@1371: + modify it under the terms of the GNU General Public License as mgl@1371: + published by the Free Software Foundation; either version 2 of the mgl@1371: + License, or (at your option) any later version. mgl@1371: + mgl@1371: + This program is distributed in the hope that it will be useful, but mgl@1371: + WITHOUT ANY WARRANTY; without even the implied warranty of mgl@1371: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU mgl@1371: + General Public License for more details. mgl@1371: + mgl@1371: + You should have received a copy of the GNU General Public License mgl@1371: + along with this program; if not, write to the Free Software mgl@1371: + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA mgl@1371: + 02111-1307, USA. */ mgl@1371: +#ifndef __OPCODES_AVR32_ASM_H mgl@1371: +#define __OPCODES_AVR32_ASM_H mgl@1371: + mgl@1371: +extern int mgl@1371: +avr32_parse_intreg(const char *str); mgl@1371: +extern int mgl@1371: +avr32_parse_cpreg(const char *str); mgl@1371: +extern int mgl@1371: +avr32_parse_fpreg(const char *str); mgl@1371: +extern int mgl@1371: +avr32_parse_picoreg(const char *str); mgl@1371: +extern unsigned long mgl@1371: +avr32_parse_reglist(char *str, char **endptr); mgl@1371: +extern unsigned long mgl@1371: +avr32_parse_cpreglist(char *str, char **endptr); mgl@1371: +extern unsigned long mgl@1371: +avr32_parse_pico_reglist(char *str, char **endptr); mgl@1371: +extern int mgl@1371: +avr32_make_regmask8(unsigned long regmask16, unsigned long *regmask8); mgl@1371: + mgl@1371: +#endif /* __OPCODES_AVR32_ASM_H */ mgl@1371: --- /dev/null mgl@1371: +++ b/opcodes/avr32-dis.c mgl@1371: @@ -0,0 +1,891 @@ mgl@1371: +/* Print AVR32 instructions for GDB and objdump. mgl@1371: + Copyright 2005, 2006 Atmel Corporation. mgl@1371: + mgl@1371: + Written by Haavard Skinnemoen, Atmel Norway, mgl@1371: + mgl@1371: + This file is part of libopcodes. mgl@1371: + mgl@1371: + This program is free software; you can redistribute it and/or mgl@1371: + modify it under the terms of the GNU General Public License as mgl@1371: + published by the Free Software Foundation; either version 2 of the mgl@1371: + License, or (at your option) any later version. mgl@1371: + mgl@1371: + This program is distributed in the hope that it will be useful, but mgl@1371: + WITHOUT ANY WARRANTY; without even the implied warranty of mgl@1371: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU mgl@1371: + General Public License for more details. mgl@1371: + mgl@1371: + You should have received a copy of the GNU General Public License mgl@1371: + along with this program; if not, write to the Free Software mgl@1371: + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA mgl@1371: + 02111-1307, USA. */ mgl@1371: + mgl@1371: +#include "sysdep.h" mgl@1371: +#include "dis-asm.h" mgl@1371: +#include "avr32-opc.h" mgl@1371: +#include "opintl.h" mgl@1371: +#include "safe-ctype.h" mgl@1371: + mgl@1371: +/* TODO: Share this with -asm */ mgl@1371: + mgl@1371: +/* Structure for a register hash table entry. */ mgl@1371: +struct reg_entry mgl@1371: +{ mgl@1371: + const char *name; mgl@1371: + int number; mgl@1371: +}; mgl@1371: + mgl@1371: +#ifndef strneq mgl@1371: +#define strneq(a,b,n) (strncmp ((a), (b), (n)) == 0) mgl@1371: +#endif mgl@1371: + mgl@1371: + mgl@1371: +static const struct reg_entry reg_table[] = mgl@1371: + { mgl@1371: + /* Primary names (used by the disassembler) */ mgl@1371: + { "r0", 0 }, { "r1", 1 }, { "r2", 2 }, { "r3", 3 }, mgl@1371: + { "r4", 4 }, { "r5", 5 }, { "r6", 6 }, { "r7", 7 }, mgl@1371: + { "r8", 8 }, { "r9", 9 }, { "r10", 10 }, { "r11", 11 }, mgl@1371: + { "r12", 12 }, { "sp", 13 }, { "lr", 14 }, { "pc", 15 }, mgl@1371: + /* Alternatives to sp, lr and pc. */ mgl@1371: + { "r13", 13 }, { "r14", 14 }, { "r15", 15 }, mgl@1371: + }; mgl@1371: +#define AVR32_NR_INTREGS (sizeof(reg_table)/sizeof(reg_table[0])) mgl@1371: + mgl@1371: +/* Coprocessor Registers. */ mgl@1371: +static const struct reg_entry cr_table[] = mgl@1371: + { mgl@1371: + { "cr0", 0 }, { "cr1", 1 }, { "cr2", 2 }, { "cr3", 3 }, mgl@1371: + { "cr4", 4 }, { "cr5", 5 }, { "cr6", 6 }, { "cr7", 7 }, mgl@1371: + { "cr8", 8 }, { "cr9", 9 }, { "cr10", 10 }, { "cr11", 11 }, mgl@1371: + { "cr12", 12 }, { "cr13", 13 }, { "cr14", 14 }, { "cr15", 15 }, mgl@1371: + }; mgl@1371: +#define AVR32_NR_CPREGS (sizeof(cr_table)/sizeof(cr_table[0])) mgl@1371: + mgl@1371: +static const char bparts[4] = { 'b', 'l', 'u', 't' }; mgl@1371: +static bfd_vma current_pc; mgl@1371: + mgl@1371: +struct avr32_field_value mgl@1371: +{ mgl@1371: + const struct avr32_ifield *ifield; mgl@1371: + unsigned long value; mgl@1371: +}; mgl@1371: + mgl@1371: +struct avr32_operand mgl@1371: +{ mgl@1371: + int id; mgl@1371: + int is_pcrel; mgl@1371: + int align_order; mgl@1371: + int (*print)(struct avr32_operand *op, struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields); mgl@1371: +}; mgl@1371: + mgl@1371: +static signed long mgl@1371: +get_signed_value(const struct avr32_field_value *fv) mgl@1371: +{ mgl@1371: + signed long value = fv->value; mgl@1371: + mgl@1371: + if (fv->value & (1 << (fv->ifield->bitsize - 1))) mgl@1371: + value |= (~0UL << fv->ifield->bitsize); mgl@1371: + mgl@1371: + return value; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +print_reglist_range(unsigned int first, unsigned int last, mgl@1371: + const struct reg_entry *reg_names, mgl@1371: + int need_comma, mgl@1371: + struct disassemble_info *info) mgl@1371: +{ mgl@1371: + if (need_comma) mgl@1371: + info->fprintf_func(info->stream, ","); mgl@1371: + mgl@1371: + if (first == last) mgl@1371: + info->fprintf_func(info->stream, "%s", mgl@1371: + reg_names[first].name); mgl@1371: + else mgl@1371: + info->fprintf_func(info->stream, "%s-%s", mgl@1371: + reg_names[first].name, reg_names[last].name); mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_intreg(struct avr32_operand *op, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + unsigned long regid = ifields[0].value << op->align_order; mgl@1371: + mgl@1371: + info->fprintf_func(info->stream, "%s", mgl@1371: + reg_table[regid].name); mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_intreg_predec(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + info->fprintf_func(info->stream, "--%s", mgl@1371: + reg_table[ifields[0].value].name); mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_intreg_postinc(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + info->fprintf_func(info->stream, "%s++", mgl@1371: + reg_table[ifields[0].value].name); mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_intreg_lsl(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + const char *rp = reg_table[ifields[0].value].name; mgl@1371: + unsigned long sa = ifields[1].value; mgl@1371: + mgl@1371: + if (sa) mgl@1371: + info->fprintf_func(info->stream, "%s<<0x%lx", rp, sa); mgl@1371: + else mgl@1371: + info->fprintf_func(info->stream, "%s", rp); mgl@1371: + mgl@1371: + return 2; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_intreg_lsr(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + const char *rp = reg_table[ifields[0].value].name; mgl@1371: + unsigned long sa = ifields[1].value; mgl@1371: + mgl@1371: + if (sa) mgl@1371: + info->fprintf_func(info->stream, "%s>>0x%lx", rp, sa); mgl@1371: + else mgl@1371: + info->fprintf_func(info->stream, "%s", rp); mgl@1371: + mgl@1371: + return 2; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_intreg_bpart(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + info->fprintf_func(info->stream, "%s:%c", mgl@1371: + reg_table[ifields[0].value].name, mgl@1371: + bparts[ifields[1].value]); mgl@1371: + return 2; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_intreg_hpart(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + info->fprintf_func(info->stream, "%s:%c", mgl@1371: + reg_table[ifields[0].value].name, mgl@1371: + ifields[1].value ? 't' : 'b'); mgl@1371: + return 2; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_intreg_sdisp(struct avr32_operand *op, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + signed long disp; mgl@1371: + mgl@1371: + disp = get_signed_value(&ifields[1]) << op->align_order; mgl@1371: + mgl@1371: + info->fprintf_func(info->stream, "%s[%ld]", mgl@1371: + reg_table[ifields[0].value].name, disp); mgl@1371: + return 2; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_intreg_udisp(struct avr32_operand *op, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + info->fprintf_func(info->stream, "%s[0x%lx]", mgl@1371: + reg_table[ifields[0].value].name, mgl@1371: + ifields[1].value << op->align_order); mgl@1371: + return 2; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_intreg_index(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + const char *rb, *ri; mgl@1371: + unsigned long sa = ifields[2].value; mgl@1371: + mgl@1371: + rb = reg_table[ifields[0].value].name; mgl@1371: + ri = reg_table[ifields[1].value].name; mgl@1371: + mgl@1371: + if (sa) mgl@1371: + info->fprintf_func(info->stream, "%s[%s<<0x%lx]", rb, ri, sa); mgl@1371: + else mgl@1371: + info->fprintf_func(info->stream, "%s[%s]", rb, ri); mgl@1371: + mgl@1371: + return 3; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_intreg_xindex(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + info->fprintf_func(info->stream, "%s[%s:%c<<2]", mgl@1371: + reg_table[ifields[0].value].name, mgl@1371: + reg_table[ifields[1].value].name, mgl@1371: + bparts[ifields[2].value]); mgl@1371: + return 3; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_jmplabel(struct avr32_operand *op, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + bfd_vma address, offset; mgl@1371: + mgl@1371: + offset = get_signed_value(ifields) << op->align_order; mgl@1371: + address = (current_pc & (~0UL << op->align_order)) + offset; mgl@1371: + mgl@1371: + info->print_address_func(address, info); mgl@1371: + mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_pc_disp(struct avr32_operand *op, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + bfd_vma address, offset; mgl@1371: + mgl@1371: + offset = ifields[0].value << op->align_order; mgl@1371: + address = (current_pc & (~0UL << op->align_order)) + offset; mgl@1371: + mgl@1371: + info->print_address_func(address, info); mgl@1371: + mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_sp(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + info->fprintf_func(info->stream, "sp"); mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_sp_disp(struct avr32_operand *op, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + info->fprintf_func(info->stream, "sp[0x%lx]", mgl@1371: + ifields[0].value << op->align_order); mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_cpno(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + info->fprintf_func(info->stream, "cp%lu", ifields[0].value); mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_cpreg(struct avr32_operand *op, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + info->fprintf_func(info->stream, "cr%lu", mgl@1371: + ifields[0].value << op->align_order); mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_uconst(struct avr32_operand *op, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + info->fprintf_func(info->stream, "0x%lx", mgl@1371: + ifields[0].value << op->align_order); mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_sconst(struct avr32_operand *op, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + info->fprintf_func(info->stream, "%ld", mgl@1371: + get_signed_value(ifields) << op->align_order); mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_reglist8_head(unsigned long regmask, int *commap, mgl@1371: + struct disassemble_info *info) mgl@1371: +{ mgl@1371: + int first = -1, last, i = 0; mgl@1371: + int need_comma = 0; mgl@1371: + mgl@1371: + while (i < 12) mgl@1371: + { mgl@1371: + if (first == -1 && (regmask & 1)) mgl@1371: + { mgl@1371: + first = i; mgl@1371: + } mgl@1371: + else if (first != -1 && !(regmask & 1)) mgl@1371: + { mgl@1371: + last = i - 1; mgl@1371: + mgl@1371: + print_reglist_range(first, last, reg_table, need_comma, info); mgl@1371: + need_comma = 1; mgl@1371: + first = -1; mgl@1371: + } mgl@1371: + mgl@1371: + if (i < 8) mgl@1371: + i += 4; mgl@1371: + else if (i < 10) mgl@1371: + i += 2; mgl@1371: + else mgl@1371: + i++; mgl@1371: + regmask >>= 1; mgl@1371: + } mgl@1371: + mgl@1371: + *commap = need_comma; mgl@1371: + return first; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +print_reglist8_tail(unsigned long regmask, int first, int need_comma, mgl@1371: + struct disassemble_info *info) mgl@1371: +{ mgl@1371: + int last = 11; mgl@1371: + mgl@1371: + if (regmask & 0x20) mgl@1371: + { mgl@1371: + if (first == -1) mgl@1371: + first = 12; mgl@1371: + last = 12; mgl@1371: + } mgl@1371: + mgl@1371: + if (first != -1) mgl@1371: + { mgl@1371: + print_reglist_range(first, last, reg_table, need_comma, info); mgl@1371: + need_comma = 1; mgl@1371: + first = -1; mgl@1371: + } mgl@1371: + mgl@1371: + if (regmask & 0x40) mgl@1371: + { mgl@1371: + if (first == -1) mgl@1371: + first = 14; mgl@1371: + last = 14; mgl@1371: + } mgl@1371: + mgl@1371: + if (regmask & 0x80) mgl@1371: + { mgl@1371: + if (first == -1) mgl@1371: + first = 15; mgl@1371: + last = 15; mgl@1371: + } mgl@1371: + mgl@1371: + if (first != -1) mgl@1371: + print_reglist_range(first, last, reg_table, need_comma, info); mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_reglist8(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + unsigned long regmask = ifields[0].value; mgl@1371: + int first, need_comma; mgl@1371: + mgl@1371: + first = print_reglist8_head(regmask, &need_comma, info); mgl@1371: + print_reglist8_tail(regmask, first, need_comma, info); mgl@1371: + mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_reglist9(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + unsigned long regmask = ifields[0].value >> 1; mgl@1371: + int first, last, need_comma; mgl@1371: + mgl@1371: + first = print_reglist8_head(regmask, &need_comma, info); mgl@1371: + mgl@1371: + if ((ifields[0].value & 0x101) == 0x101) mgl@1371: + { mgl@1371: + if (first != -1) mgl@1371: + { mgl@1371: + last = 11; mgl@1371: + mgl@1371: + print_reglist_range(first, last, reg_table, need_comma, info); mgl@1371: + need_comma = 1; mgl@1371: + first = -1; mgl@1371: + } mgl@1371: + mgl@1371: + print_reglist_range(15, 15, reg_table, need_comma, info); mgl@1371: + mgl@1371: + regmask >>= 5; mgl@1371: + mgl@1371: + if ((regmask & 3) == 0) mgl@1371: + info->fprintf_func(info->stream, ",r12=0"); mgl@1371: + else if ((regmask & 3) == 1) mgl@1371: + info->fprintf_func(info->stream, ",r12=1"); mgl@1371: + else mgl@1371: + info->fprintf_func(info->stream, ",r12=-1"); mgl@1371: + } mgl@1371: + else mgl@1371: + print_reglist8_tail(regmask, first, need_comma, info); mgl@1371: + mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_reglist16(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + unsigned long regmask = ifields[0].value; mgl@1371: + unsigned int i = 0, first, last; mgl@1371: + int need_comma = 0; mgl@1371: + mgl@1371: + while (i < 16) mgl@1371: + { mgl@1371: + if (regmask & 1) mgl@1371: + { mgl@1371: + first = i; mgl@1371: + while (i < 16) mgl@1371: + { mgl@1371: + i++; mgl@1371: + regmask >>= 1; mgl@1371: + if (!(regmask & 1)) mgl@1371: + break; mgl@1371: + } mgl@1371: + last = i - 1; mgl@1371: + print_reglist_range(first, last, reg_table, need_comma, info); mgl@1371: + need_comma = 1; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + i++; mgl@1371: + regmask >>= 1; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_reglist_ldm(struct avr32_operand *op, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + int rp, w_bit; mgl@1371: + int i, first, last; mgl@1371: + unsigned long regmask; mgl@1371: + mgl@1371: + rp = ifields[0].value; mgl@1371: + w_bit = ifields[1].value; mgl@1371: + regmask = ifields[2].value; mgl@1371: + mgl@1371: + if (regmask & (1 << AVR32_REG_PC) && rp == AVR32_REG_PC) mgl@1371: + { mgl@1371: + if (w_bit) mgl@1371: + info->fprintf_func(info->stream, "sp++"); mgl@1371: + else mgl@1371: + info->fprintf_func(info->stream, "sp"); mgl@1371: + mgl@1371: + for (i = 0; i < 12; ) mgl@1371: + { mgl@1371: + if (regmask & (1 << i)) mgl@1371: + { mgl@1371: + first = i; mgl@1371: + while (i < 12) mgl@1371: + { mgl@1371: + i++; mgl@1371: + if (!(regmask & (1 << i))) mgl@1371: + break; mgl@1371: + } mgl@1371: + last = i - 1; mgl@1371: + print_reglist_range(first, last, reg_table, 1, info); mgl@1371: + } mgl@1371: + else mgl@1371: + i++; mgl@1371: + } mgl@1371: + mgl@1371: + info->fprintf_func(info->stream, ",pc"); mgl@1371: + if (regmask & (1 << AVR32_REG_LR)) mgl@1371: + info->fprintf_func(info->stream, ",r12=-1"); mgl@1371: + else if (regmask & (1 << AVR32_REG_R12)) mgl@1371: + info->fprintf_func(info->stream, ",r12=1"); mgl@1371: + else mgl@1371: + info->fprintf_func(info->stream, ",r12=0"); mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + if (w_bit) mgl@1371: + info->fprintf_func(info->stream, "%s++,", reg_table[rp].name); mgl@1371: + else mgl@1371: + info->fprintf_func(info->stream, "%s,", reg_table[rp].name); mgl@1371: + mgl@1371: + print_reglist16(op, info, ifields + 2); mgl@1371: + } mgl@1371: + mgl@1371: + return 3; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_reglist_cp8(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + unsigned long regmask = ifields[0].value; mgl@1371: + unsigned int i = 0, first, last, offset = 0; mgl@1371: + int need_comma = 0; mgl@1371: + mgl@1371: + if (ifields[1].value) mgl@1371: + offset = 8; mgl@1371: + mgl@1371: + while (i < 8) mgl@1371: + { mgl@1371: + if (regmask & 1) mgl@1371: + { mgl@1371: + first = i; mgl@1371: + while (i < 8) mgl@1371: + { mgl@1371: + i++; mgl@1371: + regmask >>= 1; mgl@1371: + if (!(regmask & 1)) mgl@1371: + break; mgl@1371: + } mgl@1371: + last = i - 1; mgl@1371: + print_reglist_range(offset + first, offset + last, mgl@1371: + cr_table, need_comma, info); mgl@1371: + need_comma = 1; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + i++; mgl@1371: + regmask >>= 1; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + return 2; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_reglist_cpd8(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + unsigned long regmask = ifields[0].value; mgl@1371: + unsigned int i = 0, first, last; mgl@1371: + int need_comma = 0; mgl@1371: + mgl@1371: + while (i < 8) mgl@1371: + { mgl@1371: + if (regmask & 1) mgl@1371: + { mgl@1371: + first = 2 * i; mgl@1371: + while (i < 8) mgl@1371: + { mgl@1371: + i++; mgl@1371: + regmask >>= 1; mgl@1371: + if (!(regmask & 1)) mgl@1371: + break; mgl@1371: + } mgl@1371: + last = 2 * (i - 1) + 1; mgl@1371: + print_reglist_range(first, last, cr_table, need_comma, info); mgl@1371: + need_comma = 1; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + i++; mgl@1371: + regmask >>= 1; mgl@1371: + } mgl@1371: + } mgl@1371: + mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_retval(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + unsigned long regid = ifields[0].value; mgl@1371: + const char *retval; mgl@1371: + mgl@1371: + if (regid < AVR32_REG_SP) mgl@1371: + retval = reg_table[regid].name; mgl@1371: + else if (regid == AVR32_REG_SP) mgl@1371: + retval = "0"; mgl@1371: + else if (regid == AVR32_REG_LR) mgl@1371: + retval = "-1"; mgl@1371: + else mgl@1371: + retval = "1"; mgl@1371: + mgl@1371: + info->fprintf_func(info->stream, "%s", retval); mgl@1371: + mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_mcall(struct avr32_operand *op, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + unsigned long regid = ifields[0].value; mgl@1371: + mgl@1371: + if (regid == AVR32_REG_PC) mgl@1371: + print_jmplabel(op, info, ifields + 1); mgl@1371: + else mgl@1371: + print_intreg_sdisp(op, info, ifields); mgl@1371: + mgl@1371: + return 2; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_jospinc(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields) mgl@1371: +{ mgl@1371: + signed long value = ifields[0].value; mgl@1371: + mgl@1371: + if (value >= 4) mgl@1371: + value -= 8; mgl@1371: + else mgl@1371: + value += 1; mgl@1371: + mgl@1371: + info->fprintf_func(info->stream, "%ld", value); mgl@1371: + mgl@1371: + return 1; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +print_coh(struct avr32_operand *op ATTRIBUTE_UNUSED, mgl@1371: + struct disassemble_info *info, mgl@1371: + struct avr32_field_value *ifields ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + info->fprintf_func(info->stream, "COH"); mgl@1371: + return 0; mgl@1371: +} mgl@1371: + mgl@1371: +#define OP(name, sgn, pcrel, align, func) \ mgl@1371: + { AVR32_OPERAND_##name, pcrel, align, print_##func } mgl@1371: + mgl@1371: +struct avr32_operand operand[AVR32_NR_OPERANDS] = mgl@1371: + { mgl@1371: + OP(INTREG, 0, 0, 0, intreg), mgl@1371: + OP(INTREG_PREDEC, 0, 0, 0, intreg_predec), mgl@1371: + OP(INTREG_POSTINC, 0, 0, 0, intreg_postinc), mgl@1371: + OP(INTREG_LSL, 0, 0, 0, intreg_lsl), mgl@1371: + OP(INTREG_LSR, 0, 0, 0, intreg_lsr), mgl@1371: + OP(INTREG_BSEL, 0, 0, 0, intreg_bpart), mgl@1371: + OP(INTREG_HSEL, 0, 0, 1, intreg_hpart), mgl@1371: + OP(INTREG_SDISP, 1, 0, 0, intreg_sdisp), mgl@1371: + OP(INTREG_SDISP_H, 1, 0, 1, intreg_sdisp), mgl@1371: + OP(INTREG_SDISP_W, 1, 0, 2, intreg_sdisp), mgl@1371: + OP(INTREG_UDISP, 0, 0, 0, intreg_udisp), mgl@1371: + OP(INTREG_UDISP_H, 0, 0, 1, intreg_udisp), mgl@1371: + OP(INTREG_UDISP_W, 0, 0, 2, intreg_udisp), mgl@1371: + OP(INTREG_INDEX, 0, 0, 0, intreg_index), mgl@1371: + OP(INTREG_XINDEX, 0, 0, 0, intreg_xindex), mgl@1371: + OP(DWREG, 0, 0, 1, intreg), mgl@1371: + OP(PC_UDISP_W, 0, 1, 2, pc_disp), mgl@1371: + OP(SP, 0, 0, 0, sp), mgl@1371: + OP(SP_UDISP_W, 0, 0, 2, sp_disp), mgl@1371: + OP(CPNO, 0, 0, 0, cpno), mgl@1371: + OP(CPREG, 0, 0, 0, cpreg), mgl@1371: + OP(CPREG_D, 0, 0, 1, cpreg), mgl@1371: + OP(UNSIGNED_CONST, 0, 0, 0, uconst), mgl@1371: + OP(UNSIGNED_CONST_W, 0, 0, 2, uconst), mgl@1371: + OP(SIGNED_CONST, 1, 0, 0, sconst), mgl@1371: + OP(SIGNED_CONST_W, 1, 0, 2, sconst), mgl@1371: + OP(JMPLABEL, 1, 1, 1, jmplabel), mgl@1371: + OP(UNSIGNED_NUMBER, 0, 0, 0, uconst), mgl@1371: + OP(UNSIGNED_NUMBER_W, 0, 0, 2, uconst), mgl@1371: + OP(REGLIST8, 0, 0, 0, reglist8), mgl@1371: + OP(REGLIST9, 0, 0, 0, reglist9), mgl@1371: + OP(REGLIST16, 0, 0, 0, reglist16), mgl@1371: + OP(REGLIST_LDM, 0, 0, 0, reglist_ldm), mgl@1371: + OP(REGLIST_CP8, 0, 0, 0, reglist_cp8), mgl@1371: + OP(REGLIST_CPD8, 0, 0, 0, reglist_cpd8), mgl@1371: + OP(RETVAL, 0, 0, 0, retval), mgl@1371: + OP(MCALL, 1, 0, 2, mcall), mgl@1371: + OP(JOSPINC, 0, 0, 0, jospinc), mgl@1371: + OP(COH, 0, 0, 0, coh), mgl@1371: + }; mgl@1371: + mgl@1371: +static void mgl@1371: +print_opcode(bfd_vma insn_word, const struct avr32_opcode *opc, mgl@1371: + bfd_vma pc, struct disassemble_info *info) mgl@1371: +{ mgl@1371: + const struct avr32_syntax *syntax = opc->syntax; mgl@1371: + struct avr32_field_value fields[AVR32_MAX_FIELDS]; mgl@1371: + unsigned int i, next_field = 0, nr_operands; mgl@1371: + mgl@1371: + for (i = 0; i < opc->nr_fields; i++) mgl@1371: + { mgl@1371: + opc->fields[i]->extract(opc->fields[i], &insn_word, &fields[i].value); mgl@1371: + fields[i].ifield = opc->fields[i]; mgl@1371: + } mgl@1371: + mgl@1371: + current_pc = pc; mgl@1371: + info->fprintf_func(info->stream, "%s", syntax->mnemonic->name); mgl@1371: + mgl@1371: + if (syntax->nr_operands < 0) mgl@1371: + nr_operands = (unsigned int) -syntax->nr_operands; mgl@1371: + else mgl@1371: + nr_operands = (unsigned int) syntax->nr_operands; mgl@1371: + mgl@1371: + for (i = 0; i < nr_operands; i++) mgl@1371: + { mgl@1371: + struct avr32_operand *op = &operand[syntax->operand[i]]; mgl@1371: + mgl@1371: + if (i) mgl@1371: + info->fprintf_func(info->stream, ","); mgl@1371: + else mgl@1371: + info->fprintf_func(info->stream, "\t"); mgl@1371: + next_field += op->print(op, info, &fields[next_field]); mgl@1371: + } mgl@1371: +} mgl@1371: + mgl@1371: +static const struct avr32_opcode * mgl@1371: +find_opcode(bfd_vma insn_word) mgl@1371: +{ mgl@1371: + int i; mgl@1371: + mgl@1371: + for (i = 0; i < AVR32_NR_OPCODES; i++) mgl@1371: + { mgl@1371: + const struct avr32_opcode *opc = &avr32_opc_table[i]; mgl@1371: + mgl@1371: + if ((insn_word & opc->mask) == opc->value) mgl@1371: + return opc; mgl@1371: + } mgl@1371: + mgl@1371: + return NULL; mgl@1371: +} mgl@1371: + mgl@1371: +static int mgl@1371: +read_insn_word(bfd_vma pc, bfd_vma *valuep, mgl@1371: + struct disassemble_info *info) mgl@1371: +{ mgl@1371: + bfd_byte b[4]; mgl@1371: + int status; mgl@1371: + mgl@1371: + status = info->read_memory_func(pc, b, 4, info); mgl@1371: + if (status) mgl@1371: + { mgl@1371: + status = info->read_memory_func(pc, b, 2, info); mgl@1371: + if (status) mgl@1371: + { mgl@1371: + info->memory_error_func(status, pc, info); mgl@1371: + return -1; mgl@1371: + } mgl@1371: + b[3] = b[2] = 0; mgl@1371: + } mgl@1371: + mgl@1371: + *valuep = (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3]; mgl@1371: + return 0; mgl@1371: +} mgl@1371: + mgl@1371: +/* Parse an individual disassembler option. */ mgl@1371: + mgl@1371: +void mgl@1371: +parse_avr32_disassembler_option (option) mgl@1371: + char * option; mgl@1371: +{ mgl@1371: + if (option == NULL) mgl@1371: + return; mgl@1371: + mgl@1371: + /* XXX - should break 'option' at following delimiter. */ mgl@1371: + fprintf (stderr, _("Unrecognised disassembler option: %s\n"), option); mgl@1371: + mgl@1371: + return; mgl@1371: +} mgl@1371: + mgl@1371: +/* Parse the string of disassembler options, spliting it at whitespaces mgl@1371: + or commas. (Whitespace separators supported for backwards compatibility). */ mgl@1371: + mgl@1371: +static void mgl@1371: +parse_disassembler_options (char *options) mgl@1371: +{ mgl@1371: + if (options == NULL) mgl@1371: + return; mgl@1371: + mgl@1371: + while (*options) mgl@1371: + { mgl@1371: + parse_avr32_disassembler_option (options); mgl@1371: + mgl@1371: + /* Skip forward to next seperator. */ mgl@1371: + while ((*options) && (! ISSPACE (*options)) && (*options != ',')) mgl@1371: + ++ options; mgl@1371: + /* Skip forward past seperators. */ mgl@1371: + while (ISSPACE (*options) || (*options == ',')) mgl@1371: + ++ options; mgl@1371: + } mgl@1371: +} mgl@1371: + mgl@1371: +int mgl@1371: +print_insn_avr32(bfd_vma pc, struct disassemble_info *info) mgl@1371: +{ mgl@1371: + bfd_vma insn_word; mgl@1371: + const struct avr32_opcode *opc; mgl@1371: + mgl@1371: + if (info->disassembler_options) mgl@1371: + { mgl@1371: + parse_disassembler_options (info->disassembler_options); mgl@1371: + mgl@1371: + /* To avoid repeated parsing of these options, we remove them here. */ mgl@1371: + info->disassembler_options = NULL; mgl@1371: + } mgl@1371: + mgl@1371: + info->bytes_per_chunk = 1; mgl@1371: + info->display_endian = BFD_ENDIAN_BIG; mgl@1371: + mgl@1371: + if (read_insn_word(pc, &insn_word, info)) mgl@1371: + return -1; mgl@1371: + mgl@1371: + opc = find_opcode(insn_word); mgl@1371: + if (opc) mgl@1371: + { mgl@1371: + print_opcode(insn_word, opc, pc, info); mgl@1371: + return opc->size; mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + info->fprintf_func(info->stream, _("*unknown*")); mgl@1371: + return 2; mgl@1371: + } mgl@1371: + mgl@1371: +} mgl@1371: + mgl@1371: +void mgl@1371: +print_avr32_disassembler_options (FILE *stream ATTRIBUTE_UNUSED) mgl@1371: +{ mgl@1371: + mgl@1371: +} mgl@1371: --- /dev/null mgl@1371: +++ b/opcodes/avr32-opc.c mgl@1371: @@ -0,0 +1,6932 @@ mgl@1371: +/* Opcode tables for AVR32. mgl@1371: + Copyright 2005, 2006 Atmel Corporation. mgl@1371: + mgl@1371: + Written by Haavard Skinnemoen, Atmel Norway, mgl@1371: + mgl@1371: + This file is part of libopcodes. mgl@1371: + mgl@1371: + This program is free software; you can redistribute it and/or mgl@1371: + modify it under the terms of the GNU General Public License as mgl@1371: + published by the Free Software Foundation; either version 2 of the mgl@1371: + License, or (at your option) any later version. mgl@1371: + mgl@1371: + This program is distributed in the hope that it will be useful, but mgl@1371: + WITHOUT ANY WARRANTY; without even the implied warranty of mgl@1371: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU mgl@1371: + General Public License for more details. mgl@1371: + mgl@1371: + You should have received a copy of the GNU General Public License mgl@1371: + along with this program; if not, write to the Free Software mgl@1371: + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA mgl@1371: + 02111-1307, USA. */ mgl@1371: + mgl@1371: +#include mgl@1371: +#include mgl@1371: + mgl@1371: +#include "avr32-opc.h" mgl@1371: + mgl@1371: +#define PICO_CPNO 1 mgl@1371: + mgl@1371: +void mgl@1371: +avr32_insert_simple(const struct avr32_ifield *field, mgl@1371: + void *buf, unsigned long value) mgl@1371: +{ mgl@1371: + bfd_vma word; mgl@1371: + mgl@1371: + word = bfd_getb32(buf); mgl@1371: + word &= ~field->mask; mgl@1371: + word |= (value << field->shift) & field->mask; mgl@1371: + bfd_putb32(word, buf); mgl@1371: +} mgl@1371: + mgl@1371: +void mgl@1371: +avr32_insert_bit5c(const struct avr32_ifield *field ATTRIBUTE_UNUSED, mgl@1371: + void *buf, unsigned long value) mgl@1371: +{ mgl@1371: + char *opcode = buf; mgl@1371: + mgl@1371: + opcode[0] = (opcode[0] & 0xe1) | (value & 0x1e); mgl@1371: + opcode[1] = (opcode[1] & 0xef) | ((value & 1) << 4); mgl@1371: +} mgl@1371: + mgl@1371: +void mgl@1371: +avr32_insert_k10(const struct avr32_ifield *field ATTRIBUTE_UNUSED, mgl@1371: + void *buf, unsigned long value) mgl@1371: +{ mgl@1371: + char *opcode = buf; mgl@1371: + mgl@1371: + opcode[0] = (opcode[0] & 0xf0) | ((value & 0xf0) >> 4); mgl@1371: + opcode[1] = ((opcode[1] & 0x0c) | ((value & 0x0f) << 4) mgl@1371: + | ((value & 0x300) >> 8)); mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +void mgl@1371: +avr32_insert_k21(const struct avr32_ifield *field, mgl@1371: + void *buf, unsigned long value) mgl@1371: +{ mgl@1371: + bfd_vma word; mgl@1371: + bfd_vma k21; mgl@1371: + mgl@1371: + word = bfd_getb32(buf); mgl@1371: + word &= ~field->mask; mgl@1371: + k21 = ((value & 0xffff) | ((value & 0x10000) << 4) mgl@1371: + | ((value & 0x1e0000) << 8)); mgl@1371: + assert(!(k21 & ~field->mask)); mgl@1371: + word |= k21; mgl@1371: + bfd_putb32(word, buf); mgl@1371: +} mgl@1371: + mgl@1371: +void mgl@1371: +avr32_insert_cpop(const struct avr32_ifield *field, mgl@1371: + void *buf, unsigned long value) mgl@1371: +{ mgl@1371: + bfd_vma word; mgl@1371: + mgl@1371: + word = bfd_getb32(buf); mgl@1371: + word &= ~field->mask; mgl@1371: + word |= (((value & 0x1e) << 15) | ((value & 0x60) << 20) mgl@1371: + | ((value & 0x01) << 12)); mgl@1371: + bfd_putb32(word, buf); mgl@1371: +} mgl@1371: + mgl@1371: +void mgl@1371: +avr32_insert_k12cp(const struct avr32_ifield *field, mgl@1371: + void *buf, unsigned long value) mgl@1371: +{ mgl@1371: + bfd_vma word; mgl@1371: + mgl@1371: + word = bfd_getb32(buf); mgl@1371: + word &= ~field->mask; mgl@1371: + word |= ((value & 0xf00) << 4) | (value & 0xff); mgl@1371: + bfd_putb32(word, buf); mgl@1371: +} mgl@1371: + mgl@1371: +void avr32_extract_simple(const struct avr32_ifield *field, mgl@1371: + void *buf, unsigned long *value) mgl@1371: +{ mgl@1371: + /* XXX: The disassembler has done any necessary byteswapping already */ mgl@1371: + bfd_vma word = *(bfd_vma *)buf; mgl@1371: + mgl@1371: + *value = (word & field->mask) >> field->shift; mgl@1371: +} mgl@1371: + mgl@1371: +void avr32_extract_bit5c(const struct avr32_ifield *field ATTRIBUTE_UNUSED, mgl@1371: + void *buf, unsigned long *value) mgl@1371: +{ mgl@1371: + bfd_vma word = *(bfd_vma *)buf; mgl@1371: + mgl@1371: + *value = ((word >> 20) & 1) | ((word >> 24) & 0x1e); mgl@1371: +} mgl@1371: + mgl@1371: +void avr32_extract_k10(const struct avr32_ifield *field ATTRIBUTE_UNUSED, mgl@1371: + void *buf, unsigned long *value) mgl@1371: +{ mgl@1371: + bfd_vma word = *(bfd_vma *)buf; mgl@1371: + mgl@1371: + *value = ((word >> 8) & 0x300) | ((word >> 20) & 0xff); mgl@1371: +} mgl@1371: + mgl@1371: +void avr32_extract_k21(const struct avr32_ifield *field ATTRIBUTE_UNUSED, mgl@1371: + void *buf, unsigned long *value) mgl@1371: +{ mgl@1371: + bfd_vma word = *(bfd_vma *)buf; mgl@1371: + mgl@1371: + *value = ((word & 0xffff) | ((word >> 4) & 0x10000) mgl@1371: + | ((word >> 8) & 0x1e0000)); mgl@1371: +} mgl@1371: + mgl@1371: +void avr32_extract_cpop(const struct avr32_ifield *field ATTRIBUTE_UNUSED, mgl@1371: + void *buf, unsigned long *value) mgl@1371: +{ mgl@1371: + bfd_vma word = *(bfd_vma *)buf; mgl@1371: + mgl@1371: + *value = (((word >> 12) & 1) | ((word >> 15) & 0x1e) mgl@1371: + | ((word >> 20) & 0x60)); mgl@1371: +} mgl@1371: + mgl@1371: +void avr32_extract_k12cp(const struct avr32_ifield *field ATTRIBUTE_UNUSED, mgl@1371: + void *buf, unsigned long *value) mgl@1371: +{ mgl@1371: + bfd_vma word = *(bfd_vma *)buf; mgl@1371: + mgl@1371: + *value = ((word >> 4) & 0xf00) | (word & 0xff); mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +#define IFLD(id, bitsz, shift, mask, func) \ mgl@1371: + { AVR32_IFIELD_##id, bitsz, shift, mask, \ mgl@1371: + avr32_insert_##func, avr32_extract_##func } mgl@1371: + mgl@1371: +const struct avr32_ifield avr32_ifield_table[] = mgl@1371: + { mgl@1371: + IFLD(RX, 4, 25, 0x1e000000, simple), mgl@1371: + IFLD(RY, 4, 16, 0x000f0000, simple), mgl@1371: + IFLD(COND4C, 4, 20, 0x00f00000, simple), mgl@1371: + IFLD(K8C, 8, 20, 0x0ff00000, simple), mgl@1371: + IFLD(K7C, 7, 20, 0x07f00000, simple), mgl@1371: + IFLD(K5C, 5, 20, 0x01f00000, simple), mgl@1371: + IFLD(K3, 3, 20, 0x00700000, simple), mgl@1371: + IFLD(RY_DW, 3, 17, 0x000e0000, simple), mgl@1371: + IFLD(COND4E, 4, 8, 0x00000f00, simple), mgl@1371: + IFLD(K8E, 8, 0, 0x000000ff, simple), mgl@1371: + IFLD(BIT5C, 5, 20, 0x1e100000, bit5c), mgl@1371: + IFLD(COND3, 3, 16, 0x00070000, simple), mgl@1371: + IFLD(K10, 10, 16, 0x0ff30000, k10), mgl@1371: + IFLD(POPM, 9, 19, 0x0ff80000, simple), mgl@1371: + IFLD(K2, 2, 4, 0x00000030, simple), mgl@1371: + IFLD(RD_E, 4, 0, 0x0000000f, simple), mgl@1371: + IFLD(RD_DW, 3, 1, 0x0000000e, simple), mgl@1371: + IFLD(X, 1, 5, 0x00000020, simple), mgl@1371: + IFLD(Y, 1, 4, 0x00000010, simple), mgl@1371: + IFLD(X2, 1, 13, 0x00002000, simple), mgl@1371: + IFLD(Y2, 1, 12, 0x00001000, simple), mgl@1371: + IFLD(K5E, 5, 0, 0x0000001f, simple), mgl@1371: + IFLD(PART2, 2, 0, 0x00000003, simple), mgl@1371: + IFLD(PART1, 1, 0, 0x00000001, simple), mgl@1371: + IFLD(K16, 16, 0, 0x0000ffff, simple), mgl@1371: + IFLD(CACHEOP, 5, 11, 0x0000f800, simple), mgl@1371: + IFLD(K11, 11, 0, 0x000007ff, simple), mgl@1371: + IFLD(K21, 21, 0, 0x1e10ffff, k21), mgl@1371: + IFLD(CPOP, 7, 12, 0x060f1000, cpop), mgl@1371: + IFLD(CPNO, 3, 13, 0x0000e000, simple), mgl@1371: + IFLD(CRD_RI, 4, 8, 0x00000f00, simple), mgl@1371: + IFLD(CRX, 4, 4, 0x000000f0, simple), mgl@1371: + IFLD(CRY, 4, 0, 0x0000000f, simple), mgl@1371: + IFLD(K7E, 7, 0, 0x0000007f, simple), mgl@1371: + IFLD(CRD_DW, 3, 9, 0x00000e00, simple), mgl@1371: + IFLD(PART1_K12, 1, 12, 0x00001000, simple), mgl@1371: + IFLD(PART2_K12, 2, 12, 0x00003000, simple), mgl@1371: + IFLD(K12, 12, 0, 0x00000fff, simple), mgl@1371: + IFLD(S5, 5, 5, 0x000003e0, simple), mgl@1371: + IFLD(K5E2, 5, 4, 0x000001f0, simple), mgl@1371: + IFLD(K4, 4, 20, 0x00f00000, simple), mgl@1371: + IFLD(COND4E2, 4, 4, 0x000000f0, simple), mgl@1371: + IFLD(K8E2, 8, 4, 0x00000ff0, simple), mgl@1371: + IFLD(K6, 6, 20, 0x03f00000, simple), mgl@1371: + IFLD(MEM15, 15, 0, 0x00007fff, simple), mgl@1371: + IFLD(MEMB5, 5, 15, 0x000f8000, simple), mgl@1371: + IFLD(W, 1, 25, 0x02000000, simple), mgl@1371: + /* Coprocessor Multiple High/Low */ mgl@1371: + IFLD(CM_HL, 1, 8, 0x00000100, simple), mgl@1371: + IFLD(K12CP, 12 ,0, 0x0000f0ff, k12cp), mgl@1371: + IFLD(K9E, 9 ,0, 0x000001ff, simple), mgl@1371: + }; mgl@1371: +#undef IFLD mgl@1371: + mgl@1371: + mgl@1371: +struct avr32_opcode avr32_opc_table[] = mgl@1371: + { mgl@1371: + { mgl@1371: + AVR32_OPC_ABS, 2, 0x5c400000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ABS], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + } mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ACALL, 2, 0xd0000000, 0xf00f0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ACALL], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ACR, 2, 0x5c000000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ACR], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ADC, 4, 0xe0000040, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ADC], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ADD1, 2, 0x00000000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ADD1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ADD2, 4, 0xe0000000, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ADD2], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ADDABS, 4, 0xe0000e40, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ADDABS], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ADDHH_W, 4, 0xe0000e00, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ADDHH_W], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_AND1, 2, 0x00600000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_AND1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_AND2, 4, 0xe1e00000, 0xe1f0fe00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_AND2], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E2], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_AND3, 4, 0xe1e00200, 0xe1f0fe00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_AND3], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E2], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ANDH, 4, 0xe4100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ANDH], mgl@1371: + BFD_RELOC_AVR32_16U, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ANDH_COH, 4, 0xe6100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ANDH_COH], mgl@1371: + BFD_RELOC_AVR32_16U, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ANDL, 4, 0xe0100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ANDL], mgl@1371: + BFD_RELOC_AVR32_16U, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ANDL_COH, 4, 0xe2100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ANDL_COH], mgl@1371: + BFD_RELOC_AVR32_16U, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ANDN, 2, 0x00800000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ANDN], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ASR1, 4, 0xe0000840, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ASR1], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ASR3, 4, 0xe0001400, 0xe1f0ffe0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ASR3], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ASR2, 2, 0xa1400000, 0xe1e00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ASR2], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_BIT5C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BLD, 4, 0xedb00000, 0xfff0ffe0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BLD], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BREQ1, 2, 0xc0000000, 0xf00f0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BREQ1], mgl@1371: + BFD_RELOC_AVR32_9H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRNE1, 2, 0xc0010000, 0xf00f0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRNE1], mgl@1371: + BFD_RELOC_AVR32_9H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRCC1, 2, 0xc0020000, 0xf00f0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRCC1], mgl@1371: + BFD_RELOC_AVR32_9H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRCS1, 2, 0xc0030000, 0xf00f0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRCS1], mgl@1371: + BFD_RELOC_AVR32_9H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRGE1, 2, 0xc0040000, 0xf00f0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRGE1], mgl@1371: + BFD_RELOC_AVR32_9H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRLT1, 2, 0xc0050000, 0xf00f0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRLT1], mgl@1371: + BFD_RELOC_AVR32_9H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRMI1, 2, 0xc0060000, 0xf00f0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRMI1], mgl@1371: + BFD_RELOC_AVR32_9H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRPL1, 2, 0xc0070000, 0xf00f0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRPL1], mgl@1371: + BFD_RELOC_AVR32_9H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BREQ2, 4, 0xe0800000, 0xe1ef0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BREQ2], mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRNE2, 4, 0xe0810000, 0xe1ef0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRNE2], mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRCC2, 4, 0xe0820000, 0xe1ef0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRHS2], mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRCS2, 4, 0xe0830000, 0xe1ef0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRLO2], mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRGE2, 4, 0xe0840000, 0xe1ef0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRGE2], mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRLT2, 4, 0xe0850000, 0xe1ef0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRLT2], mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRMI2, 4, 0xe0860000, 0xe1ef0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRMI2], mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRPL2, 4, 0xe0870000, 0xe1ef0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRPL2], mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRLS, 4, 0xe0880000, 0xe1ef0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRLS], mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRGT, 4, 0xe0890000, 0xe1ef0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRGT], mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRLE, 4, 0xe08a0000, 0xe1ef0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRLE], mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRHI, 4, 0xe08b0000, 0xe1ef0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRHI], mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRVS, 4, 0xe08c0000, 0xe1ef0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRVS], mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRVC, 4, 0xe08d0000, 0xe1ef0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRVC], mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRQS, 4, 0xe08e0000, 0xe1ef0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRQS], mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BRAL, 4, 0xe08f0000, 0xe1ef0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BRAL], mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BREAKPOINT, 2, 0xd6730000, 0xffff0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BREAKPOINT], mgl@1371: + BFD_RELOC_UNUSED, 0, -1, { NULL }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BREV, 2, 0x5c900000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BREV], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BST, 4, 0xefb00000, 0xfff0ffe0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BST], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_CACHE, 4, 0xf4100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_CACHE], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K11], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CACHEOP], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_CASTS_B, 2, 0x5c600000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_CASTS_B], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_CASTS_H, 2, 0x5c800000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_CASTS_H], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_CASTU_B, 2, 0x5c500000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_CASTU_B], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_CASTU_H, 2, 0x5c700000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_CASTU_H], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_CBR, 2, 0xa1c00000, 0xe1e00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_CBR], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_BIT5C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_CLZ, 4, 0xe0001200, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_CLZ], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_COM, 2, 0x5cd00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_COM], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_COP, 4, 0xe1a00000, 0xf9f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_COP], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPOP], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_CP_B, 4, 0xe0001800, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_CP_B], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_CP_H, 4, 0xe0001900, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_CP_H], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_CP_W1, 2, 0x00300000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_CP_W1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_CP_W2, 2, 0x58000000, 0xfc000000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_CP_W2], mgl@1371: + BFD_RELOC_AVR32_6S, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K6], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_CP_W3, 4, 0xe0400000, 0xe1e00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_CP_W3], mgl@1371: + BFD_RELOC_AVR32_21S, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_CPC1, 4, 0xe0001300, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_CPC1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_CPC2, 2, 0x5c200000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_CPC2], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_CSRF, 2, 0xd4030000, 0xfe0f0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_CSRF], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_CSRFCZ, 2, 0xd0030000, 0xfe0f0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_CSRFCZ], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_DIVS, 4, 0xe0000c00, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_DIVS], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_DIVU, 4, 0xe0000d00, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_DIVU], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_EOR1, 2, 0x00500000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_EOR1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_EOR2, 4, 0xe1e02000, 0xe1f0fe00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_EOR2], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E2], mgl@1371: + } mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_EOR3, 4, 0xe1e02200, 0xe1f0fe00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_EOR3], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E2], mgl@1371: + } mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_EORL, 4, 0xec100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_EORL], mgl@1371: + BFD_RELOC_AVR32_16U, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_EORH, 4, 0xee100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_EORH], mgl@1371: + BFD_RELOC_AVR32_16U, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_FRS, 2, 0xd7430000, 0xffff0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_FRS], mgl@1371: + BFD_RELOC_UNUSED, 0, -1, { NULL }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ICALL, 2, 0x5d100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ICALL], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_INCJOSP, 2, 0xd6830000, 0xff8f0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_INCJOSP], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K3], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_D1, 2, 0xa1010000, 0xe1f10000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_D1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY_DW], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_D2, 2, 0xa1100000, 0xe1f10000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_D2], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY_DW], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_D3, 2, 0xa1000000, 0xe1f10000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_D3], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY_DW], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_D5, 4, 0xe0000200, 0xe1f0ffc1, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_D5], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_DW], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_D4, 4, 0xe0e00000, 0xe1f10000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_D4], mgl@1371: + BFD_RELOC_AVR32_16S, 3, 2, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY_DW], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_SB2, 4, 0xe0000600, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_SB2], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_SB1, 4, 0xe1200000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_SB1], mgl@1371: + BFD_RELOC_AVR32_16S, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_UB1, 2, 0x01300000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_UB1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_UB2, 2, 0x01700000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_UB2], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_UB5, 4, 0xe0000700, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_UB5], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_UB3, 2, 0x01800000, 0xe1800000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_UB3], mgl@1371: + BFD_RELOC_AVR32_3U, 3, 2, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K3], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_UB4, 4, 0xe1300000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_UB4], mgl@1371: + BFD_RELOC_AVR32_16S, 3, 2, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_SH1, 2, 0x01100000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_SH1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_SH2, 2, 0x01500000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_SH2], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_SH5, 4, 0xe0000400, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_SH5], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_SH3, 2, 0x80000000, 0xe1800000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_SH3], mgl@1371: + BFD_RELOC_AVR32_4UH, 3, 2, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K3], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_SH4, 4, 0xe1000000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_SH4], mgl@1371: + BFD_RELOC_AVR32_16S, 3, 2, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_UH1, 2, 0x01200000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_UH1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_UH2, 2, 0x01600000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_UH2], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_UH5, 4, 0xe0000500, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_UH5], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_UH3, 2, 0x80800000, 0xe1800000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_UH3], mgl@1371: + BFD_RELOC_AVR32_4UH, 3, 2, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K3], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_UH4, 4, 0xe1100000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_UH4], mgl@1371: + BFD_RELOC_AVR32_16S, 3, 2, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_W1, 2, 0x01000000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_W1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_W2, 2, 0x01400000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_W2], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_W5, 4, 0xe0000300, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_W5], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_W6, 4, 0xe0000f80, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_W6], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_W3, 2, 0x60000000, 0xe0000000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_W3], mgl@1371: + BFD_RELOC_AVR32_7UW, 3, 2, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LD_W4, 4, 0xe0f00000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LD_W4], mgl@1371: + BFD_RELOC_AVR32_16S, 3, 2, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDC_D1, 4, 0xe9a01000, 0xfff01100, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDC_D1], mgl@1371: + BFD_RELOC_AVR32_10UW, 4, 3, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDC_D2, 4, 0xefa00050, 0xfff011ff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDC_D2], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDC_D3, 4, 0xefa01040, 0xfff011c0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDC_D3], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDC_W1, 4, 0xe9a00000, 0xfff01000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDC_W1], mgl@1371: + BFD_RELOC_AVR32_10UW, 4, 3, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDC_W2, 4, 0xefa00040, 0xfff010ff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDC_W2], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDC_W3, 4, 0xefa01000, 0xfff010c0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDC_W3], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDC0_D, 4, 0xf3a00000, 0xfff00100, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDC0_D], mgl@1371: + BFD_RELOC_AVR32_14UW, 3, 2, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K12CP], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDC0_W, 4, 0xf1a00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDC0_W], mgl@1371: + BFD_RELOC_AVR32_14UW, 3, 2, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K12CP], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDCM_D, 4, 0xeda00400, 0xfff01f00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDCM_D], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDCM_D_PU, 4, 0xeda01400, 0xfff01f00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDCM_D_PU], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDCM_W, 4, 0xeda00000, 0xfff01e00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDCM_W], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CM_HL], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDCM_W_PU, 4, 0xeda01000, 0xfff01e00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDCM_W_PU], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CM_HL], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDDPC, 2, 0x48000000, 0xf8000000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDDPC], mgl@1371: + BFD_RELOC_AVR32_9UW_PCREL, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K7C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDDPC_EXT, 4, 0xfef00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDDPC_EXT], mgl@1371: + BFD_RELOC_AVR32_16B_PCREL, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDDSP, 2, 0x40000000, 0xf8000000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDDSP], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K7C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDINS_B, 4, 0xe1d04000, 0xe1f0c000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDINS_B], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_PART2_K12], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K12], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDINS_H, 4, 0xe1d00000, 0xe1f0e000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDINS_H], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_PART1_K12], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K12], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDM, 4, 0xe1c00000, 0xfdf00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDM], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_W], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDMTS, 4, 0xe5c00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDMTS], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDMTS_PU, 4, 0xe7c00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDMTS_PU], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDSWP_SH, 4, 0xe1d02000, 0xe1f0f000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDSWP_SH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K12], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDSWP_UH, 4, 0xe1d03000, 0xe1f0f000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDSWP_UH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K12], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LDSWP_W, 4, 0xe1d08000, 0xe1f0f000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LDSWP_W], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K12], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LSL1, 4, 0xe0000940, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LSL1], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LSL3, 4, 0xe0001500, 0xe1f0ffe0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LSL3], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LSL2, 2, 0xa1600000, 0xe1e00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LSL2], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_BIT5C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LSR1, 4, 0xe0000a40, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LSR1], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LSR3, 4, 0xe0001600, 0xe1f0ffe0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LSR3], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_LSR2, 2, 0xa1800000, 0xe1e00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_LSR2], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_BIT5C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MAC, 4, 0xe0000340, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MAC], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MACHH_D, 4, 0xe0000580, 0xe1f0ffc1, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MACHH_D], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MACHH_W, 4, 0xe0000480, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MACHH_W], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MACS_D, 4, 0xe0000540, 0xe1f0fff1, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MACS_D], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MACSATHH_W, 4, 0xe0000680, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MACSATHH_W], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MACUD, 4, 0xe0000740, 0xe1f0fff1, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MACUD], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MACWH_D, 4, 0xe0000c80, 0xe1f0ffe1, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MACWH_D], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MAX, 4, 0xe0000c40, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MAX], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MCALL, 4, 0xf0100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MCALL], mgl@1371: + BFD_RELOC_AVR32_18W_PCREL, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MFDR, 4, 0xe5b00000, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MFDR], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MFSR, 4, 0xe1b00000, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MFSR], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MIN, 4, 0xe0000d40, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MIN], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOV3, 2, 0x00900000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOV3], mgl@1371: + BFD_RELOC_NONE, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOV1, 2, 0x30000000, 0xf0000000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOV1], mgl@1371: + BFD_RELOC_AVR32_8S, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOV2, 4, 0xe0600000, 0xe1e00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOV2], mgl@1371: + BFD_RELOC_AVR32_21S, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVEQ1, 4, 0xe0001700, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVEQ1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVNE1, 4, 0xe0001710, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVNE1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVCC1, 4, 0xe0001720, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVHS1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVCS1, 4, 0xe0001730, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVLO1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVGE1, 4, 0xe0001740, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVGE1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVLT1, 4, 0xe0001750, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVLT1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVMI1, 4, 0xe0001760, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVMI1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVPL1, 4, 0xe0001770, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVPL1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVLS1, 4, 0xe0001780, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVLS1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVGT1, 4, 0xe0001790, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVGT1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVLE1, 4, 0xe00017a0, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVLE1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVHI1, 4, 0xe00017b0, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVHI1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVVS1, 4, 0xe00017c0, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVVS1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVVC1, 4, 0xe00017d0, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVVC1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVQS1, 4, 0xe00017e0, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVQS1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVAL1, 4, 0xe00017f0, 0xe1f0ffff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVAL1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVEQ2, 4, 0xf9b00000, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVEQ2], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVNE2, 4, 0xf9b00100, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVNE2], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVCC2, 4, 0xf9b00200, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVHS2], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVCS2, 4, 0xf9b00300, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVLO2], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVGE2, 4, 0xf9b00400, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVGE2], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVLT2, 4, 0xf9b00500, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVLT2], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVMI2, 4, 0xf9b00600, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVMI2], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVPL2, 4, 0xf9b00700, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVPL2], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVLS2, 4, 0xf9b00800, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVLS2], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVGT2, 4, 0xf9b00900, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVGT2], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVLE2, 4, 0xf9b00a00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVLE2], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVHI2, 4, 0xf9b00b00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVHI2], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVVS2, 4, 0xf9b00c00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVVS2], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVVC2, 4, 0xf9b00d00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVVC2], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVQS2, 4, 0xf9b00e00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVQS2], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MOVAL2, 4, 0xf9b00f00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVAL2], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MTDR, 4, 0xe7b00000, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MTDR], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MTSR, 4, 0xe3b00000, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MTSR], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MUL1, 2, 0xa1300000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MUL1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MUL2, 4, 0xe0000240, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MUL2], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MUL3, 4, 0xe0001000, 0xe1f0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MUL3], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 3, 2, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MULHH_W, 4, 0xe0000780, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MULHH_W], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MULNHH_W, 4, 0xe0000180, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MULNHH_W], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MULNWH_D, 4, 0xe0000280, 0xe1f0ffe1, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MULNWH_D], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MULSD, 4, 0xe0000440, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MULSD], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MULSATHH_H, 4, 0xe0000880, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MULSATHH_H], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MULSATHH_W, 4, 0xe0000980, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MULSATHH_W], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MULSATRNDHH_H, 4, 0xe0000a80, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MULSATRNDHH_H], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MULSATRNDWH_W, 4, 0xe0000b80, 0xe1f0ffe0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MULSATRNDWH_W], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MULSATWH_W, 4, 0xe0000e80, 0xe1f0ffe0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MULSATWH_W], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MULU_D, 4, 0xe0000640, 0xe1f0fff1, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MULU_D], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MULWH_D, 4, 0xe0000d80, 0xe1f0ffe1, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MULWH_D], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MUSFR, 2, 0x5d300000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MUSFR], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + } mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MUSTR, 2, 0x5d200000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MUSTR], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + } mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MVCR_D, 4, 0xefa00010, 0xfff111ff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MVCR_D], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY_DW], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MVCR_W, 4, 0xefa00000, 0xfff010ff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MVCR_W], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MVRC_D, 4, 0xefa00030, 0xfff111ff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MVRC_D], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY_DW], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MVRC_W, 4, 0xefa00020, 0xfff010ff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MVRC_W], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_NEG, 2, 0x5c300000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_NEG], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + } mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_NOP, 2, 0xd7030000, 0xffff0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_NOP], mgl@1371: + BFD_RELOC_UNUSED, 0, -1, { NULL }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_OR1, 2, 0x00400000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_OR1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_OR2, 4, 0xe1e01000, 0xe1f0fe00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_OR2], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E2], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_OR3, 4, 0xe1e01200, 0xe1f0fe00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_OR3], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E2], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ORH, 4, 0xea100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ORH], mgl@1371: + BFD_RELOC_AVR32_16U, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ORL, 4, 0xe8100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ORL], mgl@1371: + BFD_RELOC_AVR32_16U, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PABS_SB, 4, 0xe00023e0, 0xfff0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PABS_SB], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PABS_SH, 4, 0xe00023f0, 0xfff0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PABS_SH], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PACKSH_SB, 4, 0xe00024d0, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PACKSH_SB], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PACKSH_UB, 4, 0xe00024c0, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PACKSH_UB], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PACKW_SH, 4, 0xe0002470, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PACKW_SH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PADD_B, 4, 0xe0002300, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PADD_B], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PADD_H, 4, 0xe0002000, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PADD_H], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PADDH_SH, 4, 0xe00020c0, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PADDH_SH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PADDH_UB, 4, 0xe0002360, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PADDH_UB], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PADDS_SB, 4, 0xe0002320, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PADDS_SB], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PADDS_SH, 4, 0xe0002040, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PADDS_SH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PADDS_UB, 4, 0xe0002340, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PADDS_UB], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PADDS_UH, 4, 0xe0002080, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PADDS_UH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PADDSUB_H, 4, 0xe0002100, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PADDSUB_H], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PADDSUBH_SH, 4, 0xe0002280, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PADDSUBH_SH], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PADDSUBS_SH, 4, 0xe0002180, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PADDSUBS_SH], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PADDSUBS_UH, 4, 0xe0002200, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PADDSUBS_UH], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PADDX_H, 4, 0xe0002020, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PADDX_H], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PADDXH_SH, 4, 0xe00020e0, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PADDXH_SH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PADDXS_SH, 4, 0xe0002060, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PADDXS_SH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PADDXS_UH, 4, 0xe00020a0, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PADDXS_UH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PASR_B, 4, 0xe0002410, 0xe1f8fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PASR_B], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_COND3], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PASR_H, 4, 0xe0002440, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PASR_H], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PAVG_SH, 4, 0xe00023d0, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PAVG_SH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PAVG_UB, 4, 0xe00023c0, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PAVG_UB], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PLSL_B, 4, 0xe0002420, 0xe1f8fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PLSL_B], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_COND3], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PLSL_H, 4, 0xe0002450, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PLSL_H], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PLSR_B, 4, 0xe0002430, 0xe1f8fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PLSR_B], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_COND3], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PLSR_H, 4, 0xe0002460, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PLSR_H], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PMAX_SH, 4, 0xe0002390, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PMAX_SH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PMAX_UB, 4, 0xe0002380, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PMAX_UB], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PMIN_SH, 4, 0xe00023b0, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PMIN_SH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PMIN_UB, 4, 0xe00023a0, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PMIN_UB], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_POPJC, 2, 0xd7130000, 0xffff0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_POPJC], mgl@1371: + BFD_RELOC_UNUSED, 0, -1, { NULL }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_POPM, 2, 0xd0020000, 0xf0070000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_POPM], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_POPM], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_POPM_E, 4, 0xe3cd0000, 0xffff0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_POPM_E], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PREF, 4, 0xf2100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PREF], mgl@1371: + BFD_RELOC_AVR32_16S, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PSAD, 4, 0xe0002400, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PSAD], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PSUB_B, 4, 0xe0002310, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PSUB_B], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PSUB_H, 4, 0xe0002010, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PSUB_H], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PSUBADD_H, 4, 0xe0002140, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PSUBADD_H], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PSUBADDH_SH, 4, 0xe00022c0, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PSUBADDH_SH], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PSUBADDS_SH, 4, 0xe00021c0, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PSUBADDS_SH], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PSUBADDS_UH, 4, 0xe0002240, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PSUBADDS_UH], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PSUBH_SH, 4, 0xe00020d0, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PSUBH_SH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PSUBH_UB, 4, 0xe0002370, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PSUBH_UB], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PSUBS_SB, 4, 0xe0002330, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PSUBS_SB], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PSUBS_SH, 4, 0xe0002050, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PSUBS_SH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PSUBS_UB, 4, 0xe0002350, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PSUBS_UB], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PSUBS_UH, 4, 0xe0002090, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PSUBS_UH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PSUBX_H, 4, 0xe0002030, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PSUBX_H], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PSUBXH_SH, 4, 0xe00020f0, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PSUBXH_SH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PSUBXS_SH, 4, 0xe0002070, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PSUBXS_SH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PSUBXS_UH, 4, 0xe00020b0, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PSUBXS_UH], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PUNPCKSB_H, 4, 0xe00024a0, 0xe1ffffe0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PUNPCKSB_H], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PUNPCKUB_H, 4, 0xe0002480, 0xe1ffffe0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PUNPCKUB_H], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PUSHJC, 2, 0xd7230000, 0xffff0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PUSHJC], mgl@1371: + BFD_RELOC_UNUSED, 0, -1, { NULL }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PUSHM, 2, 0xd0010000, 0xf00f0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PUSHM], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_PUSHM_E, 4, 0xebcd0000, 0xffff0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PUSHM_E], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RCALL1, 2, 0xc00c0000, 0xf00c0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RCALL1], mgl@1371: + BFD_RELOC_AVR32_11H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K10], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RCALL2, 4, 0xe0a00000, 0xe1ef0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RCALL2], mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETEQ, 2, 0x5e000000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETEQ], mgl@1371: + BFD_RELOC_NONE, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETNE, 2, 0x5e100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETNE], mgl@1371: + BFD_RELOC_NONE, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETCC, 2, 0x5e200000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETHS], mgl@1371: + BFD_RELOC_NONE, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETCS, 2, 0x5e300000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETLO], mgl@1371: + BFD_RELOC_NONE, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETGE, 2, 0x5e400000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETGE], mgl@1371: + BFD_RELOC_NONE, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETLT, 2, 0x5e500000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETLT], mgl@1371: + BFD_RELOC_NONE, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETMI, 2, 0x5e600000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETMI], mgl@1371: + BFD_RELOC_NONE, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETPL, 2, 0x5e700000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETPL], mgl@1371: + BFD_RELOC_NONE, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETLS, 2, 0x5e800000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETLS], mgl@1371: + BFD_RELOC_NONE, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETGT, 2, 0x5e900000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETGT], mgl@1371: + BFD_RELOC_NONE, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETLE, 2, 0x5ea00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETLE], mgl@1371: + BFD_RELOC_NONE, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETHI, 2, 0x5eb00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETHI], mgl@1371: + BFD_RELOC_NONE, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETVS, 2, 0x5ec00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETVS], mgl@1371: + BFD_RELOC_NONE, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETVC, 2, 0x5ed00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETVC], mgl@1371: + BFD_RELOC_NONE, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETQS, 2, 0x5ee00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETQS], mgl@1371: + BFD_RELOC_NONE, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETAL, 2, 0x5ef00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETAL], mgl@1371: + BFD_RELOC_NONE, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETD, 2, 0xd6230000, 0xffff0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETD], mgl@1371: + BFD_RELOC_NONE, 0, -1, { NULL }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETE, 2, 0xd6030000, 0xffff0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETE], mgl@1371: + BFD_RELOC_NONE, 0, -1, { NULL }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETJ, 2, 0xd6330000, 0xffff0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETJ], mgl@1371: + BFD_RELOC_NONE, 0, -1, { NULL }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RETS, 2, 0xd6130000, 0xffff0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RETS], mgl@1371: + BFD_RELOC_NONE, 0, -1, { NULL }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RJMP, 2, 0xc0080000, 0xf00c0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RJMP], mgl@1371: + BFD_RELOC_AVR32_11H_PCREL, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K10], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ROL, 2, 0x5cf00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ROL], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + } mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ROR, 2, 0x5d000000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ROR], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + } mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RSUB1, 2, 0x00200000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RSUB1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_RSUB2, 4, 0xe0001100, 0xe1f0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RSUB2], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 3, 2, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SATADD_H, 4, 0xe00002c0, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SATADD_H], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SATADD_W, 4, 0xe00000c0, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SATADD_W], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SATRNDS, 4, 0xf3b00000, 0xfff0fc00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SATRNDS], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_S5], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SATRNDU, 4, 0xf3b00400, 0xfff0fc00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SATRNDU], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_S5], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SATS, 4, 0xf1b00000, 0xfff0fc00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SATS], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_S5], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SATSUB_H, 4, 0xe00003c0, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SATSUB_H], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SATSUB_W1, 4, 0xe00001c0, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SATSUB_W1], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SATSUB_W2, 4, 0xe0d00000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SATSUB_W2], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SATU, 4, 0xf1b00400, 0xfff0fc00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SATU], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_S5], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SBC, 4, 0xe0000140, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SBC], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SBR, 2, 0xa1a00000, 0xe1e00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SBR], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_BIT5C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SCALL, 2, 0xd7330000, 0xffff0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SCALL], mgl@1371: + BFD_RELOC_UNUSED, 0, -1, { NULL }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SCR, 2, 0x5c100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SCR], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SLEEP, 4, 0xe9b00000, 0xffffff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SLEEP], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SREQ, 2, 0x5f000000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SREQ], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SRNE, 2, 0x5f100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SRNE], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SRCC, 2, 0x5f200000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SRHS], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SRCS, 2, 0x5f300000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SRLO], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SRGE, 2, 0x5f400000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SRGE], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SRLT, 2, 0x5f500000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SRLT], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SRMI, 2, 0x5f600000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SRMI], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SRPL, 2, 0x5f700000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SRPL], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SRLS, 2, 0x5f800000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SRLS], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SRGT, 2, 0x5f900000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SRGT], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SRLE, 2, 0x5fa00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SRLE], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SRHI, 2, 0x5fb00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SRHI], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SRVS, 2, 0x5fc00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SRVS], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SRVC, 2, 0x5fd00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SRVC], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SRQS, 2, 0x5fe00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SRQS], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SRAL, 2, 0x5ff00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SRAL], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SSRF, 2, 0xd2030000, 0xfe0f0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SSRF], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_B1, 2, 0x00c00000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_B1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_B2, 2, 0x00f00000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_B2], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_B5, 4, 0xe0000b00, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_B5], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_B3, 2, 0xa0800000, 0xe1800000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_B3], mgl@1371: + BFD_RELOC_AVR32_3U, 3, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K3], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_B4, 4, 0xe1600000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_B4], mgl@1371: + BFD_RELOC_AVR32_16S, 3, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_D1, 2, 0xa1200000, 0xe1f10000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_D1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY_DW], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_D2, 2, 0xa1210000, 0xe1f10000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_D2], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY_DW], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_D3, 2, 0xa1110000, 0xe1f10000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_D3], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY_DW], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_D5, 4, 0xe0000800, 0xe1f0ffc1, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_D5], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_DW], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_D4, 4, 0xe0e10000, 0xe1f10000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_D4], mgl@1371: + BFD_RELOC_AVR32_16S, 3, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY_DW], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_H1, 2, 0x00b00000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_H1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_H2, 2, 0x00e00000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_H2], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_H5, 4, 0xe0000a00, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_H5], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_H3, 2, 0xa0000000, 0xe1800000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_H3], mgl@1371: + BFD_RELOC_AVR32_4UH, 3, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K3], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_H4, 4, 0xe1500000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_H4], mgl@1371: + BFD_RELOC_AVR32_16S, 3, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_W1, 2, 0x00a00000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_W1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_W2, 2, 0x00d00000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_W2], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_W5, 4, 0xe0000900, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_W5], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_W3, 2, 0x81000000, 0xe1000000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_W3], mgl@1371: + BFD_RELOC_AVR32_6UW, 3, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K4], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_ST_W4, 4, 0xe1400000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ST_W4], mgl@1371: + BFD_RELOC_AVR32_16S, 3, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STC_D1, 4, 0xeba01000, 0xfff01100, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STC_D1], mgl@1371: + BFD_RELOC_AVR32_10UW, 4, 2, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STC_D2, 4, 0xefa00070, 0xfff011f0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STC_D2], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STC_D3, 4, 0xefa010c0, 0xfff011c0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STC_D3], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STC_W1, 4, 0xeba00000, 0xfff01000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STC_W1], mgl@1371: + BFD_RELOC_AVR32_10UW, 4, 2, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STC_W2, 4, 0xefa00060, 0xfff010ff, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STC_W2], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STC_W3, 4, 0xefa01080, 0xfff010c0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STC_W3], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STC0_D, 4, 0xf7a00000, 0xfff00100, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STC0_D], mgl@1371: + BFD_RELOC_AVR32_14UW, 3, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K12CP], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STC0_W, 4, 0xf5a00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STC0_W], mgl@1371: + BFD_RELOC_AVR32_14UW, 3, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K12CP], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STCM_D, 4, 0xeda00500, 0xfff01f00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STCM_D], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STCM_D_PU, 4, 0xeda01500, 0xfff01f00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STCM_D_PU], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STCM_W, 4, 0xeda00200, 0xfff01e00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STCM_W], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CM_HL], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STCM_W_PU, 4, 0xeda01200, 0xfff01e00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STCM_W_PU], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CPNO], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CM_HL], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STCOND, 4, 0xe1700000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STCOND], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STDSP, 2, 0x50000000, 0xf8000000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STDSP], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K7C], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STHH_W2, 4, 0xe1e08000, 0xe1f0c0c0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STHH_W2], mgl@1371: + BFD_RELOC_UNUSED, 7, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X2], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y2], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STHH_W1, 4, 0xe1e0c000, 0xe1f0c000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STHH_W1], mgl@1371: + BFD_RELOC_AVR32_STHH_W, 6, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E2], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X2], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y2], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STM, 4, 0xe9c00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STM], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STM_PU, 4, 0xebc00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STM_PU], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STMTS, 4, 0xedc00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STMTS], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STMTS_PU, 4, 0xefc00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STMTS_PU], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STSWP_H, 4, 0xe1d09000, 0xe1f0f000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STSWP_H], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K12], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_STSWP_W, 4, 0xe1d0a000, 0xe1f0f000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_STSWP_W], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K12], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUB1, 2, 0x00100000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUB1], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUB2, 4, 0xe0000100, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUB2], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K2], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUB5, 4, 0xe0c00000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUB5], mgl@1371: + BFD_RELOC_AVR32_SUB5, 3, 2, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUB3_SP, 2, 0x200d0000, 0xf00f0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUB3_SP], mgl@1371: + BFD_RELOC_AVR32_10SW, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUB3, 2, 0x20000000, 0xf0000000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUB3], mgl@1371: + BFD_RELOC_AVR32_8S, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8C], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUB4, 4, 0xe0200000, 0xe1e00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUB4], mgl@1371: + BFD_RELOC_AVR32_21S, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K21], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBEQ, 4, 0xf7b00000, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBEQ], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBNE, 4, 0xf7b00100, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBNE], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBCC, 4, 0xf7b00200, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBHS], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBCS, 4, 0xf7b00300, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBLO], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBGE, 4, 0xf7b00400, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBGE], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBLT, 4, 0xf7b00500, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBLT], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBMI, 4, 0xf7b00600, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBMI], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBPL, 4, 0xf7b00700, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBPL], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBLS, 4, 0xf7b00800, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBLS], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBGT, 4, 0xf7b00900, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBGT], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBLE, 4, 0xf7b00a00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBLE], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBHI, 4, 0xf7b00b00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBHI], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBVS, 4, 0xf7b00c00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBVS], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBVC, 4, 0xf7b00d00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBVC], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBQS, 4, 0xf7b00e00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBQS], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBAL, 4, 0xf7b00f00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBAL], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBFEQ, 4, 0xf5b00000, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBFEQ], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBFNE, 4, 0xf5b00100, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBFNE], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBFCC, 4, 0xf5b00200, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBFHS], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBFCS, 4, 0xf5b00300, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBFLO], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBFGE, 4, 0xf5b00400, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBFGE], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBFLT, 4, 0xf5b00500, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBFLT], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBFMI, 4, 0xf5b00600, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBFMI], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBFPL, 4, 0xf5b00700, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBFPL], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBFLS, 4, 0xf5b00800, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBFLS], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBFGT, 4, 0xf5b00900, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBFGT], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBFLE, 4, 0xf5b00a00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBFLE], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBFHI, 4, 0xf5b00b00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBFHI], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBFVS, 4, 0xf5b00c00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBFVS], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBFVC, 4, 0xf5b00d00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBFVC], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBFQS, 4, 0xf5b00e00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBFQS], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBFAL, 4, 0xf5b00f00, 0xfff0ff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBFAL], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SUBHH_W, 4, 0xe0000f00, 0xe1f0ffc0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SUBHH_W], mgl@1371: + BFD_RELOC_UNUSED, 5, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_X], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_Y], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SWAP_B, 2, 0x5cb00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SWAP_B], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + } mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SWAP_BH, 2, 0x5cc00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SWAP_BH], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + } mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SWAP_H, 2, 0x5ca00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SWAP_H], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + } mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_SYNC, 4, 0xebb00000, 0xffffff00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_SYNC], mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 1, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], mgl@1371: + } mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_TLBR, 2, 0xd6430000, 0xffff0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_TLBR], mgl@1371: + BFD_RELOC_UNUSED, 0, -1, { NULL }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_TLBS, 2, 0xd6530000, 0xffff0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_TLBS], mgl@1371: + BFD_RELOC_UNUSED, 0, -1, { NULL }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_TLBW, 2, 0xd6630000, 0xffff0000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_TLBW], mgl@1371: + BFD_RELOC_UNUSED, 0, -1, { NULL }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_TNBZ, 2, 0x5ce00000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_TNBZ], mgl@1371: + BFD_RELOC_UNUSED, 1, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + } mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_TST, 2, 0x00700000, 0xe1f00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_TST], mgl@1371: + BFD_RELOC_UNUSED, 2, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_XCHG, 4, 0xe0000b40, 0xe1f0fff0, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_XCHG], mgl@1371: + BFD_RELOC_UNUSED, 3, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MEMC, 4, 0xf6100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MEMC], mgl@1371: + BFD_RELOC_AVR32_15S, 2, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_MEM15], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_MEMB5], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MEMS, 4, 0xf8100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MEMS], mgl@1371: + BFD_RELOC_AVR32_15S, 2, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_MEM15], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_MEMB5], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_MEMT, 4, 0xfa100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MEMT], mgl@1371: + BFD_RELOC_AVR32_15S, 2, 0, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_MEM15], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_MEMB5], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BFEXTS, 4, 0xe1d0b000, 0xe1f0fc00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BFEXTS], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_S5], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BFEXTU, 4, 0xe1d0c000, 0xe1f0fc00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BFEXTU], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_S5], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E], mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_OPC_BFINS, 4, 0xe1d0d000, 0xe1f0fc00, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_BFINS], mgl@1371: + BFD_RELOC_UNUSED, 4, -1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_S5], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K5E], mgl@1371: + }, mgl@1371: + }, mgl@1371: +#define AVR32_OPCODE_RSUBCOND(cond_name, cond_field) \ mgl@1371: + { \ mgl@1371: + AVR32_OPC_RSUB ## cond_name , 4, \ mgl@1371: + 0xfbb00000 | (cond_field << 8), 0xfff0ff00, \ mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_RSUB ## cond_name ], \ mgl@1371: + BFD_RELOC_AVR32_8S_EXT, 2, 1, \ mgl@1371: + { \ mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], \ mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K8E], \ mgl@1371: + }, \ mgl@1371: + }, mgl@1371: + mgl@1371: + AVR32_OPCODE_RSUBCOND (EQ, 0) mgl@1371: + AVR32_OPCODE_RSUBCOND (NE, 1) mgl@1371: + AVR32_OPCODE_RSUBCOND (CC, 2) mgl@1371: + AVR32_OPCODE_RSUBCOND (CS, 3) mgl@1371: + AVR32_OPCODE_RSUBCOND (GE, 4) mgl@1371: + AVR32_OPCODE_RSUBCOND (LT, 5) mgl@1371: + AVR32_OPCODE_RSUBCOND (MI, 6) mgl@1371: + AVR32_OPCODE_RSUBCOND (PL, 7) mgl@1371: + AVR32_OPCODE_RSUBCOND (LS, 8) mgl@1371: + AVR32_OPCODE_RSUBCOND (GT, 9) mgl@1371: + AVR32_OPCODE_RSUBCOND (LE, 10) mgl@1371: + AVR32_OPCODE_RSUBCOND (HI, 11) mgl@1371: + AVR32_OPCODE_RSUBCOND (VS, 12) mgl@1371: + AVR32_OPCODE_RSUBCOND (VC, 13) mgl@1371: + AVR32_OPCODE_RSUBCOND (QS, 14) mgl@1371: + AVR32_OPCODE_RSUBCOND (AL, 15) mgl@1371: + mgl@1371: +#define AVR32_OPCODE_OP3_COND(op_name, op_field, cond_name, cond_field) \ mgl@1371: + { \ mgl@1371: + AVR32_OPC_ ## op_name ## cond_name , 4, \ mgl@1371: + 0xe1d0e000 | (cond_field << 8) | (op_field << 4), 0xe1f0fff0, \ mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ ## op_name ## cond_name ], \ mgl@1371: + BFD_RELOC_UNUSED, 3, -1, \ mgl@1371: + { \ mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RD_E], \ mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], \ mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], \ mgl@1371: + }, \ mgl@1371: + }, mgl@1371: + mgl@1371: + AVR32_OPCODE_OP3_COND (ADD, 0, EQ, 0) mgl@1371: + AVR32_OPCODE_OP3_COND (ADD, 0, NE, 1) mgl@1371: + AVR32_OPCODE_OP3_COND (ADD, 0, CC, 2) mgl@1371: + AVR32_OPCODE_OP3_COND (ADD, 0, CS, 3) mgl@1371: + AVR32_OPCODE_OP3_COND (ADD, 0, GE, 4) mgl@1371: + AVR32_OPCODE_OP3_COND (ADD, 0, LT, 5) mgl@1371: + AVR32_OPCODE_OP3_COND (ADD, 0, MI, 6) mgl@1371: + AVR32_OPCODE_OP3_COND (ADD, 0, PL, 7) mgl@1371: + AVR32_OPCODE_OP3_COND (ADD, 0, LS, 8) mgl@1371: + AVR32_OPCODE_OP3_COND (ADD, 0, GT, 9) mgl@1371: + AVR32_OPCODE_OP3_COND (ADD, 0, LE, 10) mgl@1371: + AVR32_OPCODE_OP3_COND (ADD, 0, HI, 11) mgl@1371: + AVR32_OPCODE_OP3_COND (ADD, 0, VS, 12) mgl@1371: + AVR32_OPCODE_OP3_COND (ADD, 0, VC, 13) mgl@1371: + AVR32_OPCODE_OP3_COND (ADD, 0, QS, 14) mgl@1371: + AVR32_OPCODE_OP3_COND (ADD, 0, AL, 15) mgl@1371: + mgl@1371: + AVR32_OPCODE_OP3_COND (SUB2, 1, EQ, 0) mgl@1371: + AVR32_OPCODE_OP3_COND (SUB2, 1, NE, 1) mgl@1371: + AVR32_OPCODE_OP3_COND (SUB2, 1, CC, 2) mgl@1371: + AVR32_OPCODE_OP3_COND (SUB2, 1, CS, 3) mgl@1371: + AVR32_OPCODE_OP3_COND (SUB2, 1, GE, 4) mgl@1371: + AVR32_OPCODE_OP3_COND (SUB2, 1, LT, 5) mgl@1371: + AVR32_OPCODE_OP3_COND (SUB2, 1, MI, 6) mgl@1371: + AVR32_OPCODE_OP3_COND (SUB2, 1, PL, 7) mgl@1371: + AVR32_OPCODE_OP3_COND (SUB2, 1, LS, 8) mgl@1371: + AVR32_OPCODE_OP3_COND (SUB2, 1, GT, 9) mgl@1371: + AVR32_OPCODE_OP3_COND (SUB2, 1, LE, 10) mgl@1371: + AVR32_OPCODE_OP3_COND (SUB2, 1, HI, 11) mgl@1371: + AVR32_OPCODE_OP3_COND (SUB2, 1, VS, 12) mgl@1371: + AVR32_OPCODE_OP3_COND (SUB2, 1, VC, 13) mgl@1371: + AVR32_OPCODE_OP3_COND (SUB2, 1, QS, 14) mgl@1371: + AVR32_OPCODE_OP3_COND (SUB2, 1, AL, 15) mgl@1371: + mgl@1371: + AVR32_OPCODE_OP3_COND (AND, 2, EQ, 0) mgl@1371: + AVR32_OPCODE_OP3_COND (AND, 2, NE, 1) mgl@1371: + AVR32_OPCODE_OP3_COND (AND, 2, CC, 2) mgl@1371: + AVR32_OPCODE_OP3_COND (AND, 2, CS, 3) mgl@1371: + AVR32_OPCODE_OP3_COND (AND, 2, GE, 4) mgl@1371: + AVR32_OPCODE_OP3_COND (AND, 2, LT, 5) mgl@1371: + AVR32_OPCODE_OP3_COND (AND, 2, MI, 6) mgl@1371: + AVR32_OPCODE_OP3_COND (AND, 2, PL, 7) mgl@1371: + AVR32_OPCODE_OP3_COND (AND, 2, LS, 8) mgl@1371: + AVR32_OPCODE_OP3_COND (AND, 2, GT, 9) mgl@1371: + AVR32_OPCODE_OP3_COND (AND, 2, LE, 10) mgl@1371: + AVR32_OPCODE_OP3_COND (AND, 2, HI, 11) mgl@1371: + AVR32_OPCODE_OP3_COND (AND, 2, VS, 12) mgl@1371: + AVR32_OPCODE_OP3_COND (AND, 2, VC, 13) mgl@1371: + AVR32_OPCODE_OP3_COND (AND, 2, QS, 14) mgl@1371: + AVR32_OPCODE_OP3_COND (AND, 2, AL, 15) mgl@1371: + mgl@1371: + AVR32_OPCODE_OP3_COND (OR, 3, EQ, 0) mgl@1371: + AVR32_OPCODE_OP3_COND (OR, 3, NE, 1) mgl@1371: + AVR32_OPCODE_OP3_COND (OR, 3, CC, 2) mgl@1371: + AVR32_OPCODE_OP3_COND (OR, 3, CS, 3) mgl@1371: + AVR32_OPCODE_OP3_COND (OR, 3, GE, 4) mgl@1371: + AVR32_OPCODE_OP3_COND (OR, 3, LT, 5) mgl@1371: + AVR32_OPCODE_OP3_COND (OR, 3, MI, 6) mgl@1371: + AVR32_OPCODE_OP3_COND (OR, 3, PL, 7) mgl@1371: + AVR32_OPCODE_OP3_COND (OR, 3, LS, 8) mgl@1371: + AVR32_OPCODE_OP3_COND (OR, 3, GT, 9) mgl@1371: + AVR32_OPCODE_OP3_COND (OR, 3, LE, 10) mgl@1371: + AVR32_OPCODE_OP3_COND (OR, 3, HI, 11) mgl@1371: + AVR32_OPCODE_OP3_COND (OR, 3, VS, 12) mgl@1371: + AVR32_OPCODE_OP3_COND (OR, 3, VC, 13) mgl@1371: + AVR32_OPCODE_OP3_COND (OR, 3, QS, 14) mgl@1371: + AVR32_OPCODE_OP3_COND (OR, 3, AL, 15) mgl@1371: + mgl@1371: + AVR32_OPCODE_OP3_COND (EOR, 4, EQ, 0) mgl@1371: + AVR32_OPCODE_OP3_COND (EOR, 4, NE, 1) mgl@1371: + AVR32_OPCODE_OP3_COND (EOR, 4, CC, 2) mgl@1371: + AVR32_OPCODE_OP3_COND (EOR, 4, CS, 3) mgl@1371: + AVR32_OPCODE_OP3_COND (EOR, 4, GE, 4) mgl@1371: + AVR32_OPCODE_OP3_COND (EOR, 4, LT, 5) mgl@1371: + AVR32_OPCODE_OP3_COND (EOR, 4, MI, 6) mgl@1371: + AVR32_OPCODE_OP3_COND (EOR, 4, PL, 7) mgl@1371: + AVR32_OPCODE_OP3_COND (EOR, 4, LS, 8) mgl@1371: + AVR32_OPCODE_OP3_COND (EOR, 4, GT, 9) mgl@1371: + AVR32_OPCODE_OP3_COND (EOR, 4, LE, 10) mgl@1371: + AVR32_OPCODE_OP3_COND (EOR, 4, HI, 11) mgl@1371: + AVR32_OPCODE_OP3_COND (EOR, 4, VS, 12) mgl@1371: + AVR32_OPCODE_OP3_COND (EOR, 4, VC, 13) mgl@1371: + AVR32_OPCODE_OP3_COND (EOR, 4, QS, 14) mgl@1371: + AVR32_OPCODE_OP3_COND (EOR, 4, AL, 15) mgl@1371: + mgl@1371: +#define AVR32_OPCODE_LD_COND(op_name, op_field, cond_name, cond_field) \ mgl@1371: + { \ mgl@1371: + AVR32_OPC_ ## op_name ## cond_name , 4, \ mgl@1371: + 0xe1f00000 | (cond_field << 12) | (op_field << 9), 0xe1f0fe00, \ mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ ## op_name ## cond_name ], \ mgl@1371: + BFD_RELOC_UNUSED, 3, -1, \ mgl@1371: + { \ mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], \ mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], \ mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K9E], \ mgl@1371: + }, \ mgl@1371: + }, mgl@1371: + mgl@1371: +#define AVR32_OPCODE_ST_COND(op_name, op_field, cond_name, cond_field) \ mgl@1371: + { \ mgl@1371: + AVR32_OPC_ ## op_name ## cond_name , 4, \ mgl@1371: + 0xe1f00000 | (cond_field << 12) | (op_field << 9), 0xe1f0fe00, \ mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_ ## op_name ## cond_name ], \ mgl@1371: + BFD_RELOC_UNUSED, 3, -1, \ mgl@1371: + { \ mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RX], \ mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K9E], \ mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], \ mgl@1371: + }, \ mgl@1371: + }, mgl@1371: + mgl@1371: + AVR32_OPCODE_LD_COND (LD_W, 0, EQ, 0) mgl@1371: + AVR32_OPCODE_LD_COND (LD_W, 0, NE, 1) mgl@1371: + AVR32_OPCODE_LD_COND (LD_W, 0, CC, 2) mgl@1371: + AVR32_OPCODE_LD_COND (LD_W, 0, CS, 3) mgl@1371: + AVR32_OPCODE_LD_COND (LD_W, 0, GE, 4) mgl@1371: + AVR32_OPCODE_LD_COND (LD_W, 0, LT, 5) mgl@1371: + AVR32_OPCODE_LD_COND (LD_W, 0, MI, 6) mgl@1371: + AVR32_OPCODE_LD_COND (LD_W, 0, PL, 7) mgl@1371: + AVR32_OPCODE_LD_COND (LD_W, 0, LS, 8) mgl@1371: + AVR32_OPCODE_LD_COND (LD_W, 0, GT, 9) mgl@1371: + AVR32_OPCODE_LD_COND (LD_W, 0, LE, 10) mgl@1371: + AVR32_OPCODE_LD_COND (LD_W, 0, HI, 11) mgl@1371: + AVR32_OPCODE_LD_COND (LD_W, 0, VS, 12) mgl@1371: + AVR32_OPCODE_LD_COND (LD_W, 0, VC, 13) mgl@1371: + AVR32_OPCODE_LD_COND (LD_W, 0, QS, 14) mgl@1371: + AVR32_OPCODE_LD_COND (LD_W, 0, AL, 15) mgl@1371: + mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 1, EQ, 0) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 1, NE, 1) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 1, CC, 2) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 1, CS, 3) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 1, GE, 4) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 1, LT, 5) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 1, MI, 6) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 1, PL, 7) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 1, LS, 8) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 1, GT, 9) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 1, LE, 10) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 1, HI, 11) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 1, VS, 12) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 1, VC, 13) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 1, QS, 14) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 1, AL, 15) mgl@1371: + mgl@1371: + AVR32_OPCODE_LD_COND (LD_UH, 2, EQ, 0) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UH, 2, NE, 1) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UH, 2, CC, 2) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UH, 2, CS, 3) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UH, 2, GE, 4) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UH, 2, LT, 5) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UH, 2, MI, 6) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UH, 2, PL, 7) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 2, LS, 8) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 2, GT, 9) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 2, LE, 10) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 2, HI, 11) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 2, VS, 12) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 2, VC, 13) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 2, QS, 14) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SH, 2, AL, 15) mgl@1371: + mgl@1371: + AVR32_OPCODE_LD_COND (LD_SB, 3, EQ, 0) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SB, 3, NE, 1) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SB, 3, CC, 2) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SB, 3, CS, 3) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SB, 3, GE, 4) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SB, 3, LT, 5) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SB, 3, MI, 6) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SB, 3, PL, 7) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SB, 3, LS, 8) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SB, 3, GT, 9) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SB, 3, LE, 10) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SB, 3, HI, 11) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SB, 3, VS, 12) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SB, 3, VC, 13) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SB, 3, QS, 14) mgl@1371: + AVR32_OPCODE_LD_COND (LD_SB, 3, AL, 15) mgl@1371: + mgl@1371: + AVR32_OPCODE_LD_COND (LD_UB, 4, EQ, 0) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UB, 4, NE, 1) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UB, 4, CC, 2) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UB, 4, CS, 3) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UB, 4, GE, 4) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UB, 4, LT, 5) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UB, 4, MI, 6) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UB, 4, PL, 7) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UB, 4, LS, 8) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UB, 4, GT, 9) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UB, 4, LE, 10) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UB, 4, HI, 11) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UB, 4, VS, 12) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UB, 4, VC, 13) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UB, 4, QS, 14) mgl@1371: + AVR32_OPCODE_LD_COND (LD_UB, 4, AL, 15) mgl@1371: + mgl@1371: + AVR32_OPCODE_ST_COND (ST_W, 5, EQ, 0) mgl@1371: + AVR32_OPCODE_ST_COND (ST_W, 5, NE, 1) mgl@1371: + AVR32_OPCODE_ST_COND (ST_W, 5, CC, 2) mgl@1371: + AVR32_OPCODE_ST_COND (ST_W, 5, CS, 3) mgl@1371: + AVR32_OPCODE_ST_COND (ST_W, 5, GE, 4) mgl@1371: + AVR32_OPCODE_ST_COND (ST_W, 5, LT, 5) mgl@1371: + AVR32_OPCODE_ST_COND (ST_W, 5, MI, 6) mgl@1371: + AVR32_OPCODE_ST_COND (ST_W, 5, PL, 7) mgl@1371: + AVR32_OPCODE_ST_COND (ST_W, 5, LS, 8) mgl@1371: + AVR32_OPCODE_ST_COND (ST_W, 5, GT, 9) mgl@1371: + AVR32_OPCODE_ST_COND (ST_W, 5, LE, 10) mgl@1371: + AVR32_OPCODE_ST_COND (ST_W, 5, HI, 11) mgl@1371: + AVR32_OPCODE_ST_COND (ST_W, 5, VS, 12) mgl@1371: + AVR32_OPCODE_ST_COND (ST_W, 5, VC, 13) mgl@1371: + AVR32_OPCODE_ST_COND (ST_W, 5, QS, 14) mgl@1371: + AVR32_OPCODE_ST_COND (ST_W, 5, AL, 15) mgl@1371: + mgl@1371: + AVR32_OPCODE_ST_COND (ST_H, 6, EQ, 0) mgl@1371: + AVR32_OPCODE_ST_COND (ST_H, 6, NE, 1) mgl@1371: + AVR32_OPCODE_ST_COND (ST_H, 6, CC, 2) mgl@1371: + AVR32_OPCODE_ST_COND (ST_H, 6, CS, 3) mgl@1371: + AVR32_OPCODE_ST_COND (ST_H, 6, GE, 4) mgl@1371: + AVR32_OPCODE_ST_COND (ST_H, 6, LT, 5) mgl@1371: + AVR32_OPCODE_ST_COND (ST_H, 6, MI, 6) mgl@1371: + AVR32_OPCODE_ST_COND (ST_H, 6, PL, 7) mgl@1371: + AVR32_OPCODE_ST_COND (ST_H, 6, LS, 8) mgl@1371: + AVR32_OPCODE_ST_COND (ST_H, 6, GT, 9) mgl@1371: + AVR32_OPCODE_ST_COND (ST_H, 6, LE, 10) mgl@1371: + AVR32_OPCODE_ST_COND (ST_H, 6, HI, 11) mgl@1371: + AVR32_OPCODE_ST_COND (ST_H, 6, VS, 12) mgl@1371: + AVR32_OPCODE_ST_COND (ST_H, 6, VC, 13) mgl@1371: + AVR32_OPCODE_ST_COND (ST_H, 6, QS, 14) mgl@1371: + AVR32_OPCODE_ST_COND (ST_H, 6, AL, 15) mgl@1371: + mgl@1371: + AVR32_OPCODE_ST_COND (ST_B, 7, EQ, 0) mgl@1371: + AVR32_OPCODE_ST_COND (ST_B, 7, NE, 1) mgl@1371: + AVR32_OPCODE_ST_COND (ST_B, 7, CC, 2) mgl@1371: + AVR32_OPCODE_ST_COND (ST_B, 7, CS, 3) mgl@1371: + AVR32_OPCODE_ST_COND (ST_B, 7, GE, 4) mgl@1371: + AVR32_OPCODE_ST_COND (ST_B, 7, LT, 5) mgl@1371: + AVR32_OPCODE_ST_COND (ST_B, 7, MI, 6) mgl@1371: + AVR32_OPCODE_ST_COND (ST_B, 7, PL, 7) mgl@1371: + AVR32_OPCODE_ST_COND (ST_B, 7, LS, 8) mgl@1371: + AVR32_OPCODE_ST_COND (ST_B, 7, GT, 9) mgl@1371: + AVR32_OPCODE_ST_COND (ST_B, 7, LE, 10) mgl@1371: + AVR32_OPCODE_ST_COND (ST_B, 7, HI, 11) mgl@1371: + AVR32_OPCODE_ST_COND (ST_B, 7, VS, 12) mgl@1371: + AVR32_OPCODE_ST_COND (ST_B, 7, VC, 13) mgl@1371: + AVR32_OPCODE_ST_COND (ST_B, 7, QS, 14) mgl@1371: + AVR32_OPCODE_ST_COND (ST_B, 7, AL, 15) mgl@1371: + mgl@1371: + { mgl@1371: + AVR32_OPC_MOVH, 4, 0xfc100000, 0xfff00000, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_MOVH], mgl@1371: + BFD_RELOC_AVR32_16U, 2, 1, mgl@1371: + { mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_RY], mgl@1371: + &avr32_ifield_table[AVR32_IFIELD_K16], mgl@1371: + }, mgl@1371: + }, mgl@1371: + mgl@1371: + }; mgl@1371: + mgl@1371: +#define FPALIAS_DXY(name, opcode) \ mgl@1371: + { \ mgl@1371: + AVR32_ALIAS_##name##_S, \ mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], \ mgl@1371: + { \ mgl@1371: + { 0, 0 }, \ mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, \ mgl@1371: + { 0, opcode }, \ mgl@1371: + }, \ mgl@1371: + }, { \ mgl@1371: + AVR32_ALIAS_##name##_D, \ mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], \ mgl@1371: + { \ mgl@1371: + { 0, 0 }, \ mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, \ mgl@1371: + { 0, (opcode) | 0x40 }, \ mgl@1371: + }, \ mgl@1371: + } mgl@1371: +#define FPALIAS_DX(name, opcode) \ mgl@1371: + { \ mgl@1371: + AVR32_ALIAS_##name##_S, \ mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], \ mgl@1371: + { \ mgl@1371: + { 0, 0 }, \ mgl@1371: + { 1, 0 }, { 1, 1 }, { 0, 0 }, \ mgl@1371: + { 0, opcode }, \ mgl@1371: + }, \ mgl@1371: + }, { \ mgl@1371: + AVR32_ALIAS_##name##_D, \ mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], \ mgl@1371: + { \ mgl@1371: + { 0, 0 }, \ mgl@1371: + { 1, 0 }, { 1, 1 }, { 0, 0 }, \ mgl@1371: + { 0, (opcode) | 0x40 }, \ mgl@1371: + }, \ mgl@1371: + } mgl@1371: +#define FPALIAS_XY(name, opcode) \ mgl@1371: + { \ mgl@1371: + AVR32_ALIAS_##name##_S, \ mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], \ mgl@1371: + { \ mgl@1371: + { 0, 0 }, \ mgl@1371: + { 0, 0 }, { 1, 0 }, { 1, 1 }, \ mgl@1371: + { 0, opcode }, \ mgl@1371: + }, \ mgl@1371: + }, { \ mgl@1371: + AVR32_ALIAS_##name##_D, \ mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], \ mgl@1371: + { \ mgl@1371: + { 0, 0 }, \ mgl@1371: + { 0, 0 }, { 1, 0 }, { 1, 1 }, \ mgl@1371: + { 0, (opcode) | 0x40 }, \ mgl@1371: + }, \ mgl@1371: + } mgl@1371: + mgl@1371: +const struct avr32_alias avr32_alias_table[] = mgl@1371: + { mgl@1371: + FPALIAS_DXY(FMAC, 0x00), mgl@1371: + FPALIAS_DXY(FNMAC, 0x01), mgl@1371: + FPALIAS_DXY(FMSC, 0x02), mgl@1371: + FPALIAS_DXY(FNMSC, 0x03), mgl@1371: + FPALIAS_DXY(FADD, 0x04), mgl@1371: + FPALIAS_DXY(FSUB, 0x05), mgl@1371: + FPALIAS_DXY(FMUL, 0x06), mgl@1371: + FPALIAS_DXY(FNMUL, 0x07), mgl@1371: + FPALIAS_DX(FNEG, 0x08), mgl@1371: + FPALIAS_DX(FABS, 0x09), mgl@1371: + FPALIAS_XY(FCMP, 0x0d), mgl@1371: + FPALIAS_DX(FMOV1, 0x0a), mgl@1371: + { mgl@1371: + AVR32_ALIAS_FMOV2_S, mgl@1371: + &avr32_opc_table[AVR32_OPC_MVCR_W], mgl@1371: + { { 0, 0 }, { 1, 0 }, { 1, 1 }, }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_FMOV2_D, mgl@1371: + &avr32_opc_table[AVR32_OPC_MVCR_D], mgl@1371: + { { 0, 0 }, { 1, 0 }, { 1, 1 }, }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_FMOV3_S, mgl@1371: + &avr32_opc_table[AVR32_OPC_MVRC_W], mgl@1371: + { { 0, 0 }, { 1, 0 }, { 1, 1 }, }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_FMOV3_D, mgl@1371: + &avr32_opc_table[AVR32_OPC_MVRC_D], mgl@1371: + { { 0, 0 }, { 1, 0 }, { 1, 1 }, }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_FCASTS_D, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, 0 }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 0, 0 }, mgl@1371: + { 0, 0x0f }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_FCASTD_S, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, 0 }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 0, 0 }, mgl@1371: + { 0, 0x10 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOSVMAC0, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + { 0, 0x0c }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOSVMAC1, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + { 0, 0x0d }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOSVMAC2, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + { 0, 0x0e }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOSVMAC3, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + { 0, 0x0f }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOSVMUL0, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + { 0, 0x08 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOSVMUL1, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + { 0, 0x09 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOSVMUL2, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + { 0, 0x0a }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOSVMUL3, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + { 0, 0x0b }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOVMAC0, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + { 0, 0x04 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOVMAC1, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + { 0, 0x05 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOVMAC2, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + { 0, 0x06 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOVMAC3, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + { 0, 0x07 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOVMUL0, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + { 0, 0x00 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOVMUL1, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + { 0, 0x01 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOVMUL2, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + { 0, 0x02 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOVMUL3, mgl@1371: + &avr32_opc_table[AVR32_OPC_COP], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + { 0, 0x03 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOLD_D1, mgl@1371: + &avr32_opc_table[AVR32_OPC_LDC_D1], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOLD_D2, mgl@1371: + &avr32_opc_table[AVR32_OPC_LDC_D2], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOLD_D3, mgl@1371: + &avr32_opc_table[AVR32_OPC_LDC_D3], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOLD_W1, mgl@1371: + &avr32_opc_table[AVR32_OPC_LDC_W1], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOLD_W2, mgl@1371: + &avr32_opc_table[AVR32_OPC_LDC_W2], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOLD_W3, mgl@1371: + &avr32_opc_table[AVR32_OPC_LDC_W3], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOLDM_D, mgl@1371: + &avr32_opc_table[AVR32_OPC_LDCM_D], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOLDM_D_PU, mgl@1371: + &avr32_opc_table[AVR32_OPC_LDCM_D_PU], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOLDM_W, mgl@1371: + &avr32_opc_table[AVR32_OPC_LDCM_W], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOLDM_W_PU, mgl@1371: + &avr32_opc_table[AVR32_OPC_LDCM_W_PU], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOMV_D1, mgl@1371: + &avr32_opc_table[AVR32_OPC_MVCR_D], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOMV_D2, mgl@1371: + &avr32_opc_table[AVR32_OPC_MVRC_D], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOMV_W1, mgl@1371: + &avr32_opc_table[AVR32_OPC_MVCR_W], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOMV_W2, mgl@1371: + &avr32_opc_table[AVR32_OPC_MVRC_W], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOST_D1, mgl@1371: + &avr32_opc_table[AVR32_OPC_STC_D1], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOST_D2, mgl@1371: + &avr32_opc_table[AVR32_OPC_STC_D2], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOST_D3, mgl@1371: + &avr32_opc_table[AVR32_OPC_STC_D3], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOST_W1, mgl@1371: + &avr32_opc_table[AVR32_OPC_STC_W1], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOST_W2, mgl@1371: + &avr32_opc_table[AVR32_OPC_STC_W2], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOST_W3, mgl@1371: + &avr32_opc_table[AVR32_OPC_STC_W3], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOSTM_D, mgl@1371: + &avr32_opc_table[AVR32_OPC_STCM_D], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOSTM_D_PU, mgl@1371: + &avr32_opc_table[AVR32_OPC_STCM_D_PU], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOSTM_W, mgl@1371: + &avr32_opc_table[AVR32_OPC_STCM_W], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_ALIAS_PICOSTM_W_PU, mgl@1371: + &avr32_opc_table[AVR32_OPC_STCM_W_PU], mgl@1371: + { mgl@1371: + { 0, PICO_CPNO }, mgl@1371: + { 1, 0 }, { 1, 1 }, { 1, 2 }, mgl@1371: + }, mgl@1371: + }, mgl@1371: + }; mgl@1371: + mgl@1371: + mgl@1371: +#define SYNTAX_NORMAL0(id, mne, opc, arch) \ mgl@1371: + { \ mgl@1371: + AVR32_SYNTAX_##id, arch, \ mgl@1371: + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ mgl@1371: + AVR32_PARSER_NORMAL, \ mgl@1371: + { &avr32_opc_table[AVR32_OPC_##opc], }, \ mgl@1371: + NULL, 0, { } \ mgl@1371: + } mgl@1371: +#define SYNTAX_NORMAL1(id, mne, opc, op0, arch) \ mgl@1371: + { \ mgl@1371: + AVR32_SYNTAX_##id, arch, \ mgl@1371: + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ mgl@1371: + AVR32_PARSER_NORMAL, \ mgl@1371: + { &avr32_opc_table[AVR32_OPC_##opc], }, \ mgl@1371: + NULL, 1, \ mgl@1371: + { \ mgl@1371: + AVR32_OPERAND_##op0, \ mgl@1371: + } \ mgl@1371: + } mgl@1371: +#define SYNTAX_NORMALM1(id, mne, opc, op0, arch) \ mgl@1371: + { \ mgl@1371: + AVR32_SYNTAX_##id, arch, \ mgl@1371: + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ mgl@1371: + AVR32_PARSER_NORMAL, \ mgl@1371: + { &avr32_opc_table[AVR32_OPC_##opc], }, \ mgl@1371: + NULL, -1, \ mgl@1371: + { \ mgl@1371: + AVR32_OPERAND_##op0, \ mgl@1371: + } \ mgl@1371: + } mgl@1371: +#define SYNTAX_NORMAL2(id, mne, opc, op0, op1, arch) \ mgl@1371: + { \ mgl@1371: + AVR32_SYNTAX_##id, arch, \ mgl@1371: + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ mgl@1371: + AVR32_PARSER_NORMAL, \ mgl@1371: + { &avr32_opc_table[AVR32_OPC_##opc], }, \ mgl@1371: + NULL, 2, \ mgl@1371: + { \ mgl@1371: + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ mgl@1371: + } \ mgl@1371: + } mgl@1371: +#define SYNTAX_NORMALM2(id, mne, opc, op0, op1, arch) \ mgl@1371: + { \ mgl@1371: + AVR32_SYNTAX_##id, arch, \ mgl@1371: + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ mgl@1371: + AVR32_PARSER_NORMAL, \ mgl@1371: + { &avr32_opc_table[AVR32_OPC_##opc], }, \ mgl@1371: + NULL, -2, \ mgl@1371: + { \ mgl@1371: + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ mgl@1371: + } \ mgl@1371: + } mgl@1371: +#define SYNTAX_NORMAL3(id, mne, opc, op0, op1, op2, arch) \ mgl@1371: + { \ mgl@1371: + AVR32_SYNTAX_##id, arch, \ mgl@1371: + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ mgl@1371: + AVR32_PARSER_NORMAL, \ mgl@1371: + { &avr32_opc_table[AVR32_OPC_##opc], }, \ mgl@1371: + NULL, 3, \ mgl@1371: + { \ mgl@1371: + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ mgl@1371: + AVR32_OPERAND_##op2, \ mgl@1371: + } \ mgl@1371: + } mgl@1371: +#define SYNTAX_NORMALM3(id, mne, opc, op0, op1, op2, arch) \ mgl@1371: + { \ mgl@1371: + AVR32_SYNTAX_##id, arch, \ mgl@1371: + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ mgl@1371: + AVR32_PARSER_NORMAL, \ mgl@1371: + { &avr32_opc_table[AVR32_OPC_##opc], }, \ mgl@1371: + NULL, -3, \ mgl@1371: + { \ mgl@1371: + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ mgl@1371: + AVR32_OPERAND_##op2, \ mgl@1371: + } \ mgl@1371: + } mgl@1371: +#define SYNTAX_NORMAL4(id, mne, opc, op0, op1, op2, op3, arch)\ mgl@1371: + { \ mgl@1371: + AVR32_SYNTAX_##id, arch, \ mgl@1371: + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ mgl@1371: + AVR32_PARSER_NORMAL, \ mgl@1371: + { &avr32_opc_table[AVR32_OPC_##opc], }, \ mgl@1371: + NULL, 4, \ mgl@1371: + { \ mgl@1371: + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ mgl@1371: + AVR32_OPERAND_##op2, AVR32_OPERAND_##op3, \ mgl@1371: + } \ mgl@1371: + } mgl@1371: +#define SYNTAX_NORMAL5(id, mne, opc, op0, op1, op2, op3, op4, arch) \ mgl@1371: + { \ mgl@1371: + AVR32_SYNTAX_##id, arch, \ mgl@1371: + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ mgl@1371: + AVR32_PARSER_NORMAL, \ mgl@1371: + { &avr32_opc_table[AVR32_OPC_##opc], }, \ mgl@1371: + NULL, 5, \ mgl@1371: + { \ mgl@1371: + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ mgl@1371: + AVR32_OPERAND_##op2, AVR32_OPERAND_##op3, \ mgl@1371: + AVR32_OPERAND_##op4, \ mgl@1371: + } \ mgl@1371: + } mgl@1371: + mgl@1371: +#define SYNTAX_NORMAL_C1(id, mne, opc, nxt, op0, arch) \ mgl@1371: + { \ mgl@1371: + AVR32_SYNTAX_##id, arch, \ mgl@1371: + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ mgl@1371: + AVR32_PARSER_NORMAL, \ mgl@1371: + { &avr32_opc_table[AVR32_OPC_##opc], }, \ mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_##nxt], 1, \ mgl@1371: + { \ mgl@1371: + AVR32_OPERAND_##op0, \ mgl@1371: + } \ mgl@1371: + } mgl@1371: +#define SYNTAX_NORMAL_CM1(id, mne, opc, nxt, op0, arch) \ mgl@1371: + { \ mgl@1371: + AVR32_SYNTAX_##id, arch, \ mgl@1371: + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ mgl@1371: + AVR32_PARSER_NORMAL, \ mgl@1371: + { &avr32_opc_table[AVR32_OPC_##opc], }, \ mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_##nxt], -1, \ mgl@1371: + { \ mgl@1371: + AVR32_OPERAND_##op0, \ mgl@1371: + } \ mgl@1371: + } mgl@1371: +#define SYNTAX_NORMAL_C2(id, mne, opc, nxt, op0, op1, arch) \ mgl@1371: + { \ mgl@1371: + AVR32_SYNTAX_##id, arch, \ mgl@1371: + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ mgl@1371: + AVR32_PARSER_NORMAL, \ mgl@1371: + { &avr32_opc_table[AVR32_OPC_##opc], }, \ mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_##nxt], 2, \ mgl@1371: + { \ mgl@1371: + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ mgl@1371: + } \ mgl@1371: + } mgl@1371: +#define SYNTAX_NORMAL_CM2(id, mne, opc, nxt, op0, op1, arch) \ mgl@1371: + { \ mgl@1371: + AVR32_SYNTAX_##id, arch, \ mgl@1371: + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ mgl@1371: + AVR32_PARSER_NORMAL, \ mgl@1371: + { &avr32_opc_table[AVR32_OPC_##opc], }, \ mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_##nxt], -2, \ mgl@1371: + { \ mgl@1371: + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ mgl@1371: + } \ mgl@1371: + } mgl@1371: +#define SYNTAX_NORMAL_C3(id, mne, opc, nxt, op0, op1, op2, arch) \ mgl@1371: + { \ mgl@1371: + AVR32_SYNTAX_##id, arch, \ mgl@1371: + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ mgl@1371: + AVR32_PARSER_NORMAL, \ mgl@1371: + { &avr32_opc_table[AVR32_OPC_##opc], }, \ mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_##nxt], 3, \ mgl@1371: + { \ mgl@1371: + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ mgl@1371: + AVR32_OPERAND_##op2, \ mgl@1371: + } \ mgl@1371: + } mgl@1371: +#define SYNTAX_NORMAL_CM3(id, mne, opc, nxt, op0, op1, op2, arch) \ mgl@1371: + { \ mgl@1371: + AVR32_SYNTAX_##id, arch, \ mgl@1371: + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ mgl@1371: + AVR32_PARSER_NORMAL, \ mgl@1371: + { &avr32_opc_table[AVR32_OPC_##opc], }, \ mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_##nxt], -3, \ mgl@1371: + { \ mgl@1371: + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ mgl@1371: + AVR32_OPERAND_##op2, \ mgl@1371: + } \ mgl@1371: + } mgl@1371: + mgl@1371: +#define SYNTAX_FP(name, nr_ops) \ mgl@1371: + { \ mgl@1371: + AVR32_SYNTAX_##name##_S, \ mgl@1371: + AVR32_FP, NULL, AVR32_PARSER_ALIAS, \ mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_##name##_S] }, \ mgl@1371: + NULL, nr_ops, \ mgl@1371: + { \ mgl@1371: + AVR32_OPERAND_FPREG_S, \ mgl@1371: + AVR32_OPERAND_FPREG_S, \ mgl@1371: + AVR32_OPERAND_FPREG_S, \ mgl@1371: + }, \ mgl@1371: + }, \ mgl@1371: + { \ mgl@1371: + AVR32_SYNTAX_##name##_D, \ mgl@1371: + AVR32_FP, NULL, AVR32_PARSER_ALIAS, \ mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_##name##_D] }, \ mgl@1371: + NULL, nr_ops, \ mgl@1371: + { \ mgl@1371: + AVR32_OPERAND_FPREG_D, \ mgl@1371: + AVR32_OPERAND_FPREG_D, \ mgl@1371: + AVR32_OPERAND_FPREG_D, \ mgl@1371: + }, \ mgl@1371: + } mgl@1371: + mgl@1371: +const struct avr32_syntax avr32_syntax_table[] = mgl@1371: + { mgl@1371: + SYNTAX_NORMAL1(ABS, ABS, ABS, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(ACALL, ACALL, ACALL, UNSIGNED_CONST_W, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(ACR, ACR, ACR, INTREG,AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(ADC, ADC, ADC, INTREG, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ADD1, ADD, ADD1, ADD2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(ADD2, ADD, ADD2, INTREG, INTREG, INTREG_LSL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(ADDABS, ADDABS, ADDABS, INTREG, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(ADDHH_W, ADDHH_W, ADDHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL_C2(AND1, AND, AND1, AND2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(AND2, AND, AND2, AND3, INTREG, INTREG, INTREG_LSL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(AND3, AND, AND3, INTREG, INTREG, INTREG_LSR, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ANDH, ANDH, ANDH, ANDH_COH, INTREG, UNSIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(ANDH_COH, ANDH, ANDH_COH, INTREG, UNSIGNED_CONST, COH, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ANDL, ANDL, ANDL, ANDL_COH, INTREG, UNSIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(ANDL_COH, ANDL, ANDL_COH, INTREG, UNSIGNED_CONST, COH, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(ANDN, ANDN, ANDN, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(ASR1, ASR, ASR1, ASR3, INTREG, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(ASR3, ASR, ASR3, ASR2, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(ASR2, ASR, ASR2, INTREG, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL4(BFEXTS, BFEXTS, BFEXTS, INTREG, INTREG, UNSIGNED_NUMBER, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL4(BFEXTU, BFEXTU, BFEXTU, INTREG, INTREG, UNSIGNED_NUMBER, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL4(BFINS, BFINS, BFINS, INTREG, INTREG, UNSIGNED_NUMBER, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(BLD, BLD, BLD, INTREG, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C1(BREQ1, BREQ, BREQ1, BREQ2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C1(BRNE1, BRNE, BRNE1, BRNE2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C1(BRCC1, BRCC, BRCC1, BRCC2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C1(BRCS1, BRCS, BRCS1, BRCS2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C1(BRGE1, BRGE, BRGE1, BRGE2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C1(BRLT1, BRLT, BRLT1, BRLT2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C1(BRMI1, BRMI, BRMI1, BRMI2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C1(BRPL1, BRPL, BRPL1, BRPL2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C1(BRHS1, BRHS, BRCC1, BRHS2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C1(BRLO1, BRLO, BRCS1, BRLO2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BREQ2, BREQ, BREQ2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BRNE2, BRNE, BRNE2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BRCC2, BRCC, BRCC2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BRCS2, BRCS, BRCS2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BRGE2, BRGE, BRGE2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BRLT2, BRLT, BRLT2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BRMI2, BRMI, BRMI2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BRPL2, BRPL, BRPL2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BRLS, BRLS, BRLS, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BRGT, BRGT, BRGT, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BRLE, BRLE, BRLE, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BRHI, BRHI, BRHI, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BRVS, BRVS, BRVS, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BRVC, BRVC, BRVC, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BRQS, BRQS, BRQS, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BRAL, BRAL, BRAL, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BRHS2, BRHS, BRCC2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BRLO2, BRLO, BRCS2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL0(BREAKPOINT, BREAKPOINT, BREAKPOINT, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(BREV, BREV, BREV, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(BST, BST, BST, INTREG, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(CACHE, CACHE, CACHE, INTREG_SDISP, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(CASTS_B, CASTS_B, CASTS_B, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(CASTS_H, CASTS_H, CASTS_H, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(CASTU_B, CASTU_B, CASTU_B, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(CASTU_H, CASTU_H, CASTU_H, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(CBR, CBR, CBR, INTREG, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(CLZ, CLZ, CLZ, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(COM, COM, COM, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL5(COP, COP, COP, CPNO, CPREG, CPREG, CPREG, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(CP_B, CP_B, CP_B, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(CP_H, CP_H, CP_H, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(CP_W1, CP_W, CP_W1, CP_W2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(CP_W2, CP_W, CP_W2, CP_W3, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(CP_W3, CP_W, CP_W3, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(CPC1, CPC, CPC1, CPC2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(CPC2, CPC, CPC2, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(CSRF, CSRF, CSRF, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(CSRFCZ, CSRFCZ, CSRFCZ, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(DIVS, DIVS, DIVS, INTREG, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(DIVU, DIVU, DIVU, INTREG, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(EOR1, EOR, EOR1, EOR2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(EOR2, EOR, EOR2, EOR3, INTREG, INTREG, INTREG_LSL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(EOR3, EOR, EOR3, INTREG, INTREG, INTREG_LSR, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(EORL, EORL, EORL, INTREG, UNSIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(EORH, EORH, EORH, INTREG, UNSIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL0(FRS, FRS, FRS, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(ICALL, ICALL, ICALL, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(INCJOSP, INCJOSP, INCJOSP, JOSPINC, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_D1, LD_D, LD_D1, LD_D2, DWREG, INTREG_POSTINC, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_D2, LD_D, LD_D2, LD_D3, DWREG, INTREG_PREDEC, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_D3, LD_D, LD_D3, LD_D5, DWREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_D5, LD_D, LD_D5, LD_D4, DWREG, INTREG_INDEX, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LD_D4, LD_D, LD_D4, DWREG, INTREG_SDISP, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_SB2, LD_SB, LD_SB2, LD_SB1, INTREG, INTREG_INDEX, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LD_SB1, LD_SB, LD_SB1, INTREG, INTREG_SDISP, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_UB1, LD_UB, LD_UB1, LD_UB2, INTREG, INTREG_POSTINC, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_UB2, LD_UB, LD_UB2, LD_UB5, INTREG, INTREG_PREDEC, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_UB5, LD_UB, LD_UB5, LD_UB3, INTREG, INTREG_INDEX, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_UB3, LD_UB, LD_UB3, LD_UB4, INTREG, INTREG_UDISP, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LD_UB4, LD_UB, LD_UB4, INTREG, INTREG_SDISP, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_SH1, LD_SH, LD_SH1, LD_SH2, INTREG, INTREG_POSTINC, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_SH2, LD_SH, LD_SH2, LD_SH5, INTREG, INTREG_PREDEC, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_SH5, LD_SH, LD_SH5, LD_SH3, INTREG, INTREG_INDEX, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_SH3, LD_SH, LD_SH3, LD_SH4, INTREG, INTREG_UDISP_H, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LD_SH4, LD_SH, LD_SH4, INTREG, INTREG_SDISP, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_UH1, LD_UH, LD_UH1, LD_UH2, INTREG, INTREG_POSTINC, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_UH2, LD_UH, LD_UH2, LD_UH5, INTREG, INTREG_PREDEC, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_UH5, LD_UH, LD_UH5, LD_UH3, INTREG, INTREG_INDEX, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_UH3, LD_UH, LD_UH3, LD_UH4, INTREG, INTREG_UDISP_H, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LD_UH4, LD_UH, LD_UH4, INTREG, INTREG_SDISP, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_W1, LD_W, LD_W1, LD_W2, INTREG, INTREG_POSTINC, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_W2, LD_W, LD_W2, LD_W5, INTREG, INTREG_PREDEC, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_W5, LD_W, LD_W5, LD_W6, INTREG, INTREG_INDEX, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_W6, LD_W, LD_W6, LD_W3, INTREG, INTREG_XINDEX, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(LD_W3, LD_W, LD_W3, LD_W4, INTREG, INTREG_UDISP_W, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LD_W4, LD_W, LD_W4, INTREG, INTREG_SDISP, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(LDC_D1, LDC_D, LDC_D1, CPNO, CPREG_D, INTREG_UDISP_W, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(LDC_D2, LDC_D, LDC_D2, LDC_D1, CPNO, CPREG_D, INTREG_PREDEC, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(LDC_D3, LDC_D, LDC_D3, LDC_D2, CPNO, CPREG_D, INTREG_INDEX, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(LDC_W1, LDC_W, LDC_W1, CPNO, CPREG, INTREG_UDISP_W, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(LDC_W2, LDC_W, LDC_W2, LDC_W1, CPNO, CPREG, INTREG_PREDEC, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(LDC_W3, LDC_W, LDC_W3, LDC_W2, CPNO, CPREG, INTREG_INDEX, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LDC0_D, LDC0_D, LDC0_D, CPREG_D, INTREG_UDISP_W, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LDC0_W, LDC0_W, LDC0_W, CPREG, INTREG_UDISP_W, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_CM3(LDCM_D, LDCM_D, LDCM_D, LDCM_D_PU, CPNO, INTREG, REGLIST_CPD8, AVR32_V1), mgl@1371: + SYNTAX_NORMALM3(LDCM_D_PU, LDCM_D, LDCM_D_PU, CPNO, INTREG_POSTINC, REGLIST_CPD8, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_CM3(LDCM_W, LDCM_W, LDCM_W, LDCM_W_PU, CPNO, INTREG, REGLIST_CP8, AVR32_V1), mgl@1371: + SYNTAX_NORMALM3(LDCM_W_PU, LDCM_W, LDCM_W_PU, CPNO, INTREG_POSTINC, REGLIST_CP8, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LDDPC, LDDPC, LDDPC, INTREG, PC_UDISP_W, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LDDPC_EXT, LDDPC, LDDPC_EXT, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LDDSP, LDDSP, LDDSP, INTREG, SP_UDISP_W, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LDINS_B, LDINS_B, LDINS_B, INTREG_BSEL, INTREG_SDISP, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LDINS_H, LDINS_H, LDINS_H, INTREG_HSEL, INTREG_SDISP_H, AVR32_V1), mgl@1371: + SYNTAX_NORMALM1(LDM, LDM, LDM, REGLIST_LDM, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_CM2(LDMTS, LDMTS, LDMTS, LDMTS_PU, INTREG, REGLIST16, AVR32_V1), mgl@1371: + SYNTAX_NORMALM2(LDMTS_PU, LDMTS, LDMTS_PU, INTREG_POSTINC, REGLIST16, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LDSWP_SH, LDSWP_SH, LDSWP_SH, INTREG, INTREG_SDISP_H, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LDSWP_UH, LDSWP_UH, LDSWP_UH, INTREG, INTREG_SDISP_H, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LDSWP_W, LDSWP_W, LDSWP_W, INTREG, INTREG_SDISP_W, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(LSL1, LSL, LSL1, LSL3, INTREG, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(LSL3, LSL, LSL3, LSL2, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LSL2, LSL, LSL2, INTREG, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(LSR1, LSR, LSR1, LSR3, INTREG, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(LSR3, LSR, LSR3, LSR2, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(LSR2, LSR, LSR2, INTREG, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(MAC, MAC, MAC, INTREG, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(MACHH_D, MACHH_D, MACHH_D, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL3(MACHH_W, MACHH_W, MACHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL3(MACS_D, MACS_D, MACS_D, INTREG, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(MACSATHH_W, MACSATHH_W, MACSATHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL3(MACUD, MACU_D, MACUD, INTREG, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(MACWH_D, MACWH_D, MACWH_D, INTREG, INTREG, INTREG_HSEL, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL3(MAX, MAX, MAX, INTREG, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(MCALL, MCALL, MCALL, MCALL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MFDR, MFDR, MFDR, INTREG, UNSIGNED_CONST_W, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MFSR, MFSR, MFSR, INTREG, UNSIGNED_CONST_W, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(MIN, MIN, MIN, INTREG, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOV3, MOV, MOV3, MOV1, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOV1, MOV, MOV1, MOV2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOV2, MOV, MOV2,INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVEQ1, MOVEQ, MOVEQ1, MOVEQ2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVNE1, MOVNE, MOVNE1, MOVNE2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVCC1, MOVCC, MOVCC1, MOVCC2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVCS1, MOVCS, MOVCS1, MOVCS2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVGE1, MOVGE, MOVGE1, MOVGE2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVLT1, MOVLT, MOVLT1, MOVLT2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVMI1, MOVMI, MOVMI1, MOVMI2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVPL1, MOVPL, MOVPL1, MOVPL2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVLS1, MOVLS, MOVLS1, MOVLS2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVGT1, MOVGT, MOVGT1, MOVGT2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVLE1, MOVLE, MOVLE1, MOVLE2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVHI1, MOVHI, MOVHI1, MOVHI2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVVS1, MOVVS, MOVVS1, MOVVS2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVVC1, MOVVC, MOVVC1, MOVVC2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVQS1, MOVQS, MOVQS1, MOVQS2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVAL1, MOVAL, MOVAL1, MOVAL2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVHS1, MOVHS, MOVCC1, MOVHS2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MOVLO1, MOVLO, MOVCS1, MOVLO2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVEQ2, MOVEQ, MOVEQ2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVNE2, MOVNE, MOVNE2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVCC2, MOVCC, MOVCC2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVCS2, MOVCS, MOVCS2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVGE2, MOVGE, MOVGE2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVLT2, MOVLT, MOVLT2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVMI2, MOVMI, MOVMI2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVPL2, MOVPL, MOVPL2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVLS2, MOVLS, MOVLS2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVGT2, MOVGT, MOVGT2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVLE2, MOVLE, MOVLE2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVHI2, MOVHI, MOVHI2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVVS2, MOVVS, MOVVS2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVVC2, MOVVC, MOVVC2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVQS2, MOVQS, MOVQS2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVAL2, MOVAL, MOVAL2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVHS2, MOVHS, MOVCC2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MOVLO2, MOVLO, MOVCS2, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MTDR, MTDR, MTDR, UNSIGNED_CONST_W, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MTSR, MTSR, MTSR, UNSIGNED_CONST_W, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(MUL1, MUL, MUL1, MUL2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(MUL2, MUL, MUL2, MUL3, INTREG, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(MUL3, MUL, MUL3, INTREG, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(MULHH_W, MULHH_W, MULHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL3(MULNHH_W, MULNHH_W, MULNHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL3(MULNWH_D, MULNWH_D, MULNWH_D, INTREG, INTREG, INTREG_HSEL, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL3(MULSD, MULS_D, MULSD, INTREG, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(MULSATHH_H, MULSATHH_H, MULSATHH_H, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL3(MULSATHH_W, MULSATHH_W, MULSATHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL3(MULSATRNDHH_H, MULSATRNDHH_H, MULSATRNDHH_H, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL3(MULSATRNDWH_W, MULSATRNDWH_W, MULSATRNDWH_W, INTREG, INTREG, INTREG_HSEL, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL3(MULSATWH_W, MULSATWH_W, MULSATWH_W, INTREG, INTREG, INTREG_HSEL, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL3(MULU_D, MULU_D, MULU_D, INTREG, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(MULWH_D, MULWH_D, MULWH_D, INTREG, INTREG, INTREG_HSEL, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL1(MUSFR, MUSFR, MUSFR, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(MUSTR, MUSTR, MUSTR, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(MVCR_D, MVCR_D, MVCR_D, CPNO, DWREG, CPREG_D, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(MVCR_W, MVCR_W, MVCR_W, CPNO, INTREG, CPREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(MVRC_D, MVRC_D, MVRC_D, CPNO, CPREG_D, DWREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(MVRC_W, MVRC_W, MVRC_W, CPNO, CPREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(NEG, NEG, NEG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL0(NOP, NOP, NOP, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(OR1, OR, OR1, OR2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(OR2, OR, OR2, OR3, INTREG, INTREG, INTREG_LSL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(OR3, OR, OR3, INTREG, INTREG, INTREG_LSR, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(ORH, ORH, ORH, INTREG, UNSIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(ORL, ORL, ORL, INTREG, UNSIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(PABS_SB, PABS_SB, PABS_SB, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL2(PABS_SH, PABS_SH, PABS_SH, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PACKSH_SB, PACKSH_SB, PACKSH_SB, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PACKSH_UB, PACKSH_UB, PACKSH_UB, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PACKW_SH, PACKW_SH, PACKW_SH, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PADD_B, PADD_B, PADD_B, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PADD_H, PADD_H, PADD_H, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PADDH_SH, PADDH_SH, PADDH_SH, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PADDH_UB, PADDH_UB, PADDH_UB, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PADDS_SB, PADDS_SB, PADDS_SB, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PADDS_SH, PADDS_SH, PADDS_SH, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PADDS_UB, PADDS_UB, PADDS_UB, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PADDS_UH, PADDS_UH, PADDS_UH, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PADDSUB_H, PADDSUB_H, PADDSUB_H, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PADDSUBH_SH, PADDSUBH_SH, PADDSUBH_SH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PADDSUBS_SH, PADDSUBS_SH, PADDSUBS_SH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PADDSUBS_UH, PADDSUBS_UH, PADDSUBS_UH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PADDX_H, PADDX_H, PADDX_H, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PADDXH_SH, PADDXH_SH, PADDXH_SH, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PADDXS_SH, PADDXS_SH, PADDXS_SH, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PADDXS_UH, PADDXS_UH, PADDXS_UH, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PASR_B, PASR_B, PASR_B, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PASR_H, PASR_H, PASR_H, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PAVG_SH, PAVG_SH, PAVG_SH, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PAVG_UB, PAVG_UB, PAVG_UB, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PLSL_B, PLSL_B, PLSL_B, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PLSL_H, PLSL_H, PLSL_H, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PLSR_B, PLSR_B, PLSR_B, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PLSR_H, PLSR_H, PLSR_H, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PMAX_SH, PMAX_SH, PMAX_SH, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PMAX_UB, PMAX_UB, PMAX_UB, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PMIN_SH, PMIN_SH, PMIN_SH, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PMIN_UB, PMIN_UB, PMIN_UB, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL0(POPJC, POPJC, POPJC, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_CM1(POPM, POPM, POPM, POPM_E, REGLIST9, AVR32_V1), mgl@1371: + SYNTAX_NORMALM1(POPM_E, POPM, POPM_E, REGLIST16, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(PREF, PREF, PREF, INTREG_SDISP, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(PSAD, PSAD, PSAD, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PSUB_B, PSUB_B, PSUB_B, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PSUB_H, PSUB_H, PSUB_H, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PSUBADD_H, PSUBADD_H, PSUBADD_H, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PSUBADDH_SH, PSUBADDH_SH, PSUBADDH_SH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PSUBADDS_SH, PSUBADDS_SH, PSUBADDS_SH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PSUBADDS_UH, PSUBADDS_UH, PSUBADDS_UH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PSUBH_SH, PSUBH_SH, PSUBH_SH, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PSUBH_UB, PSUBH_UB, PSUBH_UB, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PSUBS_SB, PSUBS_SB, PSUBS_SB, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PSUBS_SH, PSUBS_SH, PSUBS_SH, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PSUBS_UB, PSUBS_UB, PSUBS_UB, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PSUBS_UH, PSUBS_UH, PSUBS_UH, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PSUBX_H, PSUBX_H, PSUBX_H, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PSUBXH_SH, PSUBXH_SH, PSUBXH_SH, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PSUBXS_SH, PSUBXS_SH, PSUBXS_SH, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL3(PSUBXS_UH, PSUBXS_UH, PSUBXS_UH, INTREG, INTREG, INTREG, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL2(PUNPCKSB_H, PUNPCKSB_H, PUNPCKSB_H, INTREG, INTREG_HSEL, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL2(PUNPCKUB_H, PUNPCKUB_H, PUNPCKUB_H, INTREG, INTREG_HSEL, AVR32_SIMD), mgl@1371: + SYNTAX_NORMAL0(PUSHJC, PUSHJC, PUSHJC, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_CM1(PUSHM, PUSHM, PUSHM, PUSHM_E, REGLIST8, AVR32_V1), mgl@1371: + SYNTAX_NORMALM1(PUSHM_E, PUSHM, PUSHM_E, REGLIST16, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C1(RCALL1, RCALL, RCALL1, RCALL2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RCALL2, RCALL, RCALL2, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETEQ, RETEQ, RETEQ, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETNE, RETNE, RETNE, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETCC, RETCC, RETCC, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETCS, RETCS, RETCS, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETGE, RETGE, RETGE, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETLT, RETLT, RETLT, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETMI, RETMI, RETMI, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETPL, RETPL, RETPL, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETLS, RETLS, RETLS, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETGT, RETGT, RETGT, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETLE, RETLE, RETLE, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETHI, RETHI, RETHI, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETVS, RETVS, RETVS, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETVC, RETVC, RETVC, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETQS, RETQS, RETQS, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETAL, RETAL, RETAL, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETHS, RETHS, RETCC, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RETLO, RETLO, RETCS, RETVAL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL0(RETD, RETD, RETD, AVR32_V1), mgl@1371: + SYNTAX_NORMAL0(RETE, RETE, RETE, AVR32_V1), mgl@1371: + SYNTAX_NORMAL0(RETJ, RETJ, RETJ, AVR32_V1), mgl@1371: + SYNTAX_NORMAL0(RETS, RETS, RETS, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(RJMP, RJMP, RJMP, JMPLABEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(ROL, ROL, ROL, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(ROR, ROR, ROR, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(RSUB1, RSUB, RSUB1, RSUB2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(RSUB2, RSUB, RSUB2, INTREG, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(SATADD_H, SATADD_H, SATADD_H, INTREG, INTREG, INTREG, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL3(SATADD_W, SATADD_W, SATADD_W, INTREG, INTREG, INTREG, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL2(SATRNDS, SATRNDS, SATRNDS, INTREG_LSR, UNSIGNED_NUMBER, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL2(SATRNDU, SATRNDU, SATRNDU, INTREG_LSR, UNSIGNED_NUMBER, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL2(SATS, SATS, SATS, INTREG_LSR, UNSIGNED_NUMBER, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL3(SATSUB_H, SATSUB_H, SATSUB_H, INTREG, INTREG, INTREG, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL_C3(SATSUB_W1, SATSUB_W, SATSUB_W1, SATSUB_W2, INTREG, INTREG, INTREG, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL3(SATSUB_W2, SATSUB_W, SATSUB_W2, INTREG, INTREG, SIGNED_CONST, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL2(SATU, SATU, SATU, INTREG_LSR, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(SBC, SBC, SBC, INTREG, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SBR, SBR, SBR, INTREG, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL0(SCALL, SCALL, SCALL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SCR, SCR, SCR, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SLEEP, SLEEP, SLEEP, UNSIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SREQ, SREQ, SREQ, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SRNE, SRNE, SRNE, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SRCC, SRCC, SRCC, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SRCS, SRCS, SRCS, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SRGE, SRGE, SRGE, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SRLT, SRLT, SRLT, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SRMI, SRMI, SRMI, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SRPL, SRPL, SRPL, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SRLS, SRLS, SRLS, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SRGT, SRGT, SRGT, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SRLE, SRLE, SRLE, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SRHI, SRHI, SRHI, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SRVS, SRVS, SRVS, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SRVC, SRVC, SRVC, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SRQS, SRQS, SRQS, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SRAL, SRAL, SRAL, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SRHS, SRHS, SRCC, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SRLO, SRLO, SRCS, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SSRF, SSRF, SSRF, UNSIGNED_NUMBER, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ST_B1, ST_B, ST_B1, ST_B2, INTREG_POSTINC, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ST_B2, ST_B, ST_B2, ST_B5, INTREG_PREDEC, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ST_B5, ST_B, ST_B5, ST_B3, INTREG_INDEX, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ST_B3, ST_B, ST_B3, ST_B4, INTREG_UDISP, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(ST_B4, ST_B, ST_B4, INTREG_SDISP, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ST_D1, ST_D, ST_D1, ST_D2, INTREG_POSTINC, DWREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ST_D2, ST_D, ST_D2, ST_D3, INTREG_PREDEC, DWREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ST_D3, ST_D, ST_D3, ST_D5, INTREG, DWREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ST_D5, ST_D, ST_D5, ST_D4, INTREG_INDEX, DWREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(ST_D4, ST_D, ST_D4, INTREG_SDISP, DWREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ST_H1, ST_H, ST_H1, ST_H2, INTREG_POSTINC, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ST_H2, ST_H, ST_H2, ST_H5, INTREG_PREDEC, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ST_H5, ST_H, ST_H5, ST_H3, INTREG_INDEX, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ST_H3, ST_H, ST_H3, ST_H4, INTREG_UDISP_H, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(ST_H4, ST_H, ST_H4, INTREG_SDISP, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ST_W1, ST_W, ST_W1, ST_W2, INTREG_POSTINC, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ST_W2, ST_W, ST_W2, ST_W5, INTREG_PREDEC, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ST_W5, ST_W, ST_W5, ST_W3, INTREG_INDEX, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(ST_W3, ST_W, ST_W3, ST_W4, INTREG_UDISP_W, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(ST_W4, ST_W, ST_W4, INTREG_SDISP, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(STC_D1, STC_D, STC_D1, CPNO, INTREG_UDISP_W, CPREG_D, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(STC_D2, STC_D, STC_D2, STC_D1, CPNO, INTREG_POSTINC, CPREG_D, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(STC_D3, STC_D, STC_D3, STC_D2, CPNO, INTREG_INDEX, CPREG_D, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(STC_W1, STC_W, STC_W1, CPNO, INTREG_UDISP_W, CPREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(STC_W2, STC_W, STC_W2, STC_W1, CPNO, INTREG_POSTINC, CPREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(STC_W3, STC_W, STC_W3, STC_W2, CPNO, INTREG_INDEX, CPREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(STC0_D, STC0_D, STC0_D, INTREG_UDISP_W, CPREG_D, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(STC0_W, STC0_W, STC0_W, INTREG_UDISP_W, CPREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_CM3(STCM_D, STCM_D, STCM_D, STCM_D_PU, CPNO, INTREG, REGLIST_CPD8, AVR32_V1), mgl@1371: + SYNTAX_NORMALM3(STCM_D_PU, STCM_D, STCM_D_PU, CPNO, INTREG_PREDEC, REGLIST_CPD8, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_CM3(STCM_W, STCM_W, STCM_W, STCM_W_PU, CPNO, INTREG, REGLIST_CP8, AVR32_V1), mgl@1371: + SYNTAX_NORMALM3(STCM_W_PU, STCM_W, STCM_W_PU, CPNO, INTREG_PREDEC, REGLIST_CP8, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(STCOND, STCOND, STCOND, INTREG_SDISP, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(STDSP, STDSP, STDSP, SP_UDISP_W, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(STHH_W2, STHH_W, STHH_W2, STHH_W1, INTREG_INDEX, INTREG_HSEL, INTREG_HSEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(STHH_W1, STHH_W, STHH_W1, INTREG_UDISP_W, INTREG_HSEL, INTREG_HSEL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_CM2(STM, STM, STM, STM_PU, INTREG, REGLIST16, AVR32_V1), mgl@1371: + SYNTAX_NORMALM2(STM_PU, STM, STM_PU, INTREG_PREDEC, REGLIST16, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_CM2(STMTS, STMTS, STMTS, STMTS_PU, INTREG, REGLIST16, AVR32_V1), mgl@1371: + SYNTAX_NORMALM2(STMTS_PU, STMTS, STMTS_PU, INTREG_PREDEC, REGLIST16, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(STSWP_H, STSWP_H, STSWP_H, INTREG_SDISP_H, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(STSWP_W, STSWP_W, STSWP_W, INTREG_SDISP_W, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUB1, SUB, SUB1, SUB2, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(SUB2, SUB, SUB2, SUB5, INTREG, INTREG, INTREG_LSL, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C3(SUB5, SUB, SUB5, SUB3_SP, INTREG, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUB3_SP, SUB, SUB3_SP, SUB3, SP, SIGNED_CONST_W, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUB3, SUB, SUB3, SUB4, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUB4, SUB, SUB4, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBEQ, SUBEQ, SUBEQ, SUB2EQ, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBNE, SUBNE, SUBNE, SUB2NE, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBCC, SUBCC, SUBCC, SUB2CC, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBCS, SUBCS, SUBCS, SUB2CS, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBGE, SUBGE, SUBGE, SUB2GE, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBLT, SUBLT, SUBLT, SUB2LT, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBMI, SUBMI, SUBMI, SUB2MI, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBPL, SUBPL, SUBPL, SUB2PL, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBLS, SUBLS, SUBLS, SUB2LS, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBGT, SUBGT, SUBGT, SUB2GT, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBLE, SUBLE, SUBLE, SUB2LE, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBHI, SUBHI, SUBHI, SUB2HI, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBVS, SUBVS, SUBVS, SUB2VS, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBVC, SUBVC, SUBVC, SUB2VC, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBQS, SUBQS, SUBQS, SUB2QS, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBAL, SUBAL, SUBAL, SUB2AL, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBHS, SUBHS, SUBCC, SUB2CC, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL_C2(SUBLO, SUBLO, SUBCS, SUB2CS, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFEQ, SUBFEQ, SUBFEQ, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFNE, SUBFNE, SUBFNE, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFCC, SUBFCC, SUBFCC, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFCS, SUBFCS, SUBFCS, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFGE, SUBFGE, SUBFGE, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFLT, SUBFLT, SUBFLT, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFMI, SUBFMI, SUBFMI, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFPL, SUBFPL, SUBFPL, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFLS, SUBFLS, SUBFLS, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFGT, SUBFGT, SUBFGT, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFLE, SUBFLE, SUBFLE, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFHI, SUBFHI, SUBFHI, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFVS, SUBFVS, SUBFVS, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFVC, SUBFVC, SUBFVC, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFQS, SUBFQS, SUBFQS, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFAL, SUBFAL, SUBFAL, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFHS, SUBFHS, SUBFCC, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(SUBFLO, SUBFLO, SUBFCS, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(SUBHH_W, SUBHH_W, SUBHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), mgl@1371: + SYNTAX_NORMAL1(SWAP_B, SWAP_B, SWAP_B, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SWAP_BH, SWAP_BH, SWAP_BH, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SWAP_H, SWAP_H, SWAP_H, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(SYNC, SYNC, SYNC, UNSIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL0(TLBR, TLBR, TLBR, AVR32_V1), mgl@1371: + SYNTAX_NORMAL0(TLBS, TLBS, TLBS, AVR32_V1), mgl@1371: + SYNTAX_NORMAL0(TLBW, TLBW, TLBW, AVR32_V1), mgl@1371: + SYNTAX_NORMAL1(TNBZ, TNBZ, TNBZ, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(TST, TST, TST, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL3(XCHG, XCHG, XCHG, INTREG, INTREG, INTREG, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(MEMC, MEMC, MEMC, SIGNED_CONST_W, UNSIGNED_NUMBER, AVR32_RMW), mgl@1371: + SYNTAX_NORMAL2(MEMS, MEMS, MEMS, SIGNED_CONST_W, UNSIGNED_NUMBER, AVR32_RMW), mgl@1371: + SYNTAX_NORMAL2(MEMT, MEMT, MEMT, SIGNED_CONST_W, UNSIGNED_NUMBER, AVR32_RMW), mgl@1371: + SYNTAX_FP(FADD, 3), mgl@1371: + SYNTAX_FP(FSUB, 3), mgl@1371: + SYNTAX_FP(FMAC, 3), mgl@1371: + SYNTAX_FP(FNMAC, 3), mgl@1371: + SYNTAX_FP(FMSC, 3), mgl@1371: + SYNTAX_FP(FNMSC, 3), mgl@1371: + SYNTAX_FP(FMUL, 3), mgl@1371: + SYNTAX_FP(FNMUL, 3), mgl@1371: + SYNTAX_FP(FNEG, 2), mgl@1371: + SYNTAX_FP(FABS, 2), mgl@1371: + SYNTAX_FP(FCMP, 2), mgl@1371: + { mgl@1371: + AVR32_SYNTAX_FMOV1_S, mgl@1371: + AVR32_FP, NULL, AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_FMOV1_S] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_FMOV2_S], mgl@1371: + 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_FPREG_S, mgl@1371: + AVR32_OPERAND_FPREG_S, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_FMOV1_D, mgl@1371: + AVR32_FP, NULL, AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_FMOV1_D] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_FMOV2_D], mgl@1371: + 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_FPREG_D, mgl@1371: + AVR32_OPERAND_FPREG_D, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_FMOV2_S, mgl@1371: + AVR32_FP, NULL, AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_FMOV2_S] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_FMOV3_S], mgl@1371: + 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_INTREG, mgl@1371: + AVR32_OPERAND_FPREG_S, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_FMOV2_D, mgl@1371: + AVR32_FP, NULL, AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_FMOV2_D] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_FMOV3_D], mgl@1371: + 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_DWREG, mgl@1371: + AVR32_OPERAND_FPREG_D, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_FMOV3_S, mgl@1371: + AVR32_FP, NULL, AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_FMOV3_S] }, NULL, mgl@1371: + 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_FPREG_S, mgl@1371: + AVR32_OPERAND_INTREG, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_FMOV3_D, mgl@1371: + AVR32_FP, NULL, AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_FMOV3_D] }, NULL, mgl@1371: + 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_FPREG_D, mgl@1371: + AVR32_OPERAND_DWREG, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_FCASTS_D, mgl@1371: + AVR32_FP, NULL, AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_FCASTS_D] }, NULL, mgl@1371: + 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_FPREG_S, mgl@1371: + AVR32_OPERAND_FPREG_D, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_FCASTD_S, mgl@1371: + AVR32_FP, NULL, AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_FCASTD_S] }, NULL, mgl@1371: + 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_FPREG_D, mgl@1371: + AVR32_OPERAND_FPREG_S, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_LDA_W, mgl@1371: + AVR32_V1, NULL, AVR32_PARSER_LDA, mgl@1371: + { NULL }, NULL, mgl@1371: + 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_INTREG, mgl@1371: + AVR32_OPERAND_SIGNED_CONST, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_CALL, mgl@1371: + AVR32_V1, NULL, AVR32_PARSER_CALL, mgl@1371: + { NULL }, NULL, mgl@1371: + 1, mgl@1371: + { mgl@1371: + AVR32_OPERAND_JMPLABEL, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOSVMAC0, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMAC], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMAC0] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOSVMAC1], 4, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_OUT0, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOSVMAC1, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMAC], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMAC1] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOSVMAC2], 4, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_OUT1, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOSVMAC2, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMAC], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMAC2] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOSVMAC3], 4, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_OUT2, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOSVMAC3, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMAC], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMAC3] }, mgl@1371: + NULL, 4, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_OUT3, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOSVMUL0, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMUL], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMUL0] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOSVMUL1], 4, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_OUT0, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOSVMUL1, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMUL], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMUL1] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOSVMUL2], 4, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_OUT1, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOSVMUL2, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMUL], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMUL2] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOSVMUL3], 4, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_OUT2, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOSVMUL3, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMUL], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMUL3] }, mgl@1371: + NULL, 4, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_OUT3, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOVMAC0, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMAC], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMAC0] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOVMAC1], 4, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_OUT0, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOVMAC1, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMAC], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMAC1] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOVMAC2], 4, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_OUT1, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOVMAC2, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMAC], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMAC2] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOVMAC3], 4, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_OUT2, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOVMAC3, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMAC], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMAC3] }, mgl@1371: + NULL, 4, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_OUT3, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOVMUL0, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMUL], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMUL0] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOVMUL1], 4, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_OUT0, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOVMUL1, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMUL], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMUL1] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOVMUL2], 4, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_OUT1, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOVMUL2, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMUL], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMUL2] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOVMUL3], 4, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_OUT2, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOVMUL3, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMUL], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMUL3] }, mgl@1371: + NULL, 4, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_OUT3, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOLD_D2, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_D], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_D2] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOLD_D3], 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_REG_D, mgl@1371: + AVR32_OPERAND_INTREG_PREDEC, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOLD_D3, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_D], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_D3] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOLD_D1], 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_REG_D, mgl@1371: + AVR32_OPERAND_INTREG_INDEX, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOLD_D1, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_D], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_D1] }, mgl@1371: + NULL, 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_REG_D, mgl@1371: + AVR32_OPERAND_INTREG_UDISP_W, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOLD_W2, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_W], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_W2] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOLD_W3], 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_REG_W, mgl@1371: + AVR32_OPERAND_INTREG_PREDEC, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOLD_W3, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_W], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_W3] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOLD_W1], 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_REG_W, mgl@1371: + AVR32_OPERAND_INTREG_INDEX, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOLD_W1, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_W], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_W1] }, mgl@1371: + NULL, 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_REG_W, mgl@1371: + AVR32_OPERAND_INTREG_UDISP_W, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOLDM_D, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLDM_D], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLDM_D] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOLDM_D_PU], -2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_INTREG, mgl@1371: + AVR32_OPERAND_PICO_REGLIST_D, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOLDM_D_PU, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLDM_D], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLDM_D_PU] }, mgl@1371: + NULL, -2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_INTREG_POSTINC, mgl@1371: + AVR32_OPERAND_PICO_REGLIST_D, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOLDM_W, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLDM_W], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLDM_W] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOLDM_W_PU], -2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_INTREG, mgl@1371: + AVR32_OPERAND_PICO_REGLIST_W, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOLDM_W_PU, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLDM_W], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLDM_W_PU] }, mgl@1371: + NULL, -2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_INTREG_POSTINC, mgl@1371: + AVR32_OPERAND_PICO_REGLIST_W, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOMV_D1, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOMV_D], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOMV_D1] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOMV_D2], 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_DWREG, mgl@1371: + AVR32_OPERAND_PICO_REG_D, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOMV_D2, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOMV_D], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOMV_D2] }, mgl@1371: + NULL, 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_REG_D, mgl@1371: + AVR32_OPERAND_DWREG, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOMV_W1, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOMV_W], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOMV_W1] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOMV_W2], 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_INTREG, mgl@1371: + AVR32_OPERAND_PICO_REG_W, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOMV_W2, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOMV_W], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOMV_W2] }, mgl@1371: + NULL, 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_PICO_REG_W, mgl@1371: + AVR32_OPERAND_INTREG, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOST_D2, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_D], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_D2] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOST_D3], 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_INTREG_POSTINC, mgl@1371: + AVR32_OPERAND_PICO_REG_D, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOST_D3, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_D], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_D3] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOST_D1], 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_INTREG_INDEX, mgl@1371: + AVR32_OPERAND_PICO_REG_D, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOST_D1, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_D], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_D1] }, mgl@1371: + NULL, 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_INTREG_UDISP_W, mgl@1371: + AVR32_OPERAND_PICO_REG_D, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOST_W2, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_W], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_W2] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOST_W3], 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_INTREG_POSTINC, mgl@1371: + AVR32_OPERAND_PICO_REG_W, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOST_W3, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_W], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_W3] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOST_W1], 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_INTREG_INDEX, mgl@1371: + AVR32_OPERAND_PICO_REG_W, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOST_W1, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_W], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_W1] }, mgl@1371: + NULL, 2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_INTREG_UDISP_W, mgl@1371: + AVR32_OPERAND_PICO_REG_W, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOSTM_D, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSTM_D], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSTM_D] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOSTM_D_PU], -2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_INTREG, mgl@1371: + AVR32_OPERAND_PICO_REGLIST_D, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOSTM_D_PU, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSTM_D], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSTM_D_PU] }, mgl@1371: + NULL, -2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_INTREG_PREDEC, mgl@1371: + AVR32_OPERAND_PICO_REGLIST_D, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOSTM_W, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSTM_W], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSTM_W] }, mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_PICOSTM_W_PU], -2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_INTREG, mgl@1371: + AVR32_OPERAND_PICO_REGLIST_W, mgl@1371: + }, mgl@1371: + }, mgl@1371: + { mgl@1371: + AVR32_SYNTAX_PICOSTM_W_PU, mgl@1371: + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSTM_W], AVR32_PARSER_ALIAS, mgl@1371: + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSTM_W_PU] }, mgl@1371: + NULL, -2, mgl@1371: + { mgl@1371: + AVR32_OPERAND_INTREG_PREDEC, mgl@1371: + AVR32_OPERAND_PICO_REGLIST_W, mgl@1371: + }, mgl@1371: + }, mgl@1371: + SYNTAX_NORMAL2(RSUBEQ, RSUBEQ, RSUBEQ, INTREG, SIGNED_CONST, AVR32_V1), mgl@1371: + SYNTAX_NORMAL2(RSUBNE, RSUBNE, RSUBNE, INTREG, SIGNED_CONST, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(RSUBCC, RSUBCC, RSUBCC, INTREG, SIGNED_CONST, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(RSUBCS, RSUBCS, RSUBCS, INTREG, SIGNED_CONST, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(RSUBGE, RSUBGE, RSUBGE, INTREG, SIGNED_CONST, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(RSUBLT, RSUBLT, RSUBLT, INTREG, SIGNED_CONST, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(RSUBMI, RSUBMI, RSUBMI, INTREG, SIGNED_CONST, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(RSUBPL, RSUBPL, RSUBPL, INTREG, SIGNED_CONST, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(RSUBLS, RSUBLS, RSUBLS, INTREG, SIGNED_CONST, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(RSUBGT, RSUBGT, RSUBGT, INTREG, SIGNED_CONST, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(RSUBLE, RSUBLE, RSUBLE, INTREG, SIGNED_CONST, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(RSUBHI, RSUBHI, RSUBHI, INTREG, SIGNED_CONST, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(RSUBVS, RSUBVS, RSUBVS, INTREG, SIGNED_CONST, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(RSUBVC, RSUBVC, RSUBVC, INTREG, SIGNED_CONST, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(RSUBQS, RSUBQS, RSUBQS, INTREG, SIGNED_CONST, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(RSUBAL, RSUBAL, RSUBAL, INTREG, SIGNED_CONST, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(RSUBHS, RSUBHS, RSUBCC, INTREG, SIGNED_CONST, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(RSUBLO, RSUBLO, RSUBCS, INTREG, SIGNED_CONST, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDEQ, ADDEQ, ADDEQ, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDNE, ADDNE, ADDNE, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDCC, ADDCC, ADDCC, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDCS, ADDCS, ADDCS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDGE, ADDGE, ADDGE, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDLT, ADDLT, ADDLT, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDMI, ADDMI, ADDMI, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDPL, ADDPL, ADDPL, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDLS, ADDLS, ADDLS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDGT, ADDGT, ADDGT, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDLE, ADDLE, ADDLE, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDHI, ADDHI, ADDHI, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDVS, ADDVS, ADDVS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDVC, ADDVC, ADDVC, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDQS, ADDQS, ADDQS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDAL, ADDAL, ADDAL, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDHS, ADDHS, ADDCC, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ADDLO, ADDLO, ADDCS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2EQ, SUBEQ, SUB2EQ, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2NE, SUBNE, SUB2NE, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2CC, SUBCC, SUB2CC, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2CS, SUBCS, SUB2CS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2GE, SUBGE, SUB2GE, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2LT, SUBLT, SUB2LT, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2MI, SUBMI, SUB2MI, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2PL, SUBPL, SUB2PL, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2LS, SUBLS, SUB2LS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2GT, SUBGT, SUB2GT, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2LE, SUBLE, SUB2LE, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2HI, SUBHI, SUB2HI, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2VS, SUBVS, SUB2VS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2VC, SUBVC, SUB2VC, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2QS, SUBQS, SUB2QS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2AL, SUBAL, SUB2AL, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2HS, SUBHS, SUB2CC, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(SUB2LO, SUBLO, SUB2CS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDEQ, ANDEQ, ANDEQ, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDNE, ANDNE, ANDNE, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDCC, ANDCC, ANDCC, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDCS, ANDCS, ANDCS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDGE, ANDGE, ANDGE, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDLT, ANDLT, ANDLT, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDMI, ANDMI, ANDMI, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDPL, ANDPL, ANDPL, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDLS, ANDLS, ANDLS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDGT, ANDGT, ANDGT, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDLE, ANDLE, ANDLE, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDHI, ANDHI, ANDHI, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDVS, ANDVS, ANDVS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDVC, ANDVC, ANDVC, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDQS, ANDQS, ANDQS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDAL, ANDAL, ANDAL, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDHS, ANDHS, ANDCC, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ANDLO, ANDLO, ANDCS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(OREQ, OREQ, OREQ, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ORNE, ORNE, ORNE, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ORCC, ORCC, ORCC, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ORCS, ORCS, ORCS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ORGE, ORGE, ORGE, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ORLT, ORLT, ORLT, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ORMI, ORMI, ORMI, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ORPL, ORPL, ORPL, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ORLS, ORLS, ORLS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ORGT, ORGT, ORGT, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ORLE, ORLE, ORLE, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ORHI, ORHI, ORHI, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ORVS, ORVS, ORVS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ORVC, ORVC, ORVC, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ORQS, ORQS, ORQS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ORAL, ORAL, ORAL, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ORHS, ORHS, ORCC, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(ORLO, ORLO, ORCS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EOREQ, EOREQ, EOREQ, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EORNE, EORNE, EORNE, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EORCC, EORCC, EORCC, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EORCS, EORCS, EORCS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EORGE, EORGE, EORGE, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EORLT, EORLT, EORLT, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EORMI, EORMI, EORMI, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EORPL, EORPL, EORPL, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EORLS, EORLS, EORLS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EORGT, EORGT, EORGT, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EORLE, EORLE, EORLE, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EORHI, EORHI, EORHI, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EORVS, EORVS, EORVS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EORVC, EORVC, EORVC, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EORQS, EORQS, EORQS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EORAL, EORAL, EORAL, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EORHS, EORHS, EORCC, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL3(EORLO, EORLO, EORCS, INTREG, INTREG, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WEQ, LD_WEQ, LD_WEQ, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WNE, LD_WNE, LD_WNE, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WCC, LD_WCC, LD_WCC, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WCS, LD_WCS, LD_WCS, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WGE, LD_WGE, LD_WGE, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WLT, LD_WLT, LD_WLT, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WMI, LD_WMI, LD_WMI, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WPL, LD_WPL, LD_WPL, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WLS, LD_WLS, LD_WLS, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WGT, LD_WGT, LD_WGT, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WLE, LD_WLE, LD_WLE, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WHI, LD_WHI, LD_WHI, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WVS, LD_WVS, LD_WVS, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WVC, LD_WVC, LD_WVC, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WQS, LD_WQS, LD_WQS, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WAL, LD_WAL, LD_WAL, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WHS, LD_WHS, LD_WCC, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_WLO, LD_WLO, LD_WCS, INTREG, INTREG_UDISP_W, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHEQ, LD_SHEQ, LD_SHEQ, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHNE, LD_SHNE, LD_SHNE, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHCC, LD_SHCC, LD_SHCC, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHCS, LD_SHCS, LD_SHCS, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHGE, LD_SHGE, LD_SHGE, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHLT, LD_SHLT, LD_SHLT, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHMI, LD_SHMI, LD_SHMI, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHPL, LD_SHPL, LD_SHPL, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHLS, LD_SHLS, LD_SHLS, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHGT, LD_SHGT, LD_SHGT, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHLE, LD_SHLE, LD_SHLE, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHHI, LD_SHHI, LD_SHHI, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHVS, LD_SHVS, LD_SHVS, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHVC, LD_SHVC, LD_SHVC, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHQS, LD_SHQS, LD_SHQS, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHAL, LD_SHAL, LD_SHAL, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHHS, LD_SHHS, LD_SHCC, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SHLO, LD_SHLO, LD_SHCS, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHEQ, LD_UHEQ, LD_UHEQ, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHNE, LD_UHNE, LD_UHNE, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHCC, LD_UHCC, LD_UHCC, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHCS, LD_UHCS, LD_UHCS, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHGE, LD_UHGE, LD_UHGE, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHLT, LD_UHLT, LD_UHLT, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHMI, LD_UHMI, LD_UHMI, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHPL, LD_UHPL, LD_UHPL, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHLS, LD_UHLS, LD_UHLS, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHGT, LD_UHGT, LD_UHGT, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHLE, LD_UHLE, LD_UHLE, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHHI, LD_UHHI, LD_UHHI, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHVS, LD_UHVS, LD_UHVS, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHVC, LD_UHVC, LD_UHVC, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHQS, LD_UHQS, LD_UHQS, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHAL, LD_UHAL, LD_UHAL, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHHS, LD_UHHS, LD_UHCC, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UHLO, LD_UHLO, LD_UHCS, INTREG, INTREG_UDISP_H, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBEQ, LD_SBEQ, LD_SBEQ, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBNE, LD_SBNE, LD_SBNE, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBCC, LD_SBCC, LD_SBCC, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBCS, LD_SBCS, LD_SBCS, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBGE, LD_SBGE, LD_SBGE, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBLT, LD_SBLT, LD_SBLT, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBMI, LD_SBMI, LD_SBMI, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBPL, LD_SBPL, LD_SBPL, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBLS, LD_SBLS, LD_SBLS, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBGT, LD_SBGT, LD_SBGT, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBLE, LD_SBLE, LD_SBLE, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBHI, LD_SBHI, LD_SBHI, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBVS, LD_SBVS, LD_SBVS, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBVC, LD_SBVC, LD_SBVC, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBQS, LD_SBQS, LD_SBQS, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBAL, LD_SBAL, LD_SBAL, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBHS, LD_SBHS, LD_SBCC, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_SBLO, LD_SBLO, LD_SBCS, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBEQ, LD_UBEQ, LD_UBEQ, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBNE, LD_UBNE, LD_UBNE, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBCC, LD_UBCC, LD_UBCC, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBCS, LD_UBCS, LD_UBCS, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBGE, LD_UBGE, LD_UBGE, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBLT, LD_UBLT, LD_UBLT, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBMI, LD_UBMI, LD_UBMI, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBPL, LD_UBPL, LD_UBPL, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBLS, LD_UBLS, LD_UBLS, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBGT, LD_UBGT, LD_UBGT, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBLE, LD_UBLE, LD_UBLE, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBHI, LD_UBHI, LD_UBHI, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBVS, LD_UBVS, LD_UBVS, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBVC, LD_UBVC, LD_UBVC, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBQS, LD_UBQS, LD_UBQS, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBAL, LD_UBAL, LD_UBAL, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBHS, LD_UBHS, LD_UBCC, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(LD_UBLO, LD_UBLO, LD_UBCS, INTREG, INTREG_UDISP, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WEQ, ST_WEQ, ST_WEQ, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WNE, ST_WNE, ST_WNE, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WCC, ST_WCC, ST_WCC, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WCS, ST_WCS, ST_WCS, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WGE, ST_WGE, ST_WGE, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WLT, ST_WLT, ST_WLT, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WMI, ST_WMI, ST_WMI, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WPL, ST_WPL, ST_WPL, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WLS, ST_WLS, ST_WLS, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WGT, ST_WGT, ST_WGT, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WLE, ST_WLE, ST_WLE, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WHI, ST_WHI, ST_WHI, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WVS, ST_WVS, ST_WVS, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WVC, ST_WVC, ST_WVC, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WQS, ST_WQS, ST_WQS, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WAL, ST_WAL, ST_WAL, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WHS, ST_WHS, ST_WCC, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_WLO, ST_WLO, ST_WCS, INTREG_UDISP_W, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HEQ, ST_HEQ, ST_HEQ, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HNE, ST_HNE, ST_HNE, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HCC, ST_HCC, ST_HCC, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HCS, ST_HCS, ST_HCS, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HGE, ST_HGE, ST_HGE, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HLT, ST_HLT, ST_HLT, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HMI, ST_HMI, ST_HMI, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HPL, ST_HPL, ST_HPL, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HLS, ST_HLS, ST_HLS, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HGT, ST_HGT, ST_HGT, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HLE, ST_HLE, ST_HLE, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HHI, ST_HHI, ST_HHI, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HVS, ST_HVS, ST_HVS, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HVC, ST_HVC, ST_HVC, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HQS, ST_HQS, ST_HQS, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HAL, ST_HAL, ST_HAL, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HHS, ST_HHS, ST_HCC, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_HLO, ST_HLO, ST_HCS, INTREG_UDISP_H, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BEQ, ST_BEQ, ST_BEQ, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BNE, ST_BNE, ST_BNE, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BCC, ST_BCC, ST_BCC, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BCS, ST_BCS, ST_BCS, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BGE, ST_BGE, ST_BGE, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BLT, ST_BLT, ST_BLT, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BMI, ST_BMI, ST_BMI, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BPL, ST_BPL, ST_BPL, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BLS, ST_BLS, ST_BLS, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BGT, ST_BGT, ST_BGT, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BLE, ST_BLE, ST_BLE, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BHI, ST_BHI, ST_BHI, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BVS, ST_BVS, ST_BVS, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BVC, ST_BVC, ST_BVC, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BQS, ST_BQS, ST_BQS, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BAL, ST_BAL, ST_BAL, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BHS, ST_BHS, ST_BCC, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(ST_BLO, ST_BLO, ST_BCS, INTREG_UDISP, INTREG, AVR32_V2), mgl@1371: + SYNTAX_NORMAL2(MOVH, MOVH, MOVH, INTREG, UNSIGNED_CONST, AVR32_V2), mgl@1371: + mgl@1371: + }; mgl@1371: + mgl@1371: +#define NORMAL_MNEMONIC(name, syntax, str) \ mgl@1371: + { \ mgl@1371: + AVR32_MNEMONIC_##name, str, \ mgl@1371: + &avr32_syntax_table[AVR32_SYNTAX_##syntax], \ mgl@1371: + } mgl@1371: +#define FP_MNEMONIC(name, syntax, str) \ mgl@1371: + NORMAL_MNEMONIC(name##_S, syntax##_S, str ".s"), \ mgl@1371: + NORMAL_MNEMONIC(name##_D, syntax##_D, str ".d") mgl@1371: + mgl@1371: +const struct avr32_mnemonic avr32_mnemonic_table[] = mgl@1371: + { mgl@1371: + NORMAL_MNEMONIC(ABS, ABS, "abs"), mgl@1371: + NORMAL_MNEMONIC(ACALL, ACALL, "acall"), mgl@1371: + NORMAL_MNEMONIC(ACR, ACR, "acr"), mgl@1371: + NORMAL_MNEMONIC(ADC, ADC, "adc"), mgl@1371: + NORMAL_MNEMONIC(ADD, ADD1, "add"), mgl@1371: + NORMAL_MNEMONIC(ADDABS, ADDABS, "addabs"), mgl@1371: + NORMAL_MNEMONIC(ADDHH_W, ADDHH_W, "addhh.w"), mgl@1371: + NORMAL_MNEMONIC(AND, AND1, "and"), mgl@1371: + NORMAL_MNEMONIC(ANDH, ANDH, "andh"), mgl@1371: + NORMAL_MNEMONIC(ANDL, ANDL, "andl"), mgl@1371: + NORMAL_MNEMONIC(ANDN, ANDN, "andn"), mgl@1371: + NORMAL_MNEMONIC(ASR, ASR1, "asr"), mgl@1371: + NORMAL_MNEMONIC(BFEXTS, BFEXTS, "bfexts"), mgl@1371: + NORMAL_MNEMONIC(BFEXTU, BFEXTU, "bfextu"), mgl@1371: + NORMAL_MNEMONIC(BFINS, BFINS, "bfins"), mgl@1371: + NORMAL_MNEMONIC(BLD, BLD, "bld"), mgl@1371: + NORMAL_MNEMONIC(BREQ, BREQ1, "breq"), mgl@1371: + NORMAL_MNEMONIC(BRNE, BRNE1, "brne"), mgl@1371: + NORMAL_MNEMONIC(BRCC, BRCC1, "brcc"), mgl@1371: + NORMAL_MNEMONIC(BRCS, BRCS1, "brcs"), mgl@1371: + NORMAL_MNEMONIC(BRGE, BRGE1, "brge"), mgl@1371: + NORMAL_MNEMONIC(BRLT, BRLT1, "brlt"), mgl@1371: + NORMAL_MNEMONIC(BRMI, BRMI1, "brmi"), mgl@1371: + NORMAL_MNEMONIC(BRPL, BRPL1, "brpl"), mgl@1371: + NORMAL_MNEMONIC(BRHS, BRHS1, "brhs"), mgl@1371: + NORMAL_MNEMONIC(BRLO, BRLO1, "brlo"), mgl@1371: + NORMAL_MNEMONIC(BRLS, BRLS, "brls"), mgl@1371: + NORMAL_MNEMONIC(BRGT, BRGT, "brgt"), mgl@1371: + NORMAL_MNEMONIC(BRLE, BRLE, "brle"), mgl@1371: + NORMAL_MNEMONIC(BRHI, BRHI, "brhi"), mgl@1371: + NORMAL_MNEMONIC(BRVS, BRVS, "brvs"), mgl@1371: + NORMAL_MNEMONIC(BRVC, BRVC, "brvc"), mgl@1371: + NORMAL_MNEMONIC(BRQS, BRQS, "brqs"), mgl@1371: + NORMAL_MNEMONIC(BRAL, BRAL, "bral"), mgl@1371: + NORMAL_MNEMONIC(BREAKPOINT, BREAKPOINT, "breakpoint"), mgl@1371: + NORMAL_MNEMONIC(BREV, BREV, "brev"), mgl@1371: + NORMAL_MNEMONIC(BST, BST, "bst"), mgl@1371: + NORMAL_MNEMONIC(CACHE, CACHE, "cache"), mgl@1371: + NORMAL_MNEMONIC(CASTS_B, CASTS_B, "casts.b"), mgl@1371: + NORMAL_MNEMONIC(CASTS_H, CASTS_H, "casts.h"), mgl@1371: + NORMAL_MNEMONIC(CASTU_B, CASTU_B, "castu.b"), mgl@1371: + NORMAL_MNEMONIC(CASTU_H, CASTU_H, "castu.h"), mgl@1371: + NORMAL_MNEMONIC(CBR, CBR, "cbr"), mgl@1371: + NORMAL_MNEMONIC(CLZ, CLZ, "clz"), mgl@1371: + NORMAL_MNEMONIC(COM, COM, "com"), mgl@1371: + NORMAL_MNEMONIC(COP, COP, "cop"), mgl@1371: + NORMAL_MNEMONIC(CP_B, CP_B, "cp.b"), mgl@1371: + NORMAL_MNEMONIC(CP_H, CP_H, "cp.h"), mgl@1371: + NORMAL_MNEMONIC(CP_W, CP_W1, "cp.w"), mgl@1371: + NORMAL_MNEMONIC(CP, CP_W1, "cp"), mgl@1371: + NORMAL_MNEMONIC(CPC, CPC1, "cpc"), mgl@1371: + NORMAL_MNEMONIC(CSRF, CSRF, "csrf"), mgl@1371: + NORMAL_MNEMONIC(CSRFCZ, CSRFCZ, "csrfcz"), mgl@1371: + NORMAL_MNEMONIC(DIVS, DIVS, "divs"), mgl@1371: + NORMAL_MNEMONIC(DIVU, DIVU, "divu"), mgl@1371: + NORMAL_MNEMONIC(EOR, EOR1, "eor"), mgl@1371: + NORMAL_MNEMONIC(EORL, EORL, "eorl"), mgl@1371: + NORMAL_MNEMONIC(EORH, EORH, "eorh"), mgl@1371: + NORMAL_MNEMONIC(FRS, FRS, "frs"), mgl@1371: + NORMAL_MNEMONIC(ICALL, ICALL, "icall"), mgl@1371: + NORMAL_MNEMONIC(INCJOSP, INCJOSP, "incjosp"), mgl@1371: + NORMAL_MNEMONIC(LD_D, LD_D1, "ld.d"), mgl@1371: + NORMAL_MNEMONIC(LD_SB, LD_SB2, "ld.sb"), mgl@1371: + NORMAL_MNEMONIC(LD_UB, LD_UB1, "ld.ub"), mgl@1371: + NORMAL_MNEMONIC(LD_SH, LD_SH1, "ld.sh"), mgl@1371: + NORMAL_MNEMONIC(LD_UH, LD_UH1, "ld.uh"), mgl@1371: + NORMAL_MNEMONIC(LD_W, LD_W1, "ld.w"), mgl@1371: + NORMAL_MNEMONIC(LDC_D, LDC_D3, "ldc.d"), mgl@1371: + NORMAL_MNEMONIC(LDC_W, LDC_W3, "ldc.w"), mgl@1371: + NORMAL_MNEMONIC(LDC0_D, LDC0_D, "ldc0.d"), mgl@1371: + NORMAL_MNEMONIC(LDC0_W, LDC0_W, "ldc0.w"), mgl@1371: + NORMAL_MNEMONIC(LDCM_D, LDCM_D, "ldcm.d"), mgl@1371: + NORMAL_MNEMONIC(LDCM_W, LDCM_W, "ldcm.w"), mgl@1371: + NORMAL_MNEMONIC(LDDPC, LDDPC, "lddpc"), mgl@1371: + NORMAL_MNEMONIC(LDDSP, LDDSP, "lddsp"), mgl@1371: + NORMAL_MNEMONIC(LDINS_B, LDINS_B, "ldins.b"), mgl@1371: + NORMAL_MNEMONIC(LDINS_H, LDINS_H, "ldins.h"), mgl@1371: + NORMAL_MNEMONIC(LDM, LDM, "ldm"), mgl@1371: + NORMAL_MNEMONIC(LDMTS, LDMTS, "ldmts"), mgl@1371: + NORMAL_MNEMONIC(LDSWP_SH, LDSWP_SH, "ldswp.sh"), mgl@1371: + NORMAL_MNEMONIC(LDSWP_UH, LDSWP_UH, "ldswp.uh"), mgl@1371: + NORMAL_MNEMONIC(LDSWP_W, LDSWP_W, "ldswp.w"), mgl@1371: + NORMAL_MNEMONIC(LSL, LSL1, "lsl"), mgl@1371: + NORMAL_MNEMONIC(LSR, LSR1, "lsr"), mgl@1371: + NORMAL_MNEMONIC(MAC, MAC, "mac"), mgl@1371: + NORMAL_MNEMONIC(MACHH_D, MACHH_D, "machh.d"), mgl@1371: + NORMAL_MNEMONIC(MACHH_W, MACHH_W, "machh.w"), mgl@1371: + NORMAL_MNEMONIC(MACS_D, MACS_D, "macs.d"), mgl@1371: + NORMAL_MNEMONIC(MACSATHH_W, MACSATHH_W, "macsathh.w"), mgl@1371: + NORMAL_MNEMONIC(MACU_D, MACUD, "macu.d"), mgl@1371: + NORMAL_MNEMONIC(MACWH_D, MACWH_D, "macwh.d"), mgl@1371: + NORMAL_MNEMONIC(MAX, MAX, "max"), mgl@1371: + NORMAL_MNEMONIC(MCALL, MCALL, "mcall"), mgl@1371: + NORMAL_MNEMONIC(MFDR, MFDR, "mfdr"), mgl@1371: + NORMAL_MNEMONIC(MFSR, MFSR, "mfsr"), mgl@1371: + NORMAL_MNEMONIC(MIN, MIN, "min"), mgl@1371: + NORMAL_MNEMONIC(MOV, MOV3, "mov"), mgl@1371: + NORMAL_MNEMONIC(MOVEQ, MOVEQ1, "moveq"), mgl@1371: + NORMAL_MNEMONIC(MOVNE, MOVNE1, "movne"), mgl@1371: + NORMAL_MNEMONIC(MOVCC, MOVCC1, "movcc"), mgl@1371: + NORMAL_MNEMONIC(MOVCS, MOVCS1, "movcs"), mgl@1371: + NORMAL_MNEMONIC(MOVGE, MOVGE1, "movge"), mgl@1371: + NORMAL_MNEMONIC(MOVLT, MOVLT1, "movlt"), mgl@1371: + NORMAL_MNEMONIC(MOVMI, MOVMI1, "movmi"), mgl@1371: + NORMAL_MNEMONIC(MOVPL, MOVPL1, "movpl"), mgl@1371: + NORMAL_MNEMONIC(MOVLS, MOVLS1, "movls"), mgl@1371: + NORMAL_MNEMONIC(MOVGT, MOVGT1, "movgt"), mgl@1371: + NORMAL_MNEMONIC(MOVLE, MOVLE1, "movle"), mgl@1371: + NORMAL_MNEMONIC(MOVHI, MOVHI1, "movhi"), mgl@1371: + NORMAL_MNEMONIC(MOVVS, MOVVS1, "movvs"), mgl@1371: + NORMAL_MNEMONIC(MOVVC, MOVVC1, "movvc"), mgl@1371: + NORMAL_MNEMONIC(MOVQS, MOVQS1, "movqs"), mgl@1371: + NORMAL_MNEMONIC(MOVAL, MOVAL1, "moval"), mgl@1371: + NORMAL_MNEMONIC(MOVHS, MOVHS1, "movhs"), mgl@1371: + NORMAL_MNEMONIC(MOVLO, MOVLO1, "movlo"), mgl@1371: + NORMAL_MNEMONIC(MTDR, MTDR, "mtdr"), mgl@1371: + NORMAL_MNEMONIC(MTSR, MTSR, "mtsr"), mgl@1371: + NORMAL_MNEMONIC(MUL, MUL1, "mul"), mgl@1371: + NORMAL_MNEMONIC(MULHH_W, MULHH_W, "mulhh.w"), mgl@1371: + NORMAL_MNEMONIC(MULNHH_W, MULNHH_W, "mulnhh.w"), mgl@1371: + NORMAL_MNEMONIC(MULNWH_D, MULNWH_D, "mulnwh.d"), mgl@1371: + NORMAL_MNEMONIC(MULS_D, MULSD, "muls.d"), mgl@1371: + NORMAL_MNEMONIC(MULSATHH_H, MULSATHH_H, "mulsathh.h"), mgl@1371: + NORMAL_MNEMONIC(MULSATHH_W, MULSATHH_W, "mulsathh.w"), mgl@1371: + NORMAL_MNEMONIC(MULSATRNDHH_H, MULSATRNDHH_H, "mulsatrndhh.h"), mgl@1371: + NORMAL_MNEMONIC(MULSATRNDWH_W, MULSATRNDWH_W, "mulsatrndwh.w"), mgl@1371: + NORMAL_MNEMONIC(MULSATWH_W, MULSATWH_W, "mulsatwh.w"), mgl@1371: + NORMAL_MNEMONIC(MULU_D, MULU_D, "mulu.d"), mgl@1371: + NORMAL_MNEMONIC(MULWH_D, MULWH_D, "mulwh.d"), mgl@1371: + NORMAL_MNEMONIC(MUSFR, MUSFR, "musfr"), mgl@1371: + NORMAL_MNEMONIC(MUSTR, MUSTR, "mustr"), mgl@1371: + NORMAL_MNEMONIC(MVCR_D, MVCR_D, "mvcr.d"), mgl@1371: + NORMAL_MNEMONIC(MVCR_W, MVCR_W, "mvcr.w"), mgl@1371: + NORMAL_MNEMONIC(MVRC_D, MVRC_D, "mvrc.d"), mgl@1371: + NORMAL_MNEMONIC(MVRC_W, MVRC_W, "mvrc.w"), mgl@1371: + NORMAL_MNEMONIC(NEG, NEG, "neg"), mgl@1371: + NORMAL_MNEMONIC(NOP, NOP, "nop"), mgl@1371: + NORMAL_MNEMONIC(OR, OR1, "or"), mgl@1371: + NORMAL_MNEMONIC(ORH, ORH, "orh"), mgl@1371: + NORMAL_MNEMONIC(ORL, ORL, "orl"), mgl@1371: + NORMAL_MNEMONIC(PABS_SB, PABS_SB, "pabs.sb"), mgl@1371: + NORMAL_MNEMONIC(PABS_SH, PABS_SH, "pabs.sh"), mgl@1371: + NORMAL_MNEMONIC(PACKSH_SB, PACKSH_SB, "packsh.sb"), mgl@1371: + NORMAL_MNEMONIC(PACKSH_UB, PACKSH_UB, "packsh.ub"), mgl@1371: + NORMAL_MNEMONIC(PACKW_SH, PACKW_SH, "packw.sh"), mgl@1371: + NORMAL_MNEMONIC(PADD_B, PADD_B, "padd.b"), mgl@1371: + NORMAL_MNEMONIC(PADD_H, PADD_H, "padd.h"), mgl@1371: + NORMAL_MNEMONIC(PADDH_SH, PADDH_SH, "paddh.sh"), mgl@1371: + NORMAL_MNEMONIC(PADDH_UB, PADDH_UB, "paddh.ub"), mgl@1371: + NORMAL_MNEMONIC(PADDS_SB, PADDS_SB, "padds.sb"), mgl@1371: + NORMAL_MNEMONIC(PADDS_SH, PADDS_SH, "padds.sh"), mgl@1371: + NORMAL_MNEMONIC(PADDS_UB, PADDS_UB, "padds.ub"), mgl@1371: + NORMAL_MNEMONIC(PADDS_UH, PADDS_UH, "padds.uh"), mgl@1371: + NORMAL_MNEMONIC(PADDSUB_H, PADDSUB_H, "paddsub.h"), mgl@1371: + NORMAL_MNEMONIC(PADDSUBH_SH, PADDSUBH_SH, "paddsubh.sh"), mgl@1371: + NORMAL_MNEMONIC(PADDSUBS_SH, PADDSUBS_SH, "paddsubs.sh"), mgl@1371: + NORMAL_MNEMONIC(PADDSUBS_UH, PADDSUBS_UH, "paddsubs.uh"), mgl@1371: + NORMAL_MNEMONIC(PADDX_H, PADDX_H, "paddx.h"), mgl@1371: + NORMAL_MNEMONIC(PADDXH_SH, PADDXH_SH, "paddxh.sh"), mgl@1371: + NORMAL_MNEMONIC(PADDXS_SH, PADDXS_SH, "paddxs.sh"), mgl@1371: + NORMAL_MNEMONIC(PADDXS_UH, PADDXS_UH, "paddxs.uh"), mgl@1371: + NORMAL_MNEMONIC(PASR_B, PASR_B, "pasr.b"), mgl@1371: + NORMAL_MNEMONIC(PASR_H, PASR_H, "pasr.h"), mgl@1371: + NORMAL_MNEMONIC(PAVG_SH, PAVG_SH, "pavg.sh"), mgl@1371: + NORMAL_MNEMONIC(PAVG_UB, PAVG_UB, "pavg.ub"), mgl@1371: + NORMAL_MNEMONIC(PLSL_B, PLSL_B, "plsl.b"), mgl@1371: + NORMAL_MNEMONIC(PLSL_H, PLSL_H, "plsl.h"), mgl@1371: + NORMAL_MNEMONIC(PLSR_B, PLSR_B, "plsr.b"), mgl@1371: + NORMAL_MNEMONIC(PLSR_H, PLSR_H, "plsr.h"), mgl@1371: + NORMAL_MNEMONIC(PMAX_SH, PMAX_SH, "pmax.sh"), mgl@1371: + NORMAL_MNEMONIC(PMAX_UB, PMAX_UB, "pmax.ub"), mgl@1371: + NORMAL_MNEMONIC(PMIN_SH, PMIN_SH, "pmin.sh"), mgl@1371: + NORMAL_MNEMONIC(PMIN_UB, PMIN_UB, "pmin.ub"), mgl@1371: + NORMAL_MNEMONIC(POPJC, POPJC, "popjc"), mgl@1371: + NORMAL_MNEMONIC(POPM, POPM, "popm"), mgl@1371: + NORMAL_MNEMONIC(PREF, PREF, "pref"), mgl@1371: + NORMAL_MNEMONIC(PSAD, PSAD, "psad"), mgl@1371: + NORMAL_MNEMONIC(PSUB_B, PSUB_B, "psub.b"), mgl@1371: + NORMAL_MNEMONIC(PSUB_H, PSUB_H, "psub.h"), mgl@1371: + NORMAL_MNEMONIC(PSUBADD_H, PSUBADD_H, "psubadd.h"), mgl@1371: + NORMAL_MNEMONIC(PSUBADDH_SH, PSUBADDH_SH, "psubaddh.sh"), mgl@1371: + NORMAL_MNEMONIC(PSUBADDS_SH, PSUBADDS_SH, "psubadds.sh"), mgl@1371: + NORMAL_MNEMONIC(PSUBADDS_UH, PSUBADDS_UH, "psubadds.uh"), mgl@1371: + NORMAL_MNEMONIC(PSUBH_SH, PSUBH_SH, "psubh.sh"), mgl@1371: + NORMAL_MNEMONIC(PSUBH_UB, PSUBH_UB, "psubh.ub"), mgl@1371: + NORMAL_MNEMONIC(PSUBS_SB, PSUBS_SB, "psubs.sb"), mgl@1371: + NORMAL_MNEMONIC(PSUBS_SH, PSUBS_SH, "psubs.sh"), mgl@1371: + NORMAL_MNEMONIC(PSUBS_UB, PSUBS_UB, "psubs.ub"), mgl@1371: + NORMAL_MNEMONIC(PSUBS_UH, PSUBS_UH, "psubs.uh"), mgl@1371: + NORMAL_MNEMONIC(PSUBX_H, PSUBX_H, "psubx.h"), mgl@1371: + NORMAL_MNEMONIC(PSUBXH_SH, PSUBXH_SH, "psubxh.sh"), mgl@1371: + NORMAL_MNEMONIC(PSUBXS_SH, PSUBXS_SH, "psubxs.sh"), mgl@1371: + NORMAL_MNEMONIC(PSUBXS_UH, PSUBXS_UH, "psubxs.uh"), mgl@1371: + NORMAL_MNEMONIC(PUNPCKSB_H, PUNPCKSB_H, "punpcksb.h"), mgl@1371: + NORMAL_MNEMONIC(PUNPCKUB_H, PUNPCKUB_H, "punpckub.h"), mgl@1371: + NORMAL_MNEMONIC(PUSHJC, PUSHJC, "pushjc"), mgl@1371: + NORMAL_MNEMONIC(PUSHM, PUSHM, "pushm"), mgl@1371: + NORMAL_MNEMONIC(RCALL, RCALL1, "rcall"), mgl@1371: + NORMAL_MNEMONIC(RETEQ, RETEQ, "reteq"), mgl@1371: + NORMAL_MNEMONIC(RETNE, RETNE, "retne"), mgl@1371: + NORMAL_MNEMONIC(RETCC, RETCC, "retcc"), mgl@1371: + NORMAL_MNEMONIC(RETCS, RETCS, "retcs"), mgl@1371: + NORMAL_MNEMONIC(RETGE, RETGE, "retge"), mgl@1371: + NORMAL_MNEMONIC(RETLT, RETLT, "retlt"), mgl@1371: + NORMAL_MNEMONIC(RETMI, RETMI, "retmi"), mgl@1371: + NORMAL_MNEMONIC(RETPL, RETPL, "retpl"), mgl@1371: + NORMAL_MNEMONIC(RETLS, RETLS, "retls"), mgl@1371: + NORMAL_MNEMONIC(RETGT, RETGT, "retgt"), mgl@1371: + NORMAL_MNEMONIC(RETLE, RETLE, "retle"), mgl@1371: + NORMAL_MNEMONIC(RETHI, RETHI, "rethi"), mgl@1371: + NORMAL_MNEMONIC(RETVS, RETVS, "retvs"), mgl@1371: + NORMAL_MNEMONIC(RETVC, RETVC, "retvc"), mgl@1371: + NORMAL_MNEMONIC(RETQS, RETQS, "retqs"), mgl@1371: + NORMAL_MNEMONIC(RETAL, RETAL, "retal"), mgl@1371: + NORMAL_MNEMONIC(RETHS, RETHS, "reths"), mgl@1371: + NORMAL_MNEMONIC(RETLO, RETLO, "retlo"), mgl@1371: + NORMAL_MNEMONIC(RET, RETAL, "ret"), mgl@1371: + NORMAL_MNEMONIC(RETD, RETD, "retd"), mgl@1371: + NORMAL_MNEMONIC(RETE, RETE, "rete"), mgl@1371: + NORMAL_MNEMONIC(RETJ, RETJ, "retj"), mgl@1371: + NORMAL_MNEMONIC(RETS, RETS, "rets"), mgl@1371: + NORMAL_MNEMONIC(RJMP, RJMP, "rjmp"), mgl@1371: + NORMAL_MNEMONIC(ROL, ROL, "rol"), mgl@1371: + NORMAL_MNEMONIC(ROR, ROR, "ror"), mgl@1371: + NORMAL_MNEMONIC(RSUB, RSUB1, "rsub"), mgl@1371: + NORMAL_MNEMONIC(SATADD_H, SATADD_H, "satadd.h"), mgl@1371: + NORMAL_MNEMONIC(SATADD_W, SATADD_W, "satadd.w"), mgl@1371: + NORMAL_MNEMONIC(SATRNDS, SATRNDS, "satrnds"), mgl@1371: + NORMAL_MNEMONIC(SATRNDU, SATRNDU, "satrndu"), mgl@1371: + NORMAL_MNEMONIC(SATS, SATS, "sats"), mgl@1371: + NORMAL_MNEMONIC(SATSUB_H, SATSUB_H, "satsub.h"), mgl@1371: + NORMAL_MNEMONIC(SATSUB_W, SATSUB_W1, "satsub.w"), mgl@1371: + NORMAL_MNEMONIC(SATU, SATU, "satu"), mgl@1371: + NORMAL_MNEMONIC(SBC, SBC, "sbc"), mgl@1371: + NORMAL_MNEMONIC(SBR, SBR, "sbr"), mgl@1371: + NORMAL_MNEMONIC(SCALL, SCALL, "scall"), mgl@1371: + NORMAL_MNEMONIC(SCR, SCR, "scr"), mgl@1371: + NORMAL_MNEMONIC(SLEEP, SLEEP, "sleep"), mgl@1371: + NORMAL_MNEMONIC(SREQ, SREQ, "sreq"), mgl@1371: + NORMAL_MNEMONIC(SRNE, SRNE, "srne"), mgl@1371: + NORMAL_MNEMONIC(SRCC, SRCC, "srcc"), mgl@1371: + NORMAL_MNEMONIC(SRCS, SRCS, "srcs"), mgl@1371: + NORMAL_MNEMONIC(SRGE, SRGE, "srge"), mgl@1371: + NORMAL_MNEMONIC(SRLT, SRLT, "srlt"), mgl@1371: + NORMAL_MNEMONIC(SRMI, SRMI, "srmi"), mgl@1371: + NORMAL_MNEMONIC(SRPL, SRPL, "srpl"), mgl@1371: + NORMAL_MNEMONIC(SRLS, SRLS, "srls"), mgl@1371: + NORMAL_MNEMONIC(SRGT, SRGT, "srgt"), mgl@1371: + NORMAL_MNEMONIC(SRLE, SRLE, "srle"), mgl@1371: + NORMAL_MNEMONIC(SRHI, SRHI, "srhi"), mgl@1371: + NORMAL_MNEMONIC(SRVS, SRVS, "srvs"), mgl@1371: + NORMAL_MNEMONIC(SRVC, SRVC, "srvc"), mgl@1371: + NORMAL_MNEMONIC(SRQS, SRQS, "srqs"), mgl@1371: + NORMAL_MNEMONIC(SRAL, SRAL, "sral"), mgl@1371: + NORMAL_MNEMONIC(SRHS, SRHS, "srhs"), mgl@1371: + NORMAL_MNEMONIC(SRLO, SRLO, "srlo"), mgl@1371: + NORMAL_MNEMONIC(SSRF, SSRF, "ssrf"), mgl@1371: + NORMAL_MNEMONIC(ST_B, ST_B1, "st.b"), mgl@1371: + NORMAL_MNEMONIC(ST_D, ST_D1, "st.d"), mgl@1371: + NORMAL_MNEMONIC(ST_H, ST_H1, "st.h"), mgl@1371: + NORMAL_MNEMONIC(ST_W, ST_W1, "st.w"), mgl@1371: + NORMAL_MNEMONIC(STC_D, STC_D3, "stc.d"), mgl@1371: + NORMAL_MNEMONIC(STC_W, STC_W3, "stc.w"), mgl@1371: + NORMAL_MNEMONIC(STC0_D, STC0_D, "stc0.d"), mgl@1371: + NORMAL_MNEMONIC(STC0_W, STC0_W, "stc0.w"), mgl@1371: + NORMAL_MNEMONIC(STCM_D, STCM_D, "stcm.d"), mgl@1371: + NORMAL_MNEMONIC(STCM_W, STCM_W, "stcm.w"), mgl@1371: + NORMAL_MNEMONIC(STCOND, STCOND, "stcond"), mgl@1371: + NORMAL_MNEMONIC(STDSP, STDSP, "stdsp"), mgl@1371: + NORMAL_MNEMONIC(STHH_W, STHH_W2, "sthh.w"), mgl@1371: + NORMAL_MNEMONIC(STM, STM, "stm"), mgl@1371: + NORMAL_MNEMONIC(STMTS, STMTS, "stmts"), mgl@1371: + NORMAL_MNEMONIC(STSWP_H, STSWP_H, "stswp.h"), mgl@1371: + NORMAL_MNEMONIC(STSWP_W, STSWP_W, "stswp.w"), mgl@1371: + NORMAL_MNEMONIC(SUB, SUB1, "sub"), mgl@1371: + NORMAL_MNEMONIC(SUBEQ, SUBEQ, "subeq"), mgl@1371: + NORMAL_MNEMONIC(SUBNE, SUBNE, "subne"), mgl@1371: + NORMAL_MNEMONIC(SUBCC, SUBCC, "subcc"), mgl@1371: + NORMAL_MNEMONIC(SUBCS, SUBCS, "subcs"), mgl@1371: + NORMAL_MNEMONIC(SUBGE, SUBGE, "subge"), mgl@1371: + NORMAL_MNEMONIC(SUBLT, SUBLT, "sublt"), mgl@1371: + NORMAL_MNEMONIC(SUBMI, SUBMI, "submi"), mgl@1371: + NORMAL_MNEMONIC(SUBPL, SUBPL, "subpl"), mgl@1371: + NORMAL_MNEMONIC(SUBLS, SUBLS, "subls"), mgl@1371: + NORMAL_MNEMONIC(SUBGT, SUBGT, "subgt"), mgl@1371: + NORMAL_MNEMONIC(SUBLE, SUBLE, "suble"), mgl@1371: + NORMAL_MNEMONIC(SUBHI, SUBHI, "subhi"), mgl@1371: + NORMAL_MNEMONIC(SUBVS, SUBVS, "subvs"), mgl@1371: + NORMAL_MNEMONIC(SUBVC, SUBVC, "subvc"), mgl@1371: + NORMAL_MNEMONIC(SUBQS, SUBQS, "subqs"), mgl@1371: + NORMAL_MNEMONIC(SUBAL, SUBAL, "subal"), mgl@1371: + NORMAL_MNEMONIC(SUBHS, SUBHS, "subhs"), mgl@1371: + NORMAL_MNEMONIC(SUBLO, SUBLO, "sublo"), mgl@1371: + NORMAL_MNEMONIC(SUBFEQ, SUBFEQ, "subfeq"), mgl@1371: + NORMAL_MNEMONIC(SUBFNE, SUBFNE, "subfne"), mgl@1371: + NORMAL_MNEMONIC(SUBFCC, SUBFCC, "subfcc"), mgl@1371: + NORMAL_MNEMONIC(SUBFCS, SUBFCS, "subfcs"), mgl@1371: + NORMAL_MNEMONIC(SUBFGE, SUBFGE, "subfge"), mgl@1371: + NORMAL_MNEMONIC(SUBFLT, SUBFLT, "subflt"), mgl@1371: + NORMAL_MNEMONIC(SUBFMI, SUBFMI, "subfmi"), mgl@1371: + NORMAL_MNEMONIC(SUBFPL, SUBFPL, "subfpl"), mgl@1371: + NORMAL_MNEMONIC(SUBFLS, SUBFLS, "subfls"), mgl@1371: + NORMAL_MNEMONIC(SUBFGT, SUBFGT, "subfgt"), mgl@1371: + NORMAL_MNEMONIC(SUBFLE, SUBFLE, "subfle"), mgl@1371: + NORMAL_MNEMONIC(SUBFHI, SUBFHI, "subfhi"), mgl@1371: + NORMAL_MNEMONIC(SUBFVS, SUBFVS, "subfvs"), mgl@1371: + NORMAL_MNEMONIC(SUBFVC, SUBFVC, "subfvc"), mgl@1371: + NORMAL_MNEMONIC(SUBFQS, SUBFQS, "subfqs"), mgl@1371: + NORMAL_MNEMONIC(SUBFAL, SUBFAL, "subfal"), mgl@1371: + NORMAL_MNEMONIC(SUBFHS, SUBFHS, "subfhs"), mgl@1371: + NORMAL_MNEMONIC(SUBFLO, SUBFLO, "subflo"), mgl@1371: + NORMAL_MNEMONIC(SUBHH_W, SUBHH_W, "subhh.w"), mgl@1371: + NORMAL_MNEMONIC(SWAP_B, SWAP_B, "swap.b"), mgl@1371: + NORMAL_MNEMONIC(SWAP_BH, SWAP_BH, "swap.bh"), mgl@1371: + NORMAL_MNEMONIC(SWAP_H, SWAP_H, "swap.h"), mgl@1371: + NORMAL_MNEMONIC(SYNC, SYNC, "sync"), mgl@1371: + NORMAL_MNEMONIC(TLBR, TLBR, "tlbr"), mgl@1371: + NORMAL_MNEMONIC(TLBS, TLBS, "tlbs"), mgl@1371: + NORMAL_MNEMONIC(TLBW, TLBW, "tlbw"), mgl@1371: + NORMAL_MNEMONIC(TNBZ, TNBZ, "tnbz"), mgl@1371: + NORMAL_MNEMONIC(TST, TST, "tst"), mgl@1371: + NORMAL_MNEMONIC(XCHG, XCHG, "xchg"), mgl@1371: + NORMAL_MNEMONIC(MEMC, MEMC, "memc"), mgl@1371: + NORMAL_MNEMONIC(MEMS, MEMS, "mems"), mgl@1371: + NORMAL_MNEMONIC(MEMT, MEMT, "memt"), mgl@1371: + FP_MNEMONIC(FADD, FADD, "fadd"), mgl@1371: + FP_MNEMONIC(FSUB, FSUB, "fsub"), mgl@1371: + FP_MNEMONIC(FMAC, FMAC, "fmac"), mgl@1371: + FP_MNEMONIC(FNMAC, FNMAC, "fnmac"), mgl@1371: + FP_MNEMONIC(FMSC, FMSC, "fmsc"), mgl@1371: + FP_MNEMONIC(FNMSC, FNMSC, "fnmsc"), mgl@1371: + FP_MNEMONIC(FMUL, FMUL, "fmul"), mgl@1371: + FP_MNEMONIC(FNMUL, FNMUL, "fnmul"), mgl@1371: + FP_MNEMONIC(FNEG, FNEG, "fneg"), mgl@1371: + FP_MNEMONIC(FABS, FABS, "fabs"), mgl@1371: + FP_MNEMONIC(FCMP, FCMP, "fcmp"), mgl@1371: + FP_MNEMONIC(FMOV, FMOV1, "fmov"), mgl@1371: + NORMAL_MNEMONIC(FCASTS_D, FCASTS_D, "fcasts.d"), mgl@1371: + NORMAL_MNEMONIC(FCASTD_S, FCASTD_S, "fcastd.s"), mgl@1371: + NORMAL_MNEMONIC(LDA_W, LDA_W, "lda.w"), mgl@1371: + NORMAL_MNEMONIC(CALL, CALL, "call"), mgl@1371: + NORMAL_MNEMONIC(PICOSVMAC, PICOSVMAC0, "picosvmac"), mgl@1371: + NORMAL_MNEMONIC(PICOSVMUL, PICOSVMUL0, "picosvmul"), mgl@1371: + NORMAL_MNEMONIC(PICOVMAC, PICOVMAC0, "picovmac"), mgl@1371: + NORMAL_MNEMONIC(PICOVMUL, PICOVMUL0, "picovmul"), mgl@1371: + NORMAL_MNEMONIC(PICOLD_D, PICOLD_D2, "picold.d"), mgl@1371: + NORMAL_MNEMONIC(PICOLD_W, PICOLD_W2, "picold.w"), mgl@1371: + NORMAL_MNEMONIC(PICOLDM_D, PICOLDM_D, "picoldm.d"), mgl@1371: + NORMAL_MNEMONIC(PICOLDM_W, PICOLDM_W, "picoldm.w"), mgl@1371: + NORMAL_MNEMONIC(PICOMV_D, PICOMV_D1, "picomv.d"), mgl@1371: + NORMAL_MNEMONIC(PICOMV_W, PICOMV_W1, "picomv.w"), mgl@1371: + NORMAL_MNEMONIC(PICOST_D, PICOST_D2, "picost.d"), mgl@1371: + NORMAL_MNEMONIC(PICOST_W, PICOST_W2, "picost.w"), mgl@1371: + NORMAL_MNEMONIC(PICOSTM_D, PICOSTM_D, "picostm.d"), mgl@1371: + NORMAL_MNEMONIC(PICOSTM_W, PICOSTM_W, "picostm.w"), mgl@1371: + NORMAL_MNEMONIC(RSUBEQ, RSUBEQ, "rsubeq"), mgl@1371: + NORMAL_MNEMONIC(RSUBNE, RSUBNE, "rsubne"), mgl@1371: + NORMAL_MNEMONIC(RSUBCC, RSUBCC, "rsubcc"), mgl@1371: + NORMAL_MNEMONIC(RSUBCS, RSUBCS, "rsubcs"), mgl@1371: + NORMAL_MNEMONIC(RSUBGE, RSUBGE, "rsubge"), mgl@1371: + NORMAL_MNEMONIC(RSUBLT, RSUBLT, "rsublt"), mgl@1371: + NORMAL_MNEMONIC(RSUBMI, RSUBMI, "rsubmi"), mgl@1371: + NORMAL_MNEMONIC(RSUBPL, RSUBPL, "rsubpl"), mgl@1371: + NORMAL_MNEMONIC(RSUBLS, RSUBLS, "rsubls"), mgl@1371: + NORMAL_MNEMONIC(RSUBGT, RSUBGT, "rsubgt"), mgl@1371: + NORMAL_MNEMONIC(RSUBLE, RSUBLE, "rsuble"), mgl@1371: + NORMAL_MNEMONIC(RSUBHI, RSUBHI, "rsubhi"), mgl@1371: + NORMAL_MNEMONIC(RSUBVS, RSUBVS, "rsubvs"), mgl@1371: + NORMAL_MNEMONIC(RSUBVC, RSUBVC, "rsubvc"), mgl@1371: + NORMAL_MNEMONIC(RSUBQS, RSUBQS, "rsubqs"), mgl@1371: + NORMAL_MNEMONIC(RSUBAL, RSUBAL, "rsubal"), mgl@1371: + NORMAL_MNEMONIC(RSUBHS, RSUBHS, "rsubhs"), mgl@1371: + NORMAL_MNEMONIC(RSUBLO, RSUBLO, "rsublo"), mgl@1371: + NORMAL_MNEMONIC(ADDEQ, ADDEQ, "addeq"), mgl@1371: + NORMAL_MNEMONIC(ADDNE, ADDNE, "addne"), mgl@1371: + NORMAL_MNEMONIC(ADDCC, ADDCC, "addcc"), mgl@1371: + NORMAL_MNEMONIC(ADDCS, ADDCS, "addcs"), mgl@1371: + NORMAL_MNEMONIC(ADDGE, ADDGE, "addge"), mgl@1371: + NORMAL_MNEMONIC(ADDLT, ADDLT, "addlt"), mgl@1371: + NORMAL_MNEMONIC(ADDMI, ADDMI, "addmi"), mgl@1371: + NORMAL_MNEMONIC(ADDPL, ADDPL, "addpl"), mgl@1371: + NORMAL_MNEMONIC(ADDLS, ADDLS, "addls"), mgl@1371: + NORMAL_MNEMONIC(ADDGT, ADDGT, "addgt"), mgl@1371: + NORMAL_MNEMONIC(ADDLE, ADDLE, "addle"), mgl@1371: + NORMAL_MNEMONIC(ADDHI, ADDHI, "addhi"), mgl@1371: + NORMAL_MNEMONIC(ADDVS, ADDVS, "addvs"), mgl@1371: + NORMAL_MNEMONIC(ADDVC, ADDVC, "addvc"), mgl@1371: + NORMAL_MNEMONIC(ADDQS, ADDQS, "addqs"), mgl@1371: + NORMAL_MNEMONIC(ADDAL, ADDAL, "addal"), mgl@1371: + NORMAL_MNEMONIC(ADDHS, ADDHS, "addhs"), mgl@1371: + NORMAL_MNEMONIC(ADDLO, ADDLO, "addlo"), mgl@1371: + NORMAL_MNEMONIC(ANDEQ, ANDEQ, "andeq"), mgl@1371: + NORMAL_MNEMONIC(ANDNE, ANDNE, "andne"), mgl@1371: + NORMAL_MNEMONIC(ANDCC, ANDCC, "andcc"), mgl@1371: + NORMAL_MNEMONIC(ANDCS, ANDCS, "andcs"), mgl@1371: + NORMAL_MNEMONIC(ANDGE, ANDGE, "andge"), mgl@1371: + NORMAL_MNEMONIC(ANDLT, ANDLT, "andlt"), mgl@1371: + NORMAL_MNEMONIC(ANDMI, ANDMI, "andmi"), mgl@1371: + NORMAL_MNEMONIC(ANDPL, ANDPL, "andpl"), mgl@1371: + NORMAL_MNEMONIC(ANDLS, ANDLS, "andls"), mgl@1371: + NORMAL_MNEMONIC(ANDGT, ANDGT, "andgt"), mgl@1371: + NORMAL_MNEMONIC(ANDLE, ANDLE, "andle"), mgl@1371: + NORMAL_MNEMONIC(ANDHI, ANDHI, "andhi"), mgl@1371: + NORMAL_MNEMONIC(ANDVS, ANDVS, "andvs"), mgl@1371: + NORMAL_MNEMONIC(ANDVC, ANDVC, "andvc"), mgl@1371: + NORMAL_MNEMONIC(ANDQS, ANDQS, "andqs"), mgl@1371: + NORMAL_MNEMONIC(ANDAL, ANDAL, "andal"), mgl@1371: + NORMAL_MNEMONIC(ANDHS, ANDHS, "andhs"), mgl@1371: + NORMAL_MNEMONIC(ANDLO, ANDLO, "andlo"), mgl@1371: + NORMAL_MNEMONIC(OREQ, OREQ, "oreq"), mgl@1371: + NORMAL_MNEMONIC(ORNE, ORNE, "orne"), mgl@1371: + NORMAL_MNEMONIC(ORCC, ORCC, "orcc"), mgl@1371: + NORMAL_MNEMONIC(ORCS, ORCS, "orcs"), mgl@1371: + NORMAL_MNEMONIC(ORGE, ORGE, "orge"), mgl@1371: + NORMAL_MNEMONIC(ORLT, ORLT, "orlt"), mgl@1371: + NORMAL_MNEMONIC(ORMI, ORMI, "ormi"), mgl@1371: + NORMAL_MNEMONIC(ORPL, ORPL, "orpl"), mgl@1371: + NORMAL_MNEMONIC(ORLS, ORLS, "orls"), mgl@1371: + NORMAL_MNEMONIC(ORGT, ORGT, "orgt"), mgl@1371: + NORMAL_MNEMONIC(ORLE, ORLE, "orle"), mgl@1371: + NORMAL_MNEMONIC(ORHI, ORHI, "orhi"), mgl@1371: + NORMAL_MNEMONIC(ORVS, ORVS, "orvs"), mgl@1371: + NORMAL_MNEMONIC(ORVC, ORVC, "orvc"), mgl@1371: + NORMAL_MNEMONIC(ORQS, ORQS, "orqs"), mgl@1371: + NORMAL_MNEMONIC(ORAL, ORAL, "oral"), mgl@1371: + NORMAL_MNEMONIC(ORHS, ORHS, "orhs"), mgl@1371: + NORMAL_MNEMONIC(ORLO, ORLO, "orlo"), mgl@1371: + NORMAL_MNEMONIC(EOREQ, EOREQ, "eoreq"), mgl@1371: + NORMAL_MNEMONIC(EORNE, EORNE, "eorne"), mgl@1371: + NORMAL_MNEMONIC(EORCC, EORCC, "eorcc"), mgl@1371: + NORMAL_MNEMONIC(EORCS, EORCS, "eorcs"), mgl@1371: + NORMAL_MNEMONIC(EORGE, EORGE, "eorge"), mgl@1371: + NORMAL_MNEMONIC(EORLT, EORLT, "eorlt"), mgl@1371: + NORMAL_MNEMONIC(EORMI, EORMI, "eormi"), mgl@1371: + NORMAL_MNEMONIC(EORPL, EORPL, "eorpl"), mgl@1371: + NORMAL_MNEMONIC(EORLS, EORLS, "eorls"), mgl@1371: + NORMAL_MNEMONIC(EORGT, EORGT, "eorgt"), mgl@1371: + NORMAL_MNEMONIC(EORLE, EORLE, "eorle"), mgl@1371: + NORMAL_MNEMONIC(EORHI, EORHI, "eorhi"), mgl@1371: + NORMAL_MNEMONIC(EORVS, EORVS, "eorvs"), mgl@1371: + NORMAL_MNEMONIC(EORVC, EORVC, "eorvc"), mgl@1371: + NORMAL_MNEMONIC(EORQS, EORQS, "eorqs"), mgl@1371: + NORMAL_MNEMONIC(EORAL, EORAL, "eoral"), mgl@1371: + NORMAL_MNEMONIC(EORHS, EORHS, "eorhs"), mgl@1371: + NORMAL_MNEMONIC(EORLO, EORLO, "eorlo"), mgl@1371: + NORMAL_MNEMONIC(LD_WEQ, LD_WEQ, "ld.weq"), mgl@1371: + NORMAL_MNEMONIC(LD_WNE, LD_WNE, "ld.wne"), mgl@1371: + NORMAL_MNEMONIC(LD_WCC, LD_WCC, "ld.wcc"), mgl@1371: + NORMAL_MNEMONIC(LD_WCS, LD_WCS, "ld.wcs"), mgl@1371: + NORMAL_MNEMONIC(LD_WGE, LD_WGE, "ld.wge"), mgl@1371: + NORMAL_MNEMONIC(LD_WLT, LD_WLT, "ld.wlt"), mgl@1371: + NORMAL_MNEMONIC(LD_WMI, LD_WMI, "ld.wmi"), mgl@1371: + NORMAL_MNEMONIC(LD_WPL, LD_WPL, "ld.wpl"), mgl@1371: + NORMAL_MNEMONIC(LD_WLS, LD_WLS, "ld.wls"), mgl@1371: + NORMAL_MNEMONIC(LD_WGT, LD_WGT, "ld.wgt"), mgl@1371: + NORMAL_MNEMONIC(LD_WLE, LD_WLE, "ld.wle"), mgl@1371: + NORMAL_MNEMONIC(LD_WHI, LD_WHI, "ld.whi"), mgl@1371: + NORMAL_MNEMONIC(LD_WVS, LD_WVS, "ld.wvs"), mgl@1371: + NORMAL_MNEMONIC(LD_WVC, LD_WVC, "ld.wvc"), mgl@1371: + NORMAL_MNEMONIC(LD_WQS, LD_WQS, "ld.wqs"), mgl@1371: + NORMAL_MNEMONIC(LD_WAL, LD_WAL, "ld.wal"), mgl@1371: + NORMAL_MNEMONIC(LD_WHS, LD_WHS, "ld.whs"), mgl@1371: + NORMAL_MNEMONIC(LD_WLO, LD_WLO, "ld.wlo"), mgl@1371: + NORMAL_MNEMONIC(LD_SHEQ, LD_SHEQ, "ld.sheq"), mgl@1371: + NORMAL_MNEMONIC(LD_SHNE, LD_SHNE, "ld.shne"), mgl@1371: + NORMAL_MNEMONIC(LD_SHCC, LD_SHCC, "ld.shcc"), mgl@1371: + NORMAL_MNEMONIC(LD_SHCS, LD_SHCS, "ld.shcs"), mgl@1371: + NORMAL_MNEMONIC(LD_SHGE, LD_SHGE, "ld.shge"), mgl@1371: + NORMAL_MNEMONIC(LD_SHLT, LD_SHLT, "ld.shlt"), mgl@1371: + NORMAL_MNEMONIC(LD_SHMI, LD_SHMI, "ld.shmi"), mgl@1371: + NORMAL_MNEMONIC(LD_SHPL, LD_SHPL, "ld.shpl"), mgl@1371: + NORMAL_MNEMONIC(LD_SHLS, LD_SHLS, "ld.shls"), mgl@1371: + NORMAL_MNEMONIC(LD_SHGT, LD_SHGT, "ld.shgt"), mgl@1371: + NORMAL_MNEMONIC(LD_SHLE, LD_SHLE, "ld.shle"), mgl@1371: + NORMAL_MNEMONIC(LD_SHHI, LD_SHHI, "ld.shhi"), mgl@1371: + NORMAL_MNEMONIC(LD_SHVS, LD_SHVS, "ld.shvs"), mgl@1371: + NORMAL_MNEMONIC(LD_SHVC, LD_SHVC, "ld.shvc"), mgl@1371: + NORMAL_MNEMONIC(LD_SHQS, LD_SHQS, "ld.shqs"), mgl@1371: + NORMAL_MNEMONIC(LD_SHAL, LD_SHAL, "ld.shal"), mgl@1371: + NORMAL_MNEMONIC(LD_SHHS, LD_SHHS, "ld.shhs"), mgl@1371: + NORMAL_MNEMONIC(LD_SHLO, LD_SHLO, "ld.shlo"), mgl@1371: + NORMAL_MNEMONIC(LD_UHEQ, LD_UHEQ, "ld.uheq"), mgl@1371: + NORMAL_MNEMONIC(LD_UHNE, LD_UHNE, "ld.uhne"), mgl@1371: + NORMAL_MNEMONIC(LD_UHCC, LD_UHCC, "ld.uhcc"), mgl@1371: + NORMAL_MNEMONIC(LD_UHCS, LD_UHCS, "ld.uhcs"), mgl@1371: + NORMAL_MNEMONIC(LD_UHGE, LD_UHGE, "ld.uhge"), mgl@1371: + NORMAL_MNEMONIC(LD_UHLT, LD_UHLT, "ld.uhlt"), mgl@1371: + NORMAL_MNEMONIC(LD_UHMI, LD_UHMI, "ld.uhmi"), mgl@1371: + NORMAL_MNEMONIC(LD_UHPL, LD_UHPL, "ld.uhpl"), mgl@1371: + NORMAL_MNEMONIC(LD_UHLS, LD_UHLS, "ld.uhls"), mgl@1371: + NORMAL_MNEMONIC(LD_UHGT, LD_UHGT, "ld.uhgt"), mgl@1371: + NORMAL_MNEMONIC(LD_UHLE, LD_UHLE, "ld.uhle"), mgl@1371: + NORMAL_MNEMONIC(LD_UHHI, LD_UHHI, "ld.uhhi"), mgl@1371: + NORMAL_MNEMONIC(LD_UHVS, LD_UHVS, "ld.uhvs"), mgl@1371: + NORMAL_MNEMONIC(LD_UHVC, LD_UHVC, "ld.uhvc"), mgl@1371: + NORMAL_MNEMONIC(LD_UHQS, LD_UHQS, "ld.uhqs"), mgl@1371: + NORMAL_MNEMONIC(LD_UHAL, LD_UHAL, "ld.uhal"), mgl@1371: + NORMAL_MNEMONIC(LD_UHHS, LD_UHHS, "ld.uhhs"), mgl@1371: + NORMAL_MNEMONIC(LD_UHLO, LD_UHLO, "ld.uhlo"), mgl@1371: + NORMAL_MNEMONIC(LD_SBEQ, LD_SBEQ, "ld.sbeq"), mgl@1371: + NORMAL_MNEMONIC(LD_SBNE, LD_SBNE, "ld.sbne"), mgl@1371: + NORMAL_MNEMONIC(LD_SBCC, LD_SBCC, "ld.sbcc"), mgl@1371: + NORMAL_MNEMONIC(LD_SBCS, LD_SBCS, "ld.sbcs"), mgl@1371: + NORMAL_MNEMONIC(LD_SBGE, LD_SBGE, "ld.sbge"), mgl@1371: + NORMAL_MNEMONIC(LD_SBLT, LD_SBLT, "ld.sblt"), mgl@1371: + NORMAL_MNEMONIC(LD_SBMI, LD_SBMI, "ld.sbmi"), mgl@1371: + NORMAL_MNEMONIC(LD_SBPL, LD_SBPL, "ld.sbpl"), mgl@1371: + NORMAL_MNEMONIC(LD_SBLS, LD_SBLS, "ld.sbls"), mgl@1371: + NORMAL_MNEMONIC(LD_SBGT, LD_SBGT, "ld.sbgt"), mgl@1371: + NORMAL_MNEMONIC(LD_SBLE, LD_SBLE, "ld.sble"), mgl@1371: + NORMAL_MNEMONIC(LD_SBHI, LD_SBHI, "ld.sbhi"), mgl@1371: + NORMAL_MNEMONIC(LD_SBVS, LD_SBVS, "ld.sbvs"), mgl@1371: + NORMAL_MNEMONIC(LD_SBVC, LD_SBVC, "ld.sbvc"), mgl@1371: + NORMAL_MNEMONIC(LD_SBQS, LD_SBQS, "ld.sbqs"), mgl@1371: + NORMAL_MNEMONIC(LD_SBAL, LD_SBAL, "ld.sbal"), mgl@1371: + NORMAL_MNEMONIC(LD_SBHS, LD_SBHS, "ld.sbhs"), mgl@1371: + NORMAL_MNEMONIC(LD_SBLO, LD_SBLO, "ld.sblo"), mgl@1371: + NORMAL_MNEMONIC(LD_UBEQ, LD_UBEQ, "ld.ubeq"), mgl@1371: + NORMAL_MNEMONIC(LD_UBNE, LD_UBNE, "ld.ubne"), mgl@1371: + NORMAL_MNEMONIC(LD_UBCC, LD_UBCC, "ld.ubcc"), mgl@1371: + NORMAL_MNEMONIC(LD_UBCS, LD_UBCS, "ld.ubcs"), mgl@1371: + NORMAL_MNEMONIC(LD_UBGE, LD_UBGE, "ld.ubge"), mgl@1371: + NORMAL_MNEMONIC(LD_UBLT, LD_UBLT, "ld.ublt"), mgl@1371: + NORMAL_MNEMONIC(LD_UBMI, LD_UBMI, "ld.ubmi"), mgl@1371: + NORMAL_MNEMONIC(LD_UBPL, LD_UBPL, "ld.ubpl"), mgl@1371: + NORMAL_MNEMONIC(LD_UBLS, LD_UBLS, "ld.ubls"), mgl@1371: + NORMAL_MNEMONIC(LD_UBGT, LD_UBGT, "ld.ubgt"), mgl@1371: + NORMAL_MNEMONIC(LD_UBLE, LD_UBLE, "ld.uble"), mgl@1371: + NORMAL_MNEMONIC(LD_UBHI, LD_UBHI, "ld.ubhi"), mgl@1371: + NORMAL_MNEMONIC(LD_UBVS, LD_UBVS, "ld.ubvs"), mgl@1371: + NORMAL_MNEMONIC(LD_UBVC, LD_UBVC, "ld.ubvc"), mgl@1371: + NORMAL_MNEMONIC(LD_UBQS, LD_UBQS, "ld.ubqs"), mgl@1371: + NORMAL_MNEMONIC(LD_UBAL, LD_UBAL, "ld.ubal"), mgl@1371: + NORMAL_MNEMONIC(LD_UBHS, LD_UBHS, "ld.ubhs"), mgl@1371: + NORMAL_MNEMONIC(LD_UBLO, LD_UBLO, "ld.ublo"), mgl@1371: + NORMAL_MNEMONIC(ST_WEQ, ST_WEQ, "st.weq"), mgl@1371: + NORMAL_MNEMONIC(ST_WNE, ST_WNE, "st.wne"), mgl@1371: + NORMAL_MNEMONIC(ST_WCC, ST_WCC, "st.wcc"), mgl@1371: + NORMAL_MNEMONIC(ST_WCS, ST_WCS, "st.wcs"), mgl@1371: + NORMAL_MNEMONIC(ST_WGE, ST_WGE, "st.wge"), mgl@1371: + NORMAL_MNEMONIC(ST_WLT, ST_WLT, "st.wlt"), mgl@1371: + NORMAL_MNEMONIC(ST_WMI, ST_WMI, "st.wmi"), mgl@1371: + NORMAL_MNEMONIC(ST_WPL, ST_WPL, "st.wpl"), mgl@1371: + NORMAL_MNEMONIC(ST_WLS, ST_WLS, "st.wls"), mgl@1371: + NORMAL_MNEMONIC(ST_WGT, ST_WGT, "st.wgt"), mgl@1371: + NORMAL_MNEMONIC(ST_WLE, ST_WLE, "st.wle"), mgl@1371: + NORMAL_MNEMONIC(ST_WHI, ST_WHI, "st.whi"), mgl@1371: + NORMAL_MNEMONIC(ST_WVS, ST_WVS, "st.wvs"), mgl@1371: + NORMAL_MNEMONIC(ST_WVC, ST_WVC, "st.wvc"), mgl@1371: + NORMAL_MNEMONIC(ST_WQS, ST_WQS, "st.wqs"), mgl@1371: + NORMAL_MNEMONIC(ST_WAL, ST_WAL, "st.wal"), mgl@1371: + NORMAL_MNEMONIC(ST_WHS, ST_WHS, "st.whs"), mgl@1371: + NORMAL_MNEMONIC(ST_WLO, ST_WLO, "st.wlo"), mgl@1371: + NORMAL_MNEMONIC(ST_HEQ, ST_HEQ, "st.heq"), mgl@1371: + NORMAL_MNEMONIC(ST_HNE, ST_HNE, "st.hne"), mgl@1371: + NORMAL_MNEMONIC(ST_HCC, ST_HCC, "st.hcc"), mgl@1371: + NORMAL_MNEMONIC(ST_HCS, ST_HCS, "st.hcs"), mgl@1371: + NORMAL_MNEMONIC(ST_HGE, ST_HGE, "st.hge"), mgl@1371: + NORMAL_MNEMONIC(ST_HLT, ST_HLT, "st.hlt"), mgl@1371: + NORMAL_MNEMONIC(ST_HMI, ST_HMI, "st.hmi"), mgl@1371: + NORMAL_MNEMONIC(ST_HPL, ST_HPL, "st.hpl"), mgl@1371: + NORMAL_MNEMONIC(ST_HLS, ST_HLS, "st.hls"), mgl@1371: + NORMAL_MNEMONIC(ST_HGT, ST_HGT, "st.hgt"), mgl@1371: + NORMAL_MNEMONIC(ST_HLE, ST_HLE, "st.hle"), mgl@1371: + NORMAL_MNEMONIC(ST_HHI, ST_HHI, "st.hhi"), mgl@1371: + NORMAL_MNEMONIC(ST_HVS, ST_HVS, "st.hvs"), mgl@1371: + NORMAL_MNEMONIC(ST_HVC, ST_HVC, "st.hvc"), mgl@1371: + NORMAL_MNEMONIC(ST_HQS, ST_HQS, "st.hqs"), mgl@1371: + NORMAL_MNEMONIC(ST_HAL, ST_HAL, "st.hal"), mgl@1371: + NORMAL_MNEMONIC(ST_HHS, ST_HHS, "st.hhs"), mgl@1371: + NORMAL_MNEMONIC(ST_HLO, ST_HLO, "st.hlo"), mgl@1371: + NORMAL_MNEMONIC(ST_BEQ, ST_BEQ, "st.beq"), mgl@1371: + NORMAL_MNEMONIC(ST_BNE, ST_BNE, "st.bne"), mgl@1371: + NORMAL_MNEMONIC(ST_BCC, ST_BCC, "st.bcc"), mgl@1371: + NORMAL_MNEMONIC(ST_BCS, ST_BCS, "st.bcs"), mgl@1371: + NORMAL_MNEMONIC(ST_BGE, ST_BGE, "st.bge"), mgl@1371: + NORMAL_MNEMONIC(ST_BLT, ST_BLT, "st.blt"), mgl@1371: + NORMAL_MNEMONIC(ST_BMI, ST_BMI, "st.bmi"), mgl@1371: + NORMAL_MNEMONIC(ST_BPL, ST_BPL, "st.bpl"), mgl@1371: + NORMAL_MNEMONIC(ST_BLS, ST_BLS, "st.bls"), mgl@1371: + NORMAL_MNEMONIC(ST_BGT, ST_BGT, "st.bgt"), mgl@1371: + NORMAL_MNEMONIC(ST_BLE, ST_BLE, "st.ble"), mgl@1371: + NORMAL_MNEMONIC(ST_BHI, ST_BHI, "st.bhi"), mgl@1371: + NORMAL_MNEMONIC(ST_BVS, ST_BVS, "st.bvs"), mgl@1371: + NORMAL_MNEMONIC(ST_BVC, ST_BVC, "st.bvc"), mgl@1371: + NORMAL_MNEMONIC(ST_BQS, ST_BQS, "st.bqs"), mgl@1371: + NORMAL_MNEMONIC(ST_BAL, ST_BAL, "st.bal"), mgl@1371: + NORMAL_MNEMONIC(ST_BHS, ST_BHS, "st.bhs"), mgl@1371: + NORMAL_MNEMONIC(ST_BLO, ST_BLO, "st.blo"), mgl@1371: + NORMAL_MNEMONIC(MOVH, MOVH, "movh"), mgl@1371: + mgl@1371: + }; mgl@1371: +#undef NORMAL_MNEMONIC mgl@1371: +#undef ALIAS_MNEMONIC mgl@1371: +#undef FP_MNEMONIC mgl@1371: --- /dev/null mgl@1371: +++ b/opcodes/avr32-opc.h mgl@1371: @@ -0,0 +1,2370 @@ mgl@1371: +/* Opcode tables for AVR32. mgl@1371: + Copyright 2005, 2006 Atmel Corporation. mgl@1371: + mgl@1371: + Written by Haavard Skinnemoen, Atmel Norway, mgl@1371: + mgl@1371: + This file is part of libopcodes. mgl@1371: + mgl@1371: + This program is free software; you can redistribute it and/or mgl@1371: + modify it under the terms of the GNU General Public License as mgl@1371: + published by the Free Software Foundation; either version 2 of the mgl@1371: + License, or (at your option) any later version. mgl@1371: + mgl@1371: + This program is distributed in the hope that it will be useful, but mgl@1371: + WITHOUT ANY WARRANTY; without even the implied warranty of mgl@1371: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU mgl@1371: + General Public License for more details. mgl@1371: + mgl@1371: + You should have received a copy of the GNU General Public License mgl@1371: + along with this program; if not, write to the Free Software mgl@1371: + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA mgl@1371: + 02111-1307, USA. */ mgl@1371: + mgl@1371: +#include "bfd.h" mgl@1371: + mgl@1371: +#define AVR32_MAX_OPERANDS 8 mgl@1371: +#define AVR32_MAX_FIELDS 8 mgl@1371: + mgl@1371: +#define AVR32_V1 (1 << 1) mgl@1371: +#define AVR32_SIMD (1 << 2) mgl@1371: +#define AVR32_DSP (1 << 3) mgl@1371: +#define AVR32_RMW (1 << 4) mgl@1371: +#define AVR32_V2 (1 << 5) mgl@1371: +#define AVR32_FP (1 << 16) mgl@1371: +#define AVR32_PICO (1 << 17) mgl@1371: + mgl@1371: +/* Registers we commonly refer to */ mgl@1371: +#define AVR32_REG_R12 12 mgl@1371: +#define AVR32_REG_SP 13 mgl@1371: +#define AVR32_REG_LR 14 mgl@1371: +#define AVR32_REG_PC 15 mgl@1371: + mgl@1371: +struct avr32_ifield mgl@1371: +{ mgl@1371: + int id; mgl@1371: + unsigned short bitsize; mgl@1371: + unsigned short shift; mgl@1371: + unsigned long mask; mgl@1371: + mgl@1371: + /* If the value doesn't fit, it will be truncated with no warning */ mgl@1371: + void (*insert)(const struct avr32_ifield *, void *, unsigned long); mgl@1371: + void (*extract)(const struct avr32_ifield *, void *, unsigned long *); mgl@1371: +}; mgl@1371: + mgl@1371: +struct avr32_opcode mgl@1371: +{ mgl@1371: + int id; mgl@1371: + int size; mgl@1371: + unsigned long value; mgl@1371: + unsigned long mask; mgl@1371: + const struct avr32_syntax *syntax; mgl@1371: + bfd_reloc_code_real_type reloc_type; mgl@1371: + unsigned int nr_fields; mgl@1371: + /* if relaxable, which field is variable, otherwise -1 */ mgl@1371: + int var_field; mgl@1371: + const struct avr32_ifield *fields[AVR32_MAX_FIELDS]; mgl@1371: +}; mgl@1371: + mgl@1371: +struct avr32_alias mgl@1371: +{ mgl@1371: + int id; mgl@1371: + const struct avr32_opcode *opc; mgl@1371: + struct { mgl@1371: + int is_opindex; mgl@1371: + unsigned long value; mgl@1371: + } operand_map[AVR32_MAX_OPERANDS]; mgl@1371: +}; mgl@1371: + mgl@1371: +struct avr32_syntax mgl@1371: +{ mgl@1371: + int id; mgl@1371: + unsigned long isa_flags; mgl@1371: + const struct avr32_mnemonic *mnemonic; mgl@1371: + int type; mgl@1371: + union { mgl@1371: + const struct avr32_opcode *opc; mgl@1371: + const struct avr32_alias *alias; mgl@1371: + } u; mgl@1371: + const struct avr32_syntax *next; mgl@1371: + /* negative means "vararg" */ mgl@1371: + int nr_operands; mgl@1371: + int operand[AVR32_MAX_OPERANDS]; mgl@1371: +}; mgl@1371: + mgl@1371: +#if 0 mgl@1371: +#define AVR32_ALIAS_MAKE_CONST(val) ((val) | 0x80000000UL) mgl@1371: +#define AVR32_ALIAS_IS_CONST(mapval) (((mapval) & 0x80000000UL) != 0) mgl@1371: +#define AVR32_ALIAS_GET_CONST(mapval) ((mapval) & ~0x80000000UL) mgl@1371: +#endif mgl@1371: + mgl@1371: +struct avr32_mnemonic mgl@1371: +{ mgl@1371: + int id; mgl@1371: + const char *name; mgl@1371: + const struct avr32_syntax *syntax; mgl@1371: +}; mgl@1371: + mgl@1371: +extern const struct avr32_ifield avr32_ifield_table[]; mgl@1371: +extern struct avr32_opcode avr32_opc_table[]; mgl@1371: +extern const struct avr32_syntax avr32_syntax_table[]; mgl@1371: +extern const struct avr32_alias avr32_alias_table[]; mgl@1371: +extern const struct avr32_mnemonic avr32_mnemonic_table[]; mgl@1371: + mgl@1371: +extern void avr32_insert_simple(const struct avr32_ifield *field, mgl@1371: + void *buf, unsigned long value); mgl@1371: +extern void avr32_insert_bit5c(const struct avr32_ifield *field, mgl@1371: + void *buf, unsigned long value); mgl@1371: +extern void avr32_insert_k10(const struct avr32_ifield *field, mgl@1371: + void *buf, unsigned long value); mgl@1371: +extern void avr32_insert_k21(const struct avr32_ifield *field, mgl@1371: + void *buf, unsigned long value); mgl@1371: +extern void avr32_insert_cpop(const struct avr32_ifield *field, mgl@1371: + void *buf, unsigned long value); mgl@1371: +extern void avr32_insert_k12cp(const struct avr32_ifield *field, mgl@1371: + void *buf, unsigned long value); mgl@1371: + mgl@1371: +extern void avr32_extract_simple(const struct avr32_ifield *field, mgl@1371: + void *buf, unsigned long *value); mgl@1371: +extern void avr32_extract_bit5c(const struct avr32_ifield *field, mgl@1371: + void *buf, unsigned long *value); mgl@1371: +extern void avr32_extract_k10(const struct avr32_ifield *field, mgl@1371: + void *buf, unsigned long *value); mgl@1371: +extern void avr32_extract_k21(const struct avr32_ifield *field, mgl@1371: + void *buf, unsigned long *value); mgl@1371: +extern void avr32_extract_cpop(const struct avr32_ifield *field, mgl@1371: + void *buf, unsigned long *value); mgl@1371: +extern void avr32_extract_k12cp(const struct avr32_ifield *field, mgl@1371: + void *buf, unsigned long *value); mgl@1371: + mgl@1371: +enum avr32_operand_type mgl@1371: +{ mgl@1371: + AVR32_OPERAND_INTREG, /* just a register */ mgl@1371: + AVR32_OPERAND_INTREG_PREDEC, /* register with pre-decrement */ mgl@1371: + AVR32_OPERAND_INTREG_POSTINC, /* register with post-increment */ mgl@1371: + AVR32_OPERAND_INTREG_LSL, /* register with left shift */ mgl@1371: + AVR32_OPERAND_INTREG_LSR, /* register with right shift */ mgl@1371: + AVR32_OPERAND_INTREG_BSEL, /* register with byte selector */ mgl@1371: + AVR32_OPERAND_INTREG_HSEL, /* register with halfword selector */ mgl@1371: + AVR32_OPERAND_INTREG_SDISP, /* Rp[signed disp] */ mgl@1371: + AVR32_OPERAND_INTREG_SDISP_H, /* Rp[signed hword-aligned disp] */ mgl@1371: + AVR32_OPERAND_INTREG_SDISP_W, /* Rp[signed word-aligned disp] */ mgl@1371: + AVR32_OPERAND_INTREG_UDISP, /* Rp[unsigned disp] */ mgl@1371: + AVR32_OPERAND_INTREG_UDISP_H, /* Rp[unsigned hword-aligned disp] */ mgl@1371: + AVR32_OPERAND_INTREG_UDISP_W, /* Rp[unsigned word-aligned disp] */ mgl@1371: + AVR32_OPERAND_INTREG_INDEX, /* Rp[Ri << sa] */ mgl@1371: + AVR32_OPERAND_INTREG_XINDEX, /* Rp[Ri:bytesel << 2] */ mgl@1371: + AVR32_OPERAND_DWREG, /* Even-numbered register */ mgl@1371: + AVR32_OPERAND_PC_UDISP_W, /* PC[unsigned word-aligned disp] or label */ mgl@1371: + AVR32_OPERAND_SP, /* Just SP */ mgl@1371: + AVR32_OPERAND_SP_UDISP_W, /* SP[unsigned word-aligned disp] */ mgl@1371: + AVR32_OPERAND_CPNO, mgl@1371: + AVR32_OPERAND_CPREG, mgl@1371: + AVR32_OPERAND_CPREG_D, mgl@1371: + AVR32_OPERAND_UNSIGNED_CONST, mgl@1371: + AVR32_OPERAND_UNSIGNED_CONST_W, mgl@1371: + AVR32_OPERAND_SIGNED_CONST, mgl@1371: + AVR32_OPERAND_SIGNED_CONST_W, mgl@1371: + AVR32_OPERAND_JMPLABEL, mgl@1371: + AVR32_OPERAND_UNSIGNED_NUMBER, mgl@1371: + AVR32_OPERAND_UNSIGNED_NUMBER_W, mgl@1371: + AVR32_OPERAND_REGLIST8, mgl@1371: + AVR32_OPERAND_REGLIST9, mgl@1371: + AVR32_OPERAND_REGLIST16, mgl@1371: + AVR32_OPERAND_REGLIST_LDM, mgl@1371: + AVR32_OPERAND_REGLIST_CP8, mgl@1371: + AVR32_OPERAND_REGLIST_CPD8, mgl@1371: + AVR32_OPERAND_RETVAL, mgl@1371: + AVR32_OPERAND_MCALL, mgl@1371: + AVR32_OPERAND_JOSPINC, mgl@1371: + AVR32_OPERAND_COH, mgl@1371: + AVR32_OPERAND_FPREG_S, mgl@1371: + AVR32_OPERAND_FPREG_D, mgl@1371: + AVR32_OPERAND_PICO_REG_W, mgl@1371: + AVR32_OPERAND_PICO_REG_D, mgl@1371: + AVR32_OPERAND_PICO_REGLIST_W, mgl@1371: + AVR32_OPERAND_PICO_REGLIST_D, mgl@1371: + AVR32_OPERAND_PICO_IN, mgl@1371: + AVR32_OPERAND_PICO_OUT0, mgl@1371: + AVR32_OPERAND_PICO_OUT1, mgl@1371: + AVR32_OPERAND_PICO_OUT2, mgl@1371: + AVR32_OPERAND_PICO_OUT3, mgl@1371: + AVR32_OPERAND__END_ mgl@1371: +}; mgl@1371: +#define AVR32_OPERAND_UNKNOWN AVR32_OPERAND__END_ mgl@1371: +#define AVR32_NR_OPERANDS AVR32_OPERAND__END_ mgl@1371: + mgl@1371: +enum avr32_ifield_type mgl@1371: +{ mgl@1371: + AVR32_IFIELD_RX, mgl@1371: + AVR32_IFIELD_RY, mgl@1371: + AVR32_IFIELD_COND4C, mgl@1371: + AVR32_IFIELD_K8C, mgl@1371: + AVR32_IFIELD_K7C, mgl@1371: + AVR32_IFIELD_K5C, mgl@1371: + AVR32_IFIELD_K3, mgl@1371: + AVR32_IFIELD_RY_DW, mgl@1371: + AVR32_IFIELD_COND4E, mgl@1371: + AVR32_IFIELD_K8E, mgl@1371: + AVR32_IFIELD_BIT5C, mgl@1371: + AVR32_IFIELD_COND3, mgl@1371: + AVR32_IFIELD_K10, mgl@1371: + AVR32_IFIELD_POPM, mgl@1371: + AVR32_IFIELD_K2, mgl@1371: + AVR32_IFIELD_RD_E, mgl@1371: + AVR32_IFIELD_RD_DW, mgl@1371: + AVR32_IFIELD_X, mgl@1371: + AVR32_IFIELD_Y, mgl@1371: + AVR32_IFIELD_X2, mgl@1371: + AVR32_IFIELD_Y2, mgl@1371: + AVR32_IFIELD_K5E, mgl@1371: + AVR32_IFIELD_PART2, mgl@1371: + AVR32_IFIELD_PART1, mgl@1371: + AVR32_IFIELD_K16, mgl@1371: + AVR32_IFIELD_CACHEOP, mgl@1371: + AVR32_IFIELD_K11, mgl@1371: + AVR32_IFIELD_K21, mgl@1371: + AVR32_IFIELD_CPOP, mgl@1371: + AVR32_IFIELD_CPNO, mgl@1371: + AVR32_IFIELD_CRD_RI, mgl@1371: + AVR32_IFIELD_CRX, mgl@1371: + AVR32_IFIELD_CRY, mgl@1371: + AVR32_IFIELD_K7E, mgl@1371: + AVR32_IFIELD_CRD_DW, mgl@1371: + AVR32_IFIELD_PART1_K12, mgl@1371: + AVR32_IFIELD_PART2_K12, mgl@1371: + AVR32_IFIELD_K12, mgl@1371: + AVR32_IFIELD_S5, mgl@1371: + AVR32_IFIELD_K5E2, mgl@1371: + AVR32_IFIELD_K4, mgl@1371: + AVR32_IFIELD_COND4E2, mgl@1371: + AVR32_IFIELD_K8E2, mgl@1371: + AVR32_IFIELD_K6, mgl@1371: + AVR32_IFIELD_MEM15, mgl@1371: + AVR32_IFIELD_MEMB5, mgl@1371: + AVR32_IFIELD_W, mgl@1371: + AVR32_IFIELD_CM_HL, mgl@1371: + AVR32_IFIELD_K12CP, mgl@1371: + AVR32_IFIELD_K9E, mgl@1371: + AVR32_IFIELD__END_, mgl@1371: +}; mgl@1371: +#define AVR32_NR_IFIELDS AVR32_IFIELD__END_ mgl@1371: + mgl@1371: +enum avr32_opc_type mgl@1371: +{ mgl@1371: + AVR32_OPC_ABS, mgl@1371: + AVR32_OPC_ACALL, mgl@1371: + AVR32_OPC_ACR, mgl@1371: + AVR32_OPC_ADC, mgl@1371: + AVR32_OPC_ADD1, mgl@1371: + AVR32_OPC_ADD2, mgl@1371: + AVR32_OPC_ADDABS, mgl@1371: + AVR32_OPC_ADDHH_W, mgl@1371: + AVR32_OPC_AND1, mgl@1371: + AVR32_OPC_AND2, mgl@1371: + AVR32_OPC_AND3, mgl@1371: + AVR32_OPC_ANDH, mgl@1371: + AVR32_OPC_ANDH_COH, mgl@1371: + AVR32_OPC_ANDL, mgl@1371: + AVR32_OPC_ANDL_COH, mgl@1371: + AVR32_OPC_ANDN, mgl@1371: + AVR32_OPC_ASR1, mgl@1371: + AVR32_OPC_ASR3, mgl@1371: + AVR32_OPC_ASR2, mgl@1371: + AVR32_OPC_BLD, mgl@1371: + AVR32_OPC_BREQ1, mgl@1371: + AVR32_OPC_BRNE1, mgl@1371: + AVR32_OPC_BRCC1, mgl@1371: + AVR32_OPC_BRCS1, mgl@1371: + AVR32_OPC_BRGE1, mgl@1371: + AVR32_OPC_BRLT1, mgl@1371: + AVR32_OPC_BRMI1, mgl@1371: + AVR32_OPC_BRPL1, mgl@1371: + AVR32_OPC_BREQ2, mgl@1371: + AVR32_OPC_BRNE2, mgl@1371: + AVR32_OPC_BRCC2, mgl@1371: + AVR32_OPC_BRCS2, mgl@1371: + AVR32_OPC_BRGE2, mgl@1371: + AVR32_OPC_BRLT2, mgl@1371: + AVR32_OPC_BRMI2, mgl@1371: + AVR32_OPC_BRPL2, mgl@1371: + AVR32_OPC_BRLS, mgl@1371: + AVR32_OPC_BRGT, mgl@1371: + AVR32_OPC_BRLE, mgl@1371: + AVR32_OPC_BRHI, mgl@1371: + AVR32_OPC_BRVS, mgl@1371: + AVR32_OPC_BRVC, mgl@1371: + AVR32_OPC_BRQS, mgl@1371: + AVR32_OPC_BRAL, mgl@1371: + AVR32_OPC_BREAKPOINT, mgl@1371: + AVR32_OPC_BREV, mgl@1371: + AVR32_OPC_BST, mgl@1371: + AVR32_OPC_CACHE, mgl@1371: + AVR32_OPC_CASTS_B, mgl@1371: + AVR32_OPC_CASTS_H, mgl@1371: + AVR32_OPC_CASTU_B, mgl@1371: + AVR32_OPC_CASTU_H, mgl@1371: + AVR32_OPC_CBR, mgl@1371: + AVR32_OPC_CLZ, mgl@1371: + AVR32_OPC_COM, mgl@1371: + AVR32_OPC_COP, mgl@1371: + AVR32_OPC_CP_B, mgl@1371: + AVR32_OPC_CP_H, mgl@1371: + AVR32_OPC_CP_W1, mgl@1371: + AVR32_OPC_CP_W2, mgl@1371: + AVR32_OPC_CP_W3, mgl@1371: + AVR32_OPC_CPC1, mgl@1371: + AVR32_OPC_CPC2, mgl@1371: + AVR32_OPC_CSRF, mgl@1371: + AVR32_OPC_CSRFCZ, mgl@1371: + AVR32_OPC_DIVS, mgl@1371: + AVR32_OPC_DIVU, mgl@1371: + AVR32_OPC_EOR1, mgl@1371: + AVR32_OPC_EOR2, mgl@1371: + AVR32_OPC_EOR3, mgl@1371: + AVR32_OPC_EORL, mgl@1371: + AVR32_OPC_EORH, mgl@1371: + AVR32_OPC_FRS, mgl@1371: + AVR32_OPC_ICALL, mgl@1371: + AVR32_OPC_INCJOSP, mgl@1371: + AVR32_OPC_LD_D1, mgl@1371: + AVR32_OPC_LD_D2, mgl@1371: + AVR32_OPC_LD_D3, mgl@1371: + AVR32_OPC_LD_D5, mgl@1371: + AVR32_OPC_LD_D4, mgl@1371: + AVR32_OPC_LD_SB2, mgl@1371: + AVR32_OPC_LD_SB1, mgl@1371: + AVR32_OPC_LD_UB1, mgl@1371: + AVR32_OPC_LD_UB2, mgl@1371: + AVR32_OPC_LD_UB5, mgl@1371: + AVR32_OPC_LD_UB3, mgl@1371: + AVR32_OPC_LD_UB4, mgl@1371: + AVR32_OPC_LD_SH1, mgl@1371: + AVR32_OPC_LD_SH2, mgl@1371: + AVR32_OPC_LD_SH5, mgl@1371: + AVR32_OPC_LD_SH3, mgl@1371: + AVR32_OPC_LD_SH4, mgl@1371: + AVR32_OPC_LD_UH1, mgl@1371: + AVR32_OPC_LD_UH2, mgl@1371: + AVR32_OPC_LD_UH5, mgl@1371: + AVR32_OPC_LD_UH3, mgl@1371: + AVR32_OPC_LD_UH4, mgl@1371: + AVR32_OPC_LD_W1, mgl@1371: + AVR32_OPC_LD_W2, mgl@1371: + AVR32_OPC_LD_W5, mgl@1371: + AVR32_OPC_LD_W6, mgl@1371: + AVR32_OPC_LD_W3, mgl@1371: + AVR32_OPC_LD_W4, mgl@1371: + AVR32_OPC_LDC_D1, mgl@1371: + AVR32_OPC_LDC_D2, mgl@1371: + AVR32_OPC_LDC_D3, mgl@1371: + AVR32_OPC_LDC_W1, mgl@1371: + AVR32_OPC_LDC_W2, mgl@1371: + AVR32_OPC_LDC_W3, mgl@1371: + AVR32_OPC_LDC0_D, mgl@1371: + AVR32_OPC_LDC0_W, mgl@1371: + AVR32_OPC_LDCM_D, mgl@1371: + AVR32_OPC_LDCM_D_PU, mgl@1371: + AVR32_OPC_LDCM_W, mgl@1371: + AVR32_OPC_LDCM_W_PU, mgl@1371: + AVR32_OPC_LDDPC, mgl@1371: + AVR32_OPC_LDDPC_EXT, mgl@1371: + AVR32_OPC_LDDSP, mgl@1371: + AVR32_OPC_LDINS_B, mgl@1371: + AVR32_OPC_LDINS_H, mgl@1371: + AVR32_OPC_LDM, mgl@1371: + AVR32_OPC_LDMTS, mgl@1371: + AVR32_OPC_LDMTS_PU, mgl@1371: + AVR32_OPC_LDSWP_SH, mgl@1371: + AVR32_OPC_LDSWP_UH, mgl@1371: + AVR32_OPC_LDSWP_W, mgl@1371: + AVR32_OPC_LSL1, mgl@1371: + AVR32_OPC_LSL3, mgl@1371: + AVR32_OPC_LSL2, mgl@1371: + AVR32_OPC_LSR1, mgl@1371: + AVR32_OPC_LSR3, mgl@1371: + AVR32_OPC_LSR2, mgl@1371: + AVR32_OPC_MAC, mgl@1371: + AVR32_OPC_MACHH_D, mgl@1371: + AVR32_OPC_MACHH_W, mgl@1371: + AVR32_OPC_MACS_D, mgl@1371: + AVR32_OPC_MACSATHH_W, mgl@1371: + AVR32_OPC_MACUD, mgl@1371: + AVR32_OPC_MACWH_D, mgl@1371: + AVR32_OPC_MAX, mgl@1371: + AVR32_OPC_MCALL, mgl@1371: + AVR32_OPC_MFDR, mgl@1371: + AVR32_OPC_MFSR, mgl@1371: + AVR32_OPC_MIN, mgl@1371: + AVR32_OPC_MOV3, mgl@1371: + AVR32_OPC_MOV1, mgl@1371: + AVR32_OPC_MOV2, mgl@1371: + AVR32_OPC_MOVEQ1, mgl@1371: + AVR32_OPC_MOVNE1, mgl@1371: + AVR32_OPC_MOVCC1, mgl@1371: + AVR32_OPC_MOVCS1, mgl@1371: + AVR32_OPC_MOVGE1, mgl@1371: + AVR32_OPC_MOVLT1, mgl@1371: + AVR32_OPC_MOVMI1, mgl@1371: + AVR32_OPC_MOVPL1, mgl@1371: + AVR32_OPC_MOVLS1, mgl@1371: + AVR32_OPC_MOVGT1, mgl@1371: + AVR32_OPC_MOVLE1, mgl@1371: + AVR32_OPC_MOVHI1, mgl@1371: + AVR32_OPC_MOVVS1, mgl@1371: + AVR32_OPC_MOVVC1, mgl@1371: + AVR32_OPC_MOVQS1, mgl@1371: + AVR32_OPC_MOVAL1, mgl@1371: + AVR32_OPC_MOVEQ2, mgl@1371: + AVR32_OPC_MOVNE2, mgl@1371: + AVR32_OPC_MOVCC2, mgl@1371: + AVR32_OPC_MOVCS2, mgl@1371: + AVR32_OPC_MOVGE2, mgl@1371: + AVR32_OPC_MOVLT2, mgl@1371: + AVR32_OPC_MOVMI2, mgl@1371: + AVR32_OPC_MOVPL2, mgl@1371: + AVR32_OPC_MOVLS2, mgl@1371: + AVR32_OPC_MOVGT2, mgl@1371: + AVR32_OPC_MOVLE2, mgl@1371: + AVR32_OPC_MOVHI2, mgl@1371: + AVR32_OPC_MOVVS2, mgl@1371: + AVR32_OPC_MOVVC2, mgl@1371: + AVR32_OPC_MOVQS2, mgl@1371: + AVR32_OPC_MOVAL2, mgl@1371: + AVR32_OPC_MTDR, mgl@1371: + AVR32_OPC_MTSR, mgl@1371: + AVR32_OPC_MUL1, mgl@1371: + AVR32_OPC_MUL2, mgl@1371: + AVR32_OPC_MUL3, mgl@1371: + AVR32_OPC_MULHH_W, mgl@1371: + AVR32_OPC_MULNHH_W, mgl@1371: + AVR32_OPC_MULNWH_D, mgl@1371: + AVR32_OPC_MULSD, mgl@1371: + AVR32_OPC_MULSATHH_H, mgl@1371: + AVR32_OPC_MULSATHH_W, mgl@1371: + AVR32_OPC_MULSATRNDHH_H, mgl@1371: + AVR32_OPC_MULSATRNDWH_W, mgl@1371: + AVR32_OPC_MULSATWH_W, mgl@1371: + AVR32_OPC_MULU_D, mgl@1371: + AVR32_OPC_MULWH_D, mgl@1371: + AVR32_OPC_MUSFR, mgl@1371: + AVR32_OPC_MUSTR, mgl@1371: + AVR32_OPC_MVCR_D, mgl@1371: + AVR32_OPC_MVCR_W, mgl@1371: + AVR32_OPC_MVRC_D, mgl@1371: + AVR32_OPC_MVRC_W, mgl@1371: + AVR32_OPC_NEG, mgl@1371: + AVR32_OPC_NOP, mgl@1371: + AVR32_OPC_OR1, mgl@1371: + AVR32_OPC_OR2, mgl@1371: + AVR32_OPC_OR3, mgl@1371: + AVR32_OPC_ORH, mgl@1371: + AVR32_OPC_ORL, mgl@1371: + AVR32_OPC_PABS_SB, mgl@1371: + AVR32_OPC_PABS_SH, mgl@1371: + AVR32_OPC_PACKSH_SB, mgl@1371: + AVR32_OPC_PACKSH_UB, mgl@1371: + AVR32_OPC_PACKW_SH, mgl@1371: + AVR32_OPC_PADD_B, mgl@1371: + AVR32_OPC_PADD_H, mgl@1371: + AVR32_OPC_PADDH_SH, mgl@1371: + AVR32_OPC_PADDH_UB, mgl@1371: + AVR32_OPC_PADDS_SB, mgl@1371: + AVR32_OPC_PADDS_SH, mgl@1371: + AVR32_OPC_PADDS_UB, mgl@1371: + AVR32_OPC_PADDS_UH, mgl@1371: + AVR32_OPC_PADDSUB_H, mgl@1371: + AVR32_OPC_PADDSUBH_SH, mgl@1371: + AVR32_OPC_PADDSUBS_SH, mgl@1371: + AVR32_OPC_PADDSUBS_UH, mgl@1371: + AVR32_OPC_PADDX_H, mgl@1371: + AVR32_OPC_PADDXH_SH, mgl@1371: + AVR32_OPC_PADDXS_SH, mgl@1371: + AVR32_OPC_PADDXS_UH, mgl@1371: + AVR32_OPC_PASR_B, mgl@1371: + AVR32_OPC_PASR_H, mgl@1371: + AVR32_OPC_PAVG_SH, mgl@1371: + AVR32_OPC_PAVG_UB, mgl@1371: + AVR32_OPC_PLSL_B, mgl@1371: + AVR32_OPC_PLSL_H, mgl@1371: + AVR32_OPC_PLSR_B, mgl@1371: + AVR32_OPC_PLSR_H, mgl@1371: + AVR32_OPC_PMAX_SH, mgl@1371: + AVR32_OPC_PMAX_UB, mgl@1371: + AVR32_OPC_PMIN_SH, mgl@1371: + AVR32_OPC_PMIN_UB, mgl@1371: + AVR32_OPC_POPJC, mgl@1371: + AVR32_OPC_POPM, mgl@1371: + AVR32_OPC_POPM_E, mgl@1371: + AVR32_OPC_PREF, mgl@1371: + AVR32_OPC_PSAD, mgl@1371: + AVR32_OPC_PSUB_B, mgl@1371: + AVR32_OPC_PSUB_H, mgl@1371: + AVR32_OPC_PSUBADD_H, mgl@1371: + AVR32_OPC_PSUBADDH_SH, mgl@1371: + AVR32_OPC_PSUBADDS_SH, mgl@1371: + AVR32_OPC_PSUBADDS_UH, mgl@1371: + AVR32_OPC_PSUBH_SH, mgl@1371: + AVR32_OPC_PSUBH_UB, mgl@1371: + AVR32_OPC_PSUBS_SB, mgl@1371: + AVR32_OPC_PSUBS_SH, mgl@1371: + AVR32_OPC_PSUBS_UB, mgl@1371: + AVR32_OPC_PSUBS_UH, mgl@1371: + AVR32_OPC_PSUBX_H, mgl@1371: + AVR32_OPC_PSUBXH_SH, mgl@1371: + AVR32_OPC_PSUBXS_SH, mgl@1371: + AVR32_OPC_PSUBXS_UH, mgl@1371: + AVR32_OPC_PUNPCKSB_H, mgl@1371: + AVR32_OPC_PUNPCKUB_H, mgl@1371: + AVR32_OPC_PUSHJC, mgl@1371: + AVR32_OPC_PUSHM, mgl@1371: + AVR32_OPC_PUSHM_E, mgl@1371: + AVR32_OPC_RCALL1, mgl@1371: + AVR32_OPC_RCALL2, mgl@1371: + AVR32_OPC_RETEQ, mgl@1371: + AVR32_OPC_RETNE, mgl@1371: + AVR32_OPC_RETCC, mgl@1371: + AVR32_OPC_RETCS, mgl@1371: + AVR32_OPC_RETGE, mgl@1371: + AVR32_OPC_RETLT, mgl@1371: + AVR32_OPC_RETMI, mgl@1371: + AVR32_OPC_RETPL, mgl@1371: + AVR32_OPC_RETLS, mgl@1371: + AVR32_OPC_RETGT, mgl@1371: + AVR32_OPC_RETLE, mgl@1371: + AVR32_OPC_RETHI, mgl@1371: + AVR32_OPC_RETVS, mgl@1371: + AVR32_OPC_RETVC, mgl@1371: + AVR32_OPC_RETQS, mgl@1371: + AVR32_OPC_RETAL, mgl@1371: + AVR32_OPC_RETD, mgl@1371: + AVR32_OPC_RETE, mgl@1371: + AVR32_OPC_RETJ, mgl@1371: + AVR32_OPC_RETS, mgl@1371: + AVR32_OPC_RJMP, mgl@1371: + AVR32_OPC_ROL, mgl@1371: + AVR32_OPC_ROR, mgl@1371: + AVR32_OPC_RSUB1, mgl@1371: + AVR32_OPC_RSUB2, mgl@1371: + AVR32_OPC_SATADD_H, mgl@1371: + AVR32_OPC_SATADD_W, mgl@1371: + AVR32_OPC_SATRNDS, mgl@1371: + AVR32_OPC_SATRNDU, mgl@1371: + AVR32_OPC_SATS, mgl@1371: + AVR32_OPC_SATSUB_H, mgl@1371: + AVR32_OPC_SATSUB_W1, mgl@1371: + AVR32_OPC_SATSUB_W2, mgl@1371: + AVR32_OPC_SATU, mgl@1371: + AVR32_OPC_SBC, mgl@1371: + AVR32_OPC_SBR, mgl@1371: + AVR32_OPC_SCALL, mgl@1371: + AVR32_OPC_SCR, mgl@1371: + AVR32_OPC_SLEEP, mgl@1371: + AVR32_OPC_SREQ, mgl@1371: + AVR32_OPC_SRNE, mgl@1371: + AVR32_OPC_SRCC, mgl@1371: + AVR32_OPC_SRCS, mgl@1371: + AVR32_OPC_SRGE, mgl@1371: + AVR32_OPC_SRLT, mgl@1371: + AVR32_OPC_SRMI, mgl@1371: + AVR32_OPC_SRPL, mgl@1371: + AVR32_OPC_SRLS, mgl@1371: + AVR32_OPC_SRGT, mgl@1371: + AVR32_OPC_SRLE, mgl@1371: + AVR32_OPC_SRHI, mgl@1371: + AVR32_OPC_SRVS, mgl@1371: + AVR32_OPC_SRVC, mgl@1371: + AVR32_OPC_SRQS, mgl@1371: + AVR32_OPC_SRAL, mgl@1371: + AVR32_OPC_SSRF, mgl@1371: + AVR32_OPC_ST_B1, mgl@1371: + AVR32_OPC_ST_B2, mgl@1371: + AVR32_OPC_ST_B5, mgl@1371: + AVR32_OPC_ST_B3, mgl@1371: + AVR32_OPC_ST_B4, mgl@1371: + AVR32_OPC_ST_D1, mgl@1371: + AVR32_OPC_ST_D2, mgl@1371: + AVR32_OPC_ST_D3, mgl@1371: + AVR32_OPC_ST_D5, mgl@1371: + AVR32_OPC_ST_D4, mgl@1371: + AVR32_OPC_ST_H1, mgl@1371: + AVR32_OPC_ST_H2, mgl@1371: + AVR32_OPC_ST_H5, mgl@1371: + AVR32_OPC_ST_H3, mgl@1371: + AVR32_OPC_ST_H4, mgl@1371: + AVR32_OPC_ST_W1, mgl@1371: + AVR32_OPC_ST_W2, mgl@1371: + AVR32_OPC_ST_W5, mgl@1371: + AVR32_OPC_ST_W3, mgl@1371: + AVR32_OPC_ST_W4, mgl@1371: + AVR32_OPC_STC_D1, mgl@1371: + AVR32_OPC_STC_D2, mgl@1371: + AVR32_OPC_STC_D3, mgl@1371: + AVR32_OPC_STC_W1, mgl@1371: + AVR32_OPC_STC_W2, mgl@1371: + AVR32_OPC_STC_W3, mgl@1371: + AVR32_OPC_STC0_D, mgl@1371: + AVR32_OPC_STC0_W, mgl@1371: + AVR32_OPC_STCM_D, mgl@1371: + AVR32_OPC_STCM_D_PU, mgl@1371: + AVR32_OPC_STCM_W, mgl@1371: + AVR32_OPC_STCM_W_PU, mgl@1371: + AVR32_OPC_STCOND, mgl@1371: + AVR32_OPC_STDSP, mgl@1371: + AVR32_OPC_STHH_W2, mgl@1371: + AVR32_OPC_STHH_W1, mgl@1371: + AVR32_OPC_STM, mgl@1371: + AVR32_OPC_STM_PU, mgl@1371: + AVR32_OPC_STMTS, mgl@1371: + AVR32_OPC_STMTS_PU, mgl@1371: + AVR32_OPC_STSWP_H, mgl@1371: + AVR32_OPC_STSWP_W, mgl@1371: + AVR32_OPC_SUB1, mgl@1371: + AVR32_OPC_SUB2, mgl@1371: + AVR32_OPC_SUB5, mgl@1371: + AVR32_OPC_SUB3_SP, mgl@1371: + AVR32_OPC_SUB3, mgl@1371: + AVR32_OPC_SUB4, mgl@1371: + AVR32_OPC_SUBEQ, mgl@1371: + AVR32_OPC_SUBNE, mgl@1371: + AVR32_OPC_SUBCC, mgl@1371: + AVR32_OPC_SUBCS, mgl@1371: + AVR32_OPC_SUBGE, mgl@1371: + AVR32_OPC_SUBLT, mgl@1371: + AVR32_OPC_SUBMI, mgl@1371: + AVR32_OPC_SUBPL, mgl@1371: + AVR32_OPC_SUBLS, mgl@1371: + AVR32_OPC_SUBGT, mgl@1371: + AVR32_OPC_SUBLE, mgl@1371: + AVR32_OPC_SUBHI, mgl@1371: + AVR32_OPC_SUBVS, mgl@1371: + AVR32_OPC_SUBVC, mgl@1371: + AVR32_OPC_SUBQS, mgl@1371: + AVR32_OPC_SUBAL, mgl@1371: + AVR32_OPC_SUBFEQ, mgl@1371: + AVR32_OPC_SUBFNE, mgl@1371: + AVR32_OPC_SUBFCC, mgl@1371: + AVR32_OPC_SUBFCS, mgl@1371: + AVR32_OPC_SUBFGE, mgl@1371: + AVR32_OPC_SUBFLT, mgl@1371: + AVR32_OPC_SUBFMI, mgl@1371: + AVR32_OPC_SUBFPL, mgl@1371: + AVR32_OPC_SUBFLS, mgl@1371: + AVR32_OPC_SUBFGT, mgl@1371: + AVR32_OPC_SUBFLE, mgl@1371: + AVR32_OPC_SUBFHI, mgl@1371: + AVR32_OPC_SUBFVS, mgl@1371: + AVR32_OPC_SUBFVC, mgl@1371: + AVR32_OPC_SUBFQS, mgl@1371: + AVR32_OPC_SUBFAL, mgl@1371: + AVR32_OPC_SUBHH_W, mgl@1371: + AVR32_OPC_SWAP_B, mgl@1371: + AVR32_OPC_SWAP_BH, mgl@1371: + AVR32_OPC_SWAP_H, mgl@1371: + AVR32_OPC_SYNC, mgl@1371: + AVR32_OPC_TLBR, mgl@1371: + AVR32_OPC_TLBS, mgl@1371: + AVR32_OPC_TLBW, mgl@1371: + AVR32_OPC_TNBZ, mgl@1371: + AVR32_OPC_TST, mgl@1371: + AVR32_OPC_XCHG, mgl@1371: + AVR32_OPC_MEMC, mgl@1371: + AVR32_OPC_MEMS, mgl@1371: + AVR32_OPC_MEMT, mgl@1371: + AVR32_OPC_BFEXTS, mgl@1371: + AVR32_OPC_BFEXTU, mgl@1371: + AVR32_OPC_BFINS, mgl@1371: + AVR32_OPC_RSUBEQ, mgl@1371: + AVR32_OPC_RSUBNE, mgl@1371: + AVR32_OPC_RSUBCC, mgl@1371: + AVR32_OPC_RSUBCS, mgl@1371: + AVR32_OPC_RSUBGE, mgl@1371: + AVR32_OPC_RSUBLT, mgl@1371: + AVR32_OPC_RSUBMI, mgl@1371: + AVR32_OPC_RSUBPL, mgl@1371: + AVR32_OPC_RSUBLS, mgl@1371: + AVR32_OPC_RSUBGT, mgl@1371: + AVR32_OPC_RSUBLE, mgl@1371: + AVR32_OPC_RSUBHI, mgl@1371: + AVR32_OPC_RSUBVS, mgl@1371: + AVR32_OPC_RSUBVC, mgl@1371: + AVR32_OPC_RSUBQS, mgl@1371: + AVR32_OPC_RSUBAL, mgl@1371: + AVR32_OPC_ADDEQ, mgl@1371: + AVR32_OPC_ADDNE, mgl@1371: + AVR32_OPC_ADDCC, mgl@1371: + AVR32_OPC_ADDCS, mgl@1371: + AVR32_OPC_ADDGE, mgl@1371: + AVR32_OPC_ADDLT, mgl@1371: + AVR32_OPC_ADDMI, mgl@1371: + AVR32_OPC_ADDPL, mgl@1371: + AVR32_OPC_ADDLS, mgl@1371: + AVR32_OPC_ADDGT, mgl@1371: + AVR32_OPC_ADDLE, mgl@1371: + AVR32_OPC_ADDHI, mgl@1371: + AVR32_OPC_ADDVS, mgl@1371: + AVR32_OPC_ADDVC, mgl@1371: + AVR32_OPC_ADDQS, mgl@1371: + AVR32_OPC_ADDAL, mgl@1371: + AVR32_OPC_SUB2EQ, mgl@1371: + AVR32_OPC_SUB2NE, mgl@1371: + AVR32_OPC_SUB2CC, mgl@1371: + AVR32_OPC_SUB2CS, mgl@1371: + AVR32_OPC_SUB2GE, mgl@1371: + AVR32_OPC_SUB2LT, mgl@1371: + AVR32_OPC_SUB2MI, mgl@1371: + AVR32_OPC_SUB2PL, mgl@1371: + AVR32_OPC_SUB2LS, mgl@1371: + AVR32_OPC_SUB2GT, mgl@1371: + AVR32_OPC_SUB2LE, mgl@1371: + AVR32_OPC_SUB2HI, mgl@1371: + AVR32_OPC_SUB2VS, mgl@1371: + AVR32_OPC_SUB2VC, mgl@1371: + AVR32_OPC_SUB2QS, mgl@1371: + AVR32_OPC_SUB2AL, mgl@1371: + AVR32_OPC_ANDEQ, mgl@1371: + AVR32_OPC_ANDNE, mgl@1371: + AVR32_OPC_ANDCC, mgl@1371: + AVR32_OPC_ANDCS, mgl@1371: + AVR32_OPC_ANDGE, mgl@1371: + AVR32_OPC_ANDLT, mgl@1371: + AVR32_OPC_ANDMI, mgl@1371: + AVR32_OPC_ANDPL, mgl@1371: + AVR32_OPC_ANDLS, mgl@1371: + AVR32_OPC_ANDGT, mgl@1371: + AVR32_OPC_ANDLE, mgl@1371: + AVR32_OPC_ANDHI, mgl@1371: + AVR32_OPC_ANDVS, mgl@1371: + AVR32_OPC_ANDVC, mgl@1371: + AVR32_OPC_ANDQS, mgl@1371: + AVR32_OPC_ANDAL, mgl@1371: + AVR32_OPC_OREQ, mgl@1371: + AVR32_OPC_ORNE, mgl@1371: + AVR32_OPC_ORCC, mgl@1371: + AVR32_OPC_ORCS, mgl@1371: + AVR32_OPC_ORGE, mgl@1371: + AVR32_OPC_ORLT, mgl@1371: + AVR32_OPC_ORMI, mgl@1371: + AVR32_OPC_ORPL, mgl@1371: + AVR32_OPC_ORLS, mgl@1371: + AVR32_OPC_ORGT, mgl@1371: + AVR32_OPC_ORLE, mgl@1371: + AVR32_OPC_ORHI, mgl@1371: + AVR32_OPC_ORVS, mgl@1371: + AVR32_OPC_ORVC, mgl@1371: + AVR32_OPC_ORQS, mgl@1371: + AVR32_OPC_ORAL, mgl@1371: + AVR32_OPC_EOREQ, mgl@1371: + AVR32_OPC_EORNE, mgl@1371: + AVR32_OPC_EORCC, mgl@1371: + AVR32_OPC_EORCS, mgl@1371: + AVR32_OPC_EORGE, mgl@1371: + AVR32_OPC_EORLT, mgl@1371: + AVR32_OPC_EORMI, mgl@1371: + AVR32_OPC_EORPL, mgl@1371: + AVR32_OPC_EORLS, mgl@1371: + AVR32_OPC_EORGT, mgl@1371: + AVR32_OPC_EORLE, mgl@1371: + AVR32_OPC_EORHI, mgl@1371: + AVR32_OPC_EORVS, mgl@1371: + AVR32_OPC_EORVC, mgl@1371: + AVR32_OPC_EORQS, mgl@1371: + AVR32_OPC_EORAL, mgl@1371: + AVR32_OPC_LD_WEQ, mgl@1371: + AVR32_OPC_LD_WNE, mgl@1371: + AVR32_OPC_LD_WCC, mgl@1371: + AVR32_OPC_LD_WCS, mgl@1371: + AVR32_OPC_LD_WGE, mgl@1371: + AVR32_OPC_LD_WLT, mgl@1371: + AVR32_OPC_LD_WMI, mgl@1371: + AVR32_OPC_LD_WPL, mgl@1371: + AVR32_OPC_LD_WLS, mgl@1371: + AVR32_OPC_LD_WGT, mgl@1371: + AVR32_OPC_LD_WLE, mgl@1371: + AVR32_OPC_LD_WHI, mgl@1371: + AVR32_OPC_LD_WVS, mgl@1371: + AVR32_OPC_LD_WVC, mgl@1371: + AVR32_OPC_LD_WQS, mgl@1371: + AVR32_OPC_LD_WAL, mgl@1371: + AVR32_OPC_LD_SHEQ, mgl@1371: + AVR32_OPC_LD_SHNE, mgl@1371: + AVR32_OPC_LD_SHCC, mgl@1371: + AVR32_OPC_LD_SHCS, mgl@1371: + AVR32_OPC_LD_SHGE, mgl@1371: + AVR32_OPC_LD_SHLT, mgl@1371: + AVR32_OPC_LD_SHMI, mgl@1371: + AVR32_OPC_LD_SHPL, mgl@1371: + AVR32_OPC_LD_SHLS, mgl@1371: + AVR32_OPC_LD_SHGT, mgl@1371: + AVR32_OPC_LD_SHLE, mgl@1371: + AVR32_OPC_LD_SHHI, mgl@1371: + AVR32_OPC_LD_SHVS, mgl@1371: + AVR32_OPC_LD_SHVC, mgl@1371: + AVR32_OPC_LD_SHQS, mgl@1371: + AVR32_OPC_LD_SHAL, mgl@1371: + AVR32_OPC_LD_UHEQ, mgl@1371: + AVR32_OPC_LD_UHNE, mgl@1371: + AVR32_OPC_LD_UHCC, mgl@1371: + AVR32_OPC_LD_UHCS, mgl@1371: + AVR32_OPC_LD_UHGE, mgl@1371: + AVR32_OPC_LD_UHLT, mgl@1371: + AVR32_OPC_LD_UHMI, mgl@1371: + AVR32_OPC_LD_UHPL, mgl@1371: + AVR32_OPC_LD_UHLS, mgl@1371: + AVR32_OPC_LD_UHGT, mgl@1371: + AVR32_OPC_LD_UHLE, mgl@1371: + AVR32_OPC_LD_UHHI, mgl@1371: + AVR32_OPC_LD_UHVS, mgl@1371: + AVR32_OPC_LD_UHVC, mgl@1371: + AVR32_OPC_LD_UHQS, mgl@1371: + AVR32_OPC_LD_UHAL, mgl@1371: + AVR32_OPC_LD_SBEQ, mgl@1371: + AVR32_OPC_LD_SBNE, mgl@1371: + AVR32_OPC_LD_SBCC, mgl@1371: + AVR32_OPC_LD_SBCS, mgl@1371: + AVR32_OPC_LD_SBGE, mgl@1371: + AVR32_OPC_LD_SBLT, mgl@1371: + AVR32_OPC_LD_SBMI, mgl@1371: + AVR32_OPC_LD_SBPL, mgl@1371: + AVR32_OPC_LD_SBLS, mgl@1371: + AVR32_OPC_LD_SBGT, mgl@1371: + AVR32_OPC_LD_SBLE, mgl@1371: + AVR32_OPC_LD_SBHI, mgl@1371: + AVR32_OPC_LD_SBVS, mgl@1371: + AVR32_OPC_LD_SBVC, mgl@1371: + AVR32_OPC_LD_SBQS, mgl@1371: + AVR32_OPC_LD_SBAL, mgl@1371: + AVR32_OPC_LD_UBEQ, mgl@1371: + AVR32_OPC_LD_UBNE, mgl@1371: + AVR32_OPC_LD_UBCC, mgl@1371: + AVR32_OPC_LD_UBCS, mgl@1371: + AVR32_OPC_LD_UBGE, mgl@1371: + AVR32_OPC_LD_UBLT, mgl@1371: + AVR32_OPC_LD_UBMI, mgl@1371: + AVR32_OPC_LD_UBPL, mgl@1371: + AVR32_OPC_LD_UBLS, mgl@1371: + AVR32_OPC_LD_UBGT, mgl@1371: + AVR32_OPC_LD_UBLE, mgl@1371: + AVR32_OPC_LD_UBHI, mgl@1371: + AVR32_OPC_LD_UBVS, mgl@1371: + AVR32_OPC_LD_UBVC, mgl@1371: + AVR32_OPC_LD_UBQS, mgl@1371: + AVR32_OPC_LD_UBAL, mgl@1371: + AVR32_OPC_ST_WEQ, mgl@1371: + AVR32_OPC_ST_WNE, mgl@1371: + AVR32_OPC_ST_WCC, mgl@1371: + AVR32_OPC_ST_WCS, mgl@1371: + AVR32_OPC_ST_WGE, mgl@1371: + AVR32_OPC_ST_WLT, mgl@1371: + AVR32_OPC_ST_WMI, mgl@1371: + AVR32_OPC_ST_WPL, mgl@1371: + AVR32_OPC_ST_WLS, mgl@1371: + AVR32_OPC_ST_WGT, mgl@1371: + AVR32_OPC_ST_WLE, mgl@1371: + AVR32_OPC_ST_WHI, mgl@1371: + AVR32_OPC_ST_WVS, mgl@1371: + AVR32_OPC_ST_WVC, mgl@1371: + AVR32_OPC_ST_WQS, mgl@1371: + AVR32_OPC_ST_WAL, mgl@1371: + AVR32_OPC_ST_HEQ, mgl@1371: + AVR32_OPC_ST_HNE, mgl@1371: + AVR32_OPC_ST_HCC, mgl@1371: + AVR32_OPC_ST_HCS, mgl@1371: + AVR32_OPC_ST_HGE, mgl@1371: + AVR32_OPC_ST_HLT, mgl@1371: + AVR32_OPC_ST_HMI, mgl@1371: + AVR32_OPC_ST_HPL, mgl@1371: + AVR32_OPC_ST_HLS, mgl@1371: + AVR32_OPC_ST_HGT, mgl@1371: + AVR32_OPC_ST_HLE, mgl@1371: + AVR32_OPC_ST_HHI, mgl@1371: + AVR32_OPC_ST_HVS, mgl@1371: + AVR32_OPC_ST_HVC, mgl@1371: + AVR32_OPC_ST_HQS, mgl@1371: + AVR32_OPC_ST_HAL, mgl@1371: + AVR32_OPC_ST_BEQ, mgl@1371: + AVR32_OPC_ST_BNE, mgl@1371: + AVR32_OPC_ST_BCC, mgl@1371: + AVR32_OPC_ST_BCS, mgl@1371: + AVR32_OPC_ST_BGE, mgl@1371: + AVR32_OPC_ST_BLT, mgl@1371: + AVR32_OPC_ST_BMI, mgl@1371: + AVR32_OPC_ST_BPL, mgl@1371: + AVR32_OPC_ST_BLS, mgl@1371: + AVR32_OPC_ST_BGT, mgl@1371: + AVR32_OPC_ST_BLE, mgl@1371: + AVR32_OPC_ST_BHI, mgl@1371: + AVR32_OPC_ST_BVS, mgl@1371: + AVR32_OPC_ST_BVC, mgl@1371: + AVR32_OPC_ST_BQS, mgl@1371: + AVR32_OPC_ST_BAL, mgl@1371: + AVR32_OPC_MOVH, mgl@1371: + AVR32_OPC__END_ mgl@1371: +}; mgl@1371: +#define AVR32_NR_OPCODES AVR32_OPC__END_ mgl@1371: + mgl@1371: +enum avr32_syntax_type mgl@1371: +{ mgl@1371: + AVR32_SYNTAX_ABS, mgl@1371: + AVR32_SYNTAX_ACALL, mgl@1371: + AVR32_SYNTAX_ACR, mgl@1371: + AVR32_SYNTAX_ADC, mgl@1371: + AVR32_SYNTAX_ADD1, mgl@1371: + AVR32_SYNTAX_ADD2, mgl@1371: + AVR32_SYNTAX_ADDABS, mgl@1371: + AVR32_SYNTAX_ADDHH_W, mgl@1371: + AVR32_SYNTAX_AND1, mgl@1371: + AVR32_SYNTAX_AND2, mgl@1371: + AVR32_SYNTAX_AND3, mgl@1371: + AVR32_SYNTAX_ANDH, mgl@1371: + AVR32_SYNTAX_ANDH_COH, mgl@1371: + AVR32_SYNTAX_ANDL, mgl@1371: + AVR32_SYNTAX_ANDL_COH, mgl@1371: + AVR32_SYNTAX_ANDN, mgl@1371: + AVR32_SYNTAX_ASR1, mgl@1371: + AVR32_SYNTAX_ASR3, mgl@1371: + AVR32_SYNTAX_ASR2, mgl@1371: + AVR32_SYNTAX_BFEXTS, mgl@1371: + AVR32_SYNTAX_BFEXTU, mgl@1371: + AVR32_SYNTAX_BFINS, mgl@1371: + AVR32_SYNTAX_BLD, mgl@1371: + AVR32_SYNTAX_BREQ1, mgl@1371: + AVR32_SYNTAX_BRNE1, mgl@1371: + AVR32_SYNTAX_BRCC1, mgl@1371: + AVR32_SYNTAX_BRCS1, mgl@1371: + AVR32_SYNTAX_BRGE1, mgl@1371: + AVR32_SYNTAX_BRLT1, mgl@1371: + AVR32_SYNTAX_BRMI1, mgl@1371: + AVR32_SYNTAX_BRPL1, mgl@1371: + AVR32_SYNTAX_BRHS1, mgl@1371: + AVR32_SYNTAX_BRLO1, mgl@1371: + AVR32_SYNTAX_BREQ2, mgl@1371: + AVR32_SYNTAX_BRNE2, mgl@1371: + AVR32_SYNTAX_BRCC2, mgl@1371: + AVR32_SYNTAX_BRCS2, mgl@1371: + AVR32_SYNTAX_BRGE2, mgl@1371: + AVR32_SYNTAX_BRLT2, mgl@1371: + AVR32_SYNTAX_BRMI2, mgl@1371: + AVR32_SYNTAX_BRPL2, mgl@1371: + AVR32_SYNTAX_BRLS, mgl@1371: + AVR32_SYNTAX_BRGT, mgl@1371: + AVR32_SYNTAX_BRLE, mgl@1371: + AVR32_SYNTAX_BRHI, mgl@1371: + AVR32_SYNTAX_BRVS, mgl@1371: + AVR32_SYNTAX_BRVC, mgl@1371: + AVR32_SYNTAX_BRQS, mgl@1371: + AVR32_SYNTAX_BRAL, mgl@1371: + AVR32_SYNTAX_BRHS2, mgl@1371: + AVR32_SYNTAX_BRLO2, mgl@1371: + AVR32_SYNTAX_BREAKPOINT, mgl@1371: + AVR32_SYNTAX_BREV, mgl@1371: + AVR32_SYNTAX_BST, mgl@1371: + AVR32_SYNTAX_CACHE, mgl@1371: + AVR32_SYNTAX_CASTS_B, mgl@1371: + AVR32_SYNTAX_CASTS_H, mgl@1371: + AVR32_SYNTAX_CASTU_B, mgl@1371: + AVR32_SYNTAX_CASTU_H, mgl@1371: + AVR32_SYNTAX_CBR, mgl@1371: + AVR32_SYNTAX_CLZ, mgl@1371: + AVR32_SYNTAX_COM, mgl@1371: + AVR32_SYNTAX_COP, mgl@1371: + AVR32_SYNTAX_CP_B, mgl@1371: + AVR32_SYNTAX_CP_H, mgl@1371: + AVR32_SYNTAX_CP_W1, mgl@1371: + AVR32_SYNTAX_CP_W2, mgl@1371: + AVR32_SYNTAX_CP_W3, mgl@1371: + AVR32_SYNTAX_CPC1, mgl@1371: + AVR32_SYNTAX_CPC2, mgl@1371: + AVR32_SYNTAX_CSRF, mgl@1371: + AVR32_SYNTAX_CSRFCZ, mgl@1371: + AVR32_SYNTAX_DIVS, mgl@1371: + AVR32_SYNTAX_DIVU, mgl@1371: + AVR32_SYNTAX_EOR1, mgl@1371: + AVR32_SYNTAX_EOR2, mgl@1371: + AVR32_SYNTAX_EOR3, mgl@1371: + AVR32_SYNTAX_EORL, mgl@1371: + AVR32_SYNTAX_EORH, mgl@1371: + AVR32_SYNTAX_FRS, mgl@1371: + AVR32_SYNTAX_ICALL, mgl@1371: + AVR32_SYNTAX_INCJOSP, mgl@1371: + AVR32_SYNTAX_LD_D1, mgl@1371: + AVR32_SYNTAX_LD_D2, mgl@1371: + AVR32_SYNTAX_LD_D3, mgl@1371: + AVR32_SYNTAX_LD_D5, mgl@1371: + AVR32_SYNTAX_LD_D4, mgl@1371: + AVR32_SYNTAX_LD_SB2, mgl@1371: + AVR32_SYNTAX_LD_SB1, mgl@1371: + AVR32_SYNTAX_LD_UB1, mgl@1371: + AVR32_SYNTAX_LD_UB2, mgl@1371: + AVR32_SYNTAX_LD_UB5, mgl@1371: + AVR32_SYNTAX_LD_UB3, mgl@1371: + AVR32_SYNTAX_LD_UB4, mgl@1371: + AVR32_SYNTAX_LD_SH1, mgl@1371: + AVR32_SYNTAX_LD_SH2, mgl@1371: + AVR32_SYNTAX_LD_SH5, mgl@1371: + AVR32_SYNTAX_LD_SH3, mgl@1371: + AVR32_SYNTAX_LD_SH4, mgl@1371: + AVR32_SYNTAX_LD_UH1, mgl@1371: + AVR32_SYNTAX_LD_UH2, mgl@1371: + AVR32_SYNTAX_LD_UH5, mgl@1371: + AVR32_SYNTAX_LD_UH3, mgl@1371: + AVR32_SYNTAX_LD_UH4, mgl@1371: + AVR32_SYNTAX_LD_W1, mgl@1371: + AVR32_SYNTAX_LD_W2, mgl@1371: + AVR32_SYNTAX_LD_W5, mgl@1371: + AVR32_SYNTAX_LD_W6, mgl@1371: + AVR32_SYNTAX_LD_W3, mgl@1371: + AVR32_SYNTAX_LD_W4, mgl@1371: + AVR32_SYNTAX_LDC_D1, mgl@1371: + AVR32_SYNTAX_LDC_D2, mgl@1371: + AVR32_SYNTAX_LDC_D3, mgl@1371: + AVR32_SYNTAX_LDC_W1, mgl@1371: + AVR32_SYNTAX_LDC_W2, mgl@1371: + AVR32_SYNTAX_LDC_W3, mgl@1371: + AVR32_SYNTAX_LDC0_D, mgl@1371: + AVR32_SYNTAX_LDC0_W, mgl@1371: + AVR32_SYNTAX_LDCM_D, mgl@1371: + AVR32_SYNTAX_LDCM_D_PU, mgl@1371: + AVR32_SYNTAX_LDCM_W, mgl@1371: + AVR32_SYNTAX_LDCM_W_PU, mgl@1371: + AVR32_SYNTAX_LDDPC, mgl@1371: + AVR32_SYNTAX_LDDPC_EXT, mgl@1371: + AVR32_SYNTAX_LDDSP, mgl@1371: + AVR32_SYNTAX_LDINS_B, mgl@1371: + AVR32_SYNTAX_LDINS_H, mgl@1371: + AVR32_SYNTAX_LDM, mgl@1371: + AVR32_SYNTAX_LDMTS, mgl@1371: + AVR32_SYNTAX_LDMTS_PU, mgl@1371: + AVR32_SYNTAX_LDSWP_SH, mgl@1371: + AVR32_SYNTAX_LDSWP_UH, mgl@1371: + AVR32_SYNTAX_LDSWP_W, mgl@1371: + AVR32_SYNTAX_LSL1, mgl@1371: + AVR32_SYNTAX_LSL3, mgl@1371: + AVR32_SYNTAX_LSL2, mgl@1371: + AVR32_SYNTAX_LSR1, mgl@1371: + AVR32_SYNTAX_LSR3, mgl@1371: + AVR32_SYNTAX_LSR2, mgl@1371: + AVR32_SYNTAX_MAC, mgl@1371: + AVR32_SYNTAX_MACHH_D, mgl@1371: + AVR32_SYNTAX_MACHH_W, mgl@1371: + AVR32_SYNTAX_MACS_D, mgl@1371: + AVR32_SYNTAX_MACSATHH_W, mgl@1371: + AVR32_SYNTAX_MACUD, mgl@1371: + AVR32_SYNTAX_MACWH_D, mgl@1371: + AVR32_SYNTAX_MAX, mgl@1371: + AVR32_SYNTAX_MCALL, mgl@1371: + AVR32_SYNTAX_MFDR, mgl@1371: + AVR32_SYNTAX_MFSR, mgl@1371: + AVR32_SYNTAX_MIN, mgl@1371: + AVR32_SYNTAX_MOV3, mgl@1371: + AVR32_SYNTAX_MOV1, mgl@1371: + AVR32_SYNTAX_MOV2, mgl@1371: + AVR32_SYNTAX_MOVEQ1, mgl@1371: + AVR32_SYNTAX_MOVNE1, mgl@1371: + AVR32_SYNTAX_MOVCC1, mgl@1371: + AVR32_SYNTAX_MOVCS1, mgl@1371: + AVR32_SYNTAX_MOVGE1, mgl@1371: + AVR32_SYNTAX_MOVLT1, mgl@1371: + AVR32_SYNTAX_MOVMI1, mgl@1371: + AVR32_SYNTAX_MOVPL1, mgl@1371: + AVR32_SYNTAX_MOVLS1, mgl@1371: + AVR32_SYNTAX_MOVGT1, mgl@1371: + AVR32_SYNTAX_MOVLE1, mgl@1371: + AVR32_SYNTAX_MOVHI1, mgl@1371: + AVR32_SYNTAX_MOVVS1, mgl@1371: + AVR32_SYNTAX_MOVVC1, mgl@1371: + AVR32_SYNTAX_MOVQS1, mgl@1371: + AVR32_SYNTAX_MOVAL1, mgl@1371: + AVR32_SYNTAX_MOVHS1, mgl@1371: + AVR32_SYNTAX_MOVLO1, mgl@1371: + AVR32_SYNTAX_MOVEQ2, mgl@1371: + AVR32_SYNTAX_MOVNE2, mgl@1371: + AVR32_SYNTAX_MOVCC2, mgl@1371: + AVR32_SYNTAX_MOVCS2, mgl@1371: + AVR32_SYNTAX_MOVGE2, mgl@1371: + AVR32_SYNTAX_MOVLT2, mgl@1371: + AVR32_SYNTAX_MOVMI2, mgl@1371: + AVR32_SYNTAX_MOVPL2, mgl@1371: + AVR32_SYNTAX_MOVLS2, mgl@1371: + AVR32_SYNTAX_MOVGT2, mgl@1371: + AVR32_SYNTAX_MOVLE2, mgl@1371: + AVR32_SYNTAX_MOVHI2, mgl@1371: + AVR32_SYNTAX_MOVVS2, mgl@1371: + AVR32_SYNTAX_MOVVC2, mgl@1371: + AVR32_SYNTAX_MOVQS2, mgl@1371: + AVR32_SYNTAX_MOVAL2, mgl@1371: + AVR32_SYNTAX_MOVHS2, mgl@1371: + AVR32_SYNTAX_MOVLO2, mgl@1371: + AVR32_SYNTAX_MTDR, mgl@1371: + AVR32_SYNTAX_MTSR, mgl@1371: + AVR32_SYNTAX_MUL1, mgl@1371: + AVR32_SYNTAX_MUL2, mgl@1371: + AVR32_SYNTAX_MUL3, mgl@1371: + AVR32_SYNTAX_MULHH_W, mgl@1371: + AVR32_SYNTAX_MULNHH_W, mgl@1371: + AVR32_SYNTAX_MULNWH_D, mgl@1371: + AVR32_SYNTAX_MULSD, mgl@1371: + AVR32_SYNTAX_MULSATHH_H, mgl@1371: + AVR32_SYNTAX_MULSATHH_W, mgl@1371: + AVR32_SYNTAX_MULSATRNDHH_H, mgl@1371: + AVR32_SYNTAX_MULSATRNDWH_W, mgl@1371: + AVR32_SYNTAX_MULSATWH_W, mgl@1371: + AVR32_SYNTAX_MULU_D, mgl@1371: + AVR32_SYNTAX_MULWH_D, mgl@1371: + AVR32_SYNTAX_MUSFR, mgl@1371: + AVR32_SYNTAX_MUSTR, mgl@1371: + AVR32_SYNTAX_MVCR_D, mgl@1371: + AVR32_SYNTAX_MVCR_W, mgl@1371: + AVR32_SYNTAX_MVRC_D, mgl@1371: + AVR32_SYNTAX_MVRC_W, mgl@1371: + AVR32_SYNTAX_NEG, mgl@1371: + AVR32_SYNTAX_NOP, mgl@1371: + AVR32_SYNTAX_OR1, mgl@1371: + AVR32_SYNTAX_OR2, mgl@1371: + AVR32_SYNTAX_OR3, mgl@1371: + AVR32_SYNTAX_ORH, mgl@1371: + AVR32_SYNTAX_ORL, mgl@1371: + AVR32_SYNTAX_PABS_SB, mgl@1371: + AVR32_SYNTAX_PABS_SH, mgl@1371: + AVR32_SYNTAX_PACKSH_SB, mgl@1371: + AVR32_SYNTAX_PACKSH_UB, mgl@1371: + AVR32_SYNTAX_PACKW_SH, mgl@1371: + AVR32_SYNTAX_PADD_B, mgl@1371: + AVR32_SYNTAX_PADD_H, mgl@1371: + AVR32_SYNTAX_PADDH_SH, mgl@1371: + AVR32_SYNTAX_PADDH_UB, mgl@1371: + AVR32_SYNTAX_PADDS_SB, mgl@1371: + AVR32_SYNTAX_PADDS_SH, mgl@1371: + AVR32_SYNTAX_PADDS_UB, mgl@1371: + AVR32_SYNTAX_PADDS_UH, mgl@1371: + AVR32_SYNTAX_PADDSUB_H, mgl@1371: + AVR32_SYNTAX_PADDSUBH_SH, mgl@1371: + AVR32_SYNTAX_PADDSUBS_SH, mgl@1371: + AVR32_SYNTAX_PADDSUBS_UH, mgl@1371: + AVR32_SYNTAX_PADDX_H, mgl@1371: + AVR32_SYNTAX_PADDXH_SH, mgl@1371: + AVR32_SYNTAX_PADDXS_SH, mgl@1371: + AVR32_SYNTAX_PADDXS_UH, mgl@1371: + AVR32_SYNTAX_PASR_B, mgl@1371: + AVR32_SYNTAX_PASR_H, mgl@1371: + AVR32_SYNTAX_PAVG_SH, mgl@1371: + AVR32_SYNTAX_PAVG_UB, mgl@1371: + AVR32_SYNTAX_PLSL_B, mgl@1371: + AVR32_SYNTAX_PLSL_H, mgl@1371: + AVR32_SYNTAX_PLSR_B, mgl@1371: + AVR32_SYNTAX_PLSR_H, mgl@1371: + AVR32_SYNTAX_PMAX_SH, mgl@1371: + AVR32_SYNTAX_PMAX_UB, mgl@1371: + AVR32_SYNTAX_PMIN_SH, mgl@1371: + AVR32_SYNTAX_PMIN_UB, mgl@1371: + AVR32_SYNTAX_POPJC, mgl@1371: + AVR32_SYNTAX_POPM, mgl@1371: + AVR32_SYNTAX_POPM_E, mgl@1371: + AVR32_SYNTAX_PREF, mgl@1371: + AVR32_SYNTAX_PSAD, mgl@1371: + AVR32_SYNTAX_PSUB_B, mgl@1371: + AVR32_SYNTAX_PSUB_H, mgl@1371: + AVR32_SYNTAX_PSUBADD_H, mgl@1371: + AVR32_SYNTAX_PSUBADDH_SH, mgl@1371: + AVR32_SYNTAX_PSUBADDS_SH, mgl@1371: + AVR32_SYNTAX_PSUBADDS_UH, mgl@1371: + AVR32_SYNTAX_PSUBH_SH, mgl@1371: + AVR32_SYNTAX_PSUBH_UB, mgl@1371: + AVR32_SYNTAX_PSUBS_SB, mgl@1371: + AVR32_SYNTAX_PSUBS_SH, mgl@1371: + AVR32_SYNTAX_PSUBS_UB, mgl@1371: + AVR32_SYNTAX_PSUBS_UH, mgl@1371: + AVR32_SYNTAX_PSUBX_H, mgl@1371: + AVR32_SYNTAX_PSUBXH_SH, mgl@1371: + AVR32_SYNTAX_PSUBXS_SH, mgl@1371: + AVR32_SYNTAX_PSUBXS_UH, mgl@1371: + AVR32_SYNTAX_PUNPCKSB_H, mgl@1371: + AVR32_SYNTAX_PUNPCKUB_H, mgl@1371: + AVR32_SYNTAX_PUSHJC, mgl@1371: + AVR32_SYNTAX_PUSHM, mgl@1371: + AVR32_SYNTAX_PUSHM_E, mgl@1371: + AVR32_SYNTAX_RCALL1, mgl@1371: + AVR32_SYNTAX_RCALL2, mgl@1371: + AVR32_SYNTAX_RETEQ, mgl@1371: + AVR32_SYNTAX_RETNE, mgl@1371: + AVR32_SYNTAX_RETCC, mgl@1371: + AVR32_SYNTAX_RETCS, mgl@1371: + AVR32_SYNTAX_RETGE, mgl@1371: + AVR32_SYNTAX_RETLT, mgl@1371: + AVR32_SYNTAX_RETMI, mgl@1371: + AVR32_SYNTAX_RETPL, mgl@1371: + AVR32_SYNTAX_RETLS, mgl@1371: + AVR32_SYNTAX_RETGT, mgl@1371: + AVR32_SYNTAX_RETLE, mgl@1371: + AVR32_SYNTAX_RETHI, mgl@1371: + AVR32_SYNTAX_RETVS, mgl@1371: + AVR32_SYNTAX_RETVC, mgl@1371: + AVR32_SYNTAX_RETQS, mgl@1371: + AVR32_SYNTAX_RETAL, mgl@1371: + AVR32_SYNTAX_RETHS, mgl@1371: + AVR32_SYNTAX_RETLO, mgl@1371: + AVR32_SYNTAX_RETD, mgl@1371: + AVR32_SYNTAX_RETE, mgl@1371: + AVR32_SYNTAX_RETJ, mgl@1371: + AVR32_SYNTAX_RETS, mgl@1371: + AVR32_SYNTAX_RJMP, mgl@1371: + AVR32_SYNTAX_ROL, mgl@1371: + AVR32_SYNTAX_ROR, mgl@1371: + AVR32_SYNTAX_RSUB1, mgl@1371: + AVR32_SYNTAX_RSUB2, mgl@1371: + AVR32_SYNTAX_SATADD_H, mgl@1371: + AVR32_SYNTAX_SATADD_W, mgl@1371: + AVR32_SYNTAX_SATRNDS, mgl@1371: + AVR32_SYNTAX_SATRNDU, mgl@1371: + AVR32_SYNTAX_SATS, mgl@1371: + AVR32_SYNTAX_SATSUB_H, mgl@1371: + AVR32_SYNTAX_SATSUB_W1, mgl@1371: + AVR32_SYNTAX_SATSUB_W2, mgl@1371: + AVR32_SYNTAX_SATU, mgl@1371: + AVR32_SYNTAX_SBC, mgl@1371: + AVR32_SYNTAX_SBR, mgl@1371: + AVR32_SYNTAX_SCALL, mgl@1371: + AVR32_SYNTAX_SCR, mgl@1371: + AVR32_SYNTAX_SLEEP, mgl@1371: + AVR32_SYNTAX_SREQ, mgl@1371: + AVR32_SYNTAX_SRNE, mgl@1371: + AVR32_SYNTAX_SRCC, mgl@1371: + AVR32_SYNTAX_SRCS, mgl@1371: + AVR32_SYNTAX_SRGE, mgl@1371: + AVR32_SYNTAX_SRLT, mgl@1371: + AVR32_SYNTAX_SRMI, mgl@1371: + AVR32_SYNTAX_SRPL, mgl@1371: + AVR32_SYNTAX_SRLS, mgl@1371: + AVR32_SYNTAX_SRGT, mgl@1371: + AVR32_SYNTAX_SRLE, mgl@1371: + AVR32_SYNTAX_SRHI, mgl@1371: + AVR32_SYNTAX_SRVS, mgl@1371: + AVR32_SYNTAX_SRVC, mgl@1371: + AVR32_SYNTAX_SRQS, mgl@1371: + AVR32_SYNTAX_SRAL, mgl@1371: + AVR32_SYNTAX_SRHS, mgl@1371: + AVR32_SYNTAX_SRLO, mgl@1371: + AVR32_SYNTAX_SSRF, mgl@1371: + AVR32_SYNTAX_ST_B1, mgl@1371: + AVR32_SYNTAX_ST_B2, mgl@1371: + AVR32_SYNTAX_ST_B5, mgl@1371: + AVR32_SYNTAX_ST_B3, mgl@1371: + AVR32_SYNTAX_ST_B4, mgl@1371: + AVR32_SYNTAX_ST_D1, mgl@1371: + AVR32_SYNTAX_ST_D2, mgl@1371: + AVR32_SYNTAX_ST_D3, mgl@1371: + AVR32_SYNTAX_ST_D5, mgl@1371: + AVR32_SYNTAX_ST_D4, mgl@1371: + AVR32_SYNTAX_ST_H1, mgl@1371: + AVR32_SYNTAX_ST_H2, mgl@1371: + AVR32_SYNTAX_ST_H5, mgl@1371: + AVR32_SYNTAX_ST_H3, mgl@1371: + AVR32_SYNTAX_ST_H4, mgl@1371: + AVR32_SYNTAX_ST_W1, mgl@1371: + AVR32_SYNTAX_ST_W2, mgl@1371: + AVR32_SYNTAX_ST_W5, mgl@1371: + AVR32_SYNTAX_ST_W3, mgl@1371: + AVR32_SYNTAX_ST_W4, mgl@1371: + AVR32_SYNTAX_STC_D1, mgl@1371: + AVR32_SYNTAX_STC_D2, mgl@1371: + AVR32_SYNTAX_STC_D3, mgl@1371: + AVR32_SYNTAX_STC_W1, mgl@1371: + AVR32_SYNTAX_STC_W2, mgl@1371: + AVR32_SYNTAX_STC_W3, mgl@1371: + AVR32_SYNTAX_STC0_D, mgl@1371: + AVR32_SYNTAX_STC0_W, mgl@1371: + AVR32_SYNTAX_STCM_D, mgl@1371: + AVR32_SYNTAX_STCM_D_PU, mgl@1371: + AVR32_SYNTAX_STCM_W, mgl@1371: + AVR32_SYNTAX_STCM_W_PU, mgl@1371: + AVR32_SYNTAX_STCOND, mgl@1371: + AVR32_SYNTAX_STDSP, mgl@1371: + AVR32_SYNTAX_STHH_W2, mgl@1371: + AVR32_SYNTAX_STHH_W1, mgl@1371: + AVR32_SYNTAX_STM, mgl@1371: + AVR32_SYNTAX_STM_PU, mgl@1371: + AVR32_SYNTAX_STMTS, mgl@1371: + AVR32_SYNTAX_STMTS_PU, mgl@1371: + AVR32_SYNTAX_STSWP_H, mgl@1371: + AVR32_SYNTAX_STSWP_W, mgl@1371: + AVR32_SYNTAX_SUB1, mgl@1371: + AVR32_SYNTAX_SUB2, mgl@1371: + AVR32_SYNTAX_SUB5, mgl@1371: + AVR32_SYNTAX_SUB3_SP, mgl@1371: + AVR32_SYNTAX_SUB3, mgl@1371: + AVR32_SYNTAX_SUB4, mgl@1371: + AVR32_SYNTAX_SUBEQ, mgl@1371: + AVR32_SYNTAX_SUBNE, mgl@1371: + AVR32_SYNTAX_SUBCC, mgl@1371: + AVR32_SYNTAX_SUBCS, mgl@1371: + AVR32_SYNTAX_SUBGE, mgl@1371: + AVR32_SYNTAX_SUBLT, mgl@1371: + AVR32_SYNTAX_SUBMI, mgl@1371: + AVR32_SYNTAX_SUBPL, mgl@1371: + AVR32_SYNTAX_SUBLS, mgl@1371: + AVR32_SYNTAX_SUBGT, mgl@1371: + AVR32_SYNTAX_SUBLE, mgl@1371: + AVR32_SYNTAX_SUBHI, mgl@1371: + AVR32_SYNTAX_SUBVS, mgl@1371: + AVR32_SYNTAX_SUBVC, mgl@1371: + AVR32_SYNTAX_SUBQS, mgl@1371: + AVR32_SYNTAX_SUBAL, mgl@1371: + AVR32_SYNTAX_SUBHS, mgl@1371: + AVR32_SYNTAX_SUBLO, mgl@1371: + AVR32_SYNTAX_SUBFEQ, mgl@1371: + AVR32_SYNTAX_SUBFNE, mgl@1371: + AVR32_SYNTAX_SUBFCC, mgl@1371: + AVR32_SYNTAX_SUBFCS, mgl@1371: + AVR32_SYNTAX_SUBFGE, mgl@1371: + AVR32_SYNTAX_SUBFLT, mgl@1371: + AVR32_SYNTAX_SUBFMI, mgl@1371: + AVR32_SYNTAX_SUBFPL, mgl@1371: + AVR32_SYNTAX_SUBFLS, mgl@1371: + AVR32_SYNTAX_SUBFGT, mgl@1371: + AVR32_SYNTAX_SUBFLE, mgl@1371: + AVR32_SYNTAX_SUBFHI, mgl@1371: + AVR32_SYNTAX_SUBFVS, mgl@1371: + AVR32_SYNTAX_SUBFVC, mgl@1371: + AVR32_SYNTAX_SUBFQS, mgl@1371: + AVR32_SYNTAX_SUBFAL, mgl@1371: + AVR32_SYNTAX_SUBFHS, mgl@1371: + AVR32_SYNTAX_SUBFLO, mgl@1371: + AVR32_SYNTAX_SUBHH_W, mgl@1371: + AVR32_SYNTAX_SWAP_B, mgl@1371: + AVR32_SYNTAX_SWAP_BH, mgl@1371: + AVR32_SYNTAX_SWAP_H, mgl@1371: + AVR32_SYNTAX_SYNC, mgl@1371: + AVR32_SYNTAX_TLBR, mgl@1371: + AVR32_SYNTAX_TLBS, mgl@1371: + AVR32_SYNTAX_TLBW, mgl@1371: + AVR32_SYNTAX_TNBZ, mgl@1371: + AVR32_SYNTAX_TST, mgl@1371: + AVR32_SYNTAX_XCHG, mgl@1371: + AVR32_SYNTAX_MEMC, mgl@1371: + AVR32_SYNTAX_MEMS, mgl@1371: + AVR32_SYNTAX_MEMT, mgl@1371: + AVR32_SYNTAX_FADD_S, mgl@1371: + AVR32_SYNTAX_FADD_D, mgl@1371: + AVR32_SYNTAX_FSUB_S, mgl@1371: + AVR32_SYNTAX_FSUB_D, mgl@1371: + AVR32_SYNTAX_FMAC_S, mgl@1371: + AVR32_SYNTAX_FMAC_D, mgl@1371: + AVR32_SYNTAX_FNMAC_S, mgl@1371: + AVR32_SYNTAX_FNMAC_D, mgl@1371: + AVR32_SYNTAX_FMSC_S, mgl@1371: + AVR32_SYNTAX_FMSC_D, mgl@1371: + AVR32_SYNTAX_FNMSC_S, mgl@1371: + AVR32_SYNTAX_FNMSC_D, mgl@1371: + AVR32_SYNTAX_FMUL_S, mgl@1371: + AVR32_SYNTAX_FMUL_D, mgl@1371: + AVR32_SYNTAX_FNMUL_S, mgl@1371: + AVR32_SYNTAX_FNMUL_D, mgl@1371: + AVR32_SYNTAX_FNEG_S, mgl@1371: + AVR32_SYNTAX_FNEG_D, mgl@1371: + AVR32_SYNTAX_FABS_S, mgl@1371: + AVR32_SYNTAX_FABS_D, mgl@1371: + AVR32_SYNTAX_FCMP_S, mgl@1371: + AVR32_SYNTAX_FCMP_D, mgl@1371: + AVR32_SYNTAX_FMOV1_S, mgl@1371: + AVR32_SYNTAX_FMOV1_D, mgl@1371: + AVR32_SYNTAX_FMOV2_S, mgl@1371: + AVR32_SYNTAX_FMOV2_D, mgl@1371: + AVR32_SYNTAX_FMOV3_S, mgl@1371: + AVR32_SYNTAX_FMOV3_D, mgl@1371: + AVR32_SYNTAX_FCASTS_D, mgl@1371: + AVR32_SYNTAX_FCASTD_S, mgl@1371: + AVR32_SYNTAX_LDA_W, mgl@1371: + AVR32_SYNTAX_CALL, mgl@1371: + AVR32_SYNTAX_PICOSVMAC0, mgl@1371: + AVR32_SYNTAX_PICOSVMAC1, mgl@1371: + AVR32_SYNTAX_PICOSVMAC2, mgl@1371: + AVR32_SYNTAX_PICOSVMAC3, mgl@1371: + AVR32_SYNTAX_PICOSVMUL0, mgl@1371: + AVR32_SYNTAX_PICOSVMUL1, mgl@1371: + AVR32_SYNTAX_PICOSVMUL2, mgl@1371: + AVR32_SYNTAX_PICOSVMUL3, mgl@1371: + AVR32_SYNTAX_PICOVMAC0, mgl@1371: + AVR32_SYNTAX_PICOVMAC1, mgl@1371: + AVR32_SYNTAX_PICOVMAC2, mgl@1371: + AVR32_SYNTAX_PICOVMAC3, mgl@1371: + AVR32_SYNTAX_PICOVMUL0, mgl@1371: + AVR32_SYNTAX_PICOVMUL1, mgl@1371: + AVR32_SYNTAX_PICOVMUL2, mgl@1371: + AVR32_SYNTAX_PICOVMUL3, mgl@1371: + AVR32_SYNTAX_PICOLD_D2, mgl@1371: + AVR32_SYNTAX_PICOLD_D3, mgl@1371: + AVR32_SYNTAX_PICOLD_D1, mgl@1371: + AVR32_SYNTAX_PICOLD_W2, mgl@1371: + AVR32_SYNTAX_PICOLD_W3, mgl@1371: + AVR32_SYNTAX_PICOLD_W1, mgl@1371: + AVR32_SYNTAX_PICOLDM_D, mgl@1371: + AVR32_SYNTAX_PICOLDM_D_PU, mgl@1371: + AVR32_SYNTAX_PICOLDM_W, mgl@1371: + AVR32_SYNTAX_PICOLDM_W_PU, mgl@1371: + AVR32_SYNTAX_PICOMV_D1, mgl@1371: + AVR32_SYNTAX_PICOMV_D2, mgl@1371: + AVR32_SYNTAX_PICOMV_W1, mgl@1371: + AVR32_SYNTAX_PICOMV_W2, mgl@1371: + AVR32_SYNTAX_PICOST_D2, mgl@1371: + AVR32_SYNTAX_PICOST_D3, mgl@1371: + AVR32_SYNTAX_PICOST_D1, mgl@1371: + AVR32_SYNTAX_PICOST_W2, mgl@1371: + AVR32_SYNTAX_PICOST_W3, mgl@1371: + AVR32_SYNTAX_PICOST_W1, mgl@1371: + AVR32_SYNTAX_PICOSTM_D, mgl@1371: + AVR32_SYNTAX_PICOSTM_D_PU, mgl@1371: + AVR32_SYNTAX_PICOSTM_W, mgl@1371: + AVR32_SYNTAX_PICOSTM_W_PU, mgl@1371: + AVR32_SYNTAX_RSUBEQ, mgl@1371: + AVR32_SYNTAX_RSUBNE, mgl@1371: + AVR32_SYNTAX_RSUBCC, mgl@1371: + AVR32_SYNTAX_RSUBCS, mgl@1371: + AVR32_SYNTAX_RSUBGE, mgl@1371: + AVR32_SYNTAX_RSUBLT, mgl@1371: + AVR32_SYNTAX_RSUBMI, mgl@1371: + AVR32_SYNTAX_RSUBPL, mgl@1371: + AVR32_SYNTAX_RSUBLS, mgl@1371: + AVR32_SYNTAX_RSUBGT, mgl@1371: + AVR32_SYNTAX_RSUBLE, mgl@1371: + AVR32_SYNTAX_RSUBHI, mgl@1371: + AVR32_SYNTAX_RSUBVS, mgl@1371: + AVR32_SYNTAX_RSUBVC, mgl@1371: + AVR32_SYNTAX_RSUBQS, mgl@1371: + AVR32_SYNTAX_RSUBAL, mgl@1371: + AVR32_SYNTAX_RSUBHS, mgl@1371: + AVR32_SYNTAX_RSUBLO, mgl@1371: + AVR32_SYNTAX_ADDEQ, mgl@1371: + AVR32_SYNTAX_ADDNE, mgl@1371: + AVR32_SYNTAX_ADDCC, mgl@1371: + AVR32_SYNTAX_ADDCS, mgl@1371: + AVR32_SYNTAX_ADDGE, mgl@1371: + AVR32_SYNTAX_ADDLT, mgl@1371: + AVR32_SYNTAX_ADDMI, mgl@1371: + AVR32_SYNTAX_ADDPL, mgl@1371: + AVR32_SYNTAX_ADDLS, mgl@1371: + AVR32_SYNTAX_ADDGT, mgl@1371: + AVR32_SYNTAX_ADDLE, mgl@1371: + AVR32_SYNTAX_ADDHI, mgl@1371: + AVR32_SYNTAX_ADDVS, mgl@1371: + AVR32_SYNTAX_ADDVC, mgl@1371: + AVR32_SYNTAX_ADDQS, mgl@1371: + AVR32_SYNTAX_ADDAL, mgl@1371: + AVR32_SYNTAX_ADDHS, mgl@1371: + AVR32_SYNTAX_ADDLO, mgl@1371: + AVR32_SYNTAX_SUB2EQ, mgl@1371: + AVR32_SYNTAX_SUB2NE, mgl@1371: + AVR32_SYNTAX_SUB2CC, mgl@1371: + AVR32_SYNTAX_SUB2CS, mgl@1371: + AVR32_SYNTAX_SUB2GE, mgl@1371: + AVR32_SYNTAX_SUB2LT, mgl@1371: + AVR32_SYNTAX_SUB2MI, mgl@1371: + AVR32_SYNTAX_SUB2PL, mgl@1371: + AVR32_SYNTAX_SUB2LS, mgl@1371: + AVR32_SYNTAX_SUB2GT, mgl@1371: + AVR32_SYNTAX_SUB2LE, mgl@1371: + AVR32_SYNTAX_SUB2HI, mgl@1371: + AVR32_SYNTAX_SUB2VS, mgl@1371: + AVR32_SYNTAX_SUB2VC, mgl@1371: + AVR32_SYNTAX_SUB2QS, mgl@1371: + AVR32_SYNTAX_SUB2AL, mgl@1371: + AVR32_SYNTAX_SUB2HS, mgl@1371: + AVR32_SYNTAX_SUB2LO, mgl@1371: + AVR32_SYNTAX_ANDEQ, mgl@1371: + AVR32_SYNTAX_ANDNE, mgl@1371: + AVR32_SYNTAX_ANDCC, mgl@1371: + AVR32_SYNTAX_ANDCS, mgl@1371: + AVR32_SYNTAX_ANDGE, mgl@1371: + AVR32_SYNTAX_ANDLT, mgl@1371: + AVR32_SYNTAX_ANDMI, mgl@1371: + AVR32_SYNTAX_ANDPL, mgl@1371: + AVR32_SYNTAX_ANDLS, mgl@1371: + AVR32_SYNTAX_ANDGT, mgl@1371: + AVR32_SYNTAX_ANDLE, mgl@1371: + AVR32_SYNTAX_ANDHI, mgl@1371: + AVR32_SYNTAX_ANDVS, mgl@1371: + AVR32_SYNTAX_ANDVC, mgl@1371: + AVR32_SYNTAX_ANDQS, mgl@1371: + AVR32_SYNTAX_ANDAL, mgl@1371: + AVR32_SYNTAX_ANDHS, mgl@1371: + AVR32_SYNTAX_ANDLO, mgl@1371: + AVR32_SYNTAX_OREQ, mgl@1371: + AVR32_SYNTAX_ORNE, mgl@1371: + AVR32_SYNTAX_ORCC, mgl@1371: + AVR32_SYNTAX_ORCS, mgl@1371: + AVR32_SYNTAX_ORGE, mgl@1371: + AVR32_SYNTAX_ORLT, mgl@1371: + AVR32_SYNTAX_ORMI, mgl@1371: + AVR32_SYNTAX_ORPL, mgl@1371: + AVR32_SYNTAX_ORLS, mgl@1371: + AVR32_SYNTAX_ORGT, mgl@1371: + AVR32_SYNTAX_ORLE, mgl@1371: + AVR32_SYNTAX_ORHI, mgl@1371: + AVR32_SYNTAX_ORVS, mgl@1371: + AVR32_SYNTAX_ORVC, mgl@1371: + AVR32_SYNTAX_ORQS, mgl@1371: + AVR32_SYNTAX_ORAL, mgl@1371: + AVR32_SYNTAX_ORHS, mgl@1371: + AVR32_SYNTAX_ORLO, mgl@1371: + AVR32_SYNTAX_EOREQ, mgl@1371: + AVR32_SYNTAX_EORNE, mgl@1371: + AVR32_SYNTAX_EORCC, mgl@1371: + AVR32_SYNTAX_EORCS, mgl@1371: + AVR32_SYNTAX_EORGE, mgl@1371: + AVR32_SYNTAX_EORLT, mgl@1371: + AVR32_SYNTAX_EORMI, mgl@1371: + AVR32_SYNTAX_EORPL, mgl@1371: + AVR32_SYNTAX_EORLS, mgl@1371: + AVR32_SYNTAX_EORGT, mgl@1371: + AVR32_SYNTAX_EORLE, mgl@1371: + AVR32_SYNTAX_EORHI, mgl@1371: + AVR32_SYNTAX_EORVS, mgl@1371: + AVR32_SYNTAX_EORVC, mgl@1371: + AVR32_SYNTAX_EORQS, mgl@1371: + AVR32_SYNTAX_EORAL, mgl@1371: + AVR32_SYNTAX_EORHS, mgl@1371: + AVR32_SYNTAX_EORLO, mgl@1371: + AVR32_SYNTAX_LD_WEQ, mgl@1371: + AVR32_SYNTAX_LD_WNE, mgl@1371: + AVR32_SYNTAX_LD_WCC, mgl@1371: + AVR32_SYNTAX_LD_WCS, mgl@1371: + AVR32_SYNTAX_LD_WGE, mgl@1371: + AVR32_SYNTAX_LD_WLT, mgl@1371: + AVR32_SYNTAX_LD_WMI, mgl@1371: + AVR32_SYNTAX_LD_WPL, mgl@1371: + AVR32_SYNTAX_LD_WLS, mgl@1371: + AVR32_SYNTAX_LD_WGT, mgl@1371: + AVR32_SYNTAX_LD_WLE, mgl@1371: + AVR32_SYNTAX_LD_WHI, mgl@1371: + AVR32_SYNTAX_LD_WVS, mgl@1371: + AVR32_SYNTAX_LD_WVC, mgl@1371: + AVR32_SYNTAX_LD_WQS, mgl@1371: + AVR32_SYNTAX_LD_WAL, mgl@1371: + AVR32_SYNTAX_LD_WHS, mgl@1371: + AVR32_SYNTAX_LD_WLO, mgl@1371: + AVR32_SYNTAX_LD_SHEQ, mgl@1371: + AVR32_SYNTAX_LD_SHNE, mgl@1371: + AVR32_SYNTAX_LD_SHCC, mgl@1371: + AVR32_SYNTAX_LD_SHCS, mgl@1371: + AVR32_SYNTAX_LD_SHGE, mgl@1371: + AVR32_SYNTAX_LD_SHLT, mgl@1371: + AVR32_SYNTAX_LD_SHMI, mgl@1371: + AVR32_SYNTAX_LD_SHPL, mgl@1371: + AVR32_SYNTAX_LD_SHLS, mgl@1371: + AVR32_SYNTAX_LD_SHGT, mgl@1371: + AVR32_SYNTAX_LD_SHLE, mgl@1371: + AVR32_SYNTAX_LD_SHHI, mgl@1371: + AVR32_SYNTAX_LD_SHVS, mgl@1371: + AVR32_SYNTAX_LD_SHVC, mgl@1371: + AVR32_SYNTAX_LD_SHQS, mgl@1371: + AVR32_SYNTAX_LD_SHAL, mgl@1371: + AVR32_SYNTAX_LD_SHHS, mgl@1371: + AVR32_SYNTAX_LD_SHLO, mgl@1371: + AVR32_SYNTAX_LD_UHEQ, mgl@1371: + AVR32_SYNTAX_LD_UHNE, mgl@1371: + AVR32_SYNTAX_LD_UHCC, mgl@1371: + AVR32_SYNTAX_LD_UHCS, mgl@1371: + AVR32_SYNTAX_LD_UHGE, mgl@1371: + AVR32_SYNTAX_LD_UHLT, mgl@1371: + AVR32_SYNTAX_LD_UHMI, mgl@1371: + AVR32_SYNTAX_LD_UHPL, mgl@1371: + AVR32_SYNTAX_LD_UHLS, mgl@1371: + AVR32_SYNTAX_LD_UHGT, mgl@1371: + AVR32_SYNTAX_LD_UHLE, mgl@1371: + AVR32_SYNTAX_LD_UHHI, mgl@1371: + AVR32_SYNTAX_LD_UHVS, mgl@1371: + AVR32_SYNTAX_LD_UHVC, mgl@1371: + AVR32_SYNTAX_LD_UHQS, mgl@1371: + AVR32_SYNTAX_LD_UHAL, mgl@1371: + AVR32_SYNTAX_LD_UHHS, mgl@1371: + AVR32_SYNTAX_LD_UHLO, mgl@1371: + AVR32_SYNTAX_LD_SBEQ, mgl@1371: + AVR32_SYNTAX_LD_SBNE, mgl@1371: + AVR32_SYNTAX_LD_SBCC, mgl@1371: + AVR32_SYNTAX_LD_SBCS, mgl@1371: + AVR32_SYNTAX_LD_SBGE, mgl@1371: + AVR32_SYNTAX_LD_SBLT, mgl@1371: + AVR32_SYNTAX_LD_SBMI, mgl@1371: + AVR32_SYNTAX_LD_SBPL, mgl@1371: + AVR32_SYNTAX_LD_SBLS, mgl@1371: + AVR32_SYNTAX_LD_SBGT, mgl@1371: + AVR32_SYNTAX_LD_SBLE, mgl@1371: + AVR32_SYNTAX_LD_SBHI, mgl@1371: + AVR32_SYNTAX_LD_SBVS, mgl@1371: + AVR32_SYNTAX_LD_SBVC, mgl@1371: + AVR32_SYNTAX_LD_SBQS, mgl@1371: + AVR32_SYNTAX_LD_SBAL, mgl@1371: + AVR32_SYNTAX_LD_SBHS, mgl@1371: + AVR32_SYNTAX_LD_SBLO, mgl@1371: + AVR32_SYNTAX_LD_UBEQ, mgl@1371: + AVR32_SYNTAX_LD_UBNE, mgl@1371: + AVR32_SYNTAX_LD_UBCC, mgl@1371: + AVR32_SYNTAX_LD_UBCS, mgl@1371: + AVR32_SYNTAX_LD_UBGE, mgl@1371: + AVR32_SYNTAX_LD_UBLT, mgl@1371: + AVR32_SYNTAX_LD_UBMI, mgl@1371: + AVR32_SYNTAX_LD_UBPL, mgl@1371: + AVR32_SYNTAX_LD_UBLS, mgl@1371: + AVR32_SYNTAX_LD_UBGT, mgl@1371: + AVR32_SYNTAX_LD_UBLE, mgl@1371: + AVR32_SYNTAX_LD_UBHI, mgl@1371: + AVR32_SYNTAX_LD_UBVS, mgl@1371: + AVR32_SYNTAX_LD_UBVC, mgl@1371: + AVR32_SYNTAX_LD_UBQS, mgl@1371: + AVR32_SYNTAX_LD_UBAL, mgl@1371: + AVR32_SYNTAX_LD_UBHS, mgl@1371: + AVR32_SYNTAX_LD_UBLO, mgl@1371: + AVR32_SYNTAX_ST_WEQ, mgl@1371: + AVR32_SYNTAX_ST_WNE, mgl@1371: + AVR32_SYNTAX_ST_WCC, mgl@1371: + AVR32_SYNTAX_ST_WCS, mgl@1371: + AVR32_SYNTAX_ST_WGE, mgl@1371: + AVR32_SYNTAX_ST_WLT, mgl@1371: + AVR32_SYNTAX_ST_WMI, mgl@1371: + AVR32_SYNTAX_ST_WPL, mgl@1371: + AVR32_SYNTAX_ST_WLS, mgl@1371: + AVR32_SYNTAX_ST_WGT, mgl@1371: + AVR32_SYNTAX_ST_WLE, mgl@1371: + AVR32_SYNTAX_ST_WHI, mgl@1371: + AVR32_SYNTAX_ST_WVS, mgl@1371: + AVR32_SYNTAX_ST_WVC, mgl@1371: + AVR32_SYNTAX_ST_WQS, mgl@1371: + AVR32_SYNTAX_ST_WAL, mgl@1371: + AVR32_SYNTAX_ST_WHS, mgl@1371: + AVR32_SYNTAX_ST_WLO, mgl@1371: + AVR32_SYNTAX_ST_HEQ, mgl@1371: + AVR32_SYNTAX_ST_HNE, mgl@1371: + AVR32_SYNTAX_ST_HCC, mgl@1371: + AVR32_SYNTAX_ST_HCS, mgl@1371: + AVR32_SYNTAX_ST_HGE, mgl@1371: + AVR32_SYNTAX_ST_HLT, mgl@1371: + AVR32_SYNTAX_ST_HMI, mgl@1371: + AVR32_SYNTAX_ST_HPL, mgl@1371: + AVR32_SYNTAX_ST_HLS, mgl@1371: + AVR32_SYNTAX_ST_HGT, mgl@1371: + AVR32_SYNTAX_ST_HLE, mgl@1371: + AVR32_SYNTAX_ST_HHI, mgl@1371: + AVR32_SYNTAX_ST_HVS, mgl@1371: + AVR32_SYNTAX_ST_HVC, mgl@1371: + AVR32_SYNTAX_ST_HQS, mgl@1371: + AVR32_SYNTAX_ST_HAL, mgl@1371: + AVR32_SYNTAX_ST_HHS, mgl@1371: + AVR32_SYNTAX_ST_HLO, mgl@1371: + AVR32_SYNTAX_ST_BEQ, mgl@1371: + AVR32_SYNTAX_ST_BNE, mgl@1371: + AVR32_SYNTAX_ST_BCC, mgl@1371: + AVR32_SYNTAX_ST_BCS, mgl@1371: + AVR32_SYNTAX_ST_BGE, mgl@1371: + AVR32_SYNTAX_ST_BLT, mgl@1371: + AVR32_SYNTAX_ST_BMI, mgl@1371: + AVR32_SYNTAX_ST_BPL, mgl@1371: + AVR32_SYNTAX_ST_BLS, mgl@1371: + AVR32_SYNTAX_ST_BGT, mgl@1371: + AVR32_SYNTAX_ST_BLE, mgl@1371: + AVR32_SYNTAX_ST_BHI, mgl@1371: + AVR32_SYNTAX_ST_BVS, mgl@1371: + AVR32_SYNTAX_ST_BVC, mgl@1371: + AVR32_SYNTAX_ST_BQS, mgl@1371: + AVR32_SYNTAX_ST_BAL, mgl@1371: + AVR32_SYNTAX_ST_BHS, mgl@1371: + AVR32_SYNTAX_ST_BLO, mgl@1371: + AVR32_SYNTAX_MOVH, mgl@1371: + AVR32_SYNTAX__END_ mgl@1371: +}; mgl@1371: +#define AVR32_NR_SYNTAX AVR32_SYNTAX__END_ mgl@1371: + mgl@1371: +enum avr32_alias_type mgl@1371: + { mgl@1371: + AVR32_ALIAS_FMAC_S, mgl@1371: + AVR32_ALIAS_FMAC_D, mgl@1371: + AVR32_ALIAS_FNMAC_S, mgl@1371: + AVR32_ALIAS_FNMAC_D, mgl@1371: + AVR32_ALIAS_FMSC_S, mgl@1371: + AVR32_ALIAS_FMSC_D, mgl@1371: + AVR32_ALIAS_FNMSC_S, mgl@1371: + AVR32_ALIAS_FNMSC_D, mgl@1371: + AVR32_ALIAS_FADD_S, mgl@1371: + AVR32_ALIAS_FADD_D, mgl@1371: + AVR32_ALIAS_FSUB_S, mgl@1371: + AVR32_ALIAS_FSUB_D, mgl@1371: + AVR32_ALIAS_FMUL_S, mgl@1371: + AVR32_ALIAS_FMUL_D, mgl@1371: + AVR32_ALIAS_FNMUL_S, mgl@1371: + AVR32_ALIAS_FNMUL_D, mgl@1371: + AVR32_ALIAS_FNEG_S, mgl@1371: + AVR32_ALIAS_FNEG_D, mgl@1371: + AVR32_ALIAS_FABS_S, mgl@1371: + AVR32_ALIAS_FABS_D, mgl@1371: + AVR32_ALIAS_FCMP_S, mgl@1371: + AVR32_ALIAS_FCMP_D, mgl@1371: + AVR32_ALIAS_FMOV1_S, mgl@1371: + AVR32_ALIAS_FMOV1_D, mgl@1371: + AVR32_ALIAS_FMOV2_S, mgl@1371: + AVR32_ALIAS_FMOV2_D, mgl@1371: + AVR32_ALIAS_FMOV3_S, mgl@1371: + AVR32_ALIAS_FMOV3_D, mgl@1371: + AVR32_ALIAS_FCASTS_D, mgl@1371: + AVR32_ALIAS_FCASTD_S, mgl@1371: + AVR32_ALIAS_PICOSVMAC0, mgl@1371: + AVR32_ALIAS_PICOSVMAC1, mgl@1371: + AVR32_ALIAS_PICOSVMAC2, mgl@1371: + AVR32_ALIAS_PICOSVMAC3, mgl@1371: + AVR32_ALIAS_PICOSVMUL0, mgl@1371: + AVR32_ALIAS_PICOSVMUL1, mgl@1371: + AVR32_ALIAS_PICOSVMUL2, mgl@1371: + AVR32_ALIAS_PICOSVMUL3, mgl@1371: + AVR32_ALIAS_PICOVMAC0, mgl@1371: + AVR32_ALIAS_PICOVMAC1, mgl@1371: + AVR32_ALIAS_PICOVMAC2, mgl@1371: + AVR32_ALIAS_PICOVMAC3, mgl@1371: + AVR32_ALIAS_PICOVMUL0, mgl@1371: + AVR32_ALIAS_PICOVMUL1, mgl@1371: + AVR32_ALIAS_PICOVMUL2, mgl@1371: + AVR32_ALIAS_PICOVMUL3, mgl@1371: + AVR32_ALIAS_PICOLD_D1, mgl@1371: + AVR32_ALIAS_PICOLD_D2, mgl@1371: + AVR32_ALIAS_PICOLD_D3, mgl@1371: + AVR32_ALIAS_PICOLD_W1, mgl@1371: + AVR32_ALIAS_PICOLD_W2, mgl@1371: + AVR32_ALIAS_PICOLD_W3, mgl@1371: + AVR32_ALIAS_PICOLDM_D, mgl@1371: + AVR32_ALIAS_PICOLDM_D_PU, mgl@1371: + AVR32_ALIAS_PICOLDM_W, mgl@1371: + AVR32_ALIAS_PICOLDM_W_PU, mgl@1371: + AVR32_ALIAS_PICOMV_D1, mgl@1371: + AVR32_ALIAS_PICOMV_D2, mgl@1371: + AVR32_ALIAS_PICOMV_W1, mgl@1371: + AVR32_ALIAS_PICOMV_W2, mgl@1371: + AVR32_ALIAS_PICOST_D1, mgl@1371: + AVR32_ALIAS_PICOST_D2, mgl@1371: + AVR32_ALIAS_PICOST_D3, mgl@1371: + AVR32_ALIAS_PICOST_W1, mgl@1371: + AVR32_ALIAS_PICOST_W2, mgl@1371: + AVR32_ALIAS_PICOST_W3, mgl@1371: + AVR32_ALIAS_PICOSTM_D, mgl@1371: + AVR32_ALIAS_PICOSTM_D_PU, mgl@1371: + AVR32_ALIAS_PICOSTM_W, mgl@1371: + AVR32_ALIAS_PICOSTM_W_PU, mgl@1371: + AVR32_ALIAS__END_ mgl@1371: + }; mgl@1371: +#define AVR32_NR_ALIAS AVR32_ALIAS__END_ mgl@1371: + mgl@1371: +enum avr32_mnemonic_type mgl@1371: +{ mgl@1371: + AVR32_MNEMONIC_ABS, mgl@1371: + AVR32_MNEMONIC_ACALL, mgl@1371: + AVR32_MNEMONIC_ACR, mgl@1371: + AVR32_MNEMONIC_ADC, mgl@1371: + AVR32_MNEMONIC_ADD, mgl@1371: + AVR32_MNEMONIC_ADDABS, mgl@1371: + AVR32_MNEMONIC_ADDHH_W, mgl@1371: + AVR32_MNEMONIC_AND, mgl@1371: + AVR32_MNEMONIC_ANDH, mgl@1371: + AVR32_MNEMONIC_ANDL, mgl@1371: + AVR32_MNEMONIC_ANDN, mgl@1371: + AVR32_MNEMONIC_ASR, mgl@1371: + AVR32_MNEMONIC_BFEXTS, mgl@1371: + AVR32_MNEMONIC_BFEXTU, mgl@1371: + AVR32_MNEMONIC_BFINS, mgl@1371: + AVR32_MNEMONIC_BLD, mgl@1371: + AVR32_MNEMONIC_BREQ, mgl@1371: + AVR32_MNEMONIC_BRNE, mgl@1371: + AVR32_MNEMONIC_BRCC, mgl@1371: + AVR32_MNEMONIC_BRCS, mgl@1371: + AVR32_MNEMONIC_BRGE, mgl@1371: + AVR32_MNEMONIC_BRLT, mgl@1371: + AVR32_MNEMONIC_BRMI, mgl@1371: + AVR32_MNEMONIC_BRPL, mgl@1371: + AVR32_MNEMONIC_BRHS, mgl@1371: + AVR32_MNEMONIC_BRLO, mgl@1371: + AVR32_MNEMONIC_BRLS, mgl@1371: + AVR32_MNEMONIC_BRGT, mgl@1371: + AVR32_MNEMONIC_BRLE, mgl@1371: + AVR32_MNEMONIC_BRHI, mgl@1371: + AVR32_MNEMONIC_BRVS, mgl@1371: + AVR32_MNEMONIC_BRVC, mgl@1371: + AVR32_MNEMONIC_BRQS, mgl@1371: + AVR32_MNEMONIC_BRAL, mgl@1371: + AVR32_MNEMONIC_BREAKPOINT, mgl@1371: + AVR32_MNEMONIC_BREV, mgl@1371: + AVR32_MNEMONIC_BST, mgl@1371: + AVR32_MNEMONIC_CACHE, mgl@1371: + AVR32_MNEMONIC_CASTS_B, mgl@1371: + AVR32_MNEMONIC_CASTS_H, mgl@1371: + AVR32_MNEMONIC_CASTU_B, mgl@1371: + AVR32_MNEMONIC_CASTU_H, mgl@1371: + AVR32_MNEMONIC_CBR, mgl@1371: + AVR32_MNEMONIC_CLZ, mgl@1371: + AVR32_MNEMONIC_COM, mgl@1371: + AVR32_MNEMONIC_COP, mgl@1371: + AVR32_MNEMONIC_CP_B, mgl@1371: + AVR32_MNEMONIC_CP_H, mgl@1371: + AVR32_MNEMONIC_CP_W, mgl@1371: + AVR32_MNEMONIC_CP, mgl@1371: + AVR32_MNEMONIC_CPC, mgl@1371: + AVR32_MNEMONIC_CSRF, mgl@1371: + AVR32_MNEMONIC_CSRFCZ, mgl@1371: + AVR32_MNEMONIC_DIVS, mgl@1371: + AVR32_MNEMONIC_DIVU, mgl@1371: + AVR32_MNEMONIC_EOR, mgl@1371: + AVR32_MNEMONIC_EORL, mgl@1371: + AVR32_MNEMONIC_EORH, mgl@1371: + AVR32_MNEMONIC_FRS, mgl@1371: + AVR32_MNEMONIC_ICALL, mgl@1371: + AVR32_MNEMONIC_INCJOSP, mgl@1371: + AVR32_MNEMONIC_LD_D, mgl@1371: + AVR32_MNEMONIC_LD_SB, mgl@1371: + AVR32_MNEMONIC_LD_UB, mgl@1371: + AVR32_MNEMONIC_LD_SH, mgl@1371: + AVR32_MNEMONIC_LD_UH, mgl@1371: + AVR32_MNEMONIC_LD_W, mgl@1371: + AVR32_MNEMONIC_LDC_D, mgl@1371: + AVR32_MNEMONIC_LDC_W, mgl@1371: + AVR32_MNEMONIC_LDC0_D, mgl@1371: + AVR32_MNEMONIC_LDC0_W, mgl@1371: + AVR32_MNEMONIC_LDCM_D, mgl@1371: + AVR32_MNEMONIC_LDCM_W, mgl@1371: + AVR32_MNEMONIC_LDDPC, mgl@1371: + AVR32_MNEMONIC_LDDSP, mgl@1371: + AVR32_MNEMONIC_LDINS_B, mgl@1371: + AVR32_MNEMONIC_LDINS_H, mgl@1371: + AVR32_MNEMONIC_LDM, mgl@1371: + AVR32_MNEMONIC_LDMTS, mgl@1371: + AVR32_MNEMONIC_LDSWP_SH, mgl@1371: + AVR32_MNEMONIC_LDSWP_UH, mgl@1371: + AVR32_MNEMONIC_LDSWP_W, mgl@1371: + AVR32_MNEMONIC_LSL, mgl@1371: + AVR32_MNEMONIC_LSR, mgl@1371: + AVR32_MNEMONIC_MAC, mgl@1371: + AVR32_MNEMONIC_MACHH_D, mgl@1371: + AVR32_MNEMONIC_MACHH_W, mgl@1371: + AVR32_MNEMONIC_MACS_D, mgl@1371: + AVR32_MNEMONIC_MACSATHH_W, mgl@1371: + AVR32_MNEMONIC_MACU_D, mgl@1371: + AVR32_MNEMONIC_MACWH_D, mgl@1371: + AVR32_MNEMONIC_MAX, mgl@1371: + AVR32_MNEMONIC_MCALL, mgl@1371: + AVR32_MNEMONIC_MFDR, mgl@1371: + AVR32_MNEMONIC_MFSR, mgl@1371: + AVR32_MNEMONIC_MIN, mgl@1371: + AVR32_MNEMONIC_MOV, mgl@1371: + AVR32_MNEMONIC_MOVEQ, mgl@1371: + AVR32_MNEMONIC_MOVNE, mgl@1371: + AVR32_MNEMONIC_MOVCC, mgl@1371: + AVR32_MNEMONIC_MOVCS, mgl@1371: + AVR32_MNEMONIC_MOVGE, mgl@1371: + AVR32_MNEMONIC_MOVLT, mgl@1371: + AVR32_MNEMONIC_MOVMI, mgl@1371: + AVR32_MNEMONIC_MOVPL, mgl@1371: + AVR32_MNEMONIC_MOVLS, mgl@1371: + AVR32_MNEMONIC_MOVGT, mgl@1371: + AVR32_MNEMONIC_MOVLE, mgl@1371: + AVR32_MNEMONIC_MOVHI, mgl@1371: + AVR32_MNEMONIC_MOVVS, mgl@1371: + AVR32_MNEMONIC_MOVVC, mgl@1371: + AVR32_MNEMONIC_MOVQS, mgl@1371: + AVR32_MNEMONIC_MOVAL, mgl@1371: + AVR32_MNEMONIC_MOVHS, mgl@1371: + AVR32_MNEMONIC_MOVLO, mgl@1371: + AVR32_MNEMONIC_MTDR, mgl@1371: + AVR32_MNEMONIC_MTSR, mgl@1371: + AVR32_MNEMONIC_MUL, mgl@1371: + AVR32_MNEMONIC_MULHH_W, mgl@1371: + AVR32_MNEMONIC_MULNHH_W, mgl@1371: + AVR32_MNEMONIC_MULNWH_D, mgl@1371: + AVR32_MNEMONIC_MULS_D, mgl@1371: + AVR32_MNEMONIC_MULSATHH_H, mgl@1371: + AVR32_MNEMONIC_MULSATHH_W, mgl@1371: + AVR32_MNEMONIC_MULSATRNDHH_H, mgl@1371: + AVR32_MNEMONIC_MULSATRNDWH_W, mgl@1371: + AVR32_MNEMONIC_MULSATWH_W, mgl@1371: + AVR32_MNEMONIC_MULU_D, mgl@1371: + AVR32_MNEMONIC_MULWH_D, mgl@1371: + AVR32_MNEMONIC_MUSFR, mgl@1371: + AVR32_MNEMONIC_MUSTR, mgl@1371: + AVR32_MNEMONIC_MVCR_D, mgl@1371: + AVR32_MNEMONIC_MVCR_W, mgl@1371: + AVR32_MNEMONIC_MVRC_D, mgl@1371: + AVR32_MNEMONIC_MVRC_W, mgl@1371: + AVR32_MNEMONIC_NEG, mgl@1371: + AVR32_MNEMONIC_NOP, mgl@1371: + AVR32_MNEMONIC_OR, mgl@1371: + AVR32_MNEMONIC_ORH, mgl@1371: + AVR32_MNEMONIC_ORL, mgl@1371: + AVR32_MNEMONIC_PABS_SB, mgl@1371: + AVR32_MNEMONIC_PABS_SH, mgl@1371: + AVR32_MNEMONIC_PACKSH_SB, mgl@1371: + AVR32_MNEMONIC_PACKSH_UB, mgl@1371: + AVR32_MNEMONIC_PACKW_SH, mgl@1371: + AVR32_MNEMONIC_PADD_B, mgl@1371: + AVR32_MNEMONIC_PADD_H, mgl@1371: + AVR32_MNEMONIC_PADDH_SH, mgl@1371: + AVR32_MNEMONIC_PADDH_UB, mgl@1371: + AVR32_MNEMONIC_PADDS_SB, mgl@1371: + AVR32_MNEMONIC_PADDS_SH, mgl@1371: + AVR32_MNEMONIC_PADDS_UB, mgl@1371: + AVR32_MNEMONIC_PADDS_UH, mgl@1371: + AVR32_MNEMONIC_PADDSUB_H, mgl@1371: + AVR32_MNEMONIC_PADDSUBH_SH, mgl@1371: + AVR32_MNEMONIC_PADDSUBS_SH, mgl@1371: + AVR32_MNEMONIC_PADDSUBS_UH, mgl@1371: + AVR32_MNEMONIC_PADDX_H, mgl@1371: + AVR32_MNEMONIC_PADDXH_SH, mgl@1371: + AVR32_MNEMONIC_PADDXS_SH, mgl@1371: + AVR32_MNEMONIC_PADDXS_UH, mgl@1371: + AVR32_MNEMONIC_PASR_B, mgl@1371: + AVR32_MNEMONIC_PASR_H, mgl@1371: + AVR32_MNEMONIC_PAVG_SH, mgl@1371: + AVR32_MNEMONIC_PAVG_UB, mgl@1371: + AVR32_MNEMONIC_PLSL_B, mgl@1371: + AVR32_MNEMONIC_PLSL_H, mgl@1371: + AVR32_MNEMONIC_PLSR_B, mgl@1371: + AVR32_MNEMONIC_PLSR_H, mgl@1371: + AVR32_MNEMONIC_PMAX_SH, mgl@1371: + AVR32_MNEMONIC_PMAX_UB, mgl@1371: + AVR32_MNEMONIC_PMIN_SH, mgl@1371: + AVR32_MNEMONIC_PMIN_UB, mgl@1371: + AVR32_MNEMONIC_POPJC, mgl@1371: + AVR32_MNEMONIC_POPM, mgl@1371: + AVR32_MNEMONIC_PREF, mgl@1371: + AVR32_MNEMONIC_PSAD, mgl@1371: + AVR32_MNEMONIC_PSUB_B, mgl@1371: + AVR32_MNEMONIC_PSUB_H, mgl@1371: + AVR32_MNEMONIC_PSUBADD_H, mgl@1371: + AVR32_MNEMONIC_PSUBADDH_SH, mgl@1371: + AVR32_MNEMONIC_PSUBADDS_SH, mgl@1371: + AVR32_MNEMONIC_PSUBADDS_UH, mgl@1371: + AVR32_MNEMONIC_PSUBH_SH, mgl@1371: + AVR32_MNEMONIC_PSUBH_UB, mgl@1371: + AVR32_MNEMONIC_PSUBS_SB, mgl@1371: + AVR32_MNEMONIC_PSUBS_SH, mgl@1371: + AVR32_MNEMONIC_PSUBS_UB, mgl@1371: + AVR32_MNEMONIC_PSUBS_UH, mgl@1371: + AVR32_MNEMONIC_PSUBX_H, mgl@1371: + AVR32_MNEMONIC_PSUBXH_SH, mgl@1371: + AVR32_MNEMONIC_PSUBXS_SH, mgl@1371: + AVR32_MNEMONIC_PSUBXS_UH, mgl@1371: + AVR32_MNEMONIC_PUNPCKSB_H, mgl@1371: + AVR32_MNEMONIC_PUNPCKUB_H, mgl@1371: + AVR32_MNEMONIC_PUSHJC, mgl@1371: + AVR32_MNEMONIC_PUSHM, mgl@1371: + AVR32_MNEMONIC_RCALL, mgl@1371: + AVR32_MNEMONIC_RETEQ, mgl@1371: + AVR32_MNEMONIC_RETNE, mgl@1371: + AVR32_MNEMONIC_RETCC, mgl@1371: + AVR32_MNEMONIC_RETCS, mgl@1371: + AVR32_MNEMONIC_RETGE, mgl@1371: + AVR32_MNEMONIC_RETLT, mgl@1371: + AVR32_MNEMONIC_RETMI, mgl@1371: + AVR32_MNEMONIC_RETPL, mgl@1371: + AVR32_MNEMONIC_RETLS, mgl@1371: + AVR32_MNEMONIC_RETGT, mgl@1371: + AVR32_MNEMONIC_RETLE, mgl@1371: + AVR32_MNEMONIC_RETHI, mgl@1371: + AVR32_MNEMONIC_RETVS, mgl@1371: + AVR32_MNEMONIC_RETVC, mgl@1371: + AVR32_MNEMONIC_RETQS, mgl@1371: + AVR32_MNEMONIC_RETAL, mgl@1371: + AVR32_MNEMONIC_RETHS, mgl@1371: + AVR32_MNEMONIC_RETLO, mgl@1371: + AVR32_MNEMONIC_RET, mgl@1371: + AVR32_MNEMONIC_RETD, mgl@1371: + AVR32_MNEMONIC_RETE, mgl@1371: + AVR32_MNEMONIC_RETJ, mgl@1371: + AVR32_MNEMONIC_RETS, mgl@1371: + AVR32_MNEMONIC_RJMP, mgl@1371: + AVR32_MNEMONIC_ROL, mgl@1371: + AVR32_MNEMONIC_ROR, mgl@1371: + AVR32_MNEMONIC_RSUB, mgl@1371: + AVR32_MNEMONIC_SATADD_H, mgl@1371: + AVR32_MNEMONIC_SATADD_W, mgl@1371: + AVR32_MNEMONIC_SATRNDS, mgl@1371: + AVR32_MNEMONIC_SATRNDU, mgl@1371: + AVR32_MNEMONIC_SATS, mgl@1371: + AVR32_MNEMONIC_SATSUB_H, mgl@1371: + AVR32_MNEMONIC_SATSUB_W, mgl@1371: + AVR32_MNEMONIC_SATU, mgl@1371: + AVR32_MNEMONIC_SBC, mgl@1371: + AVR32_MNEMONIC_SBR, mgl@1371: + AVR32_MNEMONIC_SCALL, mgl@1371: + AVR32_MNEMONIC_SCR, mgl@1371: + AVR32_MNEMONIC_SLEEP, mgl@1371: + AVR32_MNEMONIC_SREQ, mgl@1371: + AVR32_MNEMONIC_SRNE, mgl@1371: + AVR32_MNEMONIC_SRCC, mgl@1371: + AVR32_MNEMONIC_SRCS, mgl@1371: + AVR32_MNEMONIC_SRGE, mgl@1371: + AVR32_MNEMONIC_SRLT, mgl@1371: + AVR32_MNEMONIC_SRMI, mgl@1371: + AVR32_MNEMONIC_SRPL, mgl@1371: + AVR32_MNEMONIC_SRLS, mgl@1371: + AVR32_MNEMONIC_SRGT, mgl@1371: + AVR32_MNEMONIC_SRLE, mgl@1371: + AVR32_MNEMONIC_SRHI, mgl@1371: + AVR32_MNEMONIC_SRVS, mgl@1371: + AVR32_MNEMONIC_SRVC, mgl@1371: + AVR32_MNEMONIC_SRQS, mgl@1371: + AVR32_MNEMONIC_SRAL, mgl@1371: + AVR32_MNEMONIC_SRHS, mgl@1371: + AVR32_MNEMONIC_SRLO, mgl@1371: + AVR32_MNEMONIC_SSRF, mgl@1371: + AVR32_MNEMONIC_ST_B, mgl@1371: + AVR32_MNEMONIC_ST_D, mgl@1371: + AVR32_MNEMONIC_ST_H, mgl@1371: + AVR32_MNEMONIC_ST_W, mgl@1371: + AVR32_MNEMONIC_STC_D, mgl@1371: + AVR32_MNEMONIC_STC_W, mgl@1371: + AVR32_MNEMONIC_STC0_D, mgl@1371: + AVR32_MNEMONIC_STC0_W, mgl@1371: + AVR32_MNEMONIC_STCM_D, mgl@1371: + AVR32_MNEMONIC_STCM_W, mgl@1371: + AVR32_MNEMONIC_STCOND, mgl@1371: + AVR32_MNEMONIC_STDSP, mgl@1371: + AVR32_MNEMONIC_STHH_W, mgl@1371: + AVR32_MNEMONIC_STM, mgl@1371: + AVR32_MNEMONIC_STMTS, mgl@1371: + AVR32_MNEMONIC_STSWP_H, mgl@1371: + AVR32_MNEMONIC_STSWP_W, mgl@1371: + AVR32_MNEMONIC_SUB, mgl@1371: + AVR32_MNEMONIC_SUBEQ, mgl@1371: + AVR32_MNEMONIC_SUBNE, mgl@1371: + AVR32_MNEMONIC_SUBCC, mgl@1371: + AVR32_MNEMONIC_SUBCS, mgl@1371: + AVR32_MNEMONIC_SUBGE, mgl@1371: + AVR32_MNEMONIC_SUBLT, mgl@1371: + AVR32_MNEMONIC_SUBMI, mgl@1371: + AVR32_MNEMONIC_SUBPL, mgl@1371: + AVR32_MNEMONIC_SUBLS, mgl@1371: + AVR32_MNEMONIC_SUBGT, mgl@1371: + AVR32_MNEMONIC_SUBLE, mgl@1371: + AVR32_MNEMONIC_SUBHI, mgl@1371: + AVR32_MNEMONIC_SUBVS, mgl@1371: + AVR32_MNEMONIC_SUBVC, mgl@1371: + AVR32_MNEMONIC_SUBQS, mgl@1371: + AVR32_MNEMONIC_SUBAL, mgl@1371: + AVR32_MNEMONIC_SUBHS, mgl@1371: + AVR32_MNEMONIC_SUBLO, mgl@1371: + AVR32_MNEMONIC_SUBFEQ, mgl@1371: + AVR32_MNEMONIC_SUBFNE, mgl@1371: + AVR32_MNEMONIC_SUBFCC, mgl@1371: + AVR32_MNEMONIC_SUBFCS, mgl@1371: + AVR32_MNEMONIC_SUBFGE, mgl@1371: + AVR32_MNEMONIC_SUBFLT, mgl@1371: + AVR32_MNEMONIC_SUBFMI, mgl@1371: + AVR32_MNEMONIC_SUBFPL, mgl@1371: + AVR32_MNEMONIC_SUBFLS, mgl@1371: + AVR32_MNEMONIC_SUBFGT, mgl@1371: + AVR32_MNEMONIC_SUBFLE, mgl@1371: + AVR32_MNEMONIC_SUBFHI, mgl@1371: + AVR32_MNEMONIC_SUBFVS, mgl@1371: + AVR32_MNEMONIC_SUBFVC, mgl@1371: + AVR32_MNEMONIC_SUBFQS, mgl@1371: + AVR32_MNEMONIC_SUBFAL, mgl@1371: + AVR32_MNEMONIC_SUBFHS, mgl@1371: + AVR32_MNEMONIC_SUBFLO, mgl@1371: + AVR32_MNEMONIC_SUBHH_W, mgl@1371: + AVR32_MNEMONIC_SWAP_B, mgl@1371: + AVR32_MNEMONIC_SWAP_BH, mgl@1371: + AVR32_MNEMONIC_SWAP_H, mgl@1371: + AVR32_MNEMONIC_SYNC, mgl@1371: + AVR32_MNEMONIC_TLBR, mgl@1371: + AVR32_MNEMONIC_TLBS, mgl@1371: + AVR32_MNEMONIC_TLBW, mgl@1371: + AVR32_MNEMONIC_TNBZ, mgl@1371: + AVR32_MNEMONIC_TST, mgl@1371: + AVR32_MNEMONIC_XCHG, mgl@1371: + AVR32_MNEMONIC_MEMC, mgl@1371: + AVR32_MNEMONIC_MEMS, mgl@1371: + AVR32_MNEMONIC_MEMT, mgl@1371: + AVR32_MNEMONIC_FADD_S, mgl@1371: + AVR32_MNEMONIC_FADD_D, mgl@1371: + AVR32_MNEMONIC_FSUB_S, mgl@1371: + AVR32_MNEMONIC_FSUB_D, mgl@1371: + AVR32_MNEMONIC_FMAC_S, mgl@1371: + AVR32_MNEMONIC_FMAC_D, mgl@1371: + AVR32_MNEMONIC_FNMAC_S, mgl@1371: + AVR32_MNEMONIC_FNMAC_D, mgl@1371: + AVR32_MNEMONIC_FMSC_S, mgl@1371: + AVR32_MNEMONIC_FMSC_D, mgl@1371: + AVR32_MNEMONIC_FNMSC_S, mgl@1371: + AVR32_MNEMONIC_FNMSC_D, mgl@1371: + AVR32_MNEMONIC_FMUL_S, mgl@1371: + AVR32_MNEMONIC_FMUL_D, mgl@1371: + AVR32_MNEMONIC_FNMUL_S, mgl@1371: + AVR32_MNEMONIC_FNMUL_D, mgl@1371: + AVR32_MNEMONIC_FNEG_S, mgl@1371: + AVR32_MNEMONIC_FNEG_D, mgl@1371: + AVR32_MNEMONIC_FABS_S, mgl@1371: + AVR32_MNEMONIC_FABS_D, mgl@1371: + AVR32_MNEMONIC_FCMP_S, mgl@1371: + AVR32_MNEMONIC_FCMP_D, mgl@1371: + AVR32_MNEMONIC_FMOV_S, mgl@1371: + AVR32_MNEMONIC_FMOV_D, mgl@1371: + AVR32_MNEMONIC_FCASTS_D, mgl@1371: + AVR32_MNEMONIC_FCASTD_S, mgl@1371: + /* AVR32_MNEMONIC_FLD_S, mgl@1371: + AVR32_MNEMONIC_FLD_D, mgl@1371: + AVR32_MNEMONIC_FST_S, mgl@1371: + AVR32_MNEMONIC_FST_D, */ mgl@1371: + AVR32_MNEMONIC_LDA_W, mgl@1371: + AVR32_MNEMONIC_CALL, mgl@1371: + AVR32_MNEMONIC_PICOSVMAC, mgl@1371: + AVR32_MNEMONIC_PICOSVMUL, mgl@1371: + AVR32_MNEMONIC_PICOVMAC, mgl@1371: + AVR32_MNEMONIC_PICOVMUL, mgl@1371: + AVR32_MNEMONIC_PICOLD_D, mgl@1371: + AVR32_MNEMONIC_PICOLD_W, mgl@1371: + AVR32_MNEMONIC_PICOLDM_D, mgl@1371: + AVR32_MNEMONIC_PICOLDM_W, mgl@1371: + AVR32_MNEMONIC_PICOMV_D, mgl@1371: + AVR32_MNEMONIC_PICOMV_W, mgl@1371: + AVR32_MNEMONIC_PICOST_D, mgl@1371: + AVR32_MNEMONIC_PICOST_W, mgl@1371: + AVR32_MNEMONIC_PICOSTM_D, mgl@1371: + AVR32_MNEMONIC_PICOSTM_W, mgl@1371: + AVR32_MNEMONIC_RSUBEQ, mgl@1371: + AVR32_MNEMONIC_RSUBNE, mgl@1371: + AVR32_MNEMONIC_RSUBCC, mgl@1371: + AVR32_MNEMONIC_RSUBCS, mgl@1371: + AVR32_MNEMONIC_RSUBGE, mgl@1371: + AVR32_MNEMONIC_RSUBLT, mgl@1371: + AVR32_MNEMONIC_RSUBMI, mgl@1371: + AVR32_MNEMONIC_RSUBPL, mgl@1371: + AVR32_MNEMONIC_RSUBLS, mgl@1371: + AVR32_MNEMONIC_RSUBGT, mgl@1371: + AVR32_MNEMONIC_RSUBLE, mgl@1371: + AVR32_MNEMONIC_RSUBHI, mgl@1371: + AVR32_MNEMONIC_RSUBVS, mgl@1371: + AVR32_MNEMONIC_RSUBVC, mgl@1371: + AVR32_MNEMONIC_RSUBQS, mgl@1371: + AVR32_MNEMONIC_RSUBAL, mgl@1371: + AVR32_MNEMONIC_RSUBHS, mgl@1371: + AVR32_MNEMONIC_RSUBLO, mgl@1371: + AVR32_MNEMONIC_ADDEQ, mgl@1371: + AVR32_MNEMONIC_ADDNE, mgl@1371: + AVR32_MNEMONIC_ADDCC, mgl@1371: + AVR32_MNEMONIC_ADDCS, mgl@1371: + AVR32_MNEMONIC_ADDGE, mgl@1371: + AVR32_MNEMONIC_ADDLT, mgl@1371: + AVR32_MNEMONIC_ADDMI, mgl@1371: + AVR32_MNEMONIC_ADDPL, mgl@1371: + AVR32_MNEMONIC_ADDLS, mgl@1371: + AVR32_MNEMONIC_ADDGT, mgl@1371: + AVR32_MNEMONIC_ADDLE, mgl@1371: + AVR32_MNEMONIC_ADDHI, mgl@1371: + AVR32_MNEMONIC_ADDVS, mgl@1371: + AVR32_MNEMONIC_ADDVC, mgl@1371: + AVR32_MNEMONIC_ADDQS, mgl@1371: + AVR32_MNEMONIC_ADDAL, mgl@1371: + AVR32_MNEMONIC_ADDHS, mgl@1371: + AVR32_MNEMONIC_ADDLO, mgl@1371: + AVR32_MNEMONIC_ANDEQ, mgl@1371: + AVR32_MNEMONIC_ANDNE, mgl@1371: + AVR32_MNEMONIC_ANDCC, mgl@1371: + AVR32_MNEMONIC_ANDCS, mgl@1371: + AVR32_MNEMONIC_ANDGE, mgl@1371: + AVR32_MNEMONIC_ANDLT, mgl@1371: + AVR32_MNEMONIC_ANDMI, mgl@1371: + AVR32_MNEMONIC_ANDPL, mgl@1371: + AVR32_MNEMONIC_ANDLS, mgl@1371: + AVR32_MNEMONIC_ANDGT, mgl@1371: + AVR32_MNEMONIC_ANDLE, mgl@1371: + AVR32_MNEMONIC_ANDHI, mgl@1371: + AVR32_MNEMONIC_ANDVS, mgl@1371: + AVR32_MNEMONIC_ANDVC, mgl@1371: + AVR32_MNEMONIC_ANDQS, mgl@1371: + AVR32_MNEMONIC_ANDAL, mgl@1371: + AVR32_MNEMONIC_ANDHS, mgl@1371: + AVR32_MNEMONIC_ANDLO, mgl@1371: + AVR32_MNEMONIC_OREQ, mgl@1371: + AVR32_MNEMONIC_ORNE, mgl@1371: + AVR32_MNEMONIC_ORCC, mgl@1371: + AVR32_MNEMONIC_ORCS, mgl@1371: + AVR32_MNEMONIC_ORGE, mgl@1371: + AVR32_MNEMONIC_ORLT, mgl@1371: + AVR32_MNEMONIC_ORMI, mgl@1371: + AVR32_MNEMONIC_ORPL, mgl@1371: + AVR32_MNEMONIC_ORLS, mgl@1371: + AVR32_MNEMONIC_ORGT, mgl@1371: + AVR32_MNEMONIC_ORLE, mgl@1371: + AVR32_MNEMONIC_ORHI, mgl@1371: + AVR32_MNEMONIC_ORVS, mgl@1371: + AVR32_MNEMONIC_ORVC, mgl@1371: + AVR32_MNEMONIC_ORQS, mgl@1371: + AVR32_MNEMONIC_ORAL, mgl@1371: + AVR32_MNEMONIC_ORHS, mgl@1371: + AVR32_MNEMONIC_ORLO, mgl@1371: + AVR32_MNEMONIC_EOREQ, mgl@1371: + AVR32_MNEMONIC_EORNE, mgl@1371: + AVR32_MNEMONIC_EORCC, mgl@1371: + AVR32_MNEMONIC_EORCS, mgl@1371: + AVR32_MNEMONIC_EORGE, mgl@1371: + AVR32_MNEMONIC_EORLT, mgl@1371: + AVR32_MNEMONIC_EORMI, mgl@1371: + AVR32_MNEMONIC_EORPL, mgl@1371: + AVR32_MNEMONIC_EORLS, mgl@1371: + AVR32_MNEMONIC_EORGT, mgl@1371: + AVR32_MNEMONIC_EORLE, mgl@1371: + AVR32_MNEMONIC_EORHI, mgl@1371: + AVR32_MNEMONIC_EORVS, mgl@1371: + AVR32_MNEMONIC_EORVC, mgl@1371: + AVR32_MNEMONIC_EORQS, mgl@1371: + AVR32_MNEMONIC_EORAL, mgl@1371: + AVR32_MNEMONIC_EORHS, mgl@1371: + AVR32_MNEMONIC_EORLO, mgl@1371: + AVR32_MNEMONIC_LD_WEQ, mgl@1371: + AVR32_MNEMONIC_LD_WNE, mgl@1371: + AVR32_MNEMONIC_LD_WCC, mgl@1371: + AVR32_MNEMONIC_LD_WCS, mgl@1371: + AVR32_MNEMONIC_LD_WGE, mgl@1371: + AVR32_MNEMONIC_LD_WLT, mgl@1371: + AVR32_MNEMONIC_LD_WMI, mgl@1371: + AVR32_MNEMONIC_LD_WPL, mgl@1371: + AVR32_MNEMONIC_LD_WLS, mgl@1371: + AVR32_MNEMONIC_LD_WGT, mgl@1371: + AVR32_MNEMONIC_LD_WLE, mgl@1371: + AVR32_MNEMONIC_LD_WHI, mgl@1371: + AVR32_MNEMONIC_LD_WVS, mgl@1371: + AVR32_MNEMONIC_LD_WVC, mgl@1371: + AVR32_MNEMONIC_LD_WQS, mgl@1371: + AVR32_MNEMONIC_LD_WAL, mgl@1371: + AVR32_MNEMONIC_LD_WHS, mgl@1371: + AVR32_MNEMONIC_LD_WLO, mgl@1371: + AVR32_MNEMONIC_LD_SHEQ, mgl@1371: + AVR32_MNEMONIC_LD_SHNE, mgl@1371: + AVR32_MNEMONIC_LD_SHCC, mgl@1371: + AVR32_MNEMONIC_LD_SHCS, mgl@1371: + AVR32_MNEMONIC_LD_SHGE, mgl@1371: + AVR32_MNEMONIC_LD_SHLT, mgl@1371: + AVR32_MNEMONIC_LD_SHMI, mgl@1371: + AVR32_MNEMONIC_LD_SHPL, mgl@1371: + AVR32_MNEMONIC_LD_SHLS, mgl@1371: + AVR32_MNEMONIC_LD_SHGT, mgl@1371: + AVR32_MNEMONIC_LD_SHLE, mgl@1371: + AVR32_MNEMONIC_LD_SHHI, mgl@1371: + AVR32_MNEMONIC_LD_SHVS, mgl@1371: + AVR32_MNEMONIC_LD_SHVC, mgl@1371: + AVR32_MNEMONIC_LD_SHQS, mgl@1371: + AVR32_MNEMONIC_LD_SHAL, mgl@1371: + AVR32_MNEMONIC_LD_SHHS, mgl@1371: + AVR32_MNEMONIC_LD_SHLO, mgl@1371: + AVR32_MNEMONIC_LD_UHEQ, mgl@1371: + AVR32_MNEMONIC_LD_UHNE, mgl@1371: + AVR32_MNEMONIC_LD_UHCC, mgl@1371: + AVR32_MNEMONIC_LD_UHCS, mgl@1371: + AVR32_MNEMONIC_LD_UHGE, mgl@1371: + AVR32_MNEMONIC_LD_UHLT, mgl@1371: + AVR32_MNEMONIC_LD_UHMI, mgl@1371: + AVR32_MNEMONIC_LD_UHPL, mgl@1371: + AVR32_MNEMONIC_LD_UHLS, mgl@1371: + AVR32_MNEMONIC_LD_UHGT, mgl@1371: + AVR32_MNEMONIC_LD_UHLE, mgl@1371: + AVR32_MNEMONIC_LD_UHHI, mgl@1371: + AVR32_MNEMONIC_LD_UHVS, mgl@1371: + AVR32_MNEMONIC_LD_UHVC, mgl@1371: + AVR32_MNEMONIC_LD_UHQS, mgl@1371: + AVR32_MNEMONIC_LD_UHAL, mgl@1371: + AVR32_MNEMONIC_LD_UHHS, mgl@1371: + AVR32_MNEMONIC_LD_UHLO, mgl@1371: + AVR32_MNEMONIC_LD_SBEQ, mgl@1371: + AVR32_MNEMONIC_LD_SBNE, mgl@1371: + AVR32_MNEMONIC_LD_SBCC, mgl@1371: + AVR32_MNEMONIC_LD_SBCS, mgl@1371: + AVR32_MNEMONIC_LD_SBGE, mgl@1371: + AVR32_MNEMONIC_LD_SBLT, mgl@1371: + AVR32_MNEMONIC_LD_SBMI, mgl@1371: + AVR32_MNEMONIC_LD_SBPL, mgl@1371: + AVR32_MNEMONIC_LD_SBLS, mgl@1371: + AVR32_MNEMONIC_LD_SBGT, mgl@1371: + AVR32_MNEMONIC_LD_SBLE, mgl@1371: + AVR32_MNEMONIC_LD_SBHI, mgl@1371: + AVR32_MNEMONIC_LD_SBVS, mgl@1371: + AVR32_MNEMONIC_LD_SBVC, mgl@1371: + AVR32_MNEMONIC_LD_SBQS, mgl@1371: + AVR32_MNEMONIC_LD_SBAL, mgl@1371: + AVR32_MNEMONIC_LD_SBHS, mgl@1371: + AVR32_MNEMONIC_LD_SBLO, mgl@1371: + AVR32_MNEMONIC_LD_UBEQ, mgl@1371: + AVR32_MNEMONIC_LD_UBNE, mgl@1371: + AVR32_MNEMONIC_LD_UBCC, mgl@1371: + AVR32_MNEMONIC_LD_UBCS, mgl@1371: + AVR32_MNEMONIC_LD_UBGE, mgl@1371: + AVR32_MNEMONIC_LD_UBLT, mgl@1371: + AVR32_MNEMONIC_LD_UBMI, mgl@1371: + AVR32_MNEMONIC_LD_UBPL, mgl@1371: + AVR32_MNEMONIC_LD_UBLS, mgl@1371: + AVR32_MNEMONIC_LD_UBGT, mgl@1371: + AVR32_MNEMONIC_LD_UBLE, mgl@1371: + AVR32_MNEMONIC_LD_UBHI, mgl@1371: + AVR32_MNEMONIC_LD_UBVS, mgl@1371: + AVR32_MNEMONIC_LD_UBVC, mgl@1371: + AVR32_MNEMONIC_LD_UBQS, mgl@1371: + AVR32_MNEMONIC_LD_UBAL, mgl@1371: + AVR32_MNEMONIC_LD_UBHS, mgl@1371: + AVR32_MNEMONIC_LD_UBLO, mgl@1371: + AVR32_MNEMONIC_ST_WEQ, mgl@1371: + AVR32_MNEMONIC_ST_WNE, mgl@1371: + AVR32_MNEMONIC_ST_WCC, mgl@1371: + AVR32_MNEMONIC_ST_WCS, mgl@1371: + AVR32_MNEMONIC_ST_WGE, mgl@1371: + AVR32_MNEMONIC_ST_WLT, mgl@1371: + AVR32_MNEMONIC_ST_WMI, mgl@1371: + AVR32_MNEMONIC_ST_WPL, mgl@1371: + AVR32_MNEMONIC_ST_WLS, mgl@1371: + AVR32_MNEMONIC_ST_WGT, mgl@1371: + AVR32_MNEMONIC_ST_WLE, mgl@1371: + AVR32_MNEMONIC_ST_WHI, mgl@1371: + AVR32_MNEMONIC_ST_WVS, mgl@1371: + AVR32_MNEMONIC_ST_WVC, mgl@1371: + AVR32_MNEMONIC_ST_WQS, mgl@1371: + AVR32_MNEMONIC_ST_WAL, mgl@1371: + AVR32_MNEMONIC_ST_WHS, mgl@1371: + AVR32_MNEMONIC_ST_WLO, mgl@1371: + AVR32_MNEMONIC_ST_HEQ, mgl@1371: + AVR32_MNEMONIC_ST_HNE, mgl@1371: + AVR32_MNEMONIC_ST_HCC, mgl@1371: + AVR32_MNEMONIC_ST_HCS, mgl@1371: + AVR32_MNEMONIC_ST_HGE, mgl@1371: + AVR32_MNEMONIC_ST_HLT, mgl@1371: + AVR32_MNEMONIC_ST_HMI, mgl@1371: + AVR32_MNEMONIC_ST_HPL, mgl@1371: + AVR32_MNEMONIC_ST_HLS, mgl@1371: + AVR32_MNEMONIC_ST_HGT, mgl@1371: + AVR32_MNEMONIC_ST_HLE, mgl@1371: + AVR32_MNEMONIC_ST_HHI, mgl@1371: + AVR32_MNEMONIC_ST_HVS, mgl@1371: + AVR32_MNEMONIC_ST_HVC, mgl@1371: + AVR32_MNEMONIC_ST_HQS, mgl@1371: + AVR32_MNEMONIC_ST_HAL, mgl@1371: + AVR32_MNEMONIC_ST_HHS, mgl@1371: + AVR32_MNEMONIC_ST_HLO, mgl@1371: + AVR32_MNEMONIC_ST_BEQ, mgl@1371: + AVR32_MNEMONIC_ST_BNE, mgl@1371: + AVR32_MNEMONIC_ST_BCC, mgl@1371: + AVR32_MNEMONIC_ST_BCS, mgl@1371: + AVR32_MNEMONIC_ST_BGE, mgl@1371: + AVR32_MNEMONIC_ST_BLT, mgl@1371: + AVR32_MNEMONIC_ST_BMI, mgl@1371: + AVR32_MNEMONIC_ST_BPL, mgl@1371: + AVR32_MNEMONIC_ST_BLS, mgl@1371: + AVR32_MNEMONIC_ST_BGT, mgl@1371: + AVR32_MNEMONIC_ST_BLE, mgl@1371: + AVR32_MNEMONIC_ST_BHI, mgl@1371: + AVR32_MNEMONIC_ST_BVS, mgl@1371: + AVR32_MNEMONIC_ST_BVC, mgl@1371: + AVR32_MNEMONIC_ST_BQS, mgl@1371: + AVR32_MNEMONIC_ST_BAL, mgl@1371: + AVR32_MNEMONIC_ST_BHS, mgl@1371: + AVR32_MNEMONIC_ST_BLO, mgl@1371: + AVR32_MNEMONIC_MOVH, mgl@1371: + AVR32_MNEMONIC__END_ mgl@1371: +}; mgl@1371: +#define AVR32_NR_MNEMONICS AVR32_MNEMONIC__END_ mgl@1371: + mgl@1371: +enum avr32_syntax_parser mgl@1371: + { mgl@1371: + AVR32_PARSER_NORMAL, mgl@1371: + AVR32_PARSER_ALIAS, mgl@1371: + AVR32_PARSER_LDA, mgl@1371: + AVR32_PARSER_CALL, mgl@1371: + AVR32_PARSER__END_ mgl@1371: + }; mgl@1371: +#define AVR32_NR_PARSERS AVR32_PARSER__END_ mgl@1371: --- a/opcodes/configure.in mgl@1371: +++ b/opcodes/configure.in mgl@1371: @@ -158,6 +158,7 @@ if test x${all_targets} = xfalse ; then mgl@1371: bfd_arc_arch) ta="$ta arc-dis.lo arc-opc.lo arc-ext.lo" ;; mgl@1371: bfd_arm_arch) ta="$ta arm-dis.lo" ;; mgl@1371: bfd_avr_arch) ta="$ta avr-dis.lo" ;; mgl@1371: + bfd_avr32_arch) ta="$ta avr32-asm.lo avr32-dis.lo avr32-opc.lo" ;; mgl@1371: bfd_bfin_arch) ta="$ta bfin-dis.lo" ;; mgl@1371: bfd_cr16_arch) ta="$ta cr16-dis.lo cr16-opc.lo" ;; mgl@1371: bfd_cris_arch) ta="$ta cris-dis.lo cris-opc.lo cgen-bitset.lo" ;; mgl@1371: @@ -216,7 +217,7 @@ if test x${all_targets} = xfalse ; then mgl@1371: ta="$ta sh64-dis.lo sh64-opc.lo" mgl@1371: archdefs="$archdefs -DINCLUDE_SHMEDIA" mgl@1371: break;; mgl@1371: - esac; mgl@1371: + esac mgl@1371: done mgl@1371: ta="$ta sh-dis.lo cgen-bitset.lo" ;; mgl@1371: bfd_sparc_arch) ta="$ta sparc-dis.lo sparc-opc.lo" ;; mgl@1371: --- a/opcodes/disassemble.c mgl@1371: +++ b/opcodes/disassemble.c mgl@1371: @@ -27,6 +27,7 @@ mgl@1371: #define ARCH_arc mgl@1371: #define ARCH_arm mgl@1371: #define ARCH_avr mgl@1371: +#define ARCH_avr32 mgl@1371: #define ARCH_bfin mgl@1371: #define ARCH_cr16 mgl@1371: #define ARCH_cris mgl@1371: @@ -128,6 +129,11 @@ disassembler (abfd) mgl@1371: disassemble = print_insn_avr; mgl@1371: break; mgl@1371: #endif mgl@1371: +#ifdef ARCH_avr32 mgl@1371: + case bfd_arch_avr32: mgl@1371: + disassemble = print_insn_avr32; mgl@1371: + break; mgl@1371: +#endif mgl@1371: #ifdef ARCH_bfin mgl@1371: case bfd_arch_bfin: mgl@1371: disassemble = print_insn_bfin; mgl@1371: @@ -346,9 +352,9 @@ disassembler (abfd) mgl@1371: #ifdef ARCH_score mgl@1371: case bfd_arch_score: mgl@1371: if (bfd_big_endian (abfd)) mgl@1371: - disassemble = print_insn_big_score; mgl@1371: + disassemble = print_insn_big_score; mgl@1371: else mgl@1371: - disassemble = print_insn_little_score; mgl@1371: + disassemble = print_insn_little_score; mgl@1371: break; mgl@1371: #endif mgl@1371: #ifdef ARCH_sh mgl@1371: @@ -466,6 +472,9 @@ disassembler_usage (stream) mgl@1371: #ifdef ARCH_i386 mgl@1371: print_i386_disassembler_options (stream); mgl@1371: #endif mgl@1371: +#ifdef ARCH_avr32 mgl@1371: + print_avr32_disassembler_options (stream); mgl@1371: +#endif mgl@1371: mgl@1371: return; mgl@1371: } mgl@1371: --- a/opcodes/Makefile.am mgl@1371: +++ b/opcodes/Makefile.am mgl@1371: @@ -30,6 +30,7 @@ LIBIBERTY = ../libiberty/libiberty.a mgl@1371: # Header files. mgl@1371: HFILES = \ mgl@1371: cgen-ops.h cgen-types.h \ mgl@1371: + avr32-asm.h avr32-opc.h \ mgl@1371: fr30-desc.h fr30-opc.h \ mgl@1371: frv-desc.h frv-opc.h \ mgl@1371: h8500-opc.h \ mgl@1371: @@ -63,6 +64,9 @@ CFILES = \ mgl@1371: arc-ext.c \ mgl@1371: arm-dis.c \ mgl@1371: avr-dis.c \ mgl@1371: + avr32-asm.c \ mgl@1371: + avr32-dis.c \ mgl@1371: + avr32-opc.c \ mgl@1371: bfin-dis.c \ mgl@1371: cgen-asm.c \ mgl@1371: cgen-bitset.c \ mgl@1371: @@ -217,6 +221,9 @@ ALL_MACHINES = \ mgl@1371: arc-ext.lo \ mgl@1371: arm-dis.lo \ mgl@1371: avr-dis.lo \ mgl@1371: + avr32-asm.lo \ mgl@1371: + avr32-dis.lo \ mgl@1371: + avr32-opc.lo \ mgl@1371: bfin-dis.lo \ mgl@1371: cgen-asm.lo \ mgl@1371: cgen-bitset.lo \ mgl@1371: @@ -674,6 +681,15 @@ avr-dis.lo: avr-dis.c sysdep.h config.h mgl@1371: $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \ mgl@1371: opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \ mgl@1371: $(INCDIR)/opcode/avr.h mgl@1371: +avr32-asm.lo: avr32-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \ mgl@1371: + $(BFD_H) $(INCDIR)/symcat.h avr32-opc.h opintl.h \ mgl@1371: + $(INCDIR)/xregex.h $(INCDIR)/xregex2.h \ mgl@1371: + $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h mgl@1371: +avr32-dis.lo: avr32-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \ mgl@1371: + $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \ mgl@1371: + avr32-opc.h opintl.h mgl@1371: +avr32-opc.lo: avr32-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \ mgl@1371: + $(BFD_H) $(INCDIR)/symcat.h avr32-opc.h $(INCDIR)/libiberty.h mgl@1371: bfin-dis.lo: bfin-dis.c $(INCDIR)/opcode/bfin.h $(INCDIR)/dis-asm.h \ mgl@1371: $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h mgl@1371: cgen-asm.lo: cgen-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \ mgl@1371: --- a/bfd/bfd-in2.h mgl@1371: +++ b/bfd/bfd-in2.h mgl@1371: @@ -2017,6 +2017,11 @@ enum bfd_architecture mgl@1371: #define bfd_mach_avr4 4 mgl@1371: #define bfd_mach_avr5 5 mgl@1371: #define bfd_mach_avr6 6 mgl@1371: + bfd_arch_avr32, /* Atmel AVR32 */ mgl@1371: +#define bfd_mach_avr32_ap 7000 mgl@1371: +#define bfd_mach_avr32_uc 3000 mgl@1371: +#define bfd_mach_avr32_ucr1 3001 mgl@1371: +#define bfd_mach_avr32_ucr2 3002 mgl@1371: bfd_arch_bfin, /* ADI Blackfin */ mgl@1371: #define bfd_mach_bfin 1 mgl@1371: bfd_arch_cr16, /* National Semiconductor CompactRISC (ie CR16). */ mgl@1371: @@ -3758,6 +3763,88 @@ instructions */ mgl@1371: instructions */ mgl@1371: BFD_RELOC_AVR_6_ADIW, mgl@1371: mgl@1371: +/* Difference between two labels: L2 - L1. The value of L1 is encoded mgl@1371: +as sym + addend, while the initial difference after assembly is mgl@1371: +inserted into the object file by the assembler. */ mgl@1371: + BFD_RELOC_AVR32_DIFF32, mgl@1371: + BFD_RELOC_AVR32_DIFF16, mgl@1371: + BFD_RELOC_AVR32_DIFF8, mgl@1371: + mgl@1371: +/* Reference to a symbol through the Global Offset Table. The linker mgl@1371: +will allocate an entry for symbol in the GOT and insert the offset mgl@1371: +of this entry as the relocation value. */ mgl@1371: + BFD_RELOC_AVR32_GOT32, mgl@1371: + BFD_RELOC_AVR32_GOT16, mgl@1371: + BFD_RELOC_AVR32_GOT8, mgl@1371: + mgl@1371: +/* Normal (non-pc-relative) code relocations. Alignment and signedness mgl@1371: +is indicated by the suffixes. S means signed, U means unsigned. W mgl@1371: +means word-aligned, H means halfword-aligned, neither means mgl@1371: +byte-aligned (no alignment.) SUB5 is the same relocation as 16S. */ mgl@1371: + BFD_RELOC_AVR32_21S, mgl@1371: + BFD_RELOC_AVR32_16U, mgl@1371: + BFD_RELOC_AVR32_16S, mgl@1371: + BFD_RELOC_AVR32_SUB5, mgl@1371: + BFD_RELOC_AVR32_8S_EXT, mgl@1371: + BFD_RELOC_AVR32_8S, mgl@1371: + BFD_RELOC_AVR32_15S, mgl@1371: + mgl@1371: +/* PC-relative relocations are signed if neither 'U' nor 'S' is mgl@1371: +specified. However, we explicitly tack on a 'B' to indicate no mgl@1371: +alignment, to avoid confusion with data relocs. All of these resolve mgl@1371: +to sym + addend - offset, except the one with 'N' (negated) suffix. mgl@1371: +This particular one resolves to offset - sym - addend. */ mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, mgl@1371: + BFD_RELOC_AVR32_18W_PCREL, mgl@1371: + BFD_RELOC_AVR32_16B_PCREL, mgl@1371: + BFD_RELOC_AVR32_16N_PCREL, mgl@1371: + BFD_RELOC_AVR32_14UW_PCREL, mgl@1371: + BFD_RELOC_AVR32_11H_PCREL, mgl@1371: + BFD_RELOC_AVR32_10UW_PCREL, mgl@1371: + BFD_RELOC_AVR32_9H_PCREL, mgl@1371: + BFD_RELOC_AVR32_9UW_PCREL, mgl@1371: + mgl@1371: +/* Subtract the link-time address of the GOT from (symbol + addend) mgl@1371: +and insert the result. */ mgl@1371: + BFD_RELOC_AVR32_GOTPC, mgl@1371: + mgl@1371: +/* Reference to a symbol through the GOT. The linker will allocate an mgl@1371: +entry for symbol in the GOT and insert the offset of this entry as mgl@1371: +the relocation value. addend must be zero. As usual, 'S' means mgl@1371: +signed, 'W' means word-aligned, etc. */ mgl@1371: + BFD_RELOC_AVR32_GOTCALL, mgl@1371: + BFD_RELOC_AVR32_LDA_GOT, mgl@1371: + BFD_RELOC_AVR32_GOT21S, mgl@1371: + BFD_RELOC_AVR32_GOT18SW, mgl@1371: + BFD_RELOC_AVR32_GOT16S, mgl@1371: + mgl@1371: +/* 32-bit constant pool entry. I don't think 8- and 16-bit entries make mgl@1371: +a whole lot of sense. */ mgl@1371: + BFD_RELOC_AVR32_32_CPENT, mgl@1371: + mgl@1371: +/* Constant pool references. Some of these relocations are signed, mgl@1371: +others are unsigned. It doesn't really matter, since the constant mgl@1371: +pool always comes after the code that references it. */ mgl@1371: + BFD_RELOC_AVR32_CPCALL, mgl@1371: + BFD_RELOC_AVR32_16_CP, mgl@1371: + BFD_RELOC_AVR32_9W_CP, mgl@1371: + mgl@1371: +/* sym must be the absolute symbol. The addend specifies the alignment mgl@1371: +order, e.g. if addend is 2, the linker must add padding so that the mgl@1371: +next address is aligned to a 4-byte boundary. */ mgl@1371: + BFD_RELOC_AVR32_ALIGN, mgl@1371: + mgl@1371: +/* Code relocations that will never make it to the output file. */ mgl@1371: + BFD_RELOC_AVR32_14UW, mgl@1371: + BFD_RELOC_AVR32_10UW, mgl@1371: + BFD_RELOC_AVR32_10SW, mgl@1371: + BFD_RELOC_AVR32_STHH_W, mgl@1371: + BFD_RELOC_AVR32_7UW, mgl@1371: + BFD_RELOC_AVR32_6S, mgl@1371: + BFD_RELOC_AVR32_6UW, mgl@1371: + BFD_RELOC_AVR32_4UH, mgl@1371: + BFD_RELOC_AVR32_3U, mgl@1371: + mgl@1371: /* Direct 12 bit. */ mgl@1371: BFD_RELOC_390_12, mgl@1371: mgl@1371: --- /dev/null mgl@1371: +++ b/bfd/bfd-in3.h mgl@1371: @@ -0,0 +1,5406 @@ mgl@1371: +/* DO NOT EDIT! -*- buffer-read-only: t -*- This file is automatically mgl@1371: + generated from "bfd-in.h", "init.c", "opncls.c", "libbfd.c", mgl@1371: + "bfdio.c", "bfdwin.c", "section.c", "archures.c", "reloc.c", mgl@1371: + "syms.c", "bfd.c", "archive.c", "corefile.c", "targets.c", "format.c", mgl@1371: + "linker.c" and "simple.c". mgl@1371: + Run "make headers" in your build bfd/ to regenerate. */ mgl@1371: + mgl@1371: +/* Main header file for the bfd library -- portable access to object files. mgl@1371: + mgl@1371: + Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, mgl@1371: + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 mgl@1371: + Free Software Foundation, Inc. mgl@1371: + mgl@1371: + Contributed by Cygnus Support. mgl@1371: + mgl@1371: + This file is part of BFD, the Binary File Descriptor library. mgl@1371: + mgl@1371: + This program is free software; you can redistribute it and/or modify mgl@1371: + it under the terms of the GNU General Public License as published by mgl@1371: + the Free Software Foundation; either version 3 of the License, or mgl@1371: + (at your option) any later version. mgl@1371: + mgl@1371: + This program is distributed in the hope that it will be useful, mgl@1371: + but WITHOUT ANY WARRANTY; without even the implied warranty of mgl@1371: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the mgl@1371: + GNU General Public License for more details. mgl@1371: + mgl@1371: + You should have received a copy of the GNU General Public License mgl@1371: + along with this program; if not, write to the Free Software mgl@1371: + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ mgl@1371: + mgl@1371: +#ifndef __BFD_H_SEEN__ mgl@1371: +#define __BFD_H_SEEN__ mgl@1371: + mgl@1371: +#ifdef __cplusplus mgl@1371: +extern "C" { mgl@1371: +#endif mgl@1371: + mgl@1371: +#include "ansidecl.h" mgl@1371: +#include "symcat.h" mgl@1371: +#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) mgl@1371: +#ifndef SABER mgl@1371: +/* This hack is to avoid a problem with some strict ANSI C preprocessors. mgl@1371: + The problem is, "32_" is not a valid preprocessing token, and we don't mgl@1371: + want extra underscores (e.g., "nlm_32_"). The XCONCAT2 macro will mgl@1371: + cause the inner CONCAT2 macros to be evaluated first, producing mgl@1371: + still-valid pp-tokens. Then the final concatenation can be done. */ mgl@1371: +#undef CONCAT4 mgl@1371: +#define CONCAT4(a,b,c,d) XCONCAT2(CONCAT2(a,b),CONCAT2(c,d)) mgl@1371: +#endif mgl@1371: +#endif mgl@1371: + mgl@1371: +/* This is a utility macro to handle the situation where the code mgl@1371: + wants to place a constant string into the code, followed by a mgl@1371: + comma and then the length of the string. Doing this by hand mgl@1371: + is error prone, so using this macro is safer. The macro will mgl@1371: + also safely handle the case where a NULL is passed as the arg. */ mgl@1371: +#define STRING_COMMA_LEN(STR) (STR), ((STR) ? sizeof (STR) - 1 : 0) mgl@1371: +/* Unfortunately it is not possible to use the STRING_COMMA_LEN macro mgl@1371: + to create the arguments to another macro, since the preprocessor mgl@1371: + will mis-count the number of arguments to the outer macro (by not mgl@1371: + evaluating STRING_COMMA_LEN and so missing the comma). This is a mgl@1371: + problem for example when trying to use STRING_COMMA_LEN to build mgl@1371: + the arguments to the strncmp() macro. Hence this alternative mgl@1371: + definition of strncmp is provided here. mgl@1371: + mgl@1371: + Note - these macros do NOT work if STR2 is not a constant string. */ mgl@1371: +#define CONST_STRNEQ(STR1,STR2) (strncmp ((STR1), (STR2), sizeof (STR2) - 1) == 0) mgl@1371: + /* strcpy() can have a similar problem, but since we know we are mgl@1371: + copying a constant string, we can use memcpy which will be faster mgl@1371: + since there is no need to check for a NUL byte inside STR. We mgl@1371: + can also save time if we do not need to copy the terminating NUL. */ mgl@1371: +#define LITMEMCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2) - 1) mgl@1371: +#define LITSTRCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2)) mgl@1371: + mgl@1371: + mgl@1371: +/* The word size used by BFD on the host. This may be 64 with a 32 mgl@1371: + bit target if the host is 64 bit, or if other 64 bit targets have mgl@1371: + been selected with --enable-targets, or if --enable-64-bit-bfd. */ mgl@1371: +#define BFD_ARCH_SIZE 32 mgl@1371: + mgl@1371: +/* The word size of the default bfd target. */ mgl@1371: +#define BFD_DEFAULT_TARGET_SIZE 32 mgl@1371: + mgl@1371: +#define BFD_HOST_64BIT_LONG 0 mgl@1371: +#define BFD_HOST_64BIT_LONG_LONG 0 mgl@1371: +#define BFD_HOST_LONG_LONG 1 mgl@1371: +#if 1 mgl@1371: +#define BFD_HOST_64_BIT long long mgl@1371: +#define BFD_HOST_U_64_BIT unsigned long long mgl@1371: +typedef BFD_HOST_64_BIT bfd_int64_t; mgl@1371: +typedef BFD_HOST_U_64_BIT bfd_uint64_t; mgl@1371: +#endif mgl@1371: + mgl@1371: +#if BFD_ARCH_SIZE >= 64 mgl@1371: +#define BFD64 mgl@1371: +#endif mgl@1371: + mgl@1371: +#ifndef INLINE mgl@1371: +#if __GNUC__ >= 2 mgl@1371: +#define INLINE __inline__ mgl@1371: +#else mgl@1371: +#define INLINE mgl@1371: +#endif mgl@1371: +#endif mgl@1371: + mgl@1371: +/* Declaring a type wide enough to hold a host long and a host pointer. */ mgl@1371: +#define BFD_HOSTPTR_T unsigned long mgl@1371: +typedef BFD_HOSTPTR_T bfd_hostptr_t; mgl@1371: + mgl@1371: +/* Forward declaration. */ mgl@1371: +typedef struct bfd bfd; mgl@1371: + mgl@1371: +/* Boolean type used in bfd. Too many systems define their own mgl@1371: + versions of "boolean" for us to safely typedef a "boolean" of mgl@1371: + our own. Using an enum for "bfd_boolean" has its own set of mgl@1371: + problems, with strange looking casts required to avoid warnings mgl@1371: + on some older compilers. Thus we just use an int. mgl@1371: + mgl@1371: + General rule: Functions which are bfd_boolean return TRUE on mgl@1371: + success and FALSE on failure (unless they're a predicate). */ mgl@1371: + mgl@1371: +typedef int bfd_boolean; mgl@1371: +#undef FALSE mgl@1371: +#undef TRUE mgl@1371: +#define FALSE 0 mgl@1371: +#define TRUE 1 mgl@1371: + mgl@1371: +#ifdef BFD64 mgl@1371: + mgl@1371: +#ifndef BFD_HOST_64_BIT mgl@1371: + #error No 64 bit integer type available mgl@1371: +#endif /* ! defined (BFD_HOST_64_BIT) */ mgl@1371: + mgl@1371: +typedef BFD_HOST_U_64_BIT bfd_vma; mgl@1371: +typedef BFD_HOST_64_BIT bfd_signed_vma; mgl@1371: +typedef BFD_HOST_U_64_BIT bfd_size_type; mgl@1371: +typedef BFD_HOST_U_64_BIT symvalue; mgl@1371: + mgl@1371: +#ifndef fprintf_vma mgl@1371: +#if BFD_HOST_64BIT_LONG mgl@1371: +#define sprintf_vma(s,x) sprintf (s, "%016lx", x) mgl@1371: +#define fprintf_vma(f,x) fprintf (f, "%016lx", x) mgl@1371: +#elif BFD_HOST_64BIT_LONG_LONG mgl@1371: +#define sprintf_vma(s,x) sprintf (s, "%016llx", x) mgl@1371: +#define fprintf_vma(f,x) fprintf (f, "%016llx", x) mgl@1371: +#else mgl@1371: +#define _bfd_int64_low(x) ((unsigned long) (((x) & 0xffffffff))) mgl@1371: +#define _bfd_int64_high(x) ((unsigned long) (((x) >> 32) & 0xffffffff)) mgl@1371: +#define fprintf_vma(s,x) \ mgl@1371: + fprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x)) mgl@1371: +#define sprintf_vma(s,x) \ mgl@1371: + sprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x)) mgl@1371: +#endif mgl@1371: +#endif mgl@1371: + mgl@1371: +#else /* not BFD64 */ mgl@1371: + mgl@1371: +/* Represent a target address. Also used as a generic unsigned type mgl@1371: + which is guaranteed to be big enough to hold any arithmetic types mgl@1371: + we need to deal with. */ mgl@1371: +typedef unsigned long bfd_vma; mgl@1371: + mgl@1371: +/* A generic signed type which is guaranteed to be big enough to hold any mgl@1371: + arithmetic types we need to deal with. Can be assumed to be compatible mgl@1371: + with bfd_vma in the same way that signed and unsigned ints are compatible mgl@1371: + (as parameters, in assignment, etc). */ mgl@1371: +typedef long bfd_signed_vma; mgl@1371: + mgl@1371: +typedef unsigned long symvalue; mgl@1371: +typedef unsigned long bfd_size_type; mgl@1371: + mgl@1371: +/* Print a bfd_vma x on stream s. */ mgl@1371: +#define fprintf_vma(s,x) fprintf (s, "%08lx", x) mgl@1371: +#define sprintf_vma(s,x) sprintf (s, "%08lx", x) mgl@1371: + mgl@1371: +#endif /* not BFD64 */ mgl@1371: + mgl@1371: +#define HALF_BFD_SIZE_TYPE \ mgl@1371: + (((bfd_size_type) 1) << (8 * sizeof (bfd_size_type) / 2)) mgl@1371: + mgl@1371: +#ifndef BFD_HOST_64_BIT mgl@1371: +/* Fall back on a 32 bit type. The idea is to make these types always mgl@1371: + available for function return types, but in the case that mgl@1371: + BFD_HOST_64_BIT is undefined such a function should abort or mgl@1371: + otherwise signal an error. */ mgl@1371: +typedef bfd_signed_vma bfd_int64_t; mgl@1371: +typedef bfd_vma bfd_uint64_t; mgl@1371: +#endif mgl@1371: + mgl@1371: +/* An offset into a file. BFD always uses the largest possible offset mgl@1371: + based on the build time availability of fseek, fseeko, or fseeko64. */ mgl@1371: +typedef BFD_HOST_64_BIT file_ptr; mgl@1371: +typedef unsigned BFD_HOST_64_BIT ufile_ptr; mgl@1371: + mgl@1371: +extern void bfd_sprintf_vma (bfd *, char *, bfd_vma); mgl@1371: +extern void bfd_fprintf_vma (bfd *, void *, bfd_vma); mgl@1371: + mgl@1371: +#define printf_vma(x) fprintf_vma(stdout,x) mgl@1371: +#define bfd_printf_vma(abfd,x) bfd_fprintf_vma (abfd,stdout,x) mgl@1371: + mgl@1371: +typedef unsigned int flagword; /* 32 bits of flags */ mgl@1371: +typedef unsigned char bfd_byte; mgl@1371: + mgl@1371: +/* File formats. */ mgl@1371: + mgl@1371: +typedef enum bfd_format mgl@1371: +{ mgl@1371: + bfd_unknown = 0, /* File format is unknown. */ mgl@1371: + bfd_object, /* Linker/assembler/compiler output. */ mgl@1371: + bfd_archive, /* Object archive file. */ mgl@1371: + bfd_core, /* Core dump. */ mgl@1371: + bfd_type_end /* Marks the end; don't use it! */ mgl@1371: +} mgl@1371: +bfd_format; mgl@1371: + mgl@1371: +/* Values that may appear in the flags field of a BFD. These also mgl@1371: + appear in the object_flags field of the bfd_target structure, where mgl@1371: + they indicate the set of flags used by that backend (not all flags mgl@1371: + are meaningful for all object file formats) (FIXME: at the moment, mgl@1371: + the object_flags values have mostly just been copied from backend mgl@1371: + to another, and are not necessarily correct). */ mgl@1371: + mgl@1371: +/* No flags. */ mgl@1371: +#define BFD_NO_FLAGS 0x00 mgl@1371: + mgl@1371: +/* BFD contains relocation entries. */ mgl@1371: +#define HAS_RELOC 0x01 mgl@1371: + mgl@1371: +/* BFD is directly executable. */ mgl@1371: +#define EXEC_P 0x02 mgl@1371: + mgl@1371: +/* BFD has line number information (basically used for F_LNNO in a mgl@1371: + COFF header). */ mgl@1371: +#define HAS_LINENO 0x04 mgl@1371: + mgl@1371: +/* BFD has debugging information. */ mgl@1371: +#define HAS_DEBUG 0x08 mgl@1371: + mgl@1371: +/* BFD has symbols. */ mgl@1371: +#define HAS_SYMS 0x10 mgl@1371: + mgl@1371: +/* BFD has local symbols (basically used for F_LSYMS in a COFF mgl@1371: + header). */ mgl@1371: +#define HAS_LOCALS 0x20 mgl@1371: + mgl@1371: +/* BFD is a dynamic object. */ mgl@1371: +#define DYNAMIC 0x40 mgl@1371: + mgl@1371: +/* Text section is write protected (if D_PAGED is not set, this is mgl@1371: + like an a.out NMAGIC file) (the linker sets this by default, but mgl@1371: + clears it for -r or -N). */ mgl@1371: +#define WP_TEXT 0x80 mgl@1371: + mgl@1371: +/* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the mgl@1371: + linker sets this by default, but clears it for -r or -n or -N). */ mgl@1371: +#define D_PAGED 0x100 mgl@1371: + mgl@1371: +/* BFD is relaxable (this means that bfd_relax_section may be able to mgl@1371: + do something) (sometimes bfd_relax_section can do something even if mgl@1371: + this is not set). */ mgl@1371: +#define BFD_IS_RELAXABLE 0x200 mgl@1371: + mgl@1371: +/* This may be set before writing out a BFD to request using a mgl@1371: + traditional format. For example, this is used to request that when mgl@1371: + writing out an a.out object the symbols not be hashed to eliminate mgl@1371: + duplicates. */ mgl@1371: +#define BFD_TRADITIONAL_FORMAT 0x400 mgl@1371: + mgl@1371: +/* This flag indicates that the BFD contents are actually cached in mgl@1371: + memory. If this is set, iostream points to a bfd_in_memory struct. */ mgl@1371: +#define BFD_IN_MEMORY 0x800 mgl@1371: + mgl@1371: +/* The sections in this BFD specify a memory page. */ mgl@1371: +#define HAS_LOAD_PAGE 0x1000 mgl@1371: + mgl@1371: +/* This BFD has been created by the linker and doesn't correspond mgl@1371: + to any input file. */ mgl@1371: +#define BFD_LINKER_CREATED 0x2000 mgl@1371: + mgl@1371: +/* Symbols and relocation. */ mgl@1371: + mgl@1371: +/* A count of carsyms (canonical archive symbols). */ mgl@1371: +typedef unsigned long symindex; mgl@1371: + mgl@1371: +/* How to perform a relocation. */ mgl@1371: +typedef const struct reloc_howto_struct reloc_howto_type; mgl@1371: + mgl@1371: +#define BFD_NO_MORE_SYMBOLS ((symindex) ~0) mgl@1371: + mgl@1371: +/* General purpose part of a symbol X; mgl@1371: + target specific parts are in libcoff.h, libaout.h, etc. */ mgl@1371: + mgl@1371: +#define bfd_get_section(x) ((x)->section) mgl@1371: +#define bfd_get_output_section(x) ((x)->section->output_section) mgl@1371: +#define bfd_set_section(x,y) ((x)->section) = (y) mgl@1371: +#define bfd_asymbol_base(x) ((x)->section->vma) mgl@1371: +#define bfd_asymbol_value(x) (bfd_asymbol_base(x) + (x)->value) mgl@1371: +#define bfd_asymbol_name(x) ((x)->name) mgl@1371: +/*Perhaps future: #define bfd_asymbol_bfd(x) ((x)->section->owner)*/ mgl@1371: +#define bfd_asymbol_bfd(x) ((x)->the_bfd) mgl@1371: +#define bfd_asymbol_flavour(x) (bfd_asymbol_bfd(x)->xvec->flavour) mgl@1371: + mgl@1371: +/* A canonical archive symbol. */ mgl@1371: +/* This is a type pun with struct ranlib on purpose! */ mgl@1371: +typedef struct carsym mgl@1371: +{ mgl@1371: + char *name; mgl@1371: + file_ptr file_offset; /* Look here to find the file. */ mgl@1371: +} mgl@1371: +carsym; /* To make these you call a carsymogen. */ mgl@1371: + mgl@1371: +/* Used in generating armaps (archive tables of contents). mgl@1371: + Perhaps just a forward definition would do? */ mgl@1371: +struct orl /* Output ranlib. */ mgl@1371: +{ mgl@1371: + char **name; /* Symbol name. */ mgl@1371: + union mgl@1371: + { mgl@1371: + file_ptr pos; mgl@1371: + bfd *abfd; mgl@1371: + } u; /* bfd* or file position. */ mgl@1371: + int namidx; /* Index into string table. */ mgl@1371: +}; mgl@1371: + mgl@1371: +/* Linenumber stuff. */ mgl@1371: +typedef struct lineno_cache_entry mgl@1371: +{ mgl@1371: + unsigned int line_number; /* Linenumber from start of function. */ mgl@1371: + union mgl@1371: + { mgl@1371: + struct bfd_symbol *sym; /* Function name. */ mgl@1371: + bfd_vma offset; /* Offset into section. */ mgl@1371: + } u; mgl@1371: +} mgl@1371: +alent; mgl@1371: + mgl@1371: +/* Object and core file sections. */ mgl@1371: + mgl@1371: +#define align_power(addr, align) \ mgl@1371: + (((addr) + ((bfd_vma) 1 << (align)) - 1) & ((bfd_vma) -1 << (align))) mgl@1371: + mgl@1371: +typedef struct bfd_section *sec_ptr; mgl@1371: + mgl@1371: +#define bfd_get_section_name(bfd, ptr) ((ptr)->name + 0) mgl@1371: +#define bfd_get_section_vma(bfd, ptr) ((ptr)->vma + 0) mgl@1371: +#define bfd_get_section_lma(bfd, ptr) ((ptr)->lma + 0) mgl@1371: +#define bfd_get_section_alignment(bfd, ptr) ((ptr)->alignment_power + 0) mgl@1371: +#define bfd_section_name(bfd, ptr) ((ptr)->name) mgl@1371: +#define bfd_section_size(bfd, ptr) ((ptr)->size) mgl@1371: +#define bfd_get_section_size(ptr) ((ptr)->size) mgl@1371: +#define bfd_section_vma(bfd, ptr) ((ptr)->vma) mgl@1371: +#define bfd_section_lma(bfd, ptr) ((ptr)->lma) mgl@1371: +#define bfd_section_alignment(bfd, ptr) ((ptr)->alignment_power) mgl@1371: +#define bfd_get_section_flags(bfd, ptr) ((ptr)->flags + 0) mgl@1371: +#define bfd_get_section_userdata(bfd, ptr) ((ptr)->userdata) mgl@1371: + mgl@1371: +#define bfd_is_com_section(ptr) (((ptr)->flags & SEC_IS_COMMON) != 0) mgl@1371: + mgl@1371: +#define bfd_set_section_vma(bfd, ptr, val) (((ptr)->vma = (ptr)->lma = (val)), ((ptr)->user_set_vma = TRUE), TRUE) mgl@1371: +#define bfd_set_section_alignment(bfd, ptr, val) (((ptr)->alignment_power = (val)),TRUE) mgl@1371: +#define bfd_set_section_userdata(bfd, ptr, val) (((ptr)->userdata = (val)),TRUE) mgl@1371: +/* Find the address one past the end of SEC. */ mgl@1371: +#define bfd_get_section_limit(bfd, sec) \ mgl@1371: + (((sec)->rawsize ? (sec)->rawsize : (sec)->size) \ mgl@1371: + / bfd_octets_per_byte (bfd)) mgl@1371: + mgl@1371: +/* Return TRUE if section has been discarded. */ mgl@1371: +#define elf_discarded_section(sec) \ mgl@1371: + (!bfd_is_abs_section (sec) \ mgl@1371: + && bfd_is_abs_section ((sec)->output_section) \ mgl@1371: + && (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \ mgl@1371: + && (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS) mgl@1371: + mgl@1371: +/* Forward define. */ mgl@1371: +struct stat; mgl@1371: + mgl@1371: +typedef enum bfd_print_symbol mgl@1371: +{ mgl@1371: + bfd_print_symbol_name, mgl@1371: + bfd_print_symbol_more, mgl@1371: + bfd_print_symbol_all mgl@1371: +} bfd_print_symbol_type; mgl@1371: + mgl@1371: +/* Information about a symbol that nm needs. */ mgl@1371: + mgl@1371: +typedef struct _symbol_info mgl@1371: +{ mgl@1371: + symvalue value; mgl@1371: + char type; mgl@1371: + const char *name; /* Symbol name. */ mgl@1371: + unsigned char stab_type; /* Stab type. */ mgl@1371: + char stab_other; /* Stab other. */ mgl@1371: + short stab_desc; /* Stab desc. */ mgl@1371: + const char *stab_name; /* String for stab type. */ mgl@1371: +} symbol_info; mgl@1371: + mgl@1371: +/* Get the name of a stabs type code. */ mgl@1371: + mgl@1371: +extern const char *bfd_get_stab_name (int); mgl@1371: + mgl@1371: +/* Hash table routines. There is no way to free up a hash table. */ mgl@1371: + mgl@1371: +/* An element in the hash table. Most uses will actually use a larger mgl@1371: + structure, and an instance of this will be the first field. */ mgl@1371: + mgl@1371: +struct bfd_hash_entry mgl@1371: +{ mgl@1371: + /* Next entry for this hash code. */ mgl@1371: + struct bfd_hash_entry *next; mgl@1371: + /* String being hashed. */ mgl@1371: + const char *string; mgl@1371: + /* Hash code. This is the full hash code, not the index into the mgl@1371: + table. */ mgl@1371: + unsigned long hash; mgl@1371: +}; mgl@1371: + mgl@1371: +/* A hash table. */ mgl@1371: + mgl@1371: +struct bfd_hash_table mgl@1371: +{ mgl@1371: + /* The hash array. */ mgl@1371: + struct bfd_hash_entry **table; mgl@1371: + /* A function used to create new elements in the hash table. The mgl@1371: + first entry is itself a pointer to an element. When this mgl@1371: + function is first invoked, this pointer will be NULL. However, mgl@1371: + having the pointer permits a hierarchy of method functions to be mgl@1371: + built each of which calls the function in the superclass. Thus mgl@1371: + each function should be written to allocate a new block of memory mgl@1371: + only if the argument is NULL. */ mgl@1371: + struct bfd_hash_entry *(*newfunc) mgl@1371: + (struct bfd_hash_entry *, struct bfd_hash_table *, const char *); mgl@1371: + /* An objalloc for this hash table. This is a struct objalloc *, mgl@1371: + but we use void * to avoid requiring the inclusion of objalloc.h. */ mgl@1371: + void *memory; mgl@1371: + /* The number of slots in the hash table. */ mgl@1371: + unsigned int size; mgl@1371: + /* The number of entries in the hash table. */ mgl@1371: + unsigned int count; mgl@1371: + /* The size of elements. */ mgl@1371: + unsigned int entsize; mgl@1371: + /* If non-zero, don't grow the hash table. */ mgl@1371: + unsigned int frozen:1; mgl@1371: +}; mgl@1371: + mgl@1371: +/* Initialize a hash table. */ mgl@1371: +extern bfd_boolean bfd_hash_table_init mgl@1371: + (struct bfd_hash_table *, mgl@1371: + struct bfd_hash_entry *(*) (struct bfd_hash_entry *, mgl@1371: + struct bfd_hash_table *, mgl@1371: + const char *), mgl@1371: + unsigned int); mgl@1371: + mgl@1371: +/* Initialize a hash table specifying a size. */ mgl@1371: +extern bfd_boolean bfd_hash_table_init_n mgl@1371: + (struct bfd_hash_table *, mgl@1371: + struct bfd_hash_entry *(*) (struct bfd_hash_entry *, mgl@1371: + struct bfd_hash_table *, mgl@1371: + const char *), mgl@1371: + unsigned int, unsigned int); mgl@1371: + mgl@1371: +/* Free up a hash table. */ mgl@1371: +extern void bfd_hash_table_free mgl@1371: + (struct bfd_hash_table *); mgl@1371: + mgl@1371: +/* Look up a string in a hash table. If CREATE is TRUE, a new entry mgl@1371: + will be created for this string if one does not already exist. The mgl@1371: + COPY argument must be TRUE if this routine should copy the string mgl@1371: + into newly allocated memory when adding an entry. */ mgl@1371: +extern struct bfd_hash_entry *bfd_hash_lookup mgl@1371: + (struct bfd_hash_table *, const char *, bfd_boolean create, mgl@1371: + bfd_boolean copy); mgl@1371: + mgl@1371: +/* Replace an entry in a hash table. */ mgl@1371: +extern void bfd_hash_replace mgl@1371: + (struct bfd_hash_table *, struct bfd_hash_entry *old, mgl@1371: + struct bfd_hash_entry *nw); mgl@1371: + mgl@1371: +/* Base method for creating a hash table entry. */ mgl@1371: +extern struct bfd_hash_entry *bfd_hash_newfunc mgl@1371: + (struct bfd_hash_entry *, struct bfd_hash_table *, const char *); mgl@1371: + mgl@1371: +/* Grab some space for a hash table entry. */ mgl@1371: +extern void *bfd_hash_allocate mgl@1371: + (struct bfd_hash_table *, unsigned int); mgl@1371: + mgl@1371: +/* Traverse a hash table in a random order, calling a function on each mgl@1371: + element. If the function returns FALSE, the traversal stops. The mgl@1371: + INFO argument is passed to the function. */ mgl@1371: +extern void bfd_hash_traverse mgl@1371: + (struct bfd_hash_table *, mgl@1371: + bfd_boolean (*) (struct bfd_hash_entry *, void *), mgl@1371: + void *info); mgl@1371: + mgl@1371: +/* Allows the default size of a hash table to be configured. New hash mgl@1371: + tables allocated using bfd_hash_table_init will be created with mgl@1371: + this size. */ mgl@1371: +extern void bfd_hash_set_default_size (bfd_size_type); mgl@1371: + mgl@1371: +/* This structure is used to keep track of stabs in sections mgl@1371: + information while linking. */ mgl@1371: + mgl@1371: +struct stab_info mgl@1371: +{ mgl@1371: + /* A hash table used to hold stabs strings. */ mgl@1371: + struct bfd_strtab_hash *strings; mgl@1371: + /* The header file hash table. */ mgl@1371: + struct bfd_hash_table includes; mgl@1371: + /* The first .stabstr section. */ mgl@1371: + struct bfd_section *stabstr; mgl@1371: +}; mgl@1371: + mgl@1371: +#define COFF_SWAP_TABLE (void *) &bfd_coff_std_swap_table mgl@1371: + mgl@1371: +/* User program access to BFD facilities. */ mgl@1371: + mgl@1371: +/* Direct I/O routines, for programs which know more about the object mgl@1371: + file than BFD does. Use higher level routines if possible. */ mgl@1371: + mgl@1371: +extern bfd_size_type bfd_bread (void *, bfd_size_type, bfd *); mgl@1371: +extern bfd_size_type bfd_bwrite (const void *, bfd_size_type, bfd *); mgl@1371: +extern int bfd_seek (bfd *, file_ptr, int); mgl@1371: +extern file_ptr bfd_tell (bfd *); mgl@1371: +extern int bfd_flush (bfd *); mgl@1371: +extern int bfd_stat (bfd *, struct stat *); mgl@1371: + mgl@1371: +/* Deprecated old routines. */ mgl@1371: +#if __GNUC__ mgl@1371: +#define bfd_read(BUF, ELTSIZE, NITEMS, ABFD) \ mgl@1371: + (warn_deprecated ("bfd_read", __FILE__, __LINE__, __FUNCTION__), \ mgl@1371: + bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD))) mgl@1371: +#define bfd_write(BUF, ELTSIZE, NITEMS, ABFD) \ mgl@1371: + (warn_deprecated ("bfd_write", __FILE__, __LINE__, __FUNCTION__), \ mgl@1371: + bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD))) mgl@1371: +#else mgl@1371: +#define bfd_read(BUF, ELTSIZE, NITEMS, ABFD) \ mgl@1371: + (warn_deprecated ("bfd_read", (const char *) 0, 0, (const char *) 0), \ mgl@1371: + bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD))) mgl@1371: +#define bfd_write(BUF, ELTSIZE, NITEMS, ABFD) \ mgl@1371: + (warn_deprecated ("bfd_write", (const char *) 0, 0, (const char *) 0),\ mgl@1371: + bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD))) mgl@1371: +#endif mgl@1371: +extern void warn_deprecated (const char *, const char *, int, const char *); mgl@1371: + mgl@1371: +/* Cast from const char * to char * so that caller can assign to mgl@1371: + a char * without a warning. */ mgl@1371: +#define bfd_get_filename(abfd) ((char *) (abfd)->filename) mgl@1371: +#define bfd_get_cacheable(abfd) ((abfd)->cacheable) mgl@1371: +#define bfd_get_format(abfd) ((abfd)->format) mgl@1371: +#define bfd_get_target(abfd) ((abfd)->xvec->name) mgl@1371: +#define bfd_get_flavour(abfd) ((abfd)->xvec->flavour) mgl@1371: +#define bfd_family_coff(abfd) \ mgl@1371: + (bfd_get_flavour (abfd) == bfd_target_coff_flavour || \ mgl@1371: + bfd_get_flavour (abfd) == bfd_target_xcoff_flavour) mgl@1371: +#define bfd_big_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_BIG) mgl@1371: +#define bfd_little_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_LITTLE) mgl@1371: +#define bfd_header_big_endian(abfd) \ mgl@1371: + ((abfd)->xvec->header_byteorder == BFD_ENDIAN_BIG) mgl@1371: +#define bfd_header_little_endian(abfd) \ mgl@1371: + ((abfd)->xvec->header_byteorder == BFD_ENDIAN_LITTLE) mgl@1371: +#define bfd_get_file_flags(abfd) ((abfd)->flags) mgl@1371: +#define bfd_applicable_file_flags(abfd) ((abfd)->xvec->object_flags) mgl@1371: +#define bfd_applicable_section_flags(abfd) ((abfd)->xvec->section_flags) mgl@1371: +#define bfd_my_archive(abfd) ((abfd)->my_archive) mgl@1371: +#define bfd_has_map(abfd) ((abfd)->has_armap) mgl@1371: + mgl@1371: +#define bfd_valid_reloc_types(abfd) ((abfd)->xvec->valid_reloc_types) mgl@1371: +#define bfd_usrdata(abfd) ((abfd)->usrdata) mgl@1371: + mgl@1371: +#define bfd_get_start_address(abfd) ((abfd)->start_address) mgl@1371: +#define bfd_get_symcount(abfd) ((abfd)->symcount) mgl@1371: +#define bfd_get_outsymbols(abfd) ((abfd)->outsymbols) mgl@1371: +#define bfd_count_sections(abfd) ((abfd)->section_count) mgl@1371: + mgl@1371: +#define bfd_get_dynamic_symcount(abfd) ((abfd)->dynsymcount) mgl@1371: + mgl@1371: +#define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char) mgl@1371: + mgl@1371: +#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = bool), TRUE) mgl@1371: + mgl@1371: +extern bfd_boolean bfd_cache_close mgl@1371: + (bfd *abfd); mgl@1371: +/* NB: This declaration should match the autogenerated one in libbfd.h. */ mgl@1371: + mgl@1371: +extern bfd_boolean bfd_cache_close_all (void); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_record_phdr mgl@1371: + (bfd *, unsigned long, bfd_boolean, flagword, bfd_boolean, bfd_vma, mgl@1371: + bfd_boolean, bfd_boolean, unsigned int, struct bfd_section **); mgl@1371: + mgl@1371: +/* Byte swapping routines. */ mgl@1371: + mgl@1371: +bfd_uint64_t bfd_getb64 (const void *); mgl@1371: +bfd_uint64_t bfd_getl64 (const void *); mgl@1371: +bfd_int64_t bfd_getb_signed_64 (const void *); mgl@1371: +bfd_int64_t bfd_getl_signed_64 (const void *); mgl@1371: +bfd_vma bfd_getb32 (const void *); mgl@1371: +bfd_vma bfd_getl32 (const void *); mgl@1371: +bfd_signed_vma bfd_getb_signed_32 (const void *); mgl@1371: +bfd_signed_vma bfd_getl_signed_32 (const void *); mgl@1371: +bfd_vma bfd_getb16 (const void *); mgl@1371: +bfd_vma bfd_getl16 (const void *); mgl@1371: +bfd_signed_vma bfd_getb_signed_16 (const void *); mgl@1371: +bfd_signed_vma bfd_getl_signed_16 (const void *); mgl@1371: +void bfd_putb64 (bfd_uint64_t, void *); mgl@1371: +void bfd_putl64 (bfd_uint64_t, void *); mgl@1371: +void bfd_putb32 (bfd_vma, void *); mgl@1371: +void bfd_putl32 (bfd_vma, void *); mgl@1371: +void bfd_putb16 (bfd_vma, void *); mgl@1371: +void bfd_putl16 (bfd_vma, void *); mgl@1371: + mgl@1371: +/* Byte swapping routines which take size and endiannes as arguments. */ mgl@1371: + mgl@1371: +bfd_uint64_t bfd_get_bits (const void *, int, bfd_boolean); mgl@1371: +void bfd_put_bits (bfd_uint64_t, void *, int, bfd_boolean); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_section_already_linked_table_init (void); mgl@1371: +extern void bfd_section_already_linked_table_free (void); mgl@1371: + mgl@1371: +/* Externally visible ECOFF routines. */ mgl@1371: + mgl@1371: +#if defined(__STDC__) || defined(ALMOST_STDC) mgl@1371: +struct ecoff_debug_info; mgl@1371: +struct ecoff_debug_swap; mgl@1371: +struct ecoff_extr; mgl@1371: +struct bfd_symbol; mgl@1371: +struct bfd_link_info; mgl@1371: +struct bfd_link_hash_entry; mgl@1371: +struct bfd_elf_version_tree; mgl@1371: +#endif mgl@1371: +extern bfd_vma bfd_ecoff_get_gp_value mgl@1371: + (bfd * abfd); mgl@1371: +extern bfd_boolean bfd_ecoff_set_gp_value mgl@1371: + (bfd *abfd, bfd_vma gp_value); mgl@1371: +extern bfd_boolean bfd_ecoff_set_regmasks mgl@1371: + (bfd *abfd, unsigned long gprmask, unsigned long fprmask, mgl@1371: + unsigned long *cprmask); mgl@1371: +extern void *bfd_ecoff_debug_init mgl@1371: + (bfd *output_bfd, struct ecoff_debug_info *output_debug, mgl@1371: + const struct ecoff_debug_swap *output_swap, struct bfd_link_info *); mgl@1371: +extern void bfd_ecoff_debug_free mgl@1371: + (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug, mgl@1371: + const struct ecoff_debug_swap *output_swap, struct bfd_link_info *); mgl@1371: +extern bfd_boolean bfd_ecoff_debug_accumulate mgl@1371: + (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug, mgl@1371: + const struct ecoff_debug_swap *output_swap, bfd *input_bfd, mgl@1371: + struct ecoff_debug_info *input_debug, mgl@1371: + const struct ecoff_debug_swap *input_swap, struct bfd_link_info *); mgl@1371: +extern bfd_boolean bfd_ecoff_debug_accumulate_other mgl@1371: + (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug, mgl@1371: + const struct ecoff_debug_swap *output_swap, bfd *input_bfd, mgl@1371: + struct bfd_link_info *); mgl@1371: +extern bfd_boolean bfd_ecoff_debug_externals mgl@1371: + (bfd *abfd, struct ecoff_debug_info *debug, mgl@1371: + const struct ecoff_debug_swap *swap, bfd_boolean relocatable, mgl@1371: + bfd_boolean (*get_extr) (struct bfd_symbol *, struct ecoff_extr *), mgl@1371: + void (*set_index) (struct bfd_symbol *, bfd_size_type)); mgl@1371: +extern bfd_boolean bfd_ecoff_debug_one_external mgl@1371: + (bfd *abfd, struct ecoff_debug_info *debug, mgl@1371: + const struct ecoff_debug_swap *swap, const char *name, mgl@1371: + struct ecoff_extr *esym); mgl@1371: +extern bfd_size_type bfd_ecoff_debug_size mgl@1371: + (bfd *abfd, struct ecoff_debug_info *debug, mgl@1371: + const struct ecoff_debug_swap *swap); mgl@1371: +extern bfd_boolean bfd_ecoff_write_debug mgl@1371: + (bfd *abfd, struct ecoff_debug_info *debug, mgl@1371: + const struct ecoff_debug_swap *swap, file_ptr where); mgl@1371: +extern bfd_boolean bfd_ecoff_write_accumulated_debug mgl@1371: + (void *handle, bfd *abfd, struct ecoff_debug_info *debug, mgl@1371: + const struct ecoff_debug_swap *swap, mgl@1371: + struct bfd_link_info *info, file_ptr where); mgl@1371: + mgl@1371: +/* Externally visible ELF routines. */ mgl@1371: + mgl@1371: +struct bfd_link_needed_list mgl@1371: +{ mgl@1371: + struct bfd_link_needed_list *next; mgl@1371: + bfd *by; mgl@1371: + const char *name; mgl@1371: +}; mgl@1371: + mgl@1371: +enum dynamic_lib_link_class { mgl@1371: + DYN_NORMAL = 0, mgl@1371: + DYN_AS_NEEDED = 1, mgl@1371: + DYN_DT_NEEDED = 2, mgl@1371: + DYN_NO_ADD_NEEDED = 4, mgl@1371: + DYN_NO_NEEDED = 8 mgl@1371: +}; mgl@1371: + mgl@1371: +enum notice_asneeded_action { mgl@1371: + notice_as_needed, mgl@1371: + notice_not_needed, mgl@1371: + notice_needed mgl@1371: +}; mgl@1371: + mgl@1371: +extern bfd_boolean bfd_elf_record_link_assignment mgl@1371: + (bfd *, struct bfd_link_info *, const char *, bfd_boolean, mgl@1371: + bfd_boolean); mgl@1371: +extern struct bfd_link_needed_list *bfd_elf_get_needed_list mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern bfd_boolean bfd_elf_get_bfd_needed_list mgl@1371: + (bfd *, struct bfd_link_needed_list **); mgl@1371: +extern bfd_boolean bfd_elf_size_dynamic_sections mgl@1371: + (bfd *, const char *, const char *, const char *, const char * const *, mgl@1371: + struct bfd_link_info *, struct bfd_section **, mgl@1371: + struct bfd_elf_version_tree *); mgl@1371: +extern bfd_boolean bfd_elf_size_dynsym_hash_dynstr mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern void bfd_elf_set_dt_needed_name mgl@1371: + (bfd *, const char *); mgl@1371: +extern const char *bfd_elf_get_dt_soname mgl@1371: + (bfd *); mgl@1371: +extern void bfd_elf_set_dyn_lib_class mgl@1371: + (bfd *, enum dynamic_lib_link_class); mgl@1371: +extern int bfd_elf_get_dyn_lib_class mgl@1371: + (bfd *); mgl@1371: +extern struct bfd_link_needed_list *bfd_elf_get_runpath_list mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern bfd_boolean bfd_elf_discard_info mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern unsigned int _bfd_elf_default_action_discarded mgl@1371: + (struct bfd_section *); mgl@1371: + mgl@1371: +/* Return an upper bound on the number of bytes required to store a mgl@1371: + copy of ABFD's program header table entries. Return -1 if an error mgl@1371: + occurs; bfd_get_error will return an appropriate code. */ mgl@1371: +extern long bfd_get_elf_phdr_upper_bound mgl@1371: + (bfd *abfd); mgl@1371: + mgl@1371: +/* Copy ABFD's program header table entries to *PHDRS. The entries mgl@1371: + will be stored as an array of Elf_Internal_Phdr structures, as mgl@1371: + defined in include/elf/internal.h. To find out how large the mgl@1371: + buffer needs to be, call bfd_get_elf_phdr_upper_bound. mgl@1371: + mgl@1371: + Return the number of program header table entries read, or -1 if an mgl@1371: + error occurs; bfd_get_error will return an appropriate code. */ mgl@1371: +extern int bfd_get_elf_phdrs mgl@1371: + (bfd *abfd, void *phdrs); mgl@1371: + mgl@1371: +/* Create a new BFD as if by bfd_openr. Rather than opening a file, mgl@1371: + reconstruct an ELF file by reading the segments out of remote memory mgl@1371: + based on the ELF file header at EHDR_VMA and the ELF program headers it mgl@1371: + points to. If not null, *LOADBASEP is filled in with the difference mgl@1371: + between the VMAs from which the segments were read, and the VMAs the mgl@1371: + file headers (and hence BFD's idea of each section's VMA) put them at. mgl@1371: + mgl@1371: + The function TARGET_READ_MEMORY is called to copy LEN bytes from the mgl@1371: + remote memory at target address VMA into the local buffer at MYADDR; it mgl@1371: + should return zero on success or an `errno' code on failure. TEMPL must mgl@1371: + be a BFD for an ELF target with the word size and byte order found in mgl@1371: + the remote memory. */ mgl@1371: +extern bfd *bfd_elf_bfd_from_remote_memory mgl@1371: + (bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep, mgl@1371: + int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr, int len)); mgl@1371: + mgl@1371: +/* Return the arch_size field of an elf bfd, or -1 if not elf. */ mgl@1371: +extern int bfd_get_arch_size mgl@1371: + (bfd *); mgl@1371: + mgl@1371: +/* Return TRUE if address "naturally" sign extends, or -1 if not elf. */ mgl@1371: +extern int bfd_get_sign_extend_vma mgl@1371: + (bfd *); mgl@1371: + mgl@1371: +extern struct bfd_section *_bfd_elf_tls_setup mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +extern void _bfd_fix_excluded_sec_syms mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +extern unsigned bfd_m68k_mach_to_features (int); mgl@1371: + mgl@1371: +extern int bfd_m68k_features_to_mach (unsigned); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_m68k_elf32_create_embedded_relocs mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *, mgl@1371: + char **); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_bfin_elf32_create_embedded_relocs mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *, mgl@1371: + char **); mgl@1371: + mgl@1371: +/* SunOS shared library support routines for the linker. */ mgl@1371: + mgl@1371: +extern struct bfd_link_needed_list *bfd_sunos_get_needed_list mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern bfd_boolean bfd_sunos_record_link_assignment mgl@1371: + (bfd *, struct bfd_link_info *, const char *); mgl@1371: +extern bfd_boolean bfd_sunos_size_dynamic_sections mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_section **, mgl@1371: + struct bfd_section **, struct bfd_section **); mgl@1371: + mgl@1371: +/* Linux shared library support routines for the linker. */ mgl@1371: + mgl@1371: +extern bfd_boolean bfd_i386linux_size_dynamic_sections mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern bfd_boolean bfd_m68klinux_size_dynamic_sections mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern bfd_boolean bfd_sparclinux_size_dynamic_sections mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +/* mmap hacks */ mgl@1371: + mgl@1371: +struct _bfd_window_internal; mgl@1371: +typedef struct _bfd_window_internal bfd_window_internal; mgl@1371: + mgl@1371: +typedef struct _bfd_window mgl@1371: +{ mgl@1371: + /* What the user asked for. */ mgl@1371: + void *data; mgl@1371: + bfd_size_type size; mgl@1371: + /* The actual window used by BFD. Small user-requested read-only mgl@1371: + regions sharing a page may share a single window into the object mgl@1371: + file. Read-write versions shouldn't until I've fixed things to mgl@1371: + keep track of which portions have been claimed by the mgl@1371: + application; don't want to give the same region back when the mgl@1371: + application wants two writable copies! */ mgl@1371: + struct _bfd_window_internal *i; mgl@1371: +} mgl@1371: +bfd_window; mgl@1371: + mgl@1371: +extern void bfd_init_window mgl@1371: + (bfd_window *); mgl@1371: +extern void bfd_free_window mgl@1371: + (bfd_window *); mgl@1371: +extern bfd_boolean bfd_get_file_window mgl@1371: + (bfd *, file_ptr, bfd_size_type, bfd_window *, bfd_boolean); mgl@1371: + mgl@1371: +/* XCOFF support routines for the linker. */ mgl@1371: + mgl@1371: +extern bfd_boolean bfd_xcoff_link_record_set mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_size_type); mgl@1371: +extern bfd_boolean bfd_xcoff_import_symbol mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_vma, mgl@1371: + const char *, const char *, const char *, unsigned int); mgl@1371: +extern bfd_boolean bfd_xcoff_export_symbol mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *); mgl@1371: +extern bfd_boolean bfd_xcoff_link_count_reloc mgl@1371: + (bfd *, struct bfd_link_info *, const char *); mgl@1371: +extern bfd_boolean bfd_xcoff_record_link_assignment mgl@1371: + (bfd *, struct bfd_link_info *, const char *); mgl@1371: +extern bfd_boolean bfd_xcoff_size_dynamic_sections mgl@1371: + (bfd *, struct bfd_link_info *, const char *, const char *, mgl@1371: + unsigned long, unsigned long, unsigned long, bfd_boolean, mgl@1371: + int, bfd_boolean, bfd_boolean, struct bfd_section **, bfd_boolean); mgl@1371: +extern bfd_boolean bfd_xcoff_link_generate_rtinit mgl@1371: + (bfd *, const char *, const char *, bfd_boolean); mgl@1371: + mgl@1371: +/* XCOFF support routines for ar. */ mgl@1371: +extern bfd_boolean bfd_xcoff_ar_archive_set_magic mgl@1371: + (bfd *, char *); mgl@1371: + mgl@1371: +/* Externally visible COFF routines. */ mgl@1371: + mgl@1371: +#if defined(__STDC__) || defined(ALMOST_STDC) mgl@1371: +struct internal_syment; mgl@1371: +union internal_auxent; mgl@1371: +#endif mgl@1371: + mgl@1371: +extern bfd_boolean bfd_coff_get_syment mgl@1371: + (bfd *, struct bfd_symbol *, struct internal_syment *); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_coff_get_auxent mgl@1371: + (bfd *, struct bfd_symbol *, int, union internal_auxent *); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_coff_set_symbol_class mgl@1371: + (bfd *, struct bfd_symbol *, unsigned int); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_m68k_coff_create_embedded_relocs mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *, char **); mgl@1371: + mgl@1371: +/* ARM VFP11 erratum workaround support. */ mgl@1371: +typedef enum mgl@1371: +{ mgl@1371: + BFD_ARM_VFP11_FIX_DEFAULT, mgl@1371: + BFD_ARM_VFP11_FIX_NONE, mgl@1371: + BFD_ARM_VFP11_FIX_SCALAR, mgl@1371: + BFD_ARM_VFP11_FIX_VECTOR mgl@1371: +} bfd_arm_vfp11_fix; mgl@1371: + mgl@1371: +extern void bfd_elf32_arm_init_maps mgl@1371: + (bfd *); mgl@1371: + mgl@1371: +extern void bfd_elf32_arm_set_vfp11_fix mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_elf32_arm_vfp11_erratum_scan mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +extern void bfd_elf32_arm_vfp11_fix_veneer_locations mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +/* ARM Interworking support. Called from linker. */ mgl@1371: +extern bfd_boolean bfd_arm_allocate_interworking_sections mgl@1371: + (struct bfd_link_info *); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_arm_process_before_allocation mgl@1371: + (bfd *, struct bfd_link_info *, int); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_arm_get_bfd_for_interworking mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +/* PE ARM Interworking support. Called from linker. */ mgl@1371: +extern bfd_boolean bfd_arm_pe_allocate_interworking_sections mgl@1371: + (struct bfd_link_info *); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_arm_pe_process_before_allocation mgl@1371: + (bfd *, struct bfd_link_info *, int); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_arm_pe_get_bfd_for_interworking mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +/* ELF ARM Interworking support. Called from linker. */ mgl@1371: +extern bfd_boolean bfd_elf32_arm_allocate_interworking_sections mgl@1371: + (struct bfd_link_info *); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_elf32_arm_process_before_allocation mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +void bfd_elf32_arm_set_target_relocs mgl@1371: + (bfd *, struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix, mgl@1371: + int, int); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_elf32_arm_add_glue_sections_to_bfd mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +/* ELF ARM mapping symbol support */ mgl@1371: +#define BFD_ARM_SPECIAL_SYM_TYPE_MAP (1 << 0) mgl@1371: +#define BFD_ARM_SPECIAL_SYM_TYPE_TAG (1 << 1) mgl@1371: +#define BFD_ARM_SPECIAL_SYM_TYPE_OTHER (1 << 2) mgl@1371: +#define BFD_ARM_SPECIAL_SYM_TYPE_ANY (~0) mgl@1371: +extern bfd_boolean bfd_is_arm_special_symbol_name mgl@1371: + (const char * name, int type); mgl@1371: + mgl@1371: +extern void bfd_elf32_arm_set_byteswap_code (struct bfd_link_info *, int); mgl@1371: + mgl@1371: +/* ARM Note section processing. */ mgl@1371: +extern bfd_boolean bfd_arm_merge_machines mgl@1371: + (bfd *, bfd *); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_arm_update_notes mgl@1371: + (bfd *, const char *); mgl@1371: + mgl@1371: +extern unsigned int bfd_arm_get_mach_from_notes mgl@1371: + (bfd *, const char *); mgl@1371: + mgl@1371: +/* TI COFF load page support. */ mgl@1371: +extern void bfd_ticoff_set_section_load_page mgl@1371: + (struct bfd_section *, int); mgl@1371: + mgl@1371: +extern int bfd_ticoff_get_section_load_page mgl@1371: + (struct bfd_section *); mgl@1371: + mgl@1371: +/* H8/300 functions. */ mgl@1371: +extern bfd_vma bfd_h8300_pad_address mgl@1371: + (bfd *, bfd_vma); mgl@1371: + mgl@1371: +/* IA64 Itanium code generation. Called from linker. */ mgl@1371: +extern void bfd_elf32_ia64_after_parse mgl@1371: + (int); mgl@1371: + mgl@1371: +extern void bfd_elf64_ia64_after_parse mgl@1371: + (int); mgl@1371: + mgl@1371: +/* This structure is used for a comdat section, as in PE. A comdat mgl@1371: + section is associated with a particular symbol. When the linker mgl@1371: + sees a comdat section, it keeps only one of the sections with a mgl@1371: + given name and associated with a given symbol. */ mgl@1371: + mgl@1371: +struct coff_comdat_info mgl@1371: +{ mgl@1371: + /* The name of the symbol associated with a comdat section. */ mgl@1371: + const char *name; mgl@1371: + mgl@1371: + /* The local symbol table index of the symbol associated with a mgl@1371: + comdat section. This is only meaningful to the object file format mgl@1371: + specific code; it is not an index into the list returned by mgl@1371: + bfd_canonicalize_symtab. */ mgl@1371: + long symbol; mgl@1371: +}; mgl@1371: + mgl@1371: +extern struct coff_comdat_info *bfd_coff_get_comdat_section mgl@1371: + (bfd *, struct bfd_section *); mgl@1371: + mgl@1371: +/* Extracted from init.c. */ mgl@1371: +void bfd_init (void); mgl@1371: + mgl@1371: +/* Extracted from opncls.c. */ mgl@1371: +bfd *bfd_fopen (const char *filename, const char *target, mgl@1371: + const char *mode, int fd); mgl@1371: + mgl@1371: +bfd *bfd_openr (const char *filename, const char *target); mgl@1371: + mgl@1371: +bfd *bfd_fdopenr (const char *filename, const char *target, int fd); mgl@1371: + mgl@1371: +bfd *bfd_openstreamr (const char *, const char *, void *); mgl@1371: + mgl@1371: +bfd *bfd_openr_iovec (const char *filename, const char *target, mgl@1371: + void *(*open) (struct bfd *nbfd, mgl@1371: + void *open_closure), mgl@1371: + void *open_closure, mgl@1371: + file_ptr (*pread) (struct bfd *nbfd, mgl@1371: + void *stream, mgl@1371: + void *buf, mgl@1371: + file_ptr nbytes, mgl@1371: + file_ptr offset), mgl@1371: + int (*close) (struct bfd *nbfd, mgl@1371: + void *stream), mgl@1371: + int (*stat) (struct bfd *abfd, mgl@1371: + void *stream, mgl@1371: + struct stat *sb)); mgl@1371: + mgl@1371: +bfd *bfd_openw (const char *filename, const char *target); mgl@1371: + mgl@1371: +bfd_boolean bfd_close (bfd *abfd); mgl@1371: + mgl@1371: +bfd_boolean bfd_close_all_done (bfd *); mgl@1371: + mgl@1371: +bfd *bfd_create (const char *filename, bfd *templ); mgl@1371: + mgl@1371: +bfd_boolean bfd_make_writable (bfd *abfd); mgl@1371: + mgl@1371: +bfd_boolean bfd_make_readable (bfd *abfd); mgl@1371: + mgl@1371: +unsigned long bfd_calc_gnu_debuglink_crc32 mgl@1371: + (unsigned long crc, const unsigned char *buf, bfd_size_type len); mgl@1371: + mgl@1371: +char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir); mgl@1371: + mgl@1371: +struct bfd_section *bfd_create_gnu_debuglink_section mgl@1371: + (bfd *abfd, const char *filename); mgl@1371: + mgl@1371: +bfd_boolean bfd_fill_in_gnu_debuglink_section mgl@1371: + (bfd *abfd, struct bfd_section *sect, const char *filename); mgl@1371: + mgl@1371: +/* Extracted from libbfd.c. */ mgl@1371: + mgl@1371: +/* Byte swapping macros for user section data. */ mgl@1371: + mgl@1371: +#define bfd_put_8(abfd, val, ptr) \ mgl@1371: + ((void) (*((unsigned char *) (ptr)) = (val) & 0xff)) mgl@1371: +#define bfd_put_signed_8 \ mgl@1371: + bfd_put_8 mgl@1371: +#define bfd_get_8(abfd, ptr) \ mgl@1371: + (*(unsigned char *) (ptr) & 0xff) mgl@1371: +#define bfd_get_signed_8(abfd, ptr) \ mgl@1371: + (((*(unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80) mgl@1371: + mgl@1371: +#define bfd_put_16(abfd, val, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_putx16, ((val),(ptr))) mgl@1371: +#define bfd_put_signed_16 \ mgl@1371: + bfd_put_16 mgl@1371: +#define bfd_get_16(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_getx16, (ptr)) mgl@1371: +#define bfd_get_signed_16(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_getx_signed_16, (ptr)) mgl@1371: + mgl@1371: +#define bfd_put_32(abfd, val, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_putx32, ((val),(ptr))) mgl@1371: +#define bfd_put_signed_32 \ mgl@1371: + bfd_put_32 mgl@1371: +#define bfd_get_32(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_getx32, (ptr)) mgl@1371: +#define bfd_get_signed_32(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_getx_signed_32, (ptr)) mgl@1371: + mgl@1371: +#define bfd_put_64(abfd, val, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_putx64, ((val), (ptr))) mgl@1371: +#define bfd_put_signed_64 \ mgl@1371: + bfd_put_64 mgl@1371: +#define bfd_get_64(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_getx64, (ptr)) mgl@1371: +#define bfd_get_signed_64(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_getx_signed_64, (ptr)) mgl@1371: + mgl@1371: +#define bfd_get(bits, abfd, ptr) \ mgl@1371: + ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr) \ mgl@1371: + : (bits) == 16 ? bfd_get_16 (abfd, ptr) \ mgl@1371: + : (bits) == 32 ? bfd_get_32 (abfd, ptr) \ mgl@1371: + : (bits) == 64 ? bfd_get_64 (abfd, ptr) \ mgl@1371: + : (abort (), (bfd_vma) - 1)) mgl@1371: + mgl@1371: +#define bfd_put(bits, abfd, val, ptr) \ mgl@1371: + ((bits) == 8 ? bfd_put_8 (abfd, val, ptr) \ mgl@1371: + : (bits) == 16 ? bfd_put_16 (abfd, val, ptr) \ mgl@1371: + : (bits) == 32 ? bfd_put_32 (abfd, val, ptr) \ mgl@1371: + : (bits) == 64 ? bfd_put_64 (abfd, val, ptr) \ mgl@1371: + : (abort (), (void) 0)) mgl@1371: + mgl@1371: + mgl@1371: +/* Byte swapping macros for file header data. */ mgl@1371: + mgl@1371: +#define bfd_h_put_8(abfd, val, ptr) \ mgl@1371: + bfd_put_8 (abfd, val, ptr) mgl@1371: +#define bfd_h_put_signed_8(abfd, val, ptr) \ mgl@1371: + bfd_put_8 (abfd, val, ptr) mgl@1371: +#define bfd_h_get_8(abfd, ptr) \ mgl@1371: + bfd_get_8 (abfd, ptr) mgl@1371: +#define bfd_h_get_signed_8(abfd, ptr) \ mgl@1371: + bfd_get_signed_8 (abfd, ptr) mgl@1371: + mgl@1371: +#define bfd_h_put_16(abfd, val, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_putx16, (val, ptr)) mgl@1371: +#define bfd_h_put_signed_16 \ mgl@1371: + bfd_h_put_16 mgl@1371: +#define bfd_h_get_16(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_getx16, (ptr)) mgl@1371: +#define bfd_h_get_signed_16(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_getx_signed_16, (ptr)) mgl@1371: + mgl@1371: +#define bfd_h_put_32(abfd, val, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_putx32, (val, ptr)) mgl@1371: +#define bfd_h_put_signed_32 \ mgl@1371: + bfd_h_put_32 mgl@1371: +#define bfd_h_get_32(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_getx32, (ptr)) mgl@1371: +#define bfd_h_get_signed_32(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_getx_signed_32, (ptr)) mgl@1371: + mgl@1371: +#define bfd_h_put_64(abfd, val, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_putx64, (val, ptr)) mgl@1371: +#define bfd_h_put_signed_64 \ mgl@1371: + bfd_h_put_64 mgl@1371: +#define bfd_h_get_64(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_getx64, (ptr)) mgl@1371: +#define bfd_h_get_signed_64(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_getx_signed_64, (ptr)) mgl@1371: + mgl@1371: +/* Aliases for the above, which should eventually go away. */ mgl@1371: + mgl@1371: +#define H_PUT_64 bfd_h_put_64 mgl@1371: +#define H_PUT_32 bfd_h_put_32 mgl@1371: +#define H_PUT_16 bfd_h_put_16 mgl@1371: +#define H_PUT_8 bfd_h_put_8 mgl@1371: +#define H_PUT_S64 bfd_h_put_signed_64 mgl@1371: +#define H_PUT_S32 bfd_h_put_signed_32 mgl@1371: +#define H_PUT_S16 bfd_h_put_signed_16 mgl@1371: +#define H_PUT_S8 bfd_h_put_signed_8 mgl@1371: +#define H_GET_64 bfd_h_get_64 mgl@1371: +#define H_GET_32 bfd_h_get_32 mgl@1371: +#define H_GET_16 bfd_h_get_16 mgl@1371: +#define H_GET_8 bfd_h_get_8 mgl@1371: +#define H_GET_S64 bfd_h_get_signed_64 mgl@1371: +#define H_GET_S32 bfd_h_get_signed_32 mgl@1371: +#define H_GET_S16 bfd_h_get_signed_16 mgl@1371: +#define H_GET_S8 bfd_h_get_signed_8 mgl@1371: + mgl@1371: + mgl@1371: +/* Extracted from bfdio.c. */ mgl@1371: +long bfd_get_mtime (bfd *abfd); mgl@1371: + mgl@1371: +file_ptr bfd_get_size (bfd *abfd); mgl@1371: + mgl@1371: +/* Extracted from bfdwin.c. */ mgl@1371: +/* Extracted from section.c. */ mgl@1371: +typedef struct bfd_section mgl@1371: +{ mgl@1371: + /* The name of the section; the name isn't a copy, the pointer is mgl@1371: + the same as that passed to bfd_make_section. */ mgl@1371: + const char *name; mgl@1371: + mgl@1371: + /* A unique sequence number. */ mgl@1371: + int id; mgl@1371: + mgl@1371: + /* Which section in the bfd; 0..n-1 as sections are created in a bfd. */ mgl@1371: + int index; mgl@1371: + mgl@1371: + /* The next section in the list belonging to the BFD, or NULL. */ mgl@1371: + struct bfd_section *next; mgl@1371: + mgl@1371: + /* The previous section in the list belonging to the BFD, or NULL. */ mgl@1371: + struct bfd_section *prev; mgl@1371: + mgl@1371: + /* The field flags contains attributes of the section. Some mgl@1371: + flags are read in from the object file, and some are mgl@1371: + synthesized from other information. */ mgl@1371: + flagword flags; mgl@1371: + mgl@1371: +#define SEC_NO_FLAGS 0x000 mgl@1371: + mgl@1371: + /* Tells the OS to allocate space for this section when loading. mgl@1371: + This is clear for a section containing debug information only. */ mgl@1371: +#define SEC_ALLOC 0x001 mgl@1371: + mgl@1371: + /* Tells the OS to load the section from the file when loading. mgl@1371: + This is clear for a .bss section. */ mgl@1371: +#define SEC_LOAD 0x002 mgl@1371: + mgl@1371: + /* The section contains data still to be relocated, so there is mgl@1371: + some relocation information too. */ mgl@1371: +#define SEC_RELOC 0x004 mgl@1371: + mgl@1371: + /* A signal to the OS that the section contains read only data. */ mgl@1371: +#define SEC_READONLY 0x008 mgl@1371: + mgl@1371: + /* The section contains code only. */ mgl@1371: +#define SEC_CODE 0x010 mgl@1371: + mgl@1371: + /* The section contains data only. */ mgl@1371: +#define SEC_DATA 0x020 mgl@1371: + mgl@1371: + /* The section will reside in ROM. */ mgl@1371: +#define SEC_ROM 0x040 mgl@1371: + mgl@1371: + /* The section contains constructor information. This section mgl@1371: + type is used by the linker to create lists of constructors and mgl@1371: + destructors used by <>. When a back end sees a symbol mgl@1371: + which should be used in a constructor list, it creates a new mgl@1371: + section for the type of name (e.g., <<__CTOR_LIST__>>), attaches mgl@1371: + the symbol to it, and builds a relocation. To build the lists mgl@1371: + of constructors, all the linker has to do is catenate all the mgl@1371: + sections called <<__CTOR_LIST__>> and relocate the data mgl@1371: + contained within - exactly the operations it would peform on mgl@1371: + standard data. */ mgl@1371: +#define SEC_CONSTRUCTOR 0x080 mgl@1371: + mgl@1371: + /* The section has contents - a data section could be mgl@1371: + <> | <>; a debug section could be mgl@1371: + <> */ mgl@1371: +#define SEC_HAS_CONTENTS 0x100 mgl@1371: + mgl@1371: + /* An instruction to the linker to not output the section mgl@1371: + even if it has information which would normally be written. */ mgl@1371: +#define SEC_NEVER_LOAD 0x200 mgl@1371: + mgl@1371: + /* The section contains thread local data. */ mgl@1371: +#define SEC_THREAD_LOCAL 0x400 mgl@1371: + mgl@1371: + /* The section has GOT references. This flag is only for the mgl@1371: + linker, and is currently only used by the elf32-hppa back end. mgl@1371: + It will be set if global offset table references were detected mgl@1371: + in this section, which indicate to the linker that the section mgl@1371: + contains PIC code, and must be handled specially when doing a mgl@1371: + static link. */ mgl@1371: +#define SEC_HAS_GOT_REF 0x800 mgl@1371: + mgl@1371: + /* The section contains common symbols (symbols may be defined mgl@1371: + multiple times, the value of a symbol is the amount of mgl@1371: + space it requires, and the largest symbol value is the one mgl@1371: + used). Most targets have exactly one of these (which we mgl@1371: + translate to bfd_com_section_ptr), but ECOFF has two. */ mgl@1371: +#define SEC_IS_COMMON 0x1000 mgl@1371: + mgl@1371: + /* The section contains only debugging information. For mgl@1371: + example, this is set for ELF .debug and .stab sections. mgl@1371: + strip tests this flag to see if a section can be mgl@1371: + discarded. */ mgl@1371: +#define SEC_DEBUGGING 0x2000 mgl@1371: + mgl@1371: + /* The contents of this section are held in memory pointed to mgl@1371: + by the contents field. This is checked by bfd_get_section_contents, mgl@1371: + and the data is retrieved from memory if appropriate. */ mgl@1371: +#define SEC_IN_MEMORY 0x4000 mgl@1371: + mgl@1371: + /* The contents of this section are to be excluded by the mgl@1371: + linker for executable and shared objects unless those mgl@1371: + objects are to be further relocated. */ mgl@1371: +#define SEC_EXCLUDE 0x8000 mgl@1371: + mgl@1371: + /* The contents of this section are to be sorted based on the sum of mgl@1371: + the symbol and addend values specified by the associated relocation mgl@1371: + entries. Entries without associated relocation entries will be mgl@1371: + appended to the end of the section in an unspecified order. */ mgl@1371: +#define SEC_SORT_ENTRIES 0x10000 mgl@1371: + mgl@1371: + /* When linking, duplicate sections of the same name should be mgl@1371: + discarded, rather than being combined into a single section as mgl@1371: + is usually done. This is similar to how common symbols are mgl@1371: + handled. See SEC_LINK_DUPLICATES below. */ mgl@1371: +#define SEC_LINK_ONCE 0x20000 mgl@1371: + mgl@1371: + /* If SEC_LINK_ONCE is set, this bitfield describes how the linker mgl@1371: + should handle duplicate sections. */ mgl@1371: +#define SEC_LINK_DUPLICATES 0x40000 mgl@1371: + mgl@1371: + /* This value for SEC_LINK_DUPLICATES means that duplicate mgl@1371: + sections with the same name should simply be discarded. */ mgl@1371: +#define SEC_LINK_DUPLICATES_DISCARD 0x0 mgl@1371: + mgl@1371: + /* This value for SEC_LINK_DUPLICATES means that the linker mgl@1371: + should warn if there are any duplicate sections, although mgl@1371: + it should still only link one copy. */ mgl@1371: +#define SEC_LINK_DUPLICATES_ONE_ONLY 0x80000 mgl@1371: + mgl@1371: + /* This value for SEC_LINK_DUPLICATES means that the linker mgl@1371: + should warn if any duplicate sections are a different size. */ mgl@1371: +#define SEC_LINK_DUPLICATES_SAME_SIZE 0x100000 mgl@1371: + mgl@1371: + /* This value for SEC_LINK_DUPLICATES means that the linker mgl@1371: + should warn if any duplicate sections contain different mgl@1371: + contents. */ mgl@1371: +#define SEC_LINK_DUPLICATES_SAME_CONTENTS \ mgl@1371: + (SEC_LINK_DUPLICATES_ONE_ONLY | SEC_LINK_DUPLICATES_SAME_SIZE) mgl@1371: + mgl@1371: + /* This section was created by the linker as part of dynamic mgl@1371: + relocation or other arcane processing. It is skipped when mgl@1371: + going through the first-pass output, trusting that someone mgl@1371: + else up the line will take care of it later. */ mgl@1371: +#define SEC_LINKER_CREATED 0x200000 mgl@1371: + mgl@1371: + /* This section should not be subject to garbage collection. mgl@1371: + Also set to inform the linker that this section should not be mgl@1371: + listed in the link map as discarded. */ mgl@1371: +#define SEC_KEEP 0x400000 mgl@1371: + mgl@1371: + /* This section contains "short" data, and should be placed mgl@1371: + "near" the GP. */ mgl@1371: +#define SEC_SMALL_DATA 0x800000 mgl@1371: + mgl@1371: + /* Attempt to merge identical entities in the section. mgl@1371: + Entity size is given in the entsize field. */ mgl@1371: +#define SEC_MERGE 0x1000000 mgl@1371: + mgl@1371: + /* If given with SEC_MERGE, entities to merge are zero terminated mgl@1371: + strings where entsize specifies character size instead of fixed mgl@1371: + size entries. */ mgl@1371: +#define SEC_STRINGS 0x2000000 mgl@1371: + mgl@1371: + /* This section contains data about section groups. */ mgl@1371: +#define SEC_GROUP 0x4000000 mgl@1371: + mgl@1371: + /* The section is a COFF shared library section. This flag is mgl@1371: + only for the linker. If this type of section appears in mgl@1371: + the input file, the linker must copy it to the output file mgl@1371: + without changing the vma or size. FIXME: Although this mgl@1371: + was originally intended to be general, it really is COFF mgl@1371: + specific (and the flag was renamed to indicate this). It mgl@1371: + might be cleaner to have some more general mechanism to mgl@1371: + allow the back end to control what the linker does with mgl@1371: + sections. */ mgl@1371: +#define SEC_COFF_SHARED_LIBRARY 0x10000000 mgl@1371: + mgl@1371: + /* This section contains data which may be shared with other mgl@1371: + executables or shared objects. This is for COFF only. */ mgl@1371: +#define SEC_COFF_SHARED 0x20000000 mgl@1371: + mgl@1371: + /* When a section with this flag is being linked, then if the size of mgl@1371: + the input section is less than a page, it should not cross a page mgl@1371: + boundary. If the size of the input section is one page or more, mgl@1371: + it should be aligned on a page boundary. This is for TI mgl@1371: + TMS320C54X only. */ mgl@1371: +#define SEC_TIC54X_BLOCK 0x40000000 mgl@1371: + mgl@1371: + /* Conditionally link this section; do not link if there are no mgl@1371: + references found to any symbol in the section. This is for TI mgl@1371: + TMS320C54X only. */ mgl@1371: +#define SEC_TIC54X_CLINK 0x80000000 mgl@1371: + mgl@1371: + /* End of section flags. */ mgl@1371: + mgl@1371: + /* Some internal packed boolean fields. */ mgl@1371: + mgl@1371: + /* See the vma field. */ mgl@1371: + unsigned int user_set_vma : 1; mgl@1371: + mgl@1371: + /* A mark flag used by some of the linker backends. */ mgl@1371: + unsigned int linker_mark : 1; mgl@1371: + mgl@1371: + /* Another mark flag used by some of the linker backends. Set for mgl@1371: + output sections that have an input section. */ mgl@1371: + unsigned int linker_has_input : 1; mgl@1371: + mgl@1371: + /* Mark flags used by some linker backends for garbage collection. */ mgl@1371: + unsigned int gc_mark : 1; mgl@1371: + unsigned int gc_mark_from_eh : 1; mgl@1371: + mgl@1371: + /* The following flags are used by the ELF linker. */ mgl@1371: + mgl@1371: + /* Mark sections which have been allocated to segments. */ mgl@1371: + unsigned int segment_mark : 1; mgl@1371: + mgl@1371: + /* Type of sec_info information. */ mgl@1371: + unsigned int sec_info_type:3; mgl@1371: +#define ELF_INFO_TYPE_NONE 0 mgl@1371: +#define ELF_INFO_TYPE_STABS 1 mgl@1371: +#define ELF_INFO_TYPE_MERGE 2 mgl@1371: +#define ELF_INFO_TYPE_EH_FRAME 3 mgl@1371: +#define ELF_INFO_TYPE_JUST_SYMS 4 mgl@1371: + mgl@1371: + /* Nonzero if this section uses RELA relocations, rather than REL. */ mgl@1371: + unsigned int use_rela_p:1; mgl@1371: + mgl@1371: + /* Bits used by various backends. The generic code doesn't touch mgl@1371: + these fields. */ mgl@1371: + mgl@1371: + /* Nonzero if this section has TLS related relocations. */ mgl@1371: + unsigned int has_tls_reloc:1; mgl@1371: + mgl@1371: + /* Nonzero if this section has a gp reloc. */ mgl@1371: + unsigned int has_gp_reloc:1; mgl@1371: + mgl@1371: + /* Nonzero if this section needs the relax finalize pass. */ mgl@1371: + unsigned int need_finalize_relax:1; mgl@1371: + mgl@1371: + /* Whether relocations have been processed. */ mgl@1371: + unsigned int reloc_done : 1; mgl@1371: + mgl@1371: + /* End of internal packed boolean fields. */ mgl@1371: + mgl@1371: + /* The virtual memory address of the section - where it will be mgl@1371: + at run time. The symbols are relocated against this. The mgl@1371: + user_set_vma flag is maintained by bfd; if it's not set, the mgl@1371: + backend can assign addresses (for example, in <>, where mgl@1371: + the default address for <<.data>> is dependent on the specific mgl@1371: + target and various flags). */ mgl@1371: + bfd_vma vma; mgl@1371: + mgl@1371: + /* The load address of the section - where it would be in a mgl@1371: + rom image; really only used for writing section header mgl@1371: + information. */ mgl@1371: + bfd_vma lma; mgl@1371: + mgl@1371: + /* The size of the section in octets, as it will be output. mgl@1371: + Contains a value even if the section has no contents (e.g., the mgl@1371: + size of <<.bss>>). */ mgl@1371: + bfd_size_type size; mgl@1371: + mgl@1371: + /* For input sections, the original size on disk of the section, in mgl@1371: + octets. This field is used by the linker relaxation code. It is mgl@1371: + currently only set for sections where the linker relaxation scheme mgl@1371: + doesn't cache altered section and reloc contents (stabs, eh_frame, mgl@1371: + SEC_MERGE, some coff relaxing targets), and thus the original size mgl@1371: + needs to be kept to read the section multiple times. mgl@1371: + For output sections, rawsize holds the section size calculated on mgl@1371: + a previous linker relaxation pass. */ mgl@1371: + bfd_size_type rawsize; mgl@1371: + mgl@1371: + /* If this section is going to be output, then this value is the mgl@1371: + offset in *bytes* into the output section of the first byte in the mgl@1371: + input section (byte ==> smallest addressable unit on the mgl@1371: + target). In most cases, if this was going to start at the mgl@1371: + 100th octet (8-bit quantity) in the output section, this value mgl@1371: + would be 100. However, if the target byte size is 16 bits mgl@1371: + (bfd_octets_per_byte is "2"), this value would be 50. */ mgl@1371: + bfd_vma output_offset; mgl@1371: + mgl@1371: + /* The output section through which to map on output. */ mgl@1371: + struct bfd_section *output_section; mgl@1371: + mgl@1371: + /* The alignment requirement of the section, as an exponent of 2 - mgl@1371: + e.g., 3 aligns to 2^3 (or 8). */ mgl@1371: + unsigned int alignment_power; mgl@1371: + mgl@1371: + /* If an input section, a pointer to a vector of relocation mgl@1371: + records for the data in this section. */ mgl@1371: + struct reloc_cache_entry *relocation; mgl@1371: + mgl@1371: + /* If an output section, a pointer to a vector of pointers to mgl@1371: + relocation records for the data in this section. */ mgl@1371: + struct reloc_cache_entry **orelocation; mgl@1371: + mgl@1371: + /* The number of relocation records in one of the above. */ mgl@1371: + unsigned reloc_count; mgl@1371: + mgl@1371: + /* Information below is back end specific - and not always used mgl@1371: + or updated. */ mgl@1371: + mgl@1371: + /* File position of section data. */ mgl@1371: + file_ptr filepos; mgl@1371: + mgl@1371: + /* File position of relocation info. */ mgl@1371: + file_ptr rel_filepos; mgl@1371: + mgl@1371: + /* File position of line data. */ mgl@1371: + file_ptr line_filepos; mgl@1371: + mgl@1371: + /* Pointer to data for applications. */ mgl@1371: + void *userdata; mgl@1371: + mgl@1371: + /* If the SEC_IN_MEMORY flag is set, this points to the actual mgl@1371: + contents. */ mgl@1371: + unsigned char *contents; mgl@1371: + mgl@1371: + /* Attached line number information. */ mgl@1371: + alent *lineno; mgl@1371: + mgl@1371: + /* Number of line number records. */ mgl@1371: + unsigned int lineno_count; mgl@1371: + mgl@1371: + /* Entity size for merging purposes. */ mgl@1371: + unsigned int entsize; mgl@1371: + mgl@1371: + /* Points to the kept section if this section is a link-once section, mgl@1371: + and is discarded. */ mgl@1371: + struct bfd_section *kept_section; mgl@1371: + mgl@1371: + /* When a section is being output, this value changes as more mgl@1371: + linenumbers are written out. */ mgl@1371: + file_ptr moving_line_filepos; mgl@1371: + mgl@1371: + /* What the section number is in the target world. */ mgl@1371: + int target_index; mgl@1371: + mgl@1371: + void *used_by_bfd; mgl@1371: + mgl@1371: + /* If this is a constructor section then here is a list of the mgl@1371: + relocations created to relocate items within it. */ mgl@1371: + struct relent_chain *constructor_chain; mgl@1371: + mgl@1371: + /* The BFD which owns the section. */ mgl@1371: + bfd *owner; mgl@1371: + mgl@1371: + /* A symbol which points at this section only. */ mgl@1371: + struct bfd_symbol *symbol; mgl@1371: + struct bfd_symbol **symbol_ptr_ptr; mgl@1371: + mgl@1371: + /* Early in the link process, map_head and map_tail are used to build mgl@1371: + a list of input sections attached to an output section. Later, mgl@1371: + output sections use these fields for a list of bfd_link_order mgl@1371: + structs. */ mgl@1371: + union { mgl@1371: + struct bfd_link_order *link_order; mgl@1371: + struct bfd_section *s; mgl@1371: + } map_head, map_tail; mgl@1371: +} asection; mgl@1371: + mgl@1371: +/* These sections are global, and are managed by BFD. The application mgl@1371: + and target back end are not permitted to change the values in mgl@1371: + these sections. New code should use the section_ptr macros rather mgl@1371: + than referring directly to the const sections. The const sections mgl@1371: + may eventually vanish. */ mgl@1371: +#define BFD_ABS_SECTION_NAME "*ABS*" mgl@1371: +#define BFD_UND_SECTION_NAME "*UND*" mgl@1371: +#define BFD_COM_SECTION_NAME "*COM*" mgl@1371: +#define BFD_IND_SECTION_NAME "*IND*" mgl@1371: + mgl@1371: +/* The absolute section. */ mgl@1371: +extern asection bfd_abs_section; mgl@1371: +#define bfd_abs_section_ptr ((asection *) &bfd_abs_section) mgl@1371: +#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr) mgl@1371: +/* Pointer to the undefined section. */ mgl@1371: +extern asection bfd_und_section; mgl@1371: +#define bfd_und_section_ptr ((asection *) &bfd_und_section) mgl@1371: +#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr) mgl@1371: +/* Pointer to the common section. */ mgl@1371: +extern asection bfd_com_section; mgl@1371: +#define bfd_com_section_ptr ((asection *) &bfd_com_section) mgl@1371: +/* Pointer to the indirect section. */ mgl@1371: +extern asection bfd_ind_section; mgl@1371: +#define bfd_ind_section_ptr ((asection *) &bfd_ind_section) mgl@1371: +#define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr) mgl@1371: + mgl@1371: +#define bfd_is_const_section(SEC) \ mgl@1371: + ( ((SEC) == bfd_abs_section_ptr) \ mgl@1371: + || ((SEC) == bfd_und_section_ptr) \ mgl@1371: + || ((SEC) == bfd_com_section_ptr) \ mgl@1371: + || ((SEC) == bfd_ind_section_ptr)) mgl@1371: + mgl@1371: +/* Macros to handle insertion and deletion of a bfd's sections. These mgl@1371: + only handle the list pointers, ie. do not adjust section_count, mgl@1371: + target_index etc. */ mgl@1371: +#define bfd_section_list_remove(ABFD, S) \ mgl@1371: + do \ mgl@1371: + { \ mgl@1371: + asection *_s = S; \ mgl@1371: + asection *_next = _s->next; \ mgl@1371: + asection *_prev = _s->prev; \ mgl@1371: + if (_prev) \ mgl@1371: + _prev->next = _next; \ mgl@1371: + else \ mgl@1371: + (ABFD)->sections = _next; \ mgl@1371: + if (_next) \ mgl@1371: + _next->prev = _prev; \ mgl@1371: + else \ mgl@1371: + (ABFD)->section_last = _prev; \ mgl@1371: + } \ mgl@1371: + while (0) mgl@1371: +#define bfd_section_list_append(ABFD, S) \ mgl@1371: + do \ mgl@1371: + { \ mgl@1371: + asection *_s = S; \ mgl@1371: + bfd *_abfd = ABFD; \ mgl@1371: + _s->next = NULL; \ mgl@1371: + if (_abfd->section_last) \ mgl@1371: + { \ mgl@1371: + _s->prev = _abfd->section_last; \ mgl@1371: + _abfd->section_last->next = _s; \ mgl@1371: + } \ mgl@1371: + else \ mgl@1371: + { \ mgl@1371: + _s->prev = NULL; \ mgl@1371: + _abfd->sections = _s; \ mgl@1371: + } \ mgl@1371: + _abfd->section_last = _s; \ mgl@1371: + } \ mgl@1371: + while (0) mgl@1371: +#define bfd_section_list_prepend(ABFD, S) \ mgl@1371: + do \ mgl@1371: + { \ mgl@1371: + asection *_s = S; \ mgl@1371: + bfd *_abfd = ABFD; \ mgl@1371: + _s->prev = NULL; \ mgl@1371: + if (_abfd->sections) \ mgl@1371: + { \ mgl@1371: + _s->next = _abfd->sections; \ mgl@1371: + _abfd->sections->prev = _s; \ mgl@1371: + } \ mgl@1371: + else \ mgl@1371: + { \ mgl@1371: + _s->next = NULL; \ mgl@1371: + _abfd->section_last = _s; \ mgl@1371: + } \ mgl@1371: + _abfd->sections = _s; \ mgl@1371: + } \ mgl@1371: + while (0) mgl@1371: +#define bfd_section_list_insert_after(ABFD, A, S) \ mgl@1371: + do \ mgl@1371: + { \ mgl@1371: + asection *_a = A; \ mgl@1371: + asection *_s = S; \ mgl@1371: + asection *_next = _a->next; \ mgl@1371: + _s->next = _next; \ mgl@1371: + _s->prev = _a; \ mgl@1371: + _a->next = _s; \ mgl@1371: + if (_next) \ mgl@1371: + _next->prev = _s; \ mgl@1371: + else \ mgl@1371: + (ABFD)->section_last = _s; \ mgl@1371: + } \ mgl@1371: + while (0) mgl@1371: +#define bfd_section_list_insert_before(ABFD, B, S) \ mgl@1371: + do \ mgl@1371: + { \ mgl@1371: + asection *_b = B; \ mgl@1371: + asection *_s = S; \ mgl@1371: + asection *_prev = _b->prev; \ mgl@1371: + _s->prev = _prev; \ mgl@1371: + _s->next = _b; \ mgl@1371: + _b->prev = _s; \ mgl@1371: + if (_prev) \ mgl@1371: + _prev->next = _s; \ mgl@1371: + else \ mgl@1371: + (ABFD)->sections = _s; \ mgl@1371: + } \ mgl@1371: + while (0) mgl@1371: +#define bfd_section_removed_from_list(ABFD, S) \ mgl@1371: + ((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S)) mgl@1371: + mgl@1371: +#define BFD_FAKE_SECTION(SEC, FLAGS, SYM, NAME, IDX) \ mgl@1371: + /* name, id, index, next, prev, flags, user_set_vma, */ \ mgl@1371: + { NAME, IDX, 0, NULL, NULL, FLAGS, 0, \ mgl@1371: + \ mgl@1371: + /* linker_mark, linker_has_input, gc_mark, gc_mark_from_eh, */ \ mgl@1371: + 0, 0, 1, 0, \ mgl@1371: + \ mgl@1371: + /* segment_mark, sec_info_type, use_rela_p, has_tls_reloc, */ \ mgl@1371: + 0, 0, 0, 0, \ mgl@1371: + \ mgl@1371: + /* has_gp_reloc, need_finalize_relax, reloc_done, */ \ mgl@1371: + 0, 0, 0, \ mgl@1371: + \ mgl@1371: + /* vma, lma, size, rawsize */ \ mgl@1371: + 0, 0, 0, 0, \ mgl@1371: + \ mgl@1371: + /* output_offset, output_section, alignment_power, */ \ mgl@1371: + 0, (struct bfd_section *) &SEC, 0, \ mgl@1371: + \ mgl@1371: + /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \ mgl@1371: + NULL, NULL, 0, 0, 0, \ mgl@1371: + \ mgl@1371: + /* line_filepos, userdata, contents, lineno, lineno_count, */ \ mgl@1371: + 0, NULL, NULL, NULL, 0, \ mgl@1371: + \ mgl@1371: + /* entsize, kept_section, moving_line_filepos, */ \ mgl@1371: + 0, NULL, 0, \ mgl@1371: + \ mgl@1371: + /* target_index, used_by_bfd, constructor_chain, owner, */ \ mgl@1371: + 0, NULL, NULL, NULL, \ mgl@1371: + \ mgl@1371: + /* symbol, symbol_ptr_ptr, */ \ mgl@1371: + (struct bfd_symbol *) SYM, &SEC.symbol, \ mgl@1371: + \ mgl@1371: + /* map_head, map_tail */ \ mgl@1371: + { NULL }, { NULL } \ mgl@1371: + } mgl@1371: + mgl@1371: +void bfd_section_list_clear (bfd *); mgl@1371: + mgl@1371: +asection *bfd_get_section_by_name (bfd *abfd, const char *name); mgl@1371: + mgl@1371: +asection *bfd_get_section_by_name_if mgl@1371: + (bfd *abfd, mgl@1371: + const char *name, mgl@1371: + bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj), mgl@1371: + void *obj); mgl@1371: + mgl@1371: +char *bfd_get_unique_section_name mgl@1371: + (bfd *abfd, const char *templat, int *count); mgl@1371: + mgl@1371: +asection *bfd_make_section_old_way (bfd *abfd, const char *name); mgl@1371: + mgl@1371: +asection *bfd_make_section_anyway_with_flags mgl@1371: + (bfd *abfd, const char *name, flagword flags); mgl@1371: + mgl@1371: +asection *bfd_make_section_anyway (bfd *abfd, const char *name); mgl@1371: + mgl@1371: +asection *bfd_make_section_with_flags mgl@1371: + (bfd *, const char *name, flagword flags); mgl@1371: + mgl@1371: +asection *bfd_make_section (bfd *, const char *name); mgl@1371: + mgl@1371: +bfd_boolean bfd_set_section_flags mgl@1371: + (bfd *abfd, asection *sec, flagword flags); mgl@1371: + mgl@1371: +void bfd_map_over_sections mgl@1371: + (bfd *abfd, mgl@1371: + void (*func) (bfd *abfd, asection *sect, void *obj), mgl@1371: + void *obj); mgl@1371: + mgl@1371: +asection *bfd_sections_find_if mgl@1371: + (bfd *abfd, mgl@1371: + bfd_boolean (*operation) (bfd *abfd, asection *sect, void *obj), mgl@1371: + void *obj); mgl@1371: + mgl@1371: +bfd_boolean bfd_set_section_size mgl@1371: + (bfd *abfd, asection *sec, bfd_size_type val); mgl@1371: + mgl@1371: +bfd_boolean bfd_set_section_contents mgl@1371: + (bfd *abfd, asection *section, const void *data, mgl@1371: + file_ptr offset, bfd_size_type count); mgl@1371: + mgl@1371: +bfd_boolean bfd_get_section_contents mgl@1371: + (bfd *abfd, asection *section, void *location, file_ptr offset, mgl@1371: + bfd_size_type count); mgl@1371: + mgl@1371: +bfd_boolean bfd_malloc_and_get_section mgl@1371: + (bfd *abfd, asection *section, bfd_byte **buf); mgl@1371: + mgl@1371: +bfd_boolean bfd_copy_private_section_data mgl@1371: + (bfd *ibfd, asection *isec, bfd *obfd, asection *osec); mgl@1371: + mgl@1371: +#define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \ mgl@1371: + BFD_SEND (obfd, _bfd_copy_private_section_data, \ mgl@1371: + (ibfd, isection, obfd, osection)) mgl@1371: +bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec); mgl@1371: + mgl@1371: +bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group); mgl@1371: + mgl@1371: +/* Extracted from archures.c. */ mgl@1371: +enum bfd_architecture mgl@1371: +{ mgl@1371: + bfd_arch_unknown, /* File arch not known. */ mgl@1371: + bfd_arch_obscure, /* Arch known, not one of these. */ mgl@1371: + bfd_arch_m68k, /* Motorola 68xxx */ mgl@1371: +#define bfd_mach_m68000 1 mgl@1371: +#define bfd_mach_m68008 2 mgl@1371: +#define bfd_mach_m68010 3 mgl@1371: +#define bfd_mach_m68020 4 mgl@1371: +#define bfd_mach_m68030 5 mgl@1371: +#define bfd_mach_m68040 6 mgl@1371: +#define bfd_mach_m68060 7 mgl@1371: +#define bfd_mach_cpu32 8 mgl@1371: +#define bfd_mach_fido 9 mgl@1371: +#define bfd_mach_mcf_isa_a_nodiv 10 mgl@1371: +#define bfd_mach_mcf_isa_a 11 mgl@1371: +#define bfd_mach_mcf_isa_a_mac 12 mgl@1371: +#define bfd_mach_mcf_isa_a_emac 13 mgl@1371: +#define bfd_mach_mcf_isa_aplus 14 mgl@1371: +#define bfd_mach_mcf_isa_aplus_mac 15 mgl@1371: +#define bfd_mach_mcf_isa_aplus_emac 16 mgl@1371: +#define bfd_mach_mcf_isa_b_nousp 17 mgl@1371: +#define bfd_mach_mcf_isa_b_nousp_mac 18 mgl@1371: +#define bfd_mach_mcf_isa_b_nousp_emac 19 mgl@1371: +#define bfd_mach_mcf_isa_b 20 mgl@1371: +#define bfd_mach_mcf_isa_b_mac 21 mgl@1371: +#define bfd_mach_mcf_isa_b_emac 22 mgl@1371: +#define bfd_mach_mcf_isa_b_float 23 mgl@1371: +#define bfd_mach_mcf_isa_b_float_mac 24 mgl@1371: +#define bfd_mach_mcf_isa_b_float_emac 25 mgl@1371: +#define bfd_mach_mcf_isa_c 26 mgl@1371: +#define bfd_mach_mcf_isa_c_mac 27 mgl@1371: +#define bfd_mach_mcf_isa_c_emac 28 mgl@1371: + bfd_arch_vax, /* DEC Vax */ mgl@1371: + bfd_arch_i960, /* Intel 960 */ mgl@1371: + /* The order of the following is important. mgl@1371: + lower number indicates a machine type that mgl@1371: + only accepts a subset of the instructions mgl@1371: + available to machines with higher numbers. mgl@1371: + The exception is the "ca", which is mgl@1371: + incompatible with all other machines except mgl@1371: + "core". */ mgl@1371: + mgl@1371: +#define bfd_mach_i960_core 1 mgl@1371: +#define bfd_mach_i960_ka_sa 2 mgl@1371: +#define bfd_mach_i960_kb_sb 3 mgl@1371: +#define bfd_mach_i960_mc 4 mgl@1371: +#define bfd_mach_i960_xa 5 mgl@1371: +#define bfd_mach_i960_ca 6 mgl@1371: +#define bfd_mach_i960_jx 7 mgl@1371: +#define bfd_mach_i960_hx 8 mgl@1371: + mgl@1371: + bfd_arch_or32, /* OpenRISC 32 */ mgl@1371: + mgl@1371: + bfd_arch_sparc, /* SPARC */ mgl@1371: +#define bfd_mach_sparc 1 mgl@1371: +/* The difference between v8plus and v9 is that v9 is a true 64 bit env. */ mgl@1371: +#define bfd_mach_sparc_sparclet 2 mgl@1371: +#define bfd_mach_sparc_sparclite 3 mgl@1371: +#define bfd_mach_sparc_v8plus 4 mgl@1371: +#define bfd_mach_sparc_v8plusa 5 /* with ultrasparc add'ns. */ mgl@1371: +#define bfd_mach_sparc_sparclite_le 6 mgl@1371: +#define bfd_mach_sparc_v9 7 mgl@1371: +#define bfd_mach_sparc_v9a 8 /* with ultrasparc add'ns. */ mgl@1371: +#define bfd_mach_sparc_v8plusb 9 /* with cheetah add'ns. */ mgl@1371: +#define bfd_mach_sparc_v9b 10 /* with cheetah add'ns. */ mgl@1371: +/* Nonzero if MACH has the v9 instruction set. */ mgl@1371: +#define bfd_mach_sparc_v9_p(mach) \ mgl@1371: + ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \ mgl@1371: + && (mach) != bfd_mach_sparc_sparclite_le) mgl@1371: +/* Nonzero if MACH is a 64 bit sparc architecture. */ mgl@1371: +#define bfd_mach_sparc_64bit_p(mach) \ mgl@1371: + ((mach) >= bfd_mach_sparc_v9 && (mach) != bfd_mach_sparc_v8plusb) mgl@1371: + bfd_arch_spu, /* PowerPC SPU */ mgl@1371: +#define bfd_mach_spu 256 mgl@1371: + bfd_arch_mips, /* MIPS Rxxxx */ mgl@1371: +#define bfd_mach_mips3000 3000 mgl@1371: +#define bfd_mach_mips3900 3900 mgl@1371: +#define bfd_mach_mips4000 4000 mgl@1371: +#define bfd_mach_mips4010 4010 mgl@1371: +#define bfd_mach_mips4100 4100 mgl@1371: +#define bfd_mach_mips4111 4111 mgl@1371: +#define bfd_mach_mips4120 4120 mgl@1371: +#define bfd_mach_mips4300 4300 mgl@1371: +#define bfd_mach_mips4400 4400 mgl@1371: +#define bfd_mach_mips4600 4600 mgl@1371: +#define bfd_mach_mips4650 4650 mgl@1371: +#define bfd_mach_mips5000 5000 mgl@1371: +#define bfd_mach_mips5400 5400 mgl@1371: +#define bfd_mach_mips5500 5500 mgl@1371: +#define bfd_mach_mips6000 6000 mgl@1371: +#define bfd_mach_mips7000 7000 mgl@1371: +#define bfd_mach_mips8000 8000 mgl@1371: +#define bfd_mach_mips9000 9000 mgl@1371: +#define bfd_mach_mips10000 10000 mgl@1371: +#define bfd_mach_mips12000 12000 mgl@1371: +#define bfd_mach_mips16 16 mgl@1371: +#define bfd_mach_mips5 5 mgl@1371: +#define bfd_mach_mips_sb1 12310201 /* octal 'SB', 01 */ mgl@1371: +#define bfd_mach_mipsisa32 32 mgl@1371: +#define bfd_mach_mipsisa32r2 33 mgl@1371: +#define bfd_mach_mipsisa64 64 mgl@1371: +#define bfd_mach_mipsisa64r2 65 mgl@1371: + bfd_arch_i386, /* Intel 386 */ mgl@1371: +#define bfd_mach_i386_i386 1 mgl@1371: +#define bfd_mach_i386_i8086 2 mgl@1371: +#define bfd_mach_i386_i386_intel_syntax 3 mgl@1371: +#define bfd_mach_x86_64 64 mgl@1371: +#define bfd_mach_x86_64_intel_syntax 65 mgl@1371: + bfd_arch_we32k, /* AT&T WE32xxx */ mgl@1371: + bfd_arch_tahoe, /* CCI/Harris Tahoe */ mgl@1371: + bfd_arch_i860, /* Intel 860 */ mgl@1371: + bfd_arch_i370, /* IBM 360/370 Mainframes */ mgl@1371: + bfd_arch_romp, /* IBM ROMP PC/RT */ mgl@1371: + bfd_arch_convex, /* Convex */ mgl@1371: + bfd_arch_m88k, /* Motorola 88xxx */ mgl@1371: + bfd_arch_m98k, /* Motorola 98xxx */ mgl@1371: + bfd_arch_pyramid, /* Pyramid Technology */ mgl@1371: + bfd_arch_h8300, /* Renesas H8/300 (formerly Hitachi H8/300) */ mgl@1371: +#define bfd_mach_h8300 1 mgl@1371: +#define bfd_mach_h8300h 2 mgl@1371: +#define bfd_mach_h8300s 3 mgl@1371: +#define bfd_mach_h8300hn 4 mgl@1371: +#define bfd_mach_h8300sn 5 mgl@1371: +#define bfd_mach_h8300sx 6 mgl@1371: +#define bfd_mach_h8300sxn 7 mgl@1371: + bfd_arch_pdp11, /* DEC PDP-11 */ mgl@1371: + bfd_arch_powerpc, /* PowerPC */ mgl@1371: +#define bfd_mach_ppc 32 mgl@1371: +#define bfd_mach_ppc64 64 mgl@1371: +#define bfd_mach_ppc_403 403 mgl@1371: +#define bfd_mach_ppc_403gc 4030 mgl@1371: +#define bfd_mach_ppc_505 505 mgl@1371: +#define bfd_mach_ppc_601 601 mgl@1371: +#define bfd_mach_ppc_602 602 mgl@1371: +#define bfd_mach_ppc_603 603 mgl@1371: +#define bfd_mach_ppc_ec603e 6031 mgl@1371: +#define bfd_mach_ppc_604 604 mgl@1371: +#define bfd_mach_ppc_620 620 mgl@1371: +#define bfd_mach_ppc_630 630 mgl@1371: +#define bfd_mach_ppc_750 750 mgl@1371: +#define bfd_mach_ppc_860 860 mgl@1371: +#define bfd_mach_ppc_a35 35 mgl@1371: +#define bfd_mach_ppc_rs64ii 642 mgl@1371: +#define bfd_mach_ppc_rs64iii 643 mgl@1371: +#define bfd_mach_ppc_7400 7400 mgl@1371: +#define bfd_mach_ppc_e500 500 mgl@1371: + bfd_arch_rs6000, /* IBM RS/6000 */ mgl@1371: +#define bfd_mach_rs6k 6000 mgl@1371: +#define bfd_mach_rs6k_rs1 6001 mgl@1371: +#define bfd_mach_rs6k_rsc 6003 mgl@1371: +#define bfd_mach_rs6k_rs2 6002 mgl@1371: + bfd_arch_hppa, /* HP PA RISC */ mgl@1371: +#define bfd_mach_hppa10 10 mgl@1371: +#define bfd_mach_hppa11 11 mgl@1371: +#define bfd_mach_hppa20 20 mgl@1371: +#define bfd_mach_hppa20w 25 mgl@1371: + bfd_arch_d10v, /* Mitsubishi D10V */ mgl@1371: +#define bfd_mach_d10v 1 mgl@1371: +#define bfd_mach_d10v_ts2 2 mgl@1371: +#define bfd_mach_d10v_ts3 3 mgl@1371: + bfd_arch_d30v, /* Mitsubishi D30V */ mgl@1371: + bfd_arch_dlx, /* DLX */ mgl@1371: + bfd_arch_m68hc11, /* Motorola 68HC11 */ mgl@1371: + bfd_arch_m68hc12, /* Motorola 68HC12 */ mgl@1371: +#define bfd_mach_m6812_default 0 mgl@1371: +#define bfd_mach_m6812 1 mgl@1371: +#define bfd_mach_m6812s 2 mgl@1371: + bfd_arch_z8k, /* Zilog Z8000 */ mgl@1371: +#define bfd_mach_z8001 1 mgl@1371: +#define bfd_mach_z8002 2 mgl@1371: + bfd_arch_h8500, /* Renesas H8/500 (formerly Hitachi H8/500) */ mgl@1371: + bfd_arch_sh, /* Renesas / SuperH SH (formerly Hitachi SH) */ mgl@1371: +#define bfd_mach_sh 1 mgl@1371: +#define bfd_mach_sh2 0x20 mgl@1371: +#define bfd_mach_sh_dsp 0x2d mgl@1371: +#define bfd_mach_sh2a 0x2a mgl@1371: +#define bfd_mach_sh2a_nofpu 0x2b mgl@1371: +#define bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu 0x2a1 mgl@1371: +#define bfd_mach_sh2a_nofpu_or_sh3_nommu 0x2a2 mgl@1371: +#define bfd_mach_sh2a_or_sh4 0x2a3 mgl@1371: +#define bfd_mach_sh2a_or_sh3e 0x2a4 mgl@1371: +#define bfd_mach_sh2e 0x2e mgl@1371: +#define bfd_mach_sh3 0x30 mgl@1371: +#define bfd_mach_sh3_nommu 0x31 mgl@1371: +#define bfd_mach_sh3_dsp 0x3d mgl@1371: +#define bfd_mach_sh3e 0x3e mgl@1371: +#define bfd_mach_sh4 0x40 mgl@1371: +#define bfd_mach_sh4_nofpu 0x41 mgl@1371: +#define bfd_mach_sh4_nommu_nofpu 0x42 mgl@1371: +#define bfd_mach_sh4a 0x4a mgl@1371: +#define bfd_mach_sh4a_nofpu 0x4b mgl@1371: +#define bfd_mach_sh4al_dsp 0x4d mgl@1371: +#define bfd_mach_sh5 0x50 mgl@1371: + bfd_arch_alpha, /* Dec Alpha */ mgl@1371: +#define bfd_mach_alpha_ev4 0x10 mgl@1371: +#define bfd_mach_alpha_ev5 0x20 mgl@1371: +#define bfd_mach_alpha_ev6 0x30 mgl@1371: + bfd_arch_arm, /* Advanced Risc Machines ARM. */ mgl@1371: +#define bfd_mach_arm_unknown 0 mgl@1371: +#define bfd_mach_arm_2 1 mgl@1371: +#define bfd_mach_arm_2a 2 mgl@1371: +#define bfd_mach_arm_3 3 mgl@1371: +#define bfd_mach_arm_3M 4 mgl@1371: +#define bfd_mach_arm_4 5 mgl@1371: +#define bfd_mach_arm_4T 6 mgl@1371: +#define bfd_mach_arm_5 7 mgl@1371: +#define bfd_mach_arm_5T 8 mgl@1371: +#define bfd_mach_arm_5TE 9 mgl@1371: +#define bfd_mach_arm_XScale 10 mgl@1371: +#define bfd_mach_arm_ep9312 11 mgl@1371: +#define bfd_mach_arm_iWMMXt 12 mgl@1371: +#define bfd_mach_arm_iWMMXt2 13 mgl@1371: + bfd_arch_ns32k, /* National Semiconductors ns32000 */ mgl@1371: + bfd_arch_w65, /* WDC 65816 */ mgl@1371: + bfd_arch_tic30, /* Texas Instruments TMS320C30 */ mgl@1371: + bfd_arch_tic4x, /* Texas Instruments TMS320C3X/4X */ mgl@1371: +#define bfd_mach_tic3x 30 mgl@1371: +#define bfd_mach_tic4x 40 mgl@1371: + bfd_arch_tic54x, /* Texas Instruments TMS320C54X */ mgl@1371: + bfd_arch_tic80, /* TI TMS320c80 (MVP) */ mgl@1371: + bfd_arch_v850, /* NEC V850 */ mgl@1371: +#define bfd_mach_v850 1 mgl@1371: +#define bfd_mach_v850e 'E' mgl@1371: +#define bfd_mach_v850e1 '1' mgl@1371: + bfd_arch_arc, /* ARC Cores */ mgl@1371: +#define bfd_mach_arc_5 5 mgl@1371: +#define bfd_mach_arc_6 6 mgl@1371: +#define bfd_mach_arc_7 7 mgl@1371: +#define bfd_mach_arc_8 8 mgl@1371: + bfd_arch_m32c, /* Renesas M16C/M32C. */ mgl@1371: +#define bfd_mach_m16c 0x75 mgl@1371: +#define bfd_mach_m32c 0x78 mgl@1371: + bfd_arch_m32r, /* Renesas M32R (formerly Mitsubishi M32R/D) */ mgl@1371: +#define bfd_mach_m32r 1 /* For backwards compatibility. */ mgl@1371: +#define bfd_mach_m32rx 'x' mgl@1371: +#define bfd_mach_m32r2 '2' mgl@1371: + bfd_arch_mn10200, /* Matsushita MN10200 */ mgl@1371: + bfd_arch_mn10300, /* Matsushita MN10300 */ mgl@1371: +#define bfd_mach_mn10300 300 mgl@1371: +#define bfd_mach_am33 330 mgl@1371: +#define bfd_mach_am33_2 332 mgl@1371: + bfd_arch_fr30, mgl@1371: +#define bfd_mach_fr30 0x46523330 mgl@1371: + bfd_arch_frv, mgl@1371: +#define bfd_mach_frv 1 mgl@1371: +#define bfd_mach_frvsimple 2 mgl@1371: +#define bfd_mach_fr300 300 mgl@1371: +#define bfd_mach_fr400 400 mgl@1371: +#define bfd_mach_fr450 450 mgl@1371: +#define bfd_mach_frvtomcat 499 /* fr500 prototype */ mgl@1371: +#define bfd_mach_fr500 500 mgl@1371: +#define bfd_mach_fr550 550 mgl@1371: + bfd_arch_mcore, mgl@1371: + bfd_arch_mep, mgl@1371: +#define bfd_mach_mep 1 mgl@1371: +#define bfd_mach_mep_h1 0x6831 mgl@1371: + bfd_arch_ia64, /* HP/Intel ia64 */ mgl@1371: +#define bfd_mach_ia64_elf64 64 mgl@1371: +#define bfd_mach_ia64_elf32 32 mgl@1371: + bfd_arch_ip2k, /* Ubicom IP2K microcontrollers. */ mgl@1371: +#define bfd_mach_ip2022 1 mgl@1371: +#define bfd_mach_ip2022ext 2 mgl@1371: + bfd_arch_iq2000, /* Vitesse IQ2000. */ mgl@1371: +#define bfd_mach_iq2000 1 mgl@1371: +#define bfd_mach_iq10 2 mgl@1371: + bfd_arch_mt, mgl@1371: +#define bfd_mach_ms1 1 mgl@1371: +#define bfd_mach_mrisc2 2 mgl@1371: +#define bfd_mach_ms2 3 mgl@1371: + bfd_arch_pj, mgl@1371: + bfd_arch_avr, /* Atmel AVR microcontrollers. */ mgl@1371: +#define bfd_mach_avr1 1 mgl@1371: +#define bfd_mach_avr2 2 mgl@1371: +#define bfd_mach_avr3 3 mgl@1371: +#define bfd_mach_avr4 4 mgl@1371: +#define bfd_mach_avr5 5 mgl@1371: +#define bfd_mach_avr6 6 mgl@1371: + bfd_arch_bfin, /* ADI Blackfin */ mgl@1371: +#define bfd_mach_bfin 1 mgl@1371: + bfd_arch_cr16, /* National Semiconductor CompactRISC (ie CR16). */ mgl@1371: +#define bfd_mach_cr16 1 mgl@1371: + bfd_arch_cr16c, /* National Semiconductor CompactRISC. */ mgl@1371: +#define bfd_mach_cr16c 1 mgl@1371: + bfd_arch_crx, /* National Semiconductor CRX. */ mgl@1371: +#define bfd_mach_crx 1 mgl@1371: + bfd_arch_cris, /* Axis CRIS */ mgl@1371: +#define bfd_mach_cris_v0_v10 255 mgl@1371: +#define bfd_mach_cris_v32 32 mgl@1371: +#define bfd_mach_cris_v10_v32 1032 mgl@1371: + bfd_arch_s390, /* IBM s390 */ mgl@1371: +#define bfd_mach_s390_31 31 mgl@1371: +#define bfd_mach_s390_64 64 mgl@1371: + bfd_arch_score, /* Sunplus score */ mgl@1371: + bfd_arch_openrisc, /* OpenRISC */ mgl@1371: + bfd_arch_mmix, /* Donald Knuth's educational processor. */ mgl@1371: + bfd_arch_xstormy16, mgl@1371: +#define bfd_mach_xstormy16 1 mgl@1371: + bfd_arch_msp430, /* Texas Instruments MSP430 architecture. */ mgl@1371: +#define bfd_mach_msp11 11 mgl@1371: +#define bfd_mach_msp110 110 mgl@1371: +#define bfd_mach_msp12 12 mgl@1371: +#define bfd_mach_msp13 13 mgl@1371: +#define bfd_mach_msp14 14 mgl@1371: +#define bfd_mach_msp15 15 mgl@1371: +#define bfd_mach_msp16 16 mgl@1371: +#define bfd_mach_msp21 21 mgl@1371: +#define bfd_mach_msp31 31 mgl@1371: +#define bfd_mach_msp32 32 mgl@1371: +#define bfd_mach_msp33 33 mgl@1371: +#define bfd_mach_msp41 41 mgl@1371: +#define bfd_mach_msp42 42 mgl@1371: +#define bfd_mach_msp43 43 mgl@1371: +#define bfd_mach_msp44 44 mgl@1371: + bfd_arch_xc16x, /* Infineon's XC16X Series. */ mgl@1371: +#define bfd_mach_xc16x 1 mgl@1371: +#define bfd_mach_xc16xl 2 mgl@1371: +#define bfd_mach_xc16xs 3 mgl@1371: + bfd_arch_xtensa, /* Tensilica's Xtensa cores. */ mgl@1371: +#define bfd_mach_xtensa 1 mgl@1371: + bfd_arch_maxq, /* Dallas MAXQ 10/20 */ mgl@1371: +#define bfd_mach_maxq10 10 mgl@1371: +#define bfd_mach_maxq20 20 mgl@1371: + bfd_arch_z80, mgl@1371: +#define bfd_mach_z80strict 1 /* No undocumented opcodes. */ mgl@1371: +#define bfd_mach_z80 3 /* With ixl, ixh, iyl, and iyh. */ mgl@1371: +#define bfd_mach_z80full 7 /* All undocumented instructions. */ mgl@1371: +#define bfd_mach_r800 11 /* R800: successor with multiplication. */ mgl@1371: + bfd_arch_last mgl@1371: + }; mgl@1371: + mgl@1371: +typedef struct bfd_arch_info mgl@1371: +{ mgl@1371: + int bits_per_word; mgl@1371: + int bits_per_address; mgl@1371: + int bits_per_byte; mgl@1371: + enum bfd_architecture arch; mgl@1371: + unsigned long mach; mgl@1371: + const char *arch_name; mgl@1371: + const char *printable_name; mgl@1371: + unsigned int section_align_power; mgl@1371: + /* TRUE if this is the default machine for the architecture. mgl@1371: + The default arch should be the first entry for an arch so that mgl@1371: + all the entries for that arch can be accessed via <>. */ mgl@1371: + bfd_boolean the_default; mgl@1371: + const struct bfd_arch_info * (*compatible) mgl@1371: + (const struct bfd_arch_info *a, const struct bfd_arch_info *b); mgl@1371: + mgl@1371: + bfd_boolean (*scan) (const struct bfd_arch_info *, const char *); mgl@1371: + mgl@1371: + const struct bfd_arch_info *next; mgl@1371: +} mgl@1371: +bfd_arch_info_type; mgl@1371: + mgl@1371: +const char *bfd_printable_name (bfd *abfd); mgl@1371: + mgl@1371: +const bfd_arch_info_type *bfd_scan_arch (const char *string); mgl@1371: + mgl@1371: +const char **bfd_arch_list (void); mgl@1371: + mgl@1371: +const bfd_arch_info_type *bfd_arch_get_compatible mgl@1371: + (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns); mgl@1371: + mgl@1371: +void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg); mgl@1371: + mgl@1371: +enum bfd_architecture bfd_get_arch (bfd *abfd); mgl@1371: + mgl@1371: +unsigned long bfd_get_mach (bfd *abfd); mgl@1371: + mgl@1371: +unsigned int bfd_arch_bits_per_byte (bfd *abfd); mgl@1371: + mgl@1371: +unsigned int bfd_arch_bits_per_address (bfd *abfd); mgl@1371: + mgl@1371: +const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd); mgl@1371: + mgl@1371: +const bfd_arch_info_type *bfd_lookup_arch mgl@1371: + (enum bfd_architecture arch, unsigned long machine); mgl@1371: + mgl@1371: +const char *bfd_printable_arch_mach mgl@1371: + (enum bfd_architecture arch, unsigned long machine); mgl@1371: + mgl@1371: +unsigned int bfd_octets_per_byte (bfd *abfd); mgl@1371: + mgl@1371: +unsigned int bfd_arch_mach_octets_per_byte mgl@1371: + (enum bfd_architecture arch, unsigned long machine); mgl@1371: + mgl@1371: +/* Extracted from reloc.c. */ mgl@1371: +typedef enum bfd_reloc_status mgl@1371: +{ mgl@1371: + /* No errors detected. */ mgl@1371: + bfd_reloc_ok, mgl@1371: + mgl@1371: + /* The relocation was performed, but there was an overflow. */ mgl@1371: + bfd_reloc_overflow, mgl@1371: + mgl@1371: + /* The address to relocate was not within the section supplied. */ mgl@1371: + bfd_reloc_outofrange, mgl@1371: + mgl@1371: + /* Used by special functions. */ mgl@1371: + bfd_reloc_continue, mgl@1371: + mgl@1371: + /* Unsupported relocation size requested. */ mgl@1371: + bfd_reloc_notsupported, mgl@1371: + mgl@1371: + /* Unused. */ mgl@1371: + bfd_reloc_other, mgl@1371: + mgl@1371: + /* The symbol to relocate against was undefined. */ mgl@1371: + bfd_reloc_undefined, mgl@1371: + mgl@1371: + /* The relocation was performed, but may not be ok - presently mgl@1371: + generated only when linking i960 coff files with i960 b.out mgl@1371: + symbols. If this type is returned, the error_message argument mgl@1371: + to bfd_perform_relocation will be set. */ mgl@1371: + bfd_reloc_dangerous mgl@1371: + } mgl@1371: + bfd_reloc_status_type; mgl@1371: + mgl@1371: + mgl@1371: +typedef struct reloc_cache_entry mgl@1371: +{ mgl@1371: + /* A pointer into the canonical table of pointers. */ mgl@1371: + struct bfd_symbol **sym_ptr_ptr; mgl@1371: + mgl@1371: + /* offset in section. */ mgl@1371: + bfd_size_type address; mgl@1371: + mgl@1371: + /* addend for relocation value. */ mgl@1371: + bfd_vma addend; mgl@1371: + mgl@1371: + /* Pointer to how to perform the required relocation. */ mgl@1371: + reloc_howto_type *howto; mgl@1371: + mgl@1371: +} mgl@1371: +arelent; mgl@1371: + mgl@1371: +enum complain_overflow mgl@1371: +{ mgl@1371: + /* Do not complain on overflow. */ mgl@1371: + complain_overflow_dont, mgl@1371: + mgl@1371: + /* Complain if the value overflows when considered as a signed mgl@1371: + number one bit larger than the field. ie. A bitfield of N bits mgl@1371: + is allowed to represent -2**n to 2**n-1. */ mgl@1371: + complain_overflow_bitfield, mgl@1371: + mgl@1371: + /* Complain if the value overflows when considered as a signed mgl@1371: + number. */ mgl@1371: + complain_overflow_signed, mgl@1371: + mgl@1371: + /* Complain if the value overflows when considered as an mgl@1371: + unsigned number. */ mgl@1371: + complain_overflow_unsigned mgl@1371: +}; mgl@1371: + mgl@1371: +struct reloc_howto_struct mgl@1371: +{ mgl@1371: + /* The type field has mainly a documentary use - the back end can mgl@1371: + do what it wants with it, though normally the back end's mgl@1371: + external idea of what a reloc number is stored mgl@1371: + in this field. For example, a PC relative word relocation mgl@1371: + in a coff environment has the type 023 - because that's mgl@1371: + what the outside world calls a R_PCRWORD reloc. */ mgl@1371: + unsigned int type; mgl@1371: + mgl@1371: + /* The value the final relocation is shifted right by. This drops mgl@1371: + unwanted data from the relocation. */ mgl@1371: + unsigned int rightshift; mgl@1371: + mgl@1371: + /* The size of the item to be relocated. This is *not* a mgl@1371: + power-of-two measure. To get the number of bytes operated mgl@1371: + on by a type of relocation, use bfd_get_reloc_size. */ mgl@1371: + int size; mgl@1371: + mgl@1371: + /* The number of bits in the item to be relocated. This is used mgl@1371: + when doing overflow checking. */ mgl@1371: + unsigned int bitsize; mgl@1371: + mgl@1371: + /* Notes that the relocation is relative to the location in the mgl@1371: + data section of the addend. The relocation function will mgl@1371: + subtract from the relocation value the address of the location mgl@1371: + being relocated. */ mgl@1371: + bfd_boolean pc_relative; mgl@1371: + mgl@1371: + /* The bit position of the reloc value in the destination. mgl@1371: + The relocated value is left shifted by this amount. */ mgl@1371: + unsigned int bitpos; mgl@1371: + mgl@1371: + /* What type of overflow error should be checked for when mgl@1371: + relocating. */ mgl@1371: + enum complain_overflow complain_on_overflow; mgl@1371: + mgl@1371: + /* If this field is non null, then the supplied function is mgl@1371: + called rather than the normal function. This allows really mgl@1371: + strange relocation methods to be accommodated (e.g., i960 callj mgl@1371: + instructions). */ mgl@1371: + bfd_reloc_status_type (*special_function) mgl@1371: + (bfd *, arelent *, struct bfd_symbol *, void *, asection *, mgl@1371: + bfd *, char **); mgl@1371: + mgl@1371: + /* The textual name of the relocation type. */ mgl@1371: + char *name; mgl@1371: + mgl@1371: + /* Some formats record a relocation addend in the section contents mgl@1371: + rather than with the relocation. For ELF formats this is the mgl@1371: + distinction between USE_REL and USE_RELA (though the code checks mgl@1371: + for USE_REL == 1/0). The value of this field is TRUE if the mgl@1371: + addend is recorded with the section contents; when performing a mgl@1371: + partial link (ld -r) the section contents (the data) will be mgl@1371: + modified. The value of this field is FALSE if addends are mgl@1371: + recorded with the relocation (in arelent.addend); when performing mgl@1371: + a partial link the relocation will be modified. mgl@1371: + All relocations for all ELF USE_RELA targets should set this field mgl@1371: + to FALSE (values of TRUE should be looked on with suspicion). mgl@1371: + However, the converse is not true: not all relocations of all ELF mgl@1371: + USE_REL targets set this field to TRUE. Why this is so is peculiar mgl@1371: + to each particular target. For relocs that aren't used in partial mgl@1371: + links (e.g. GOT stuff) it doesn't matter what this is set to. */ mgl@1371: + bfd_boolean partial_inplace; mgl@1371: + mgl@1371: + /* src_mask selects the part of the instruction (or data) to be used mgl@1371: + in the relocation sum. If the target relocations don't have an mgl@1371: + addend in the reloc, eg. ELF USE_REL, src_mask will normally equal mgl@1371: + dst_mask to extract the addend from the section contents. If mgl@1371: + relocations do have an addend in the reloc, eg. ELF USE_RELA, this mgl@1371: + field should be zero. Non-zero values for ELF USE_RELA targets are mgl@1371: + bogus as in those cases the value in the dst_mask part of the mgl@1371: + section contents should be treated as garbage. */ mgl@1371: + bfd_vma src_mask; mgl@1371: + mgl@1371: + /* dst_mask selects which parts of the instruction (or data) are mgl@1371: + replaced with a relocated value. */ mgl@1371: + bfd_vma dst_mask; mgl@1371: + mgl@1371: + /* When some formats create PC relative instructions, they leave mgl@1371: + the value of the pc of the place being relocated in the offset mgl@1371: + slot of the instruction, so that a PC relative relocation can mgl@1371: + be made just by adding in an ordinary offset (e.g., sun3 a.out). mgl@1371: + Some formats leave the displacement part of an instruction mgl@1371: + empty (e.g., m88k bcs); this flag signals the fact. */ mgl@1371: + bfd_boolean pcrel_offset; mgl@1371: +}; mgl@1371: + mgl@1371: +#define HOWTO(C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \ mgl@1371: + { (unsigned) C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC } mgl@1371: +#define NEWHOWTO(FUNCTION, NAME, SIZE, REL, IN) \ mgl@1371: + HOWTO (0, 0, SIZE, 0, REL, 0, complain_overflow_dont, FUNCTION, \ mgl@1371: + NAME, FALSE, 0, 0, IN) mgl@1371: + mgl@1371: +#define EMPTY_HOWTO(C) \ mgl@1371: + HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \ mgl@1371: + NULL, FALSE, 0, 0, FALSE) mgl@1371: + mgl@1371: +#define HOWTO_PREPARE(relocation, symbol) \ mgl@1371: + { \ mgl@1371: + if (symbol != NULL) \ mgl@1371: + { \ mgl@1371: + if (bfd_is_com_section (symbol->section)) \ mgl@1371: + { \ mgl@1371: + relocation = 0; \ mgl@1371: + } \ mgl@1371: + else \ mgl@1371: + { \ mgl@1371: + relocation = symbol->value; \ mgl@1371: + } \ mgl@1371: + } \ mgl@1371: + } mgl@1371: + mgl@1371: +unsigned int bfd_get_reloc_size (reloc_howto_type *); mgl@1371: + mgl@1371: +typedef struct relent_chain mgl@1371: +{ mgl@1371: + arelent relent; mgl@1371: + struct relent_chain *next; mgl@1371: +} mgl@1371: +arelent_chain; mgl@1371: + mgl@1371: +bfd_reloc_status_type bfd_check_overflow mgl@1371: + (enum complain_overflow how, mgl@1371: + unsigned int bitsize, mgl@1371: + unsigned int rightshift, mgl@1371: + unsigned int addrsize, mgl@1371: + bfd_vma relocation); mgl@1371: + mgl@1371: +bfd_reloc_status_type bfd_perform_relocation mgl@1371: + (bfd *abfd, mgl@1371: + arelent *reloc_entry, mgl@1371: + void *data, mgl@1371: + asection *input_section, mgl@1371: + bfd *output_bfd, mgl@1371: + char **error_message); mgl@1371: + mgl@1371: +bfd_reloc_status_type bfd_install_relocation mgl@1371: + (bfd *abfd, mgl@1371: + arelent *reloc_entry, mgl@1371: + void *data, bfd_vma data_start, mgl@1371: + asection *input_section, mgl@1371: + char **error_message); mgl@1371: + mgl@1371: +enum bfd_reloc_code_real { mgl@1371: + _dummy_first_bfd_reloc_code_real, mgl@1371: + mgl@1371: + mgl@1371: +/* Basic absolute relocations of N bits. */ mgl@1371: + BFD_RELOC_64, mgl@1371: + BFD_RELOC_32, mgl@1371: + BFD_RELOC_26, mgl@1371: + BFD_RELOC_24, mgl@1371: + BFD_RELOC_16, mgl@1371: + BFD_RELOC_14, mgl@1371: + BFD_RELOC_8, mgl@1371: + mgl@1371: +/* PC-relative relocations. Sometimes these are relative to the address mgl@1371: +of the relocation itself; sometimes they are relative to the start of mgl@1371: +the section containing the relocation. It depends on the specific target. mgl@1371: + mgl@1371: +The 24-bit relocation is used in some Intel 960 configurations. */ mgl@1371: + BFD_RELOC_64_PCREL, mgl@1371: + BFD_RELOC_32_PCREL, mgl@1371: + BFD_RELOC_24_PCREL, mgl@1371: + BFD_RELOC_16_PCREL, mgl@1371: + BFD_RELOC_12_PCREL, mgl@1371: + BFD_RELOC_8_PCREL, mgl@1371: + mgl@1371: +/* Section relative relocations. Some targets need this for DWARF2. */ mgl@1371: + BFD_RELOC_32_SECREL, mgl@1371: + mgl@1371: +/* For ELF. */ mgl@1371: + BFD_RELOC_32_GOT_PCREL, mgl@1371: + BFD_RELOC_16_GOT_PCREL, mgl@1371: + BFD_RELOC_8_GOT_PCREL, mgl@1371: + BFD_RELOC_32_GOTOFF, mgl@1371: + BFD_RELOC_16_GOTOFF, mgl@1371: + BFD_RELOC_LO16_GOTOFF, mgl@1371: + BFD_RELOC_HI16_GOTOFF, mgl@1371: + BFD_RELOC_HI16_S_GOTOFF, mgl@1371: + BFD_RELOC_8_GOTOFF, mgl@1371: + BFD_RELOC_64_PLT_PCREL, mgl@1371: + BFD_RELOC_32_PLT_PCREL, mgl@1371: + BFD_RELOC_24_PLT_PCREL, mgl@1371: + BFD_RELOC_16_PLT_PCREL, mgl@1371: + BFD_RELOC_8_PLT_PCREL, mgl@1371: + BFD_RELOC_64_PLTOFF, mgl@1371: + BFD_RELOC_32_PLTOFF, mgl@1371: + BFD_RELOC_16_PLTOFF, mgl@1371: + BFD_RELOC_LO16_PLTOFF, mgl@1371: + BFD_RELOC_HI16_PLTOFF, mgl@1371: + BFD_RELOC_HI16_S_PLTOFF, mgl@1371: + BFD_RELOC_8_PLTOFF, mgl@1371: + mgl@1371: +/* Relocations used by 68K ELF. */ mgl@1371: + BFD_RELOC_68K_GLOB_DAT, mgl@1371: + BFD_RELOC_68K_JMP_SLOT, mgl@1371: + BFD_RELOC_68K_RELATIVE, mgl@1371: + mgl@1371: +/* Linkage-table relative. */ mgl@1371: + BFD_RELOC_32_BASEREL, mgl@1371: + BFD_RELOC_16_BASEREL, mgl@1371: + BFD_RELOC_LO16_BASEREL, mgl@1371: + BFD_RELOC_HI16_BASEREL, mgl@1371: + BFD_RELOC_HI16_S_BASEREL, mgl@1371: + BFD_RELOC_8_BASEREL, mgl@1371: + BFD_RELOC_RVA, mgl@1371: + mgl@1371: +/* Absolute 8-bit relocation, but used to form an address like 0xFFnn. */ mgl@1371: + BFD_RELOC_8_FFnn, mgl@1371: + mgl@1371: +/* These PC-relative relocations are stored as word displacements -- mgl@1371: +i.e., byte displacements shifted right two bits. The 30-bit word mgl@1371: +displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the mgl@1371: +SPARC. (SPARC tools generally refer to this as <>.) The mgl@1371: +signed 16-bit displacement is used on the MIPS, and the 23-bit mgl@1371: +displacement is used on the Alpha. */ mgl@1371: + BFD_RELOC_32_PCREL_S2, mgl@1371: + BFD_RELOC_16_PCREL_S2, mgl@1371: + BFD_RELOC_23_PCREL_S2, mgl@1371: + mgl@1371: +/* High 22 bits and low 10 bits of 32-bit value, placed into lower bits of mgl@1371: +the target word. These are used on the SPARC. */ mgl@1371: + BFD_RELOC_HI22, mgl@1371: + BFD_RELOC_LO10, mgl@1371: + mgl@1371: +/* For systems that allocate a Global Pointer register, these are mgl@1371: +displacements off that register. These relocation types are mgl@1371: +handled specially, because the value the register will have is mgl@1371: +decided relatively late. */ mgl@1371: + BFD_RELOC_GPREL16, mgl@1371: + BFD_RELOC_GPREL32, mgl@1371: + mgl@1371: +/* Reloc types used for i960/b.out. */ mgl@1371: + BFD_RELOC_I960_CALLJ, mgl@1371: + mgl@1371: +/* SPARC ELF relocations. There is probably some overlap with other mgl@1371: +relocation types already defined. */ mgl@1371: + BFD_RELOC_NONE, mgl@1371: + BFD_RELOC_SPARC_WDISP22, mgl@1371: + BFD_RELOC_SPARC22, mgl@1371: + BFD_RELOC_SPARC13, mgl@1371: + BFD_RELOC_SPARC_GOT10, mgl@1371: + BFD_RELOC_SPARC_GOT13, mgl@1371: + BFD_RELOC_SPARC_GOT22, mgl@1371: + BFD_RELOC_SPARC_PC10, mgl@1371: + BFD_RELOC_SPARC_PC22, mgl@1371: + BFD_RELOC_SPARC_WPLT30, mgl@1371: + BFD_RELOC_SPARC_COPY, mgl@1371: + BFD_RELOC_SPARC_GLOB_DAT, mgl@1371: + BFD_RELOC_SPARC_JMP_SLOT, mgl@1371: + BFD_RELOC_SPARC_RELATIVE, mgl@1371: + BFD_RELOC_SPARC_UA16, mgl@1371: + BFD_RELOC_SPARC_UA32, mgl@1371: + BFD_RELOC_SPARC_UA64, mgl@1371: + mgl@1371: +/* I think these are specific to SPARC a.out (e.g., Sun 4). */ mgl@1371: + BFD_RELOC_SPARC_BASE13, mgl@1371: + BFD_RELOC_SPARC_BASE22, mgl@1371: + mgl@1371: +/* SPARC64 relocations */ mgl@1371: +#define BFD_RELOC_SPARC_64 BFD_RELOC_64 mgl@1371: + BFD_RELOC_SPARC_10, mgl@1371: + BFD_RELOC_SPARC_11, mgl@1371: + BFD_RELOC_SPARC_OLO10, mgl@1371: + BFD_RELOC_SPARC_HH22, mgl@1371: + BFD_RELOC_SPARC_HM10, mgl@1371: + BFD_RELOC_SPARC_LM22, mgl@1371: + BFD_RELOC_SPARC_PC_HH22, mgl@1371: + BFD_RELOC_SPARC_PC_HM10, mgl@1371: + BFD_RELOC_SPARC_PC_LM22, mgl@1371: + BFD_RELOC_SPARC_WDISP16, mgl@1371: + BFD_RELOC_SPARC_WDISP19, mgl@1371: + BFD_RELOC_SPARC_7, mgl@1371: + BFD_RELOC_SPARC_6, mgl@1371: + BFD_RELOC_SPARC_5, mgl@1371: +#define BFD_RELOC_SPARC_DISP64 BFD_RELOC_64_PCREL mgl@1371: + BFD_RELOC_SPARC_PLT32, mgl@1371: + BFD_RELOC_SPARC_PLT64, mgl@1371: + BFD_RELOC_SPARC_HIX22, mgl@1371: + BFD_RELOC_SPARC_LOX10, mgl@1371: + BFD_RELOC_SPARC_H44, mgl@1371: + BFD_RELOC_SPARC_M44, mgl@1371: + BFD_RELOC_SPARC_L44, mgl@1371: + BFD_RELOC_SPARC_REGISTER, mgl@1371: + mgl@1371: +/* SPARC little endian relocation */ mgl@1371: + BFD_RELOC_SPARC_REV32, mgl@1371: + mgl@1371: +/* SPARC TLS relocations */ mgl@1371: + BFD_RELOC_SPARC_TLS_GD_HI22, mgl@1371: + BFD_RELOC_SPARC_TLS_GD_LO10, mgl@1371: + BFD_RELOC_SPARC_TLS_GD_ADD, mgl@1371: + BFD_RELOC_SPARC_TLS_GD_CALL, mgl@1371: + BFD_RELOC_SPARC_TLS_LDM_HI22, mgl@1371: + BFD_RELOC_SPARC_TLS_LDM_LO10, mgl@1371: + BFD_RELOC_SPARC_TLS_LDM_ADD, mgl@1371: + BFD_RELOC_SPARC_TLS_LDM_CALL, mgl@1371: + BFD_RELOC_SPARC_TLS_LDO_HIX22, mgl@1371: + BFD_RELOC_SPARC_TLS_LDO_LOX10, mgl@1371: + BFD_RELOC_SPARC_TLS_LDO_ADD, mgl@1371: + BFD_RELOC_SPARC_TLS_IE_HI22, mgl@1371: + BFD_RELOC_SPARC_TLS_IE_LO10, mgl@1371: + BFD_RELOC_SPARC_TLS_IE_LD, mgl@1371: + BFD_RELOC_SPARC_TLS_IE_LDX, mgl@1371: + BFD_RELOC_SPARC_TLS_IE_ADD, mgl@1371: + BFD_RELOC_SPARC_TLS_LE_HIX22, mgl@1371: + BFD_RELOC_SPARC_TLS_LE_LOX10, mgl@1371: + BFD_RELOC_SPARC_TLS_DTPMOD32, mgl@1371: + BFD_RELOC_SPARC_TLS_DTPMOD64, mgl@1371: + BFD_RELOC_SPARC_TLS_DTPOFF32, mgl@1371: + BFD_RELOC_SPARC_TLS_DTPOFF64, mgl@1371: + BFD_RELOC_SPARC_TLS_TPOFF32, mgl@1371: + BFD_RELOC_SPARC_TLS_TPOFF64, mgl@1371: + mgl@1371: +/* SPU Relocations. */ mgl@1371: + BFD_RELOC_SPU_IMM7, mgl@1371: + BFD_RELOC_SPU_IMM8, mgl@1371: + BFD_RELOC_SPU_IMM10, mgl@1371: + BFD_RELOC_SPU_IMM10W, mgl@1371: + BFD_RELOC_SPU_IMM16, mgl@1371: + BFD_RELOC_SPU_IMM16W, mgl@1371: + BFD_RELOC_SPU_IMM18, mgl@1371: + BFD_RELOC_SPU_PCREL9a, mgl@1371: + BFD_RELOC_SPU_PCREL9b, mgl@1371: + BFD_RELOC_SPU_PCREL16, mgl@1371: + BFD_RELOC_SPU_LO16, mgl@1371: + BFD_RELOC_SPU_HI16, mgl@1371: + BFD_RELOC_SPU_PPU32, mgl@1371: + BFD_RELOC_SPU_PPU64, mgl@1371: + mgl@1371: +/* Alpha ECOFF and ELF relocations. Some of these treat the symbol or mgl@1371: +"addend" in some special way. mgl@1371: +For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when mgl@1371: +writing; when reading, it will be the absolute section symbol. The mgl@1371: +addend is the displacement in bytes of the "lda" instruction from mgl@1371: +the "ldah" instruction (which is at the address of this reloc). */ mgl@1371: + BFD_RELOC_ALPHA_GPDISP_HI16, mgl@1371: + mgl@1371: +/* For GPDISP_LO16 ("ignore") relocations, the symbol is handled as mgl@1371: +with GPDISP_HI16 relocs. The addend is ignored when writing the mgl@1371: +relocations out, and is filled in with the file's GP value on mgl@1371: +reading, for convenience. */ mgl@1371: + BFD_RELOC_ALPHA_GPDISP_LO16, mgl@1371: + mgl@1371: +/* The ELF GPDISP relocation is exactly the same as the GPDISP_HI16 mgl@1371: +relocation except that there is no accompanying GPDISP_LO16 mgl@1371: +relocation. */ mgl@1371: + BFD_RELOC_ALPHA_GPDISP, mgl@1371: + mgl@1371: +/* The Alpha LITERAL/LITUSE relocs are produced by a symbol reference; mgl@1371: +the assembler turns it into a LDQ instruction to load the address of mgl@1371: +the symbol, and then fills in a register in the real instruction. mgl@1371: + mgl@1371: +The LITERAL reloc, at the LDQ instruction, refers to the .lita mgl@1371: +section symbol. The addend is ignored when writing, but is filled mgl@1371: +in with the file's GP value on reading, for convenience, as with the mgl@1371: +GPDISP_LO16 reloc. mgl@1371: + mgl@1371: +The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16. mgl@1371: +It should refer to the symbol to be referenced, as with 16_GOTOFF, mgl@1371: +but it generates output not based on the position within the .got mgl@1371: +section, but relative to the GP value chosen for the file during the mgl@1371: +final link stage. mgl@1371: + mgl@1371: +The LITUSE reloc, on the instruction using the loaded address, gives mgl@1371: +information to the linker that it might be able to use to optimize mgl@1371: +away some literal section references. The symbol is ignored (read mgl@1371: +as the absolute section symbol), and the "addend" indicates the type mgl@1371: +of instruction using the register: mgl@1371: +1 - "memory" fmt insn mgl@1371: +2 - byte-manipulation (byte offset reg) mgl@1371: +3 - jsr (target of branch) */ mgl@1371: + BFD_RELOC_ALPHA_LITERAL, mgl@1371: + BFD_RELOC_ALPHA_ELF_LITERAL, mgl@1371: + BFD_RELOC_ALPHA_LITUSE, mgl@1371: + mgl@1371: +/* The HINT relocation indicates a value that should be filled into the mgl@1371: +"hint" field of a jmp/jsr/ret instruction, for possible branch- mgl@1371: +prediction logic which may be provided on some processors. */ mgl@1371: + BFD_RELOC_ALPHA_HINT, mgl@1371: + mgl@1371: +/* The LINKAGE relocation outputs a linkage pair in the object file, mgl@1371: +which is filled by the linker. */ mgl@1371: + BFD_RELOC_ALPHA_LINKAGE, mgl@1371: + mgl@1371: +/* The CODEADDR relocation outputs a STO_CA in the object file, mgl@1371: +which is filled by the linker. */ mgl@1371: + BFD_RELOC_ALPHA_CODEADDR, mgl@1371: + mgl@1371: +/* The GPREL_HI/LO relocations together form a 32-bit offset from the mgl@1371: +GP register. */ mgl@1371: + BFD_RELOC_ALPHA_GPREL_HI16, mgl@1371: + BFD_RELOC_ALPHA_GPREL_LO16, mgl@1371: + mgl@1371: +/* Like BFD_RELOC_23_PCREL_S2, except that the source and target must mgl@1371: +share a common GP, and the target address is adjusted for mgl@1371: +STO_ALPHA_STD_GPLOAD. */ mgl@1371: + BFD_RELOC_ALPHA_BRSGP, mgl@1371: + mgl@1371: +/* Alpha thread-local storage relocations. */ mgl@1371: + BFD_RELOC_ALPHA_TLSGD, mgl@1371: + BFD_RELOC_ALPHA_TLSLDM, mgl@1371: + BFD_RELOC_ALPHA_DTPMOD64, mgl@1371: + BFD_RELOC_ALPHA_GOTDTPREL16, mgl@1371: + BFD_RELOC_ALPHA_DTPREL64, mgl@1371: + BFD_RELOC_ALPHA_DTPREL_HI16, mgl@1371: + BFD_RELOC_ALPHA_DTPREL_LO16, mgl@1371: + BFD_RELOC_ALPHA_DTPREL16, mgl@1371: + BFD_RELOC_ALPHA_GOTTPREL16, mgl@1371: + BFD_RELOC_ALPHA_TPREL64, mgl@1371: + BFD_RELOC_ALPHA_TPREL_HI16, mgl@1371: + BFD_RELOC_ALPHA_TPREL_LO16, mgl@1371: + BFD_RELOC_ALPHA_TPREL16, mgl@1371: + mgl@1371: +/* Bits 27..2 of the relocation address shifted right 2 bits; mgl@1371: +simple reloc otherwise. */ mgl@1371: + BFD_RELOC_MIPS_JMP, mgl@1371: + mgl@1371: +/* The MIPS16 jump instruction. */ mgl@1371: + BFD_RELOC_MIPS16_JMP, mgl@1371: + mgl@1371: +/* MIPS16 GP relative reloc. */ mgl@1371: + BFD_RELOC_MIPS16_GPREL, mgl@1371: + mgl@1371: +/* High 16 bits of 32-bit value; simple reloc. */ mgl@1371: + BFD_RELOC_HI16, mgl@1371: + mgl@1371: +/* High 16 bits of 32-bit value but the low 16 bits will be sign mgl@1371: +extended and added to form the final result. If the low 16 mgl@1371: +bits form a negative number, we need to add one to the high value mgl@1371: +to compensate for the borrow when the low bits are added. */ mgl@1371: + BFD_RELOC_HI16_S, mgl@1371: + mgl@1371: +/* Low 16 bits. */ mgl@1371: + BFD_RELOC_LO16, mgl@1371: + mgl@1371: +/* High 16 bits of 32-bit pc-relative value */ mgl@1371: + BFD_RELOC_HI16_PCREL, mgl@1371: + mgl@1371: +/* High 16 bits of 32-bit pc-relative value, adjusted */ mgl@1371: + BFD_RELOC_HI16_S_PCREL, mgl@1371: + mgl@1371: +/* Low 16 bits of pc-relative value */ mgl@1371: + BFD_RELOC_LO16_PCREL, mgl@1371: + mgl@1371: +/* MIPS16 high 16 bits of 32-bit value. */ mgl@1371: + BFD_RELOC_MIPS16_HI16, mgl@1371: + mgl@1371: +/* MIPS16 high 16 bits of 32-bit value but the low 16 bits will be sign mgl@1371: +extended and added to form the final result. If the low 16 mgl@1371: +bits form a negative number, we need to add one to the high value mgl@1371: +to compensate for the borrow when the low bits are added. */ mgl@1371: + BFD_RELOC_MIPS16_HI16_S, mgl@1371: + mgl@1371: +/* MIPS16 low 16 bits. */ mgl@1371: + BFD_RELOC_MIPS16_LO16, mgl@1371: + mgl@1371: +/* Relocation against a MIPS literal section. */ mgl@1371: + BFD_RELOC_MIPS_LITERAL, mgl@1371: + mgl@1371: +/* MIPS ELF relocations. */ mgl@1371: + BFD_RELOC_MIPS_GOT16, mgl@1371: + BFD_RELOC_MIPS_CALL16, mgl@1371: + BFD_RELOC_MIPS_GOT_HI16, mgl@1371: + BFD_RELOC_MIPS_GOT_LO16, mgl@1371: + BFD_RELOC_MIPS_CALL_HI16, mgl@1371: + BFD_RELOC_MIPS_CALL_LO16, mgl@1371: + BFD_RELOC_MIPS_SUB, mgl@1371: + BFD_RELOC_MIPS_GOT_PAGE, mgl@1371: + BFD_RELOC_MIPS_GOT_OFST, mgl@1371: + BFD_RELOC_MIPS_GOT_DISP, mgl@1371: + BFD_RELOC_MIPS_SHIFT5, mgl@1371: + BFD_RELOC_MIPS_SHIFT6, mgl@1371: + BFD_RELOC_MIPS_INSERT_A, mgl@1371: + BFD_RELOC_MIPS_INSERT_B, mgl@1371: + BFD_RELOC_MIPS_DELETE, mgl@1371: + BFD_RELOC_MIPS_HIGHEST, mgl@1371: + BFD_RELOC_MIPS_HIGHER, mgl@1371: + BFD_RELOC_MIPS_SCN_DISP, mgl@1371: + BFD_RELOC_MIPS_REL16, mgl@1371: + BFD_RELOC_MIPS_RELGOT, mgl@1371: + BFD_RELOC_MIPS_JALR, mgl@1371: + BFD_RELOC_MIPS_TLS_DTPMOD32, mgl@1371: + BFD_RELOC_MIPS_TLS_DTPREL32, mgl@1371: + BFD_RELOC_MIPS_TLS_DTPMOD64, mgl@1371: + BFD_RELOC_MIPS_TLS_DTPREL64, mgl@1371: + BFD_RELOC_MIPS_TLS_GD, mgl@1371: + BFD_RELOC_MIPS_TLS_LDM, mgl@1371: + BFD_RELOC_MIPS_TLS_DTPREL_HI16, mgl@1371: + BFD_RELOC_MIPS_TLS_DTPREL_LO16, mgl@1371: + BFD_RELOC_MIPS_TLS_GOTTPREL, mgl@1371: + BFD_RELOC_MIPS_TLS_TPREL32, mgl@1371: + BFD_RELOC_MIPS_TLS_TPREL64, mgl@1371: + BFD_RELOC_MIPS_TLS_TPREL_HI16, mgl@1371: + BFD_RELOC_MIPS_TLS_TPREL_LO16, mgl@1371: + mgl@1371: + mgl@1371: +/* MIPS ELF relocations (VxWorks extensions). */ mgl@1371: + BFD_RELOC_MIPS_COPY, mgl@1371: + BFD_RELOC_MIPS_JUMP_SLOT, mgl@1371: + mgl@1371: + mgl@1371: +/* Fujitsu Frv Relocations. */ mgl@1371: + BFD_RELOC_FRV_LABEL16, mgl@1371: + BFD_RELOC_FRV_LABEL24, mgl@1371: + BFD_RELOC_FRV_LO16, mgl@1371: + BFD_RELOC_FRV_HI16, mgl@1371: + BFD_RELOC_FRV_GPREL12, mgl@1371: + BFD_RELOC_FRV_GPRELU12, mgl@1371: + BFD_RELOC_FRV_GPREL32, mgl@1371: + BFD_RELOC_FRV_GPRELHI, mgl@1371: + BFD_RELOC_FRV_GPRELLO, mgl@1371: + BFD_RELOC_FRV_GOT12, mgl@1371: + BFD_RELOC_FRV_GOTHI, mgl@1371: + BFD_RELOC_FRV_GOTLO, mgl@1371: + BFD_RELOC_FRV_FUNCDESC, mgl@1371: + BFD_RELOC_FRV_FUNCDESC_GOT12, mgl@1371: + BFD_RELOC_FRV_FUNCDESC_GOTHI, mgl@1371: + BFD_RELOC_FRV_FUNCDESC_GOTLO, mgl@1371: + BFD_RELOC_FRV_FUNCDESC_VALUE, mgl@1371: + BFD_RELOC_FRV_FUNCDESC_GOTOFF12, mgl@1371: + BFD_RELOC_FRV_FUNCDESC_GOTOFFHI, mgl@1371: + BFD_RELOC_FRV_FUNCDESC_GOTOFFLO, mgl@1371: + BFD_RELOC_FRV_GOTOFF12, mgl@1371: + BFD_RELOC_FRV_GOTOFFHI, mgl@1371: + BFD_RELOC_FRV_GOTOFFLO, mgl@1371: + BFD_RELOC_FRV_GETTLSOFF, mgl@1371: + BFD_RELOC_FRV_TLSDESC_VALUE, mgl@1371: + BFD_RELOC_FRV_GOTTLSDESC12, mgl@1371: + BFD_RELOC_FRV_GOTTLSDESCHI, mgl@1371: + BFD_RELOC_FRV_GOTTLSDESCLO, mgl@1371: + BFD_RELOC_FRV_TLSMOFF12, mgl@1371: + BFD_RELOC_FRV_TLSMOFFHI, mgl@1371: + BFD_RELOC_FRV_TLSMOFFLO, mgl@1371: + BFD_RELOC_FRV_GOTTLSOFF12, mgl@1371: + BFD_RELOC_FRV_GOTTLSOFFHI, mgl@1371: + BFD_RELOC_FRV_GOTTLSOFFLO, mgl@1371: + BFD_RELOC_FRV_TLSOFF, mgl@1371: + BFD_RELOC_FRV_TLSDESC_RELAX, mgl@1371: + BFD_RELOC_FRV_GETTLSOFF_RELAX, mgl@1371: + BFD_RELOC_FRV_TLSOFF_RELAX, mgl@1371: + BFD_RELOC_FRV_TLSMOFF, mgl@1371: + mgl@1371: + mgl@1371: +/* This is a 24bit GOT-relative reloc for the mn10300. */ mgl@1371: + BFD_RELOC_MN10300_GOTOFF24, mgl@1371: + mgl@1371: +/* This is a 32bit GOT-relative reloc for the mn10300, offset by two bytes mgl@1371: +in the instruction. */ mgl@1371: + BFD_RELOC_MN10300_GOT32, mgl@1371: + mgl@1371: +/* This is a 24bit GOT-relative reloc for the mn10300, offset by two bytes mgl@1371: +in the instruction. */ mgl@1371: + BFD_RELOC_MN10300_GOT24, mgl@1371: + mgl@1371: +/* This is a 16bit GOT-relative reloc for the mn10300, offset by two bytes mgl@1371: +in the instruction. */ mgl@1371: + BFD_RELOC_MN10300_GOT16, mgl@1371: + mgl@1371: +/* Copy symbol at runtime. */ mgl@1371: + BFD_RELOC_MN10300_COPY, mgl@1371: + mgl@1371: +/* Create GOT entry. */ mgl@1371: + BFD_RELOC_MN10300_GLOB_DAT, mgl@1371: + mgl@1371: +/* Create PLT entry. */ mgl@1371: + BFD_RELOC_MN10300_JMP_SLOT, mgl@1371: + mgl@1371: +/* Adjust by program base. */ mgl@1371: + BFD_RELOC_MN10300_RELATIVE, mgl@1371: + mgl@1371: + mgl@1371: +/* i386/elf relocations */ mgl@1371: + BFD_RELOC_386_GOT32, mgl@1371: + BFD_RELOC_386_PLT32, mgl@1371: + BFD_RELOC_386_COPY, mgl@1371: + BFD_RELOC_386_GLOB_DAT, mgl@1371: + BFD_RELOC_386_JUMP_SLOT, mgl@1371: + BFD_RELOC_386_RELATIVE, mgl@1371: + BFD_RELOC_386_GOTOFF, mgl@1371: + BFD_RELOC_386_GOTPC, mgl@1371: + BFD_RELOC_386_TLS_TPOFF, mgl@1371: + BFD_RELOC_386_TLS_IE, mgl@1371: + BFD_RELOC_386_TLS_GOTIE, mgl@1371: + BFD_RELOC_386_TLS_LE, mgl@1371: + BFD_RELOC_386_TLS_GD, mgl@1371: + BFD_RELOC_386_TLS_LDM, mgl@1371: + BFD_RELOC_386_TLS_LDO_32, mgl@1371: + BFD_RELOC_386_TLS_IE_32, mgl@1371: + BFD_RELOC_386_TLS_LE_32, mgl@1371: + BFD_RELOC_386_TLS_DTPMOD32, mgl@1371: + BFD_RELOC_386_TLS_DTPOFF32, mgl@1371: + BFD_RELOC_386_TLS_TPOFF32, mgl@1371: + BFD_RELOC_386_TLS_GOTDESC, mgl@1371: + BFD_RELOC_386_TLS_DESC_CALL, mgl@1371: + BFD_RELOC_386_TLS_DESC, mgl@1371: + mgl@1371: +/* x86-64/elf relocations */ mgl@1371: + BFD_RELOC_X86_64_GOT32, mgl@1371: + BFD_RELOC_X86_64_PLT32, mgl@1371: + BFD_RELOC_X86_64_COPY, mgl@1371: + BFD_RELOC_X86_64_GLOB_DAT, mgl@1371: + BFD_RELOC_X86_64_JUMP_SLOT, mgl@1371: + BFD_RELOC_X86_64_RELATIVE, mgl@1371: + BFD_RELOC_X86_64_GOTPCREL, mgl@1371: + BFD_RELOC_X86_64_32S, mgl@1371: + BFD_RELOC_X86_64_DTPMOD64, mgl@1371: + BFD_RELOC_X86_64_DTPOFF64, mgl@1371: + BFD_RELOC_X86_64_TPOFF64, mgl@1371: + BFD_RELOC_X86_64_TLSGD, mgl@1371: + BFD_RELOC_X86_64_TLSLD, mgl@1371: + BFD_RELOC_X86_64_DTPOFF32, mgl@1371: + BFD_RELOC_X86_64_GOTTPOFF, mgl@1371: + BFD_RELOC_X86_64_TPOFF32, mgl@1371: + BFD_RELOC_X86_64_GOTOFF64, mgl@1371: + BFD_RELOC_X86_64_GOTPC32, mgl@1371: + BFD_RELOC_X86_64_GOT64, mgl@1371: + BFD_RELOC_X86_64_GOTPCREL64, mgl@1371: + BFD_RELOC_X86_64_GOTPC64, mgl@1371: + BFD_RELOC_X86_64_GOTPLT64, mgl@1371: + BFD_RELOC_X86_64_PLTOFF64, mgl@1371: + BFD_RELOC_X86_64_GOTPC32_TLSDESC, mgl@1371: + BFD_RELOC_X86_64_TLSDESC_CALL, mgl@1371: + BFD_RELOC_X86_64_TLSDESC, mgl@1371: + mgl@1371: +/* ns32k relocations */ mgl@1371: + BFD_RELOC_NS32K_IMM_8, mgl@1371: + BFD_RELOC_NS32K_IMM_16, mgl@1371: + BFD_RELOC_NS32K_IMM_32, mgl@1371: + BFD_RELOC_NS32K_IMM_8_PCREL, mgl@1371: + BFD_RELOC_NS32K_IMM_16_PCREL, mgl@1371: + BFD_RELOC_NS32K_IMM_32_PCREL, mgl@1371: + BFD_RELOC_NS32K_DISP_8, mgl@1371: + BFD_RELOC_NS32K_DISP_16, mgl@1371: + BFD_RELOC_NS32K_DISP_32, mgl@1371: + BFD_RELOC_NS32K_DISP_8_PCREL, mgl@1371: + BFD_RELOC_NS32K_DISP_16_PCREL, mgl@1371: + BFD_RELOC_NS32K_DISP_32_PCREL, mgl@1371: + mgl@1371: +/* PDP11 relocations */ mgl@1371: + BFD_RELOC_PDP11_DISP_8_PCREL, mgl@1371: + BFD_RELOC_PDP11_DISP_6_PCREL, mgl@1371: + mgl@1371: +/* Picojava relocs. Not all of these appear in object files. */ mgl@1371: + BFD_RELOC_PJ_CODE_HI16, mgl@1371: + BFD_RELOC_PJ_CODE_LO16, mgl@1371: + BFD_RELOC_PJ_CODE_DIR16, mgl@1371: + BFD_RELOC_PJ_CODE_DIR32, mgl@1371: + BFD_RELOC_PJ_CODE_REL16, mgl@1371: + BFD_RELOC_PJ_CODE_REL32, mgl@1371: + mgl@1371: +/* Power(rs6000) and PowerPC relocations. */ mgl@1371: + BFD_RELOC_PPC_B26, mgl@1371: + BFD_RELOC_PPC_BA26, mgl@1371: + BFD_RELOC_PPC_TOC16, mgl@1371: + BFD_RELOC_PPC_B16, mgl@1371: + BFD_RELOC_PPC_B16_BRTAKEN, mgl@1371: + BFD_RELOC_PPC_B16_BRNTAKEN, mgl@1371: + BFD_RELOC_PPC_BA16, mgl@1371: + BFD_RELOC_PPC_BA16_BRTAKEN, mgl@1371: + BFD_RELOC_PPC_BA16_BRNTAKEN, mgl@1371: + BFD_RELOC_PPC_COPY, mgl@1371: + BFD_RELOC_PPC_GLOB_DAT, mgl@1371: + BFD_RELOC_PPC_JMP_SLOT, mgl@1371: + BFD_RELOC_PPC_RELATIVE, mgl@1371: + BFD_RELOC_PPC_LOCAL24PC, mgl@1371: + BFD_RELOC_PPC_EMB_NADDR32, mgl@1371: + BFD_RELOC_PPC_EMB_NADDR16, mgl@1371: + BFD_RELOC_PPC_EMB_NADDR16_LO, mgl@1371: + BFD_RELOC_PPC_EMB_NADDR16_HI, mgl@1371: + BFD_RELOC_PPC_EMB_NADDR16_HA, mgl@1371: + BFD_RELOC_PPC_EMB_SDAI16, mgl@1371: + BFD_RELOC_PPC_EMB_SDA2I16, mgl@1371: + BFD_RELOC_PPC_EMB_SDA2REL, mgl@1371: + BFD_RELOC_PPC_EMB_SDA21, mgl@1371: + BFD_RELOC_PPC_EMB_MRKREF, mgl@1371: + BFD_RELOC_PPC_EMB_RELSEC16, mgl@1371: + BFD_RELOC_PPC_EMB_RELST_LO, mgl@1371: + BFD_RELOC_PPC_EMB_RELST_HI, mgl@1371: + BFD_RELOC_PPC_EMB_RELST_HA, mgl@1371: + BFD_RELOC_PPC_EMB_BIT_FLD, mgl@1371: + BFD_RELOC_PPC_EMB_RELSDA, mgl@1371: + BFD_RELOC_PPC64_HIGHER, mgl@1371: + BFD_RELOC_PPC64_HIGHER_S, mgl@1371: + BFD_RELOC_PPC64_HIGHEST, mgl@1371: + BFD_RELOC_PPC64_HIGHEST_S, mgl@1371: + BFD_RELOC_PPC64_TOC16_LO, mgl@1371: + BFD_RELOC_PPC64_TOC16_HI, mgl@1371: + BFD_RELOC_PPC64_TOC16_HA, mgl@1371: + BFD_RELOC_PPC64_TOC, mgl@1371: + BFD_RELOC_PPC64_PLTGOT16, mgl@1371: + BFD_RELOC_PPC64_PLTGOT16_LO, mgl@1371: + BFD_RELOC_PPC64_PLTGOT16_HI, mgl@1371: + BFD_RELOC_PPC64_PLTGOT16_HA, mgl@1371: + BFD_RELOC_PPC64_ADDR16_DS, mgl@1371: + BFD_RELOC_PPC64_ADDR16_LO_DS, mgl@1371: + BFD_RELOC_PPC64_GOT16_DS, mgl@1371: + BFD_RELOC_PPC64_GOT16_LO_DS, mgl@1371: + BFD_RELOC_PPC64_PLT16_LO_DS, mgl@1371: + BFD_RELOC_PPC64_SECTOFF_DS, mgl@1371: + BFD_RELOC_PPC64_SECTOFF_LO_DS, mgl@1371: + BFD_RELOC_PPC64_TOC16_DS, mgl@1371: + BFD_RELOC_PPC64_TOC16_LO_DS, mgl@1371: + BFD_RELOC_PPC64_PLTGOT16_DS, mgl@1371: + BFD_RELOC_PPC64_PLTGOT16_LO_DS, mgl@1371: + mgl@1371: +/* PowerPC and PowerPC64 thread-local storage relocations. */ mgl@1371: + BFD_RELOC_PPC_TLS, mgl@1371: + BFD_RELOC_PPC_DTPMOD, mgl@1371: + BFD_RELOC_PPC_TPREL16, mgl@1371: + BFD_RELOC_PPC_TPREL16_LO, mgl@1371: + BFD_RELOC_PPC_TPREL16_HI, mgl@1371: + BFD_RELOC_PPC_TPREL16_HA, mgl@1371: + BFD_RELOC_PPC_TPREL, mgl@1371: + BFD_RELOC_PPC_DTPREL16, mgl@1371: + BFD_RELOC_PPC_DTPREL16_LO, mgl@1371: + BFD_RELOC_PPC_DTPREL16_HI, mgl@1371: + BFD_RELOC_PPC_DTPREL16_HA, mgl@1371: + BFD_RELOC_PPC_DTPREL, mgl@1371: + BFD_RELOC_PPC_GOT_TLSGD16, mgl@1371: + BFD_RELOC_PPC_GOT_TLSGD16_LO, mgl@1371: + BFD_RELOC_PPC_GOT_TLSGD16_HI, mgl@1371: + BFD_RELOC_PPC_GOT_TLSGD16_HA, mgl@1371: + BFD_RELOC_PPC_GOT_TLSLD16, mgl@1371: + BFD_RELOC_PPC_GOT_TLSLD16_LO, mgl@1371: + BFD_RELOC_PPC_GOT_TLSLD16_HI, mgl@1371: + BFD_RELOC_PPC_GOT_TLSLD16_HA, mgl@1371: + BFD_RELOC_PPC_GOT_TPREL16, mgl@1371: + BFD_RELOC_PPC_GOT_TPREL16_LO, mgl@1371: + BFD_RELOC_PPC_GOT_TPREL16_HI, mgl@1371: + BFD_RELOC_PPC_GOT_TPREL16_HA, mgl@1371: + BFD_RELOC_PPC_GOT_DTPREL16, mgl@1371: + BFD_RELOC_PPC_GOT_DTPREL16_LO, mgl@1371: + BFD_RELOC_PPC_GOT_DTPREL16_HI, mgl@1371: + BFD_RELOC_PPC_GOT_DTPREL16_HA, mgl@1371: + BFD_RELOC_PPC64_TPREL16_DS, mgl@1371: + BFD_RELOC_PPC64_TPREL16_LO_DS, mgl@1371: + BFD_RELOC_PPC64_TPREL16_HIGHER, mgl@1371: + BFD_RELOC_PPC64_TPREL16_HIGHERA, mgl@1371: + BFD_RELOC_PPC64_TPREL16_HIGHEST, mgl@1371: + BFD_RELOC_PPC64_TPREL16_HIGHESTA, mgl@1371: + BFD_RELOC_PPC64_DTPREL16_DS, mgl@1371: + BFD_RELOC_PPC64_DTPREL16_LO_DS, mgl@1371: + BFD_RELOC_PPC64_DTPREL16_HIGHER, mgl@1371: + BFD_RELOC_PPC64_DTPREL16_HIGHERA, mgl@1371: + BFD_RELOC_PPC64_DTPREL16_HIGHEST, mgl@1371: + BFD_RELOC_PPC64_DTPREL16_HIGHESTA, mgl@1371: + mgl@1371: +/* IBM 370/390 relocations */ mgl@1371: + BFD_RELOC_I370_D12, mgl@1371: + mgl@1371: +/* The type of reloc used to build a constructor table - at the moment mgl@1371: +probably a 32 bit wide absolute relocation, but the target can choose. mgl@1371: +It generally does map to one of the other relocation types. */ mgl@1371: + BFD_RELOC_CTOR, mgl@1371: + mgl@1371: +/* ARM 26 bit pc-relative branch. The lowest two bits must be zero and are mgl@1371: +not stored in the instruction. */ mgl@1371: + BFD_RELOC_ARM_PCREL_BRANCH, mgl@1371: + mgl@1371: +/* ARM 26 bit pc-relative branch. The lowest bit must be zero and is mgl@1371: +not stored in the instruction. The 2nd lowest bit comes from a 1 bit mgl@1371: +field in the instruction. */ mgl@1371: + BFD_RELOC_ARM_PCREL_BLX, mgl@1371: + mgl@1371: +/* Thumb 22 bit pc-relative branch. The lowest bit must be zero and is mgl@1371: +not stored in the instruction. The 2nd lowest bit comes from a 1 bit mgl@1371: +field in the instruction. */ mgl@1371: + BFD_RELOC_THUMB_PCREL_BLX, mgl@1371: + mgl@1371: +/* ARM 26-bit pc-relative branch for an unconditional BL or BLX instruction. */ mgl@1371: + BFD_RELOC_ARM_PCREL_CALL, mgl@1371: + mgl@1371: +/* ARM 26-bit pc-relative branch for B or conditional BL instruction. */ mgl@1371: + BFD_RELOC_ARM_PCREL_JUMP, mgl@1371: + mgl@1371: +/* Thumb 7-, 9-, 12-, 20-, 23-, and 25-bit pc-relative branches. mgl@1371: +The lowest bit must be zero and is not stored in the instruction. mgl@1371: +Note that the corresponding ELF R_ARM_THM_JUMPnn constant has an mgl@1371: +"nn" one smaller in all cases. Note further that BRANCH23 mgl@1371: +corresponds to R_ARM_THM_CALL. */ mgl@1371: + BFD_RELOC_THUMB_PCREL_BRANCH7, mgl@1371: + BFD_RELOC_THUMB_PCREL_BRANCH9, mgl@1371: + BFD_RELOC_THUMB_PCREL_BRANCH12, mgl@1371: + BFD_RELOC_THUMB_PCREL_BRANCH20, mgl@1371: + BFD_RELOC_THUMB_PCREL_BRANCH23, mgl@1371: + BFD_RELOC_THUMB_PCREL_BRANCH25, mgl@1371: + mgl@1371: +/* 12-bit immediate offset, used in ARM-format ldr and str instructions. */ mgl@1371: + BFD_RELOC_ARM_OFFSET_IMM, mgl@1371: + mgl@1371: +/* 5-bit immediate offset, used in Thumb-format ldr and str instructions. */ mgl@1371: + BFD_RELOC_ARM_THUMB_OFFSET, mgl@1371: + mgl@1371: +/* Pc-relative or absolute relocation depending on target. Used for mgl@1371: +entries in .init_array sections. */ mgl@1371: + BFD_RELOC_ARM_TARGET1, mgl@1371: + mgl@1371: +/* Read-only segment base relative address. */ mgl@1371: + BFD_RELOC_ARM_ROSEGREL32, mgl@1371: + mgl@1371: +/* Data segment base relative address. */ mgl@1371: + BFD_RELOC_ARM_SBREL32, mgl@1371: + mgl@1371: +/* This reloc is used for references to RTTI data from exception handling mgl@1371: +tables. The actual definition depends on the target. It may be a mgl@1371: +pc-relative or some form of GOT-indirect relocation. */ mgl@1371: + BFD_RELOC_ARM_TARGET2, mgl@1371: + mgl@1371: +/* 31-bit PC relative address. */ mgl@1371: + BFD_RELOC_ARM_PREL31, mgl@1371: + mgl@1371: +/* Low and High halfword relocations for MOVW and MOVT instructions. */ mgl@1371: + BFD_RELOC_ARM_MOVW, mgl@1371: + BFD_RELOC_ARM_MOVT, mgl@1371: + BFD_RELOC_ARM_MOVW_PCREL, mgl@1371: + BFD_RELOC_ARM_MOVT_PCREL, mgl@1371: + BFD_RELOC_ARM_THUMB_MOVW, mgl@1371: + BFD_RELOC_ARM_THUMB_MOVT, mgl@1371: + BFD_RELOC_ARM_THUMB_MOVW_PCREL, mgl@1371: + BFD_RELOC_ARM_THUMB_MOVT_PCREL, mgl@1371: + mgl@1371: +/* Relocations for setting up GOTs and PLTs for shared libraries. */ mgl@1371: + BFD_RELOC_ARM_JUMP_SLOT, mgl@1371: + BFD_RELOC_ARM_GLOB_DAT, mgl@1371: + BFD_RELOC_ARM_GOT32, mgl@1371: + BFD_RELOC_ARM_PLT32, mgl@1371: + BFD_RELOC_ARM_RELATIVE, mgl@1371: + BFD_RELOC_ARM_GOTOFF, mgl@1371: + BFD_RELOC_ARM_GOTPC, mgl@1371: + mgl@1371: +/* ARM thread-local storage relocations. */ mgl@1371: + BFD_RELOC_ARM_TLS_GD32, mgl@1371: + BFD_RELOC_ARM_TLS_LDO32, mgl@1371: + BFD_RELOC_ARM_TLS_LDM32, mgl@1371: + BFD_RELOC_ARM_TLS_DTPOFF32, mgl@1371: + BFD_RELOC_ARM_TLS_DTPMOD32, mgl@1371: + BFD_RELOC_ARM_TLS_TPOFF32, mgl@1371: + BFD_RELOC_ARM_TLS_IE32, mgl@1371: + BFD_RELOC_ARM_TLS_LE32, mgl@1371: + mgl@1371: +/* ARM group relocations. */ mgl@1371: + BFD_RELOC_ARM_ALU_PC_G0_NC, mgl@1371: + BFD_RELOC_ARM_ALU_PC_G0, mgl@1371: + BFD_RELOC_ARM_ALU_PC_G1_NC, mgl@1371: + BFD_RELOC_ARM_ALU_PC_G1, mgl@1371: + BFD_RELOC_ARM_ALU_PC_G2, mgl@1371: + BFD_RELOC_ARM_LDR_PC_G0, mgl@1371: + BFD_RELOC_ARM_LDR_PC_G1, mgl@1371: + BFD_RELOC_ARM_LDR_PC_G2, mgl@1371: + BFD_RELOC_ARM_LDRS_PC_G0, mgl@1371: + BFD_RELOC_ARM_LDRS_PC_G1, mgl@1371: + BFD_RELOC_ARM_LDRS_PC_G2, mgl@1371: + BFD_RELOC_ARM_LDC_PC_G0, mgl@1371: + BFD_RELOC_ARM_LDC_PC_G1, mgl@1371: + BFD_RELOC_ARM_LDC_PC_G2, mgl@1371: + BFD_RELOC_ARM_ALU_SB_G0_NC, mgl@1371: + BFD_RELOC_ARM_ALU_SB_G0, mgl@1371: + BFD_RELOC_ARM_ALU_SB_G1_NC, mgl@1371: + BFD_RELOC_ARM_ALU_SB_G1, mgl@1371: + BFD_RELOC_ARM_ALU_SB_G2, mgl@1371: + BFD_RELOC_ARM_LDR_SB_G0, mgl@1371: + BFD_RELOC_ARM_LDR_SB_G1, mgl@1371: + BFD_RELOC_ARM_LDR_SB_G2, mgl@1371: + BFD_RELOC_ARM_LDRS_SB_G0, mgl@1371: + BFD_RELOC_ARM_LDRS_SB_G1, mgl@1371: + BFD_RELOC_ARM_LDRS_SB_G2, mgl@1371: + BFD_RELOC_ARM_LDC_SB_G0, mgl@1371: + BFD_RELOC_ARM_LDC_SB_G1, mgl@1371: + BFD_RELOC_ARM_LDC_SB_G2, mgl@1371: + mgl@1371: +/* These relocs are only used within the ARM assembler. They are not mgl@1371: +(at present) written to any object files. */ mgl@1371: + BFD_RELOC_ARM_IMMEDIATE, mgl@1371: + BFD_RELOC_ARM_ADRL_IMMEDIATE, mgl@1371: + BFD_RELOC_ARM_T32_IMMEDIATE, mgl@1371: + BFD_RELOC_ARM_T32_ADD_IMM, mgl@1371: + BFD_RELOC_ARM_T32_IMM12, mgl@1371: + BFD_RELOC_ARM_T32_ADD_PC12, mgl@1371: + BFD_RELOC_ARM_SHIFT_IMM, mgl@1371: + BFD_RELOC_ARM_SMC, mgl@1371: + BFD_RELOC_ARM_SWI, mgl@1371: + BFD_RELOC_ARM_MULTI, mgl@1371: + BFD_RELOC_ARM_CP_OFF_IMM, mgl@1371: + BFD_RELOC_ARM_CP_OFF_IMM_S2, mgl@1371: + BFD_RELOC_ARM_T32_CP_OFF_IMM, mgl@1371: + BFD_RELOC_ARM_T32_CP_OFF_IMM_S2, mgl@1371: + BFD_RELOC_ARM_ADR_IMM, mgl@1371: + BFD_RELOC_ARM_LDR_IMM, mgl@1371: + BFD_RELOC_ARM_LITERAL, mgl@1371: + BFD_RELOC_ARM_IN_POOL, mgl@1371: + BFD_RELOC_ARM_OFFSET_IMM8, mgl@1371: + BFD_RELOC_ARM_T32_OFFSET_U8, mgl@1371: + BFD_RELOC_ARM_T32_OFFSET_IMM, mgl@1371: + BFD_RELOC_ARM_HWLITERAL, mgl@1371: + BFD_RELOC_ARM_THUMB_ADD, mgl@1371: + BFD_RELOC_ARM_THUMB_IMM, mgl@1371: + BFD_RELOC_ARM_THUMB_SHIFT, mgl@1371: + mgl@1371: +/* Renesas / SuperH SH relocs. Not all of these appear in object files. */ mgl@1371: + BFD_RELOC_SH_PCDISP8BY2, mgl@1371: + BFD_RELOC_SH_PCDISP12BY2, mgl@1371: + BFD_RELOC_SH_IMM3, mgl@1371: + BFD_RELOC_SH_IMM3U, mgl@1371: + BFD_RELOC_SH_DISP12, mgl@1371: + BFD_RELOC_SH_DISP12BY2, mgl@1371: + BFD_RELOC_SH_DISP12BY4, mgl@1371: + BFD_RELOC_SH_DISP12BY8, mgl@1371: + BFD_RELOC_SH_DISP20, mgl@1371: + BFD_RELOC_SH_DISP20BY8, mgl@1371: + BFD_RELOC_SH_IMM4, mgl@1371: + BFD_RELOC_SH_IMM4BY2, mgl@1371: + BFD_RELOC_SH_IMM4BY4, mgl@1371: + BFD_RELOC_SH_IMM8, mgl@1371: + BFD_RELOC_SH_IMM8BY2, mgl@1371: + BFD_RELOC_SH_IMM8BY4, mgl@1371: + BFD_RELOC_SH_PCRELIMM8BY2, mgl@1371: + BFD_RELOC_SH_PCRELIMM8BY4, mgl@1371: + BFD_RELOC_SH_SWITCH16, mgl@1371: + BFD_RELOC_SH_SWITCH32, mgl@1371: + BFD_RELOC_SH_USES, mgl@1371: + BFD_RELOC_SH_COUNT, mgl@1371: + BFD_RELOC_SH_ALIGN, mgl@1371: + BFD_RELOC_SH_CODE, mgl@1371: + BFD_RELOC_SH_DATA, mgl@1371: + BFD_RELOC_SH_LABEL, mgl@1371: + BFD_RELOC_SH_LOOP_START, mgl@1371: + BFD_RELOC_SH_LOOP_END, mgl@1371: + BFD_RELOC_SH_COPY, mgl@1371: + BFD_RELOC_SH_GLOB_DAT, mgl@1371: + BFD_RELOC_SH_JMP_SLOT, mgl@1371: + BFD_RELOC_SH_RELATIVE, mgl@1371: + BFD_RELOC_SH_GOTPC, mgl@1371: + BFD_RELOC_SH_GOT_LOW16, mgl@1371: + BFD_RELOC_SH_GOT_MEDLOW16, mgl@1371: + BFD_RELOC_SH_GOT_MEDHI16, mgl@1371: + BFD_RELOC_SH_GOT_HI16, mgl@1371: + BFD_RELOC_SH_GOTPLT_LOW16, mgl@1371: + BFD_RELOC_SH_GOTPLT_MEDLOW16, mgl@1371: + BFD_RELOC_SH_GOTPLT_MEDHI16, mgl@1371: + BFD_RELOC_SH_GOTPLT_HI16, mgl@1371: + BFD_RELOC_SH_PLT_LOW16, mgl@1371: + BFD_RELOC_SH_PLT_MEDLOW16, mgl@1371: + BFD_RELOC_SH_PLT_MEDHI16, mgl@1371: + BFD_RELOC_SH_PLT_HI16, mgl@1371: + BFD_RELOC_SH_GOTOFF_LOW16, mgl@1371: + BFD_RELOC_SH_GOTOFF_MEDLOW16, mgl@1371: + BFD_RELOC_SH_GOTOFF_MEDHI16, mgl@1371: + BFD_RELOC_SH_GOTOFF_HI16, mgl@1371: + BFD_RELOC_SH_GOTPC_LOW16, mgl@1371: + BFD_RELOC_SH_GOTPC_MEDLOW16, mgl@1371: + BFD_RELOC_SH_GOTPC_MEDHI16, mgl@1371: + BFD_RELOC_SH_GOTPC_HI16, mgl@1371: + BFD_RELOC_SH_COPY64, mgl@1371: + BFD_RELOC_SH_GLOB_DAT64, mgl@1371: + BFD_RELOC_SH_JMP_SLOT64, mgl@1371: + BFD_RELOC_SH_RELATIVE64, mgl@1371: + BFD_RELOC_SH_GOT10BY4, mgl@1371: + BFD_RELOC_SH_GOT10BY8, mgl@1371: + BFD_RELOC_SH_GOTPLT10BY4, mgl@1371: + BFD_RELOC_SH_GOTPLT10BY8, mgl@1371: + BFD_RELOC_SH_GOTPLT32, mgl@1371: + BFD_RELOC_SH_SHMEDIA_CODE, mgl@1371: + BFD_RELOC_SH_IMMU5, mgl@1371: + BFD_RELOC_SH_IMMS6, mgl@1371: + BFD_RELOC_SH_IMMS6BY32, mgl@1371: + BFD_RELOC_SH_IMMU6, mgl@1371: + BFD_RELOC_SH_IMMS10, mgl@1371: + BFD_RELOC_SH_IMMS10BY2, mgl@1371: + BFD_RELOC_SH_IMMS10BY4, mgl@1371: + BFD_RELOC_SH_IMMS10BY8, mgl@1371: + BFD_RELOC_SH_IMMS16, mgl@1371: + BFD_RELOC_SH_IMMU16, mgl@1371: + BFD_RELOC_SH_IMM_LOW16, mgl@1371: + BFD_RELOC_SH_IMM_LOW16_PCREL, mgl@1371: + BFD_RELOC_SH_IMM_MEDLOW16, mgl@1371: + BFD_RELOC_SH_IMM_MEDLOW16_PCREL, mgl@1371: + BFD_RELOC_SH_IMM_MEDHI16, mgl@1371: + BFD_RELOC_SH_IMM_MEDHI16_PCREL, mgl@1371: + BFD_RELOC_SH_IMM_HI16, mgl@1371: + BFD_RELOC_SH_IMM_HI16_PCREL, mgl@1371: + BFD_RELOC_SH_PT_16, mgl@1371: + BFD_RELOC_SH_TLS_GD_32, mgl@1371: + BFD_RELOC_SH_TLS_LD_32, mgl@1371: + BFD_RELOC_SH_TLS_LDO_32, mgl@1371: + BFD_RELOC_SH_TLS_IE_32, mgl@1371: + BFD_RELOC_SH_TLS_LE_32, mgl@1371: + BFD_RELOC_SH_TLS_DTPMOD32, mgl@1371: + BFD_RELOC_SH_TLS_DTPOFF32, mgl@1371: + BFD_RELOC_SH_TLS_TPOFF32, mgl@1371: + mgl@1371: +/* ARC Cores relocs. mgl@1371: +ARC 22 bit pc-relative branch. The lowest two bits must be zero and are mgl@1371: +not stored in the instruction. The high 20 bits are installed in bits 26 mgl@1371: +through 7 of the instruction. */ mgl@1371: + BFD_RELOC_ARC_B22_PCREL, mgl@1371: + mgl@1371: +/* ARC 26 bit absolute branch. The lowest two bits must be zero and are not mgl@1371: +stored in the instruction. The high 24 bits are installed in bits 23 mgl@1371: +through 0. */ mgl@1371: + BFD_RELOC_ARC_B26, mgl@1371: + mgl@1371: +/* ADI Blackfin 16 bit immediate absolute reloc. */ mgl@1371: + BFD_RELOC_BFIN_16_IMM, mgl@1371: + mgl@1371: +/* ADI Blackfin 16 bit immediate absolute reloc higher 16 bits. */ mgl@1371: + BFD_RELOC_BFIN_16_HIGH, mgl@1371: + mgl@1371: +/* ADI Blackfin 'a' part of LSETUP. */ mgl@1371: + BFD_RELOC_BFIN_4_PCREL, mgl@1371: + mgl@1371: +/* ADI Blackfin. */ mgl@1371: + BFD_RELOC_BFIN_5_PCREL, mgl@1371: + mgl@1371: +/* ADI Blackfin 16 bit immediate absolute reloc lower 16 bits. */ mgl@1371: + BFD_RELOC_BFIN_16_LOW, mgl@1371: + mgl@1371: +/* ADI Blackfin. */ mgl@1371: + BFD_RELOC_BFIN_10_PCREL, mgl@1371: + mgl@1371: +/* ADI Blackfin 'b' part of LSETUP. */ mgl@1371: + BFD_RELOC_BFIN_11_PCREL, mgl@1371: + mgl@1371: +/* ADI Blackfin. */ mgl@1371: + BFD_RELOC_BFIN_12_PCREL_JUMP, mgl@1371: + mgl@1371: +/* ADI Blackfin Short jump, pcrel. */ mgl@1371: + BFD_RELOC_BFIN_12_PCREL_JUMP_S, mgl@1371: + mgl@1371: +/* ADI Blackfin Call.x not implemented. */ mgl@1371: + BFD_RELOC_BFIN_24_PCREL_CALL_X, mgl@1371: + mgl@1371: +/* ADI Blackfin Long Jump pcrel. */ mgl@1371: + BFD_RELOC_BFIN_24_PCREL_JUMP_L, mgl@1371: + mgl@1371: +/* ADI Blackfin FD-PIC relocations. */ mgl@1371: + BFD_RELOC_BFIN_GOT17M4, mgl@1371: + BFD_RELOC_BFIN_GOTHI, mgl@1371: + BFD_RELOC_BFIN_GOTLO, mgl@1371: + BFD_RELOC_BFIN_FUNCDESC, mgl@1371: + BFD_RELOC_BFIN_FUNCDESC_GOT17M4, mgl@1371: + BFD_RELOC_BFIN_FUNCDESC_GOTHI, mgl@1371: + BFD_RELOC_BFIN_FUNCDESC_GOTLO, mgl@1371: + BFD_RELOC_BFIN_FUNCDESC_VALUE, mgl@1371: + BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4, mgl@1371: + BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI, mgl@1371: + BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO, mgl@1371: + BFD_RELOC_BFIN_GOTOFF17M4, mgl@1371: + BFD_RELOC_BFIN_GOTOFFHI, mgl@1371: + BFD_RELOC_BFIN_GOTOFFLO, mgl@1371: + mgl@1371: +/* ADI Blackfin GOT relocation. */ mgl@1371: + BFD_RELOC_BFIN_GOT, mgl@1371: + mgl@1371: +/* ADI Blackfin PLTPC relocation. */ mgl@1371: + BFD_RELOC_BFIN_PLTPC, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_PUSH, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_CONST, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_ADD, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_SUB, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_MULT, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_DIV, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_MOD, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_LSHIFT, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_RSHIFT, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_AND, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_OR, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_XOR, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_LAND, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_LOR, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_LEN, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_NEG, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_COMP, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_PAGE, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_HWPAGE, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_ADDR, mgl@1371: + mgl@1371: +/* Mitsubishi D10V relocs. mgl@1371: +This is a 10-bit reloc with the right 2 bits mgl@1371: +assumed to be 0. */ mgl@1371: + BFD_RELOC_D10V_10_PCREL_R, mgl@1371: + mgl@1371: +/* Mitsubishi D10V relocs. mgl@1371: +This is a 10-bit reloc with the right 2 bits mgl@1371: +assumed to be 0. This is the same as the previous reloc mgl@1371: +except it is in the left container, i.e., mgl@1371: +shifted left 15 bits. */ mgl@1371: + BFD_RELOC_D10V_10_PCREL_L, mgl@1371: + mgl@1371: +/* This is an 18-bit reloc with the right 2 bits mgl@1371: +assumed to be 0. */ mgl@1371: + BFD_RELOC_D10V_18, mgl@1371: + mgl@1371: +/* This is an 18-bit reloc with the right 2 bits mgl@1371: +assumed to be 0. */ mgl@1371: + BFD_RELOC_D10V_18_PCREL, mgl@1371: + mgl@1371: +/* Mitsubishi D30V relocs. mgl@1371: +This is a 6-bit absolute reloc. */ mgl@1371: + BFD_RELOC_D30V_6, mgl@1371: + mgl@1371: +/* This is a 6-bit pc-relative reloc with mgl@1371: +the right 3 bits assumed to be 0. */ mgl@1371: + BFD_RELOC_D30V_9_PCREL, mgl@1371: + mgl@1371: +/* This is a 6-bit pc-relative reloc with mgl@1371: +the right 3 bits assumed to be 0. Same mgl@1371: +as the previous reloc but on the right side mgl@1371: +of the container. */ mgl@1371: + BFD_RELOC_D30V_9_PCREL_R, mgl@1371: + mgl@1371: +/* This is a 12-bit absolute reloc with the mgl@1371: +right 3 bitsassumed to be 0. */ mgl@1371: + BFD_RELOC_D30V_15, mgl@1371: + mgl@1371: +/* This is a 12-bit pc-relative reloc with mgl@1371: +the right 3 bits assumed to be 0. */ mgl@1371: + BFD_RELOC_D30V_15_PCREL, mgl@1371: + mgl@1371: +/* This is a 12-bit pc-relative reloc with mgl@1371: +the right 3 bits assumed to be 0. Same mgl@1371: +as the previous reloc but on the right side mgl@1371: +of the container. */ mgl@1371: + BFD_RELOC_D30V_15_PCREL_R, mgl@1371: + mgl@1371: +/* This is an 18-bit absolute reloc with mgl@1371: +the right 3 bits assumed to be 0. */ mgl@1371: + BFD_RELOC_D30V_21, mgl@1371: + mgl@1371: +/* This is an 18-bit pc-relative reloc with mgl@1371: +the right 3 bits assumed to be 0. */ mgl@1371: + BFD_RELOC_D30V_21_PCREL, mgl@1371: + mgl@1371: +/* This is an 18-bit pc-relative reloc with mgl@1371: +the right 3 bits assumed to be 0. Same mgl@1371: +as the previous reloc but on the right side mgl@1371: +of the container. */ mgl@1371: + BFD_RELOC_D30V_21_PCREL_R, mgl@1371: + mgl@1371: +/* This is a 32-bit absolute reloc. */ mgl@1371: + BFD_RELOC_D30V_32, mgl@1371: + mgl@1371: +/* This is a 32-bit pc-relative reloc. */ mgl@1371: + BFD_RELOC_D30V_32_PCREL, mgl@1371: + mgl@1371: +/* DLX relocs */ mgl@1371: + BFD_RELOC_DLX_HI16_S, mgl@1371: + mgl@1371: +/* DLX relocs */ mgl@1371: + BFD_RELOC_DLX_LO16, mgl@1371: + mgl@1371: +/* DLX relocs */ mgl@1371: + BFD_RELOC_DLX_JMP26, mgl@1371: + mgl@1371: +/* Renesas M16C/M32C Relocations. */ mgl@1371: + BFD_RELOC_M32C_HI8, mgl@1371: + BFD_RELOC_M32C_RL_JUMP, mgl@1371: + BFD_RELOC_M32C_RL_1ADDR, mgl@1371: + BFD_RELOC_M32C_RL_2ADDR, mgl@1371: + mgl@1371: +/* Renesas M32R (formerly Mitsubishi M32R) relocs. mgl@1371: +This is a 24 bit absolute address. */ mgl@1371: + BFD_RELOC_M32R_24, mgl@1371: + mgl@1371: +/* This is a 10-bit pc-relative reloc with the right 2 bits assumed to be 0. */ mgl@1371: + BFD_RELOC_M32R_10_PCREL, mgl@1371: + mgl@1371: +/* This is an 18-bit reloc with the right 2 bits assumed to be 0. */ mgl@1371: + BFD_RELOC_M32R_18_PCREL, mgl@1371: + mgl@1371: +/* This is a 26-bit reloc with the right 2 bits assumed to be 0. */ mgl@1371: + BFD_RELOC_M32R_26_PCREL, mgl@1371: + mgl@1371: +/* This is a 16-bit reloc containing the high 16 bits of an address mgl@1371: +used when the lower 16 bits are treated as unsigned. */ mgl@1371: + BFD_RELOC_M32R_HI16_ULO, mgl@1371: + mgl@1371: +/* This is a 16-bit reloc containing the high 16 bits of an address mgl@1371: +used when the lower 16 bits are treated as signed. */ mgl@1371: + BFD_RELOC_M32R_HI16_SLO, mgl@1371: + mgl@1371: +/* This is a 16-bit reloc containing the lower 16 bits of an address. */ mgl@1371: + BFD_RELOC_M32R_LO16, mgl@1371: + mgl@1371: +/* This is a 16-bit reloc containing the small data area offset for use in mgl@1371: +add3, load, and store instructions. */ mgl@1371: + BFD_RELOC_M32R_SDA16, mgl@1371: + mgl@1371: +/* For PIC. */ mgl@1371: + BFD_RELOC_M32R_GOT24, mgl@1371: + BFD_RELOC_M32R_26_PLTREL, mgl@1371: + BFD_RELOC_M32R_COPY, mgl@1371: + BFD_RELOC_M32R_GLOB_DAT, mgl@1371: + BFD_RELOC_M32R_JMP_SLOT, mgl@1371: + BFD_RELOC_M32R_RELATIVE, mgl@1371: + BFD_RELOC_M32R_GOTOFF, mgl@1371: + BFD_RELOC_M32R_GOTOFF_HI_ULO, mgl@1371: + BFD_RELOC_M32R_GOTOFF_HI_SLO, mgl@1371: + BFD_RELOC_M32R_GOTOFF_LO, mgl@1371: + BFD_RELOC_M32R_GOTPC24, mgl@1371: + BFD_RELOC_M32R_GOT16_HI_ULO, mgl@1371: + BFD_RELOC_M32R_GOT16_HI_SLO, mgl@1371: + BFD_RELOC_M32R_GOT16_LO, mgl@1371: + BFD_RELOC_M32R_GOTPC_HI_ULO, mgl@1371: + BFD_RELOC_M32R_GOTPC_HI_SLO, mgl@1371: + BFD_RELOC_M32R_GOTPC_LO, mgl@1371: + mgl@1371: +/* This is a 9-bit reloc */ mgl@1371: + BFD_RELOC_V850_9_PCREL, mgl@1371: + mgl@1371: +/* This is a 22-bit reloc */ mgl@1371: + BFD_RELOC_V850_22_PCREL, mgl@1371: + mgl@1371: +/* This is a 16 bit offset from the short data area pointer. */ mgl@1371: + BFD_RELOC_V850_SDA_16_16_OFFSET, mgl@1371: + mgl@1371: +/* This is a 16 bit offset (of which only 15 bits are used) from the mgl@1371: +short data area pointer. */ mgl@1371: + BFD_RELOC_V850_SDA_15_16_OFFSET, mgl@1371: + mgl@1371: +/* This is a 16 bit offset from the zero data area pointer. */ mgl@1371: + BFD_RELOC_V850_ZDA_16_16_OFFSET, mgl@1371: + mgl@1371: +/* This is a 16 bit offset (of which only 15 bits are used) from the mgl@1371: +zero data area pointer. */ mgl@1371: + BFD_RELOC_V850_ZDA_15_16_OFFSET, mgl@1371: + mgl@1371: +/* This is an 8 bit offset (of which only 6 bits are used) from the mgl@1371: +tiny data area pointer. */ mgl@1371: + BFD_RELOC_V850_TDA_6_8_OFFSET, mgl@1371: + mgl@1371: +/* This is an 8bit offset (of which only 7 bits are used) from the tiny mgl@1371: +data area pointer. */ mgl@1371: + BFD_RELOC_V850_TDA_7_8_OFFSET, mgl@1371: + mgl@1371: +/* This is a 7 bit offset from the tiny data area pointer. */ mgl@1371: + BFD_RELOC_V850_TDA_7_7_OFFSET, mgl@1371: + mgl@1371: +/* This is a 16 bit offset from the tiny data area pointer. */ mgl@1371: + BFD_RELOC_V850_TDA_16_16_OFFSET, mgl@1371: + mgl@1371: +/* This is a 5 bit offset (of which only 4 bits are used) from the tiny mgl@1371: +data area pointer. */ mgl@1371: + BFD_RELOC_V850_TDA_4_5_OFFSET, mgl@1371: + mgl@1371: +/* This is a 4 bit offset from the tiny data area pointer. */ mgl@1371: + BFD_RELOC_V850_TDA_4_4_OFFSET, mgl@1371: + mgl@1371: +/* This is a 16 bit offset from the short data area pointer, with the mgl@1371: +bits placed non-contiguously in the instruction. */ mgl@1371: + BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET, mgl@1371: + mgl@1371: +/* This is a 16 bit offset from the zero data area pointer, with the mgl@1371: +bits placed non-contiguously in the instruction. */ mgl@1371: + BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET, mgl@1371: + mgl@1371: +/* This is a 6 bit offset from the call table base pointer. */ mgl@1371: + BFD_RELOC_V850_CALLT_6_7_OFFSET, mgl@1371: + mgl@1371: +/* This is a 16 bit offset from the call table base pointer. */ mgl@1371: + BFD_RELOC_V850_CALLT_16_16_OFFSET, mgl@1371: + mgl@1371: +/* Used for relaxing indirect function calls. */ mgl@1371: + BFD_RELOC_V850_LONGCALL, mgl@1371: + mgl@1371: +/* Used for relaxing indirect jumps. */ mgl@1371: + BFD_RELOC_V850_LONGJUMP, mgl@1371: + mgl@1371: +/* Used to maintain alignment whilst relaxing. */ mgl@1371: + BFD_RELOC_V850_ALIGN, mgl@1371: + mgl@1371: +/* This is a variation of BFD_RELOC_LO16 that can be used in v850e ld.bu mgl@1371: +instructions. */ mgl@1371: + BFD_RELOC_V850_LO16_SPLIT_OFFSET, mgl@1371: + mgl@1371: +/* This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the mgl@1371: +instruction. */ mgl@1371: + BFD_RELOC_MN10300_32_PCREL, mgl@1371: + mgl@1371: +/* This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the mgl@1371: +instruction. */ mgl@1371: + BFD_RELOC_MN10300_16_PCREL, mgl@1371: + mgl@1371: +/* This is a 8bit DP reloc for the tms320c30, where the most mgl@1371: +significant 8 bits of a 24 bit word are placed into the least mgl@1371: +significant 8 bits of the opcode. */ mgl@1371: + BFD_RELOC_TIC30_LDP, mgl@1371: + mgl@1371: +/* This is a 7bit reloc for the tms320c54x, where the least mgl@1371: +significant 7 bits of a 16 bit word are placed into the least mgl@1371: +significant 7 bits of the opcode. */ mgl@1371: + BFD_RELOC_TIC54X_PARTLS7, mgl@1371: + mgl@1371: +/* This is a 9bit DP reloc for the tms320c54x, where the most mgl@1371: +significant 9 bits of a 16 bit word are placed into the least mgl@1371: +significant 9 bits of the opcode. */ mgl@1371: + BFD_RELOC_TIC54X_PARTMS9, mgl@1371: + mgl@1371: +/* This is an extended address 23-bit reloc for the tms320c54x. */ mgl@1371: + BFD_RELOC_TIC54X_23, mgl@1371: + mgl@1371: +/* This is a 16-bit reloc for the tms320c54x, where the least mgl@1371: +significant 16 bits of a 23-bit extended address are placed into mgl@1371: +the opcode. */ mgl@1371: + BFD_RELOC_TIC54X_16_OF_23, mgl@1371: + mgl@1371: +/* This is a reloc for the tms320c54x, where the most mgl@1371: +significant 7 bits of a 23-bit extended address are placed into mgl@1371: +the opcode. */ mgl@1371: + BFD_RELOC_TIC54X_MS7_OF_23, mgl@1371: + mgl@1371: +/* This is a 48 bit reloc for the FR30 that stores 32 bits. */ mgl@1371: + BFD_RELOC_FR30_48, mgl@1371: + mgl@1371: +/* This is a 32 bit reloc for the FR30 that stores 20 bits split up into mgl@1371: +two sections. */ mgl@1371: + BFD_RELOC_FR30_20, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the FR30 that stores a 6 bit word offset in mgl@1371: +4 bits. */ mgl@1371: + BFD_RELOC_FR30_6_IN_4, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the FR30 that stores an 8 bit byte offset mgl@1371: +into 8 bits. */ mgl@1371: + BFD_RELOC_FR30_8_IN_8, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the FR30 that stores a 9 bit short offset mgl@1371: +into 8 bits. */ mgl@1371: + BFD_RELOC_FR30_9_IN_8, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the FR30 that stores a 10 bit word offset mgl@1371: +into 8 bits. */ mgl@1371: + BFD_RELOC_FR30_10_IN_8, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative mgl@1371: +short offset into 8 bits. */ mgl@1371: + BFD_RELOC_FR30_9_PCREL, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the FR30 that stores a 12 bit pc relative mgl@1371: +short offset into 11 bits. */ mgl@1371: + BFD_RELOC_FR30_12_PCREL, mgl@1371: + mgl@1371: +/* Motorola Mcore relocations. */ mgl@1371: + BFD_RELOC_MCORE_PCREL_IMM8BY4, mgl@1371: + BFD_RELOC_MCORE_PCREL_IMM11BY2, mgl@1371: + BFD_RELOC_MCORE_PCREL_IMM4BY2, mgl@1371: + BFD_RELOC_MCORE_PCREL_32, mgl@1371: + BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2, mgl@1371: + BFD_RELOC_MCORE_RVA, mgl@1371: + mgl@1371: +/* Toshiba Media Processor Relocations. */ mgl@1371: + BFD_RELOC_MEP_8, mgl@1371: + BFD_RELOC_MEP_16, mgl@1371: + BFD_RELOC_MEP_32, mgl@1371: + BFD_RELOC_MEP_PCREL8A2, mgl@1371: + BFD_RELOC_MEP_PCREL12A2, mgl@1371: + BFD_RELOC_MEP_PCREL17A2, mgl@1371: + BFD_RELOC_MEP_PCREL24A2, mgl@1371: + BFD_RELOC_MEP_PCABS24A2, mgl@1371: + BFD_RELOC_MEP_LOW16, mgl@1371: + BFD_RELOC_MEP_HI16U, mgl@1371: + BFD_RELOC_MEP_HI16S, mgl@1371: + BFD_RELOC_MEP_GPREL, mgl@1371: + BFD_RELOC_MEP_TPREL, mgl@1371: + BFD_RELOC_MEP_TPREL7, mgl@1371: + BFD_RELOC_MEP_TPREL7A2, mgl@1371: + BFD_RELOC_MEP_TPREL7A4, mgl@1371: + BFD_RELOC_MEP_UIMM24, mgl@1371: + BFD_RELOC_MEP_ADDR24A4, mgl@1371: + BFD_RELOC_MEP_GNU_VTINHERIT, mgl@1371: + BFD_RELOC_MEP_GNU_VTENTRY, mgl@1371: + mgl@1371: + mgl@1371: +/* These are relocations for the GETA instruction. */ mgl@1371: + BFD_RELOC_MMIX_GETA, mgl@1371: + BFD_RELOC_MMIX_GETA_1, mgl@1371: + BFD_RELOC_MMIX_GETA_2, mgl@1371: + BFD_RELOC_MMIX_GETA_3, mgl@1371: + mgl@1371: +/* These are relocations for a conditional branch instruction. */ mgl@1371: + BFD_RELOC_MMIX_CBRANCH, mgl@1371: + BFD_RELOC_MMIX_CBRANCH_J, mgl@1371: + BFD_RELOC_MMIX_CBRANCH_1, mgl@1371: + BFD_RELOC_MMIX_CBRANCH_2, mgl@1371: + BFD_RELOC_MMIX_CBRANCH_3, mgl@1371: + mgl@1371: +/* These are relocations for the PUSHJ instruction. */ mgl@1371: + BFD_RELOC_MMIX_PUSHJ, mgl@1371: + BFD_RELOC_MMIX_PUSHJ_1, mgl@1371: + BFD_RELOC_MMIX_PUSHJ_2, mgl@1371: + BFD_RELOC_MMIX_PUSHJ_3, mgl@1371: + BFD_RELOC_MMIX_PUSHJ_STUBBABLE, mgl@1371: + mgl@1371: +/* These are relocations for the JMP instruction. */ mgl@1371: + BFD_RELOC_MMIX_JMP, mgl@1371: + BFD_RELOC_MMIX_JMP_1, mgl@1371: + BFD_RELOC_MMIX_JMP_2, mgl@1371: + BFD_RELOC_MMIX_JMP_3, mgl@1371: + mgl@1371: +/* This is a relocation for a relative address as in a GETA instruction or mgl@1371: +a branch. */ mgl@1371: + BFD_RELOC_MMIX_ADDR19, mgl@1371: + mgl@1371: +/* This is a relocation for a relative address as in a JMP instruction. */ mgl@1371: + BFD_RELOC_MMIX_ADDR27, mgl@1371: + mgl@1371: +/* This is a relocation for an instruction field that may be a general mgl@1371: +register or a value 0..255. */ mgl@1371: + BFD_RELOC_MMIX_REG_OR_BYTE, mgl@1371: + mgl@1371: +/* This is a relocation for an instruction field that may be a general mgl@1371: +register. */ mgl@1371: + BFD_RELOC_MMIX_REG, mgl@1371: + mgl@1371: +/* This is a relocation for two instruction fields holding a register and mgl@1371: +an offset, the equivalent of the relocation. */ mgl@1371: + BFD_RELOC_MMIX_BASE_PLUS_OFFSET, mgl@1371: + mgl@1371: +/* This relocation is an assertion that the expression is not allocated as mgl@1371: +a global register. It does not modify contents. */ mgl@1371: + BFD_RELOC_MMIX_LOCAL, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit pc relative mgl@1371: +short offset into 7 bits. */ mgl@1371: + BFD_RELOC_AVR_7_PCREL, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 13 bit pc relative mgl@1371: +short offset into 12 bits. */ mgl@1371: + BFD_RELOC_AVR_13_PCREL, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 17 bit value (usually mgl@1371: +program memory address) into 16 bits. */ mgl@1371: + BFD_RELOC_AVR_16_PM, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value (usually mgl@1371: +data memory address) into 8 bit immediate value of LDI insn. */ mgl@1371: + BFD_RELOC_AVR_LO8_LDI, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit mgl@1371: +of data memory address) into 8 bit immediate value of LDI insn. */ mgl@1371: + BFD_RELOC_AVR_HI8_LDI, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit mgl@1371: +of program memory address) into 8 bit immediate value of LDI insn. */ mgl@1371: + BFD_RELOC_AVR_HH8_LDI, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit mgl@1371: +of 32 bit value) into 8 bit immediate value of LDI insn. */ mgl@1371: + BFD_RELOC_AVR_MS8_LDI, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores negated 8 bit value mgl@1371: +(usually data memory address) into 8 bit immediate value of SUBI insn. */ mgl@1371: + BFD_RELOC_AVR_LO8_LDI_NEG, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores negated 8 bit value mgl@1371: +(high 8 bit of data memory address) into 8 bit immediate value of mgl@1371: +SUBI insn. */ mgl@1371: + BFD_RELOC_AVR_HI8_LDI_NEG, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores negated 8 bit value mgl@1371: +(most high 8 bit of program memory address) into 8 bit immediate value mgl@1371: +of LDI or SUBI insn. */ mgl@1371: + BFD_RELOC_AVR_HH8_LDI_NEG, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores negated 8 bit value (msb mgl@1371: +of 32 bit value) into 8 bit immediate value of LDI insn. */ mgl@1371: + BFD_RELOC_AVR_MS8_LDI_NEG, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value (usually mgl@1371: +command address) into 8 bit immediate value of LDI insn. */ mgl@1371: + BFD_RELOC_AVR_LO8_LDI_PM, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value mgl@1371: +(command address) into 8 bit immediate value of LDI insn. If the address mgl@1371: +is beyond the 128k boundary, the linker inserts a jump stub for this reloc mgl@1371: +in the lower 128k. */ mgl@1371: + BFD_RELOC_AVR_LO8_LDI_GS, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit mgl@1371: +of command address) into 8 bit immediate value of LDI insn. */ mgl@1371: + BFD_RELOC_AVR_HI8_LDI_PM, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit mgl@1371: +of command address) into 8 bit immediate value of LDI insn. If the address mgl@1371: +is beyond the 128k boundary, the linker inserts a jump stub for this reloc mgl@1371: +below 128k. */ mgl@1371: + BFD_RELOC_AVR_HI8_LDI_GS, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit mgl@1371: +of command address) into 8 bit immediate value of LDI insn. */ mgl@1371: + BFD_RELOC_AVR_HH8_LDI_PM, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores negated 8 bit value mgl@1371: +(usually command address) into 8 bit immediate value of SUBI insn. */ mgl@1371: + BFD_RELOC_AVR_LO8_LDI_PM_NEG, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores negated 8 bit value mgl@1371: +(high 8 bit of 16 bit command address) into 8 bit immediate value mgl@1371: +of SUBI insn. */ mgl@1371: + BFD_RELOC_AVR_HI8_LDI_PM_NEG, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores negated 8 bit value mgl@1371: +(high 6 bit of 22 bit command address) into 8 bit immediate mgl@1371: +value of SUBI insn. */ mgl@1371: + BFD_RELOC_AVR_HH8_LDI_PM_NEG, mgl@1371: + mgl@1371: +/* This is a 32 bit reloc for the AVR that stores 23 bit value mgl@1371: +into 22 bits. */ mgl@1371: + BFD_RELOC_AVR_CALL, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores all needed bits mgl@1371: +for absolute addressing with ldi with overflow check to linktime */ mgl@1371: + BFD_RELOC_AVR_LDI, mgl@1371: + mgl@1371: +/* This is a 6 bit reloc for the AVR that stores offset for ldd/std mgl@1371: +instructions */ mgl@1371: + BFD_RELOC_AVR_6, mgl@1371: + mgl@1371: +/* This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw mgl@1371: +instructions */ mgl@1371: + BFD_RELOC_AVR_6_ADIW, mgl@1371: + mgl@1371: +/* Direct 12 bit. */ mgl@1371: + BFD_RELOC_390_12, mgl@1371: + mgl@1371: +/* 12 bit GOT offset. */ mgl@1371: + BFD_RELOC_390_GOT12, mgl@1371: + mgl@1371: +/* 32 bit PC relative PLT address. */ mgl@1371: + BFD_RELOC_390_PLT32, mgl@1371: + mgl@1371: +/* Copy symbol at runtime. */ mgl@1371: + BFD_RELOC_390_COPY, mgl@1371: + mgl@1371: +/* Create GOT entry. */ mgl@1371: + BFD_RELOC_390_GLOB_DAT, mgl@1371: + mgl@1371: +/* Create PLT entry. */ mgl@1371: + BFD_RELOC_390_JMP_SLOT, mgl@1371: + mgl@1371: +/* Adjust by program base. */ mgl@1371: + BFD_RELOC_390_RELATIVE, mgl@1371: + mgl@1371: +/* 32 bit PC relative offset to GOT. */ mgl@1371: + BFD_RELOC_390_GOTPC, mgl@1371: + mgl@1371: +/* 16 bit GOT offset. */ mgl@1371: + BFD_RELOC_390_GOT16, mgl@1371: + mgl@1371: +/* PC relative 16 bit shifted by 1. */ mgl@1371: + BFD_RELOC_390_PC16DBL, mgl@1371: + mgl@1371: +/* 16 bit PC rel. PLT shifted by 1. */ mgl@1371: + BFD_RELOC_390_PLT16DBL, mgl@1371: + mgl@1371: +/* PC relative 32 bit shifted by 1. */ mgl@1371: + BFD_RELOC_390_PC32DBL, mgl@1371: + mgl@1371: +/* 32 bit PC rel. PLT shifted by 1. */ mgl@1371: + BFD_RELOC_390_PLT32DBL, mgl@1371: + mgl@1371: +/* 32 bit PC rel. GOT shifted by 1. */ mgl@1371: + BFD_RELOC_390_GOTPCDBL, mgl@1371: + mgl@1371: +/* 64 bit GOT offset. */ mgl@1371: + BFD_RELOC_390_GOT64, mgl@1371: + mgl@1371: +/* 64 bit PC relative PLT address. */ mgl@1371: + BFD_RELOC_390_PLT64, mgl@1371: + mgl@1371: +/* 32 bit rel. offset to GOT entry. */ mgl@1371: + BFD_RELOC_390_GOTENT, mgl@1371: + mgl@1371: +/* 64 bit offset to GOT. */ mgl@1371: + BFD_RELOC_390_GOTOFF64, mgl@1371: + mgl@1371: +/* 12-bit offset to symbol-entry within GOT, with PLT handling. */ mgl@1371: + BFD_RELOC_390_GOTPLT12, mgl@1371: + mgl@1371: +/* 16-bit offset to symbol-entry within GOT, with PLT handling. */ mgl@1371: + BFD_RELOC_390_GOTPLT16, mgl@1371: + mgl@1371: +/* 32-bit offset to symbol-entry within GOT, with PLT handling. */ mgl@1371: + BFD_RELOC_390_GOTPLT32, mgl@1371: + mgl@1371: +/* 64-bit offset to symbol-entry within GOT, with PLT handling. */ mgl@1371: + BFD_RELOC_390_GOTPLT64, mgl@1371: + mgl@1371: +/* 32-bit rel. offset to symbol-entry within GOT, with PLT handling. */ mgl@1371: + BFD_RELOC_390_GOTPLTENT, mgl@1371: + mgl@1371: +/* 16-bit rel. offset from the GOT to a PLT entry. */ mgl@1371: + BFD_RELOC_390_PLTOFF16, mgl@1371: + mgl@1371: +/* 32-bit rel. offset from the GOT to a PLT entry. */ mgl@1371: + BFD_RELOC_390_PLTOFF32, mgl@1371: + mgl@1371: +/* 64-bit rel. offset from the GOT to a PLT entry. */ mgl@1371: + BFD_RELOC_390_PLTOFF64, mgl@1371: + mgl@1371: +/* s390 tls relocations. */ mgl@1371: + BFD_RELOC_390_TLS_LOAD, mgl@1371: + BFD_RELOC_390_TLS_GDCALL, mgl@1371: + BFD_RELOC_390_TLS_LDCALL, mgl@1371: + BFD_RELOC_390_TLS_GD32, mgl@1371: + BFD_RELOC_390_TLS_GD64, mgl@1371: + BFD_RELOC_390_TLS_GOTIE12, mgl@1371: + BFD_RELOC_390_TLS_GOTIE32, mgl@1371: + BFD_RELOC_390_TLS_GOTIE64, mgl@1371: + BFD_RELOC_390_TLS_LDM32, mgl@1371: + BFD_RELOC_390_TLS_LDM64, mgl@1371: + BFD_RELOC_390_TLS_IE32, mgl@1371: + BFD_RELOC_390_TLS_IE64, mgl@1371: + BFD_RELOC_390_TLS_IEENT, mgl@1371: + BFD_RELOC_390_TLS_LE32, mgl@1371: + BFD_RELOC_390_TLS_LE64, mgl@1371: + BFD_RELOC_390_TLS_LDO32, mgl@1371: + BFD_RELOC_390_TLS_LDO64, mgl@1371: + BFD_RELOC_390_TLS_DTPMOD, mgl@1371: + BFD_RELOC_390_TLS_DTPOFF, mgl@1371: + BFD_RELOC_390_TLS_TPOFF, mgl@1371: + mgl@1371: +/* Long displacement extension. */ mgl@1371: + BFD_RELOC_390_20, mgl@1371: + BFD_RELOC_390_GOT20, mgl@1371: + BFD_RELOC_390_GOTPLT20, mgl@1371: + BFD_RELOC_390_TLS_GOTIE20, mgl@1371: + mgl@1371: +/* Score relocations */ mgl@1371: + BFD_RELOC_SCORE_DUMMY1, mgl@1371: + mgl@1371: +/* Low 16 bit for load/store */ mgl@1371: + BFD_RELOC_SCORE_GPREL15, mgl@1371: + mgl@1371: +/* This is a 24-bit reloc with the right 1 bit assumed to be 0 */ mgl@1371: + BFD_RELOC_SCORE_DUMMY2, mgl@1371: + BFD_RELOC_SCORE_JMP, mgl@1371: + mgl@1371: +/* This is a 19-bit reloc with the right 1 bit assumed to be 0 */ mgl@1371: + BFD_RELOC_SCORE_BRANCH, mgl@1371: + mgl@1371: +/* This is a 11-bit reloc with the right 1 bit assumed to be 0 */ mgl@1371: + BFD_RELOC_SCORE16_JMP, mgl@1371: + mgl@1371: +/* This is a 8-bit reloc with the right 1 bit assumed to be 0 */ mgl@1371: + BFD_RELOC_SCORE16_BRANCH, mgl@1371: + mgl@1371: +/* Undocumented Score relocs */ mgl@1371: + BFD_RELOC_SCORE_GOT15, mgl@1371: + BFD_RELOC_SCORE_GOT_LO16, mgl@1371: + BFD_RELOC_SCORE_CALL15, mgl@1371: + BFD_RELOC_SCORE_DUMMY_HI16, mgl@1371: + mgl@1371: +/* Scenix IP2K - 9-bit register number / data address */ mgl@1371: + BFD_RELOC_IP2K_FR9, mgl@1371: + mgl@1371: +/* Scenix IP2K - 4-bit register/data bank number */ mgl@1371: + BFD_RELOC_IP2K_BANK, mgl@1371: + mgl@1371: +/* Scenix IP2K - low 13 bits of instruction word address */ mgl@1371: + BFD_RELOC_IP2K_ADDR16CJP, mgl@1371: + mgl@1371: +/* Scenix IP2K - high 3 bits of instruction word address */ mgl@1371: + BFD_RELOC_IP2K_PAGE3, mgl@1371: + mgl@1371: +/* Scenix IP2K - ext/low/high 8 bits of data address */ mgl@1371: + BFD_RELOC_IP2K_LO8DATA, mgl@1371: + BFD_RELOC_IP2K_HI8DATA, mgl@1371: + BFD_RELOC_IP2K_EX8DATA, mgl@1371: + mgl@1371: +/* Scenix IP2K - low/high 8 bits of instruction word address */ mgl@1371: + BFD_RELOC_IP2K_LO8INSN, mgl@1371: + BFD_RELOC_IP2K_HI8INSN, mgl@1371: + mgl@1371: +/* Scenix IP2K - even/odd PC modifier to modify snb pcl.0 */ mgl@1371: + BFD_RELOC_IP2K_PC_SKIP, mgl@1371: + mgl@1371: +/* Scenix IP2K - 16 bit word address in text section. */ mgl@1371: + BFD_RELOC_IP2K_TEXT, mgl@1371: + mgl@1371: +/* Scenix IP2K - 7-bit sp or dp offset */ mgl@1371: + BFD_RELOC_IP2K_FR_OFFSET, mgl@1371: + mgl@1371: +/* Scenix VPE4K coprocessor - data/insn-space addressing */ mgl@1371: + BFD_RELOC_VPE4KMATH_DATA, mgl@1371: + BFD_RELOC_VPE4KMATH_INSN, mgl@1371: + mgl@1371: +/* These two relocations are used by the linker to determine which of mgl@1371: +the entries in a C++ virtual function table are actually used. When mgl@1371: +the --gc-sections option is given, the linker will zero out the entries mgl@1371: +that are not used, so that the code for those functions need not be mgl@1371: +included in the output. mgl@1371: + mgl@1371: +VTABLE_INHERIT is a zero-space relocation used to describe to the mgl@1371: +linker the inheritance tree of a C++ virtual function table. The mgl@1371: +relocation's symbol should be the parent class' vtable, and the mgl@1371: +relocation should be located at the child vtable. mgl@1371: + mgl@1371: +VTABLE_ENTRY is a zero-space relocation that describes the use of a mgl@1371: +virtual function table entry. The reloc's symbol should refer to the mgl@1371: +table of the class mentioned in the code. Off of that base, an offset mgl@1371: +describes the entry that is being used. For Rela hosts, this offset mgl@1371: +is stored in the reloc's addend. For Rel hosts, we are forced to put mgl@1371: +this offset in the reloc's section offset. */ mgl@1371: + BFD_RELOC_VTABLE_INHERIT, mgl@1371: + BFD_RELOC_VTABLE_ENTRY, mgl@1371: + mgl@1371: +/* Intel IA64 Relocations. */ mgl@1371: + BFD_RELOC_IA64_IMM14, mgl@1371: + BFD_RELOC_IA64_IMM22, mgl@1371: + BFD_RELOC_IA64_IMM64, mgl@1371: + BFD_RELOC_IA64_DIR32MSB, mgl@1371: + BFD_RELOC_IA64_DIR32LSB, mgl@1371: + BFD_RELOC_IA64_DIR64MSB, mgl@1371: + BFD_RELOC_IA64_DIR64LSB, mgl@1371: + BFD_RELOC_IA64_GPREL22, mgl@1371: + BFD_RELOC_IA64_GPREL64I, mgl@1371: + BFD_RELOC_IA64_GPREL32MSB, mgl@1371: + BFD_RELOC_IA64_GPREL32LSB, mgl@1371: + BFD_RELOC_IA64_GPREL64MSB, mgl@1371: + BFD_RELOC_IA64_GPREL64LSB, mgl@1371: + BFD_RELOC_IA64_LTOFF22, mgl@1371: + BFD_RELOC_IA64_LTOFF64I, mgl@1371: + BFD_RELOC_IA64_PLTOFF22, mgl@1371: + BFD_RELOC_IA64_PLTOFF64I, mgl@1371: + BFD_RELOC_IA64_PLTOFF64MSB, mgl@1371: + BFD_RELOC_IA64_PLTOFF64LSB, mgl@1371: + BFD_RELOC_IA64_FPTR64I, mgl@1371: + BFD_RELOC_IA64_FPTR32MSB, mgl@1371: + BFD_RELOC_IA64_FPTR32LSB, mgl@1371: + BFD_RELOC_IA64_FPTR64MSB, mgl@1371: + BFD_RELOC_IA64_FPTR64LSB, mgl@1371: + BFD_RELOC_IA64_PCREL21B, mgl@1371: + BFD_RELOC_IA64_PCREL21BI, mgl@1371: + BFD_RELOC_IA64_PCREL21M, mgl@1371: + BFD_RELOC_IA64_PCREL21F, mgl@1371: + BFD_RELOC_IA64_PCREL22, mgl@1371: + BFD_RELOC_IA64_PCREL60B, mgl@1371: + BFD_RELOC_IA64_PCREL64I, mgl@1371: + BFD_RELOC_IA64_PCREL32MSB, mgl@1371: + BFD_RELOC_IA64_PCREL32LSB, mgl@1371: + BFD_RELOC_IA64_PCREL64MSB, mgl@1371: + BFD_RELOC_IA64_PCREL64LSB, mgl@1371: + BFD_RELOC_IA64_LTOFF_FPTR22, mgl@1371: + BFD_RELOC_IA64_LTOFF_FPTR64I, mgl@1371: + BFD_RELOC_IA64_LTOFF_FPTR32MSB, mgl@1371: + BFD_RELOC_IA64_LTOFF_FPTR32LSB, mgl@1371: + BFD_RELOC_IA64_LTOFF_FPTR64MSB, mgl@1371: + BFD_RELOC_IA64_LTOFF_FPTR64LSB, mgl@1371: + BFD_RELOC_IA64_SEGREL32MSB, mgl@1371: + BFD_RELOC_IA64_SEGREL32LSB, mgl@1371: + BFD_RELOC_IA64_SEGREL64MSB, mgl@1371: + BFD_RELOC_IA64_SEGREL64LSB, mgl@1371: + BFD_RELOC_IA64_SECREL32MSB, mgl@1371: + BFD_RELOC_IA64_SECREL32LSB, mgl@1371: + BFD_RELOC_IA64_SECREL64MSB, mgl@1371: + BFD_RELOC_IA64_SECREL64LSB, mgl@1371: + BFD_RELOC_IA64_REL32MSB, mgl@1371: + BFD_RELOC_IA64_REL32LSB, mgl@1371: + BFD_RELOC_IA64_REL64MSB, mgl@1371: + BFD_RELOC_IA64_REL64LSB, mgl@1371: + BFD_RELOC_IA64_LTV32MSB, mgl@1371: + BFD_RELOC_IA64_LTV32LSB, mgl@1371: + BFD_RELOC_IA64_LTV64MSB, mgl@1371: + BFD_RELOC_IA64_LTV64LSB, mgl@1371: + BFD_RELOC_IA64_IPLTMSB, mgl@1371: + BFD_RELOC_IA64_IPLTLSB, mgl@1371: + BFD_RELOC_IA64_COPY, mgl@1371: + BFD_RELOC_IA64_LTOFF22X, mgl@1371: + BFD_RELOC_IA64_LDXMOV, mgl@1371: + BFD_RELOC_IA64_TPREL14, mgl@1371: + BFD_RELOC_IA64_TPREL22, mgl@1371: + BFD_RELOC_IA64_TPREL64I, mgl@1371: + BFD_RELOC_IA64_TPREL64MSB, mgl@1371: + BFD_RELOC_IA64_TPREL64LSB, mgl@1371: + BFD_RELOC_IA64_LTOFF_TPREL22, mgl@1371: + BFD_RELOC_IA64_DTPMOD64MSB, mgl@1371: + BFD_RELOC_IA64_DTPMOD64LSB, mgl@1371: + BFD_RELOC_IA64_LTOFF_DTPMOD22, mgl@1371: + BFD_RELOC_IA64_DTPREL14, mgl@1371: + BFD_RELOC_IA64_DTPREL22, mgl@1371: + BFD_RELOC_IA64_DTPREL64I, mgl@1371: + BFD_RELOC_IA64_DTPREL32MSB, mgl@1371: + BFD_RELOC_IA64_DTPREL32LSB, mgl@1371: + BFD_RELOC_IA64_DTPREL64MSB, mgl@1371: + BFD_RELOC_IA64_DTPREL64LSB, mgl@1371: + BFD_RELOC_IA64_LTOFF_DTPREL22, mgl@1371: + mgl@1371: +/* Motorola 68HC11 reloc. mgl@1371: +This is the 8 bit high part of an absolute address. */ mgl@1371: + BFD_RELOC_M68HC11_HI8, mgl@1371: + mgl@1371: +/* Motorola 68HC11 reloc. mgl@1371: +This is the 8 bit low part of an absolute address. */ mgl@1371: + BFD_RELOC_M68HC11_LO8, mgl@1371: + mgl@1371: +/* Motorola 68HC11 reloc. mgl@1371: +This is the 3 bit of a value. */ mgl@1371: + BFD_RELOC_M68HC11_3B, mgl@1371: + mgl@1371: +/* Motorola 68HC11 reloc. mgl@1371: +This reloc marks the beginning of a jump/call instruction. mgl@1371: +It is used for linker relaxation to correctly identify beginning mgl@1371: +of instruction and change some branches to use PC-relative mgl@1371: +addressing mode. */ mgl@1371: + BFD_RELOC_M68HC11_RL_JUMP, mgl@1371: + mgl@1371: +/* Motorola 68HC11 reloc. mgl@1371: +This reloc marks a group of several instructions that gcc generates mgl@1371: +and for which the linker relaxation pass can modify and/or remove mgl@1371: +some of them. */ mgl@1371: + BFD_RELOC_M68HC11_RL_GROUP, mgl@1371: + mgl@1371: +/* Motorola 68HC11 reloc. mgl@1371: +This is the 16-bit lower part of an address. It is used for 'call' mgl@1371: +instruction to specify the symbol address without any special mgl@1371: +transformation (due to memory bank window). */ mgl@1371: + BFD_RELOC_M68HC11_LO16, mgl@1371: + mgl@1371: +/* Motorola 68HC11 reloc. mgl@1371: +This is a 8-bit reloc that specifies the page number of an address. mgl@1371: +It is used by 'call' instruction to specify the page number of mgl@1371: +the symbol. */ mgl@1371: + BFD_RELOC_M68HC11_PAGE, mgl@1371: + mgl@1371: +/* Motorola 68HC11 reloc. mgl@1371: +This is a 24-bit reloc that represents the address with a 16-bit mgl@1371: +value and a 8-bit page number. The symbol address is transformed mgl@1371: +to follow the 16K memory bank of 68HC12 (seen as mapped in the window). */ mgl@1371: + BFD_RELOC_M68HC11_24, mgl@1371: + mgl@1371: +/* Motorola 68HC12 reloc. mgl@1371: +This is the 5 bits of a value. */ mgl@1371: + BFD_RELOC_M68HC12_5B, mgl@1371: + mgl@1371: +/* NS CR16C Relocations. */ mgl@1371: + BFD_RELOC_16C_NUM08, mgl@1371: + BFD_RELOC_16C_NUM08_C, mgl@1371: + BFD_RELOC_16C_NUM16, mgl@1371: + BFD_RELOC_16C_NUM16_C, mgl@1371: + BFD_RELOC_16C_NUM32, mgl@1371: + BFD_RELOC_16C_NUM32_C, mgl@1371: + BFD_RELOC_16C_DISP04, mgl@1371: + BFD_RELOC_16C_DISP04_C, mgl@1371: + BFD_RELOC_16C_DISP08, mgl@1371: + BFD_RELOC_16C_DISP08_C, mgl@1371: + BFD_RELOC_16C_DISP16, mgl@1371: + BFD_RELOC_16C_DISP16_C, mgl@1371: + BFD_RELOC_16C_DISP24, mgl@1371: + BFD_RELOC_16C_DISP24_C, mgl@1371: + BFD_RELOC_16C_DISP24a, mgl@1371: + BFD_RELOC_16C_DISP24a_C, mgl@1371: + BFD_RELOC_16C_REG04, mgl@1371: + BFD_RELOC_16C_REG04_C, mgl@1371: + BFD_RELOC_16C_REG04a, mgl@1371: + BFD_RELOC_16C_REG04a_C, mgl@1371: + BFD_RELOC_16C_REG14, mgl@1371: + BFD_RELOC_16C_REG14_C, mgl@1371: + BFD_RELOC_16C_REG16, mgl@1371: + BFD_RELOC_16C_REG16_C, mgl@1371: + BFD_RELOC_16C_REG20, mgl@1371: + BFD_RELOC_16C_REG20_C, mgl@1371: + BFD_RELOC_16C_ABS20, mgl@1371: + BFD_RELOC_16C_ABS20_C, mgl@1371: + BFD_RELOC_16C_ABS24, mgl@1371: + BFD_RELOC_16C_ABS24_C, mgl@1371: + BFD_RELOC_16C_IMM04, mgl@1371: + BFD_RELOC_16C_IMM04_C, mgl@1371: + BFD_RELOC_16C_IMM16, mgl@1371: + BFD_RELOC_16C_IMM16_C, mgl@1371: + BFD_RELOC_16C_IMM20, mgl@1371: + BFD_RELOC_16C_IMM20_C, mgl@1371: + BFD_RELOC_16C_IMM24, mgl@1371: + BFD_RELOC_16C_IMM24_C, mgl@1371: + BFD_RELOC_16C_IMM32, mgl@1371: + BFD_RELOC_16C_IMM32_C, mgl@1371: + mgl@1371: +/* NS CR16 Relocations. */ mgl@1371: + BFD_RELOC_CR16_NUM8, mgl@1371: + BFD_RELOC_CR16_NUM16, mgl@1371: + BFD_RELOC_CR16_NUM32, mgl@1371: + BFD_RELOC_CR16_NUM32a, mgl@1371: + BFD_RELOC_CR16_REGREL0, mgl@1371: + BFD_RELOC_CR16_REGREL4, mgl@1371: + BFD_RELOC_CR16_REGREL4a, mgl@1371: + BFD_RELOC_CR16_REGREL14, mgl@1371: + BFD_RELOC_CR16_REGREL14a, mgl@1371: + BFD_RELOC_CR16_REGREL16, mgl@1371: + BFD_RELOC_CR16_REGREL20, mgl@1371: + BFD_RELOC_CR16_REGREL20a, mgl@1371: + BFD_RELOC_CR16_ABS20, mgl@1371: + BFD_RELOC_CR16_ABS24, mgl@1371: + BFD_RELOC_CR16_IMM4, mgl@1371: + BFD_RELOC_CR16_IMM8, mgl@1371: + BFD_RELOC_CR16_IMM16, mgl@1371: + BFD_RELOC_CR16_IMM20, mgl@1371: + BFD_RELOC_CR16_IMM24, mgl@1371: + BFD_RELOC_CR16_IMM32, mgl@1371: + BFD_RELOC_CR16_IMM32a, mgl@1371: + BFD_RELOC_CR16_DISP4, mgl@1371: + BFD_RELOC_CR16_DISP8, mgl@1371: + BFD_RELOC_CR16_DISP16, mgl@1371: + BFD_RELOC_CR16_DISP20, mgl@1371: + BFD_RELOC_CR16_DISP24, mgl@1371: + BFD_RELOC_CR16_DISP24a, mgl@1371: + mgl@1371: +/* NS CRX Relocations. */ mgl@1371: + BFD_RELOC_CRX_REL4, mgl@1371: + BFD_RELOC_CRX_REL8, mgl@1371: + BFD_RELOC_CRX_REL8_CMP, mgl@1371: + BFD_RELOC_CRX_REL16, mgl@1371: + BFD_RELOC_CRX_REL24, mgl@1371: + BFD_RELOC_CRX_REL32, mgl@1371: + BFD_RELOC_CRX_REGREL12, mgl@1371: + BFD_RELOC_CRX_REGREL22, mgl@1371: + BFD_RELOC_CRX_REGREL28, mgl@1371: + BFD_RELOC_CRX_REGREL32, mgl@1371: + BFD_RELOC_CRX_ABS16, mgl@1371: + BFD_RELOC_CRX_ABS32, mgl@1371: + BFD_RELOC_CRX_NUM8, mgl@1371: + BFD_RELOC_CRX_NUM16, mgl@1371: + BFD_RELOC_CRX_NUM32, mgl@1371: + BFD_RELOC_CRX_IMM16, mgl@1371: + BFD_RELOC_CRX_IMM32, mgl@1371: + BFD_RELOC_CRX_SWITCH8, mgl@1371: + BFD_RELOC_CRX_SWITCH16, mgl@1371: + BFD_RELOC_CRX_SWITCH32, mgl@1371: + mgl@1371: +/* These relocs are only used within the CRIS assembler. They are not mgl@1371: +(at present) written to any object files. */ mgl@1371: + BFD_RELOC_CRIS_BDISP8, mgl@1371: + BFD_RELOC_CRIS_UNSIGNED_5, mgl@1371: + BFD_RELOC_CRIS_SIGNED_6, mgl@1371: + BFD_RELOC_CRIS_UNSIGNED_6, mgl@1371: + BFD_RELOC_CRIS_SIGNED_8, mgl@1371: + BFD_RELOC_CRIS_UNSIGNED_8, mgl@1371: + BFD_RELOC_CRIS_SIGNED_16, mgl@1371: + BFD_RELOC_CRIS_UNSIGNED_16, mgl@1371: + BFD_RELOC_CRIS_LAPCQ_OFFSET, mgl@1371: + BFD_RELOC_CRIS_UNSIGNED_4, mgl@1371: + mgl@1371: +/* Relocs used in ELF shared libraries for CRIS. */ mgl@1371: + BFD_RELOC_CRIS_COPY, mgl@1371: + BFD_RELOC_CRIS_GLOB_DAT, mgl@1371: + BFD_RELOC_CRIS_JUMP_SLOT, mgl@1371: + BFD_RELOC_CRIS_RELATIVE, mgl@1371: + mgl@1371: +/* 32-bit offset to symbol-entry within GOT. */ mgl@1371: + BFD_RELOC_CRIS_32_GOT, mgl@1371: + mgl@1371: +/* 16-bit offset to symbol-entry within GOT. */ mgl@1371: + BFD_RELOC_CRIS_16_GOT, mgl@1371: + mgl@1371: +/* 32-bit offset to symbol-entry within GOT, with PLT handling. */ mgl@1371: + BFD_RELOC_CRIS_32_GOTPLT, mgl@1371: + mgl@1371: +/* 16-bit offset to symbol-entry within GOT, with PLT handling. */ mgl@1371: + BFD_RELOC_CRIS_16_GOTPLT, mgl@1371: + mgl@1371: +/* 32-bit offset to symbol, relative to GOT. */ mgl@1371: + BFD_RELOC_CRIS_32_GOTREL, mgl@1371: + mgl@1371: +/* 32-bit offset to symbol with PLT entry, relative to GOT. */ mgl@1371: + BFD_RELOC_CRIS_32_PLT_GOTREL, mgl@1371: + mgl@1371: +/* 32-bit offset to symbol with PLT entry, relative to this relocation. */ mgl@1371: + BFD_RELOC_CRIS_32_PLT_PCREL, mgl@1371: + mgl@1371: +/* Intel i860 Relocations. */ mgl@1371: + BFD_RELOC_860_COPY, mgl@1371: + BFD_RELOC_860_GLOB_DAT, mgl@1371: + BFD_RELOC_860_JUMP_SLOT, mgl@1371: + BFD_RELOC_860_RELATIVE, mgl@1371: + BFD_RELOC_860_PC26, mgl@1371: + BFD_RELOC_860_PLT26, mgl@1371: + BFD_RELOC_860_PC16, mgl@1371: + BFD_RELOC_860_LOW0, mgl@1371: + BFD_RELOC_860_SPLIT0, mgl@1371: + BFD_RELOC_860_LOW1, mgl@1371: + BFD_RELOC_860_SPLIT1, mgl@1371: + BFD_RELOC_860_LOW2, mgl@1371: + BFD_RELOC_860_SPLIT2, mgl@1371: + BFD_RELOC_860_LOW3, mgl@1371: + BFD_RELOC_860_LOGOT0, mgl@1371: + BFD_RELOC_860_SPGOT0, mgl@1371: + BFD_RELOC_860_LOGOT1, mgl@1371: + BFD_RELOC_860_SPGOT1, mgl@1371: + BFD_RELOC_860_LOGOTOFF0, mgl@1371: + BFD_RELOC_860_SPGOTOFF0, mgl@1371: + BFD_RELOC_860_LOGOTOFF1, mgl@1371: + BFD_RELOC_860_SPGOTOFF1, mgl@1371: + BFD_RELOC_860_LOGOTOFF2, mgl@1371: + BFD_RELOC_860_LOGOTOFF3, mgl@1371: + BFD_RELOC_860_LOPC, mgl@1371: + BFD_RELOC_860_HIGHADJ, mgl@1371: + BFD_RELOC_860_HAGOT, mgl@1371: + BFD_RELOC_860_HAGOTOFF, mgl@1371: + BFD_RELOC_860_HAPC, mgl@1371: + BFD_RELOC_860_HIGH, mgl@1371: + BFD_RELOC_860_HIGOT, mgl@1371: + BFD_RELOC_860_HIGOTOFF, mgl@1371: + mgl@1371: +/* OpenRISC Relocations. */ mgl@1371: + BFD_RELOC_OPENRISC_ABS_26, mgl@1371: + BFD_RELOC_OPENRISC_REL_26, mgl@1371: + mgl@1371: +/* H8 elf Relocations. */ mgl@1371: + BFD_RELOC_H8_DIR16A8, mgl@1371: + BFD_RELOC_H8_DIR16R8, mgl@1371: + BFD_RELOC_H8_DIR24A8, mgl@1371: + BFD_RELOC_H8_DIR24R8, mgl@1371: + BFD_RELOC_H8_DIR32A16, mgl@1371: + mgl@1371: +/* Sony Xstormy16 Relocations. */ mgl@1371: + BFD_RELOC_XSTORMY16_REL_12, mgl@1371: + BFD_RELOC_XSTORMY16_12, mgl@1371: + BFD_RELOC_XSTORMY16_24, mgl@1371: + BFD_RELOC_XSTORMY16_FPTR16, mgl@1371: + mgl@1371: +/* Self-describing complex relocations. */ mgl@1371: + BFD_RELOC_RELC, mgl@1371: + mgl@1371: + mgl@1371: +/* Infineon Relocations. */ mgl@1371: + BFD_RELOC_XC16X_PAG, mgl@1371: + BFD_RELOC_XC16X_POF, mgl@1371: + BFD_RELOC_XC16X_SEG, mgl@1371: + BFD_RELOC_XC16X_SOF, mgl@1371: + mgl@1371: +/* Relocations used by VAX ELF. */ mgl@1371: + BFD_RELOC_VAX_GLOB_DAT, mgl@1371: + BFD_RELOC_VAX_JMP_SLOT, mgl@1371: + BFD_RELOC_VAX_RELATIVE, mgl@1371: + mgl@1371: +/* Morpho MT - 16 bit immediate relocation. */ mgl@1371: + BFD_RELOC_MT_PC16, mgl@1371: + mgl@1371: +/* Morpho MT - Hi 16 bits of an address. */ mgl@1371: + BFD_RELOC_MT_HI16, mgl@1371: + mgl@1371: +/* Morpho MT - Low 16 bits of an address. */ mgl@1371: + BFD_RELOC_MT_LO16, mgl@1371: + mgl@1371: +/* Morpho MT - Used to tell the linker which vtable entries are used. */ mgl@1371: + BFD_RELOC_MT_GNU_VTINHERIT, mgl@1371: + mgl@1371: +/* Morpho MT - Used to tell the linker which vtable entries are used. */ mgl@1371: + BFD_RELOC_MT_GNU_VTENTRY, mgl@1371: + mgl@1371: +/* Morpho MT - 8 bit immediate relocation. */ mgl@1371: + BFD_RELOC_MT_PCINSN8, mgl@1371: + mgl@1371: +/* msp430 specific relocation codes */ mgl@1371: + BFD_RELOC_MSP430_10_PCREL, mgl@1371: + BFD_RELOC_MSP430_16_PCREL, mgl@1371: + BFD_RELOC_MSP430_16, mgl@1371: + BFD_RELOC_MSP430_16_PCREL_BYTE, mgl@1371: + BFD_RELOC_MSP430_16_BYTE, mgl@1371: + BFD_RELOC_MSP430_2X_PCREL, mgl@1371: + BFD_RELOC_MSP430_RL_PCREL, mgl@1371: + mgl@1371: +/* IQ2000 Relocations. */ mgl@1371: + BFD_RELOC_IQ2000_OFFSET_16, mgl@1371: + BFD_RELOC_IQ2000_OFFSET_21, mgl@1371: + BFD_RELOC_IQ2000_UHI16, mgl@1371: + mgl@1371: +/* Special Xtensa relocation used only by PLT entries in ELF shared mgl@1371: +objects to indicate that the runtime linker should set the value mgl@1371: +to one of its own internal functions or data structures. */ mgl@1371: + BFD_RELOC_XTENSA_RTLD, mgl@1371: + mgl@1371: +/* Xtensa relocations for ELF shared objects. */ mgl@1371: + BFD_RELOC_XTENSA_GLOB_DAT, mgl@1371: + BFD_RELOC_XTENSA_JMP_SLOT, mgl@1371: + BFD_RELOC_XTENSA_RELATIVE, mgl@1371: + mgl@1371: +/* Xtensa relocation used in ELF object files for symbols that may require mgl@1371: +PLT entries. Otherwise, this is just a generic 32-bit relocation. */ mgl@1371: + BFD_RELOC_XTENSA_PLT, mgl@1371: + mgl@1371: +/* Xtensa relocations to mark the difference of two local symbols. mgl@1371: +These are only needed to support linker relaxation and can be ignored mgl@1371: +when not relaxing. The field is set to the value of the difference mgl@1371: +assuming no relaxation. The relocation encodes the position of the mgl@1371: +first symbol so the linker can determine whether to adjust the field mgl@1371: +value. */ mgl@1371: + BFD_RELOC_XTENSA_DIFF8, mgl@1371: + BFD_RELOC_XTENSA_DIFF16, mgl@1371: + BFD_RELOC_XTENSA_DIFF32, mgl@1371: + mgl@1371: +/* Generic Xtensa relocations for instruction operands. Only the slot mgl@1371: +number is encoded in the relocation. The relocation applies to the mgl@1371: +last PC-relative immediate operand, or if there are no PC-relative mgl@1371: +immediates, to the last immediate operand. */ mgl@1371: + BFD_RELOC_XTENSA_SLOT0_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT1_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT2_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT3_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT4_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT5_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT6_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT7_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT8_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT9_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT10_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT11_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT12_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT13_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT14_OP, mgl@1371: + mgl@1371: +/* Alternate Xtensa relocations. Only the slot is encoded in the mgl@1371: +relocation. The meaning of these relocations is opcode-specific. */ mgl@1371: + BFD_RELOC_XTENSA_SLOT0_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT1_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT2_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT3_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT4_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT5_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT6_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT7_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT8_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT9_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT10_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT11_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT12_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT13_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT14_ALT, mgl@1371: + mgl@1371: +/* Xtensa relocations for backward compatibility. These have all been mgl@1371: +replaced by BFD_RELOC_XTENSA_SLOT0_OP. */ mgl@1371: + BFD_RELOC_XTENSA_OP0, mgl@1371: + BFD_RELOC_XTENSA_OP1, mgl@1371: + BFD_RELOC_XTENSA_OP2, mgl@1371: + mgl@1371: +/* Xtensa relocation to mark that the assembler expanded the mgl@1371: +instructions from an original target. The expansion size is mgl@1371: +encoded in the reloc size. */ mgl@1371: + BFD_RELOC_XTENSA_ASM_EXPAND, mgl@1371: + mgl@1371: +/* Xtensa relocation to mark that the linker should simplify mgl@1371: +assembler-expanded instructions. This is commonly used mgl@1371: +internally by the linker after analysis of a mgl@1371: +BFD_RELOC_XTENSA_ASM_EXPAND. */ mgl@1371: + BFD_RELOC_XTENSA_ASM_SIMPLIFY, mgl@1371: + mgl@1371: +/* 8 bit signed offset in (ix+d) or (iy+d). */ mgl@1371: + BFD_RELOC_Z80_DISP8, mgl@1371: + mgl@1371: +/* DJNZ offset. */ mgl@1371: + BFD_RELOC_Z8K_DISP7, mgl@1371: + mgl@1371: +/* CALR offset. */ mgl@1371: + BFD_RELOC_Z8K_CALLR, mgl@1371: + mgl@1371: +/* 4 bit value. */ mgl@1371: + BFD_RELOC_Z8K_IMM4L, mgl@1371: + BFD_RELOC_UNUSED }; mgl@1371: +typedef enum bfd_reloc_code_real bfd_reloc_code_real_type; mgl@1371: +reloc_howto_type *bfd_reloc_type_lookup mgl@1371: + (bfd *abfd, bfd_reloc_code_real_type code); mgl@1371: +reloc_howto_type *bfd_reloc_name_lookup mgl@1371: + (bfd *abfd, const char *reloc_name); mgl@1371: + mgl@1371: +const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code); mgl@1371: + mgl@1371: +/* Extracted from syms.c. */ mgl@1371: + mgl@1371: +typedef struct bfd_symbol mgl@1371: +{ mgl@1371: + /* A pointer to the BFD which owns the symbol. This information mgl@1371: + is necessary so that a back end can work out what additional mgl@1371: + information (invisible to the application writer) is carried mgl@1371: + with the symbol. mgl@1371: + mgl@1371: + This field is *almost* redundant, since you can use section->owner mgl@1371: + instead, except that some symbols point to the global sections mgl@1371: + bfd_{abs,com,und}_section. This could be fixed by making mgl@1371: + these globals be per-bfd (or per-target-flavor). FIXME. */ mgl@1371: + struct bfd *the_bfd; /* Use bfd_asymbol_bfd(sym) to access this field. */ mgl@1371: + mgl@1371: + /* The text of the symbol. The name is left alone, and not copied; the mgl@1371: + application may not alter it. */ mgl@1371: + const char *name; mgl@1371: + mgl@1371: + /* The value of the symbol. This really should be a union of a mgl@1371: + numeric value with a pointer, since some flags indicate that mgl@1371: + a pointer to another symbol is stored here. */ mgl@1371: + symvalue value; mgl@1371: + mgl@1371: + /* Attributes of a symbol. */ mgl@1371: +#define BSF_NO_FLAGS 0x00 mgl@1371: + mgl@1371: + /* The symbol has local scope; <> in <>. The value mgl@1371: + is the offset into the section of the data. */ mgl@1371: +#define BSF_LOCAL 0x01 mgl@1371: + mgl@1371: + /* The symbol has global scope; initialized data in <>. The mgl@1371: + value is the offset into the section of the data. */ mgl@1371: +#define BSF_GLOBAL 0x02 mgl@1371: + mgl@1371: + /* The symbol has global scope and is exported. The value is mgl@1371: + the offset into the section of the data. */ mgl@1371: +#define BSF_EXPORT BSF_GLOBAL /* No real difference. */ mgl@1371: + mgl@1371: + /* A normal C symbol would be one of: mgl@1371: + <>, <>, <> or mgl@1371: + <>. */ mgl@1371: + mgl@1371: + /* The symbol is a debugging record. The value has an arbitrary mgl@1371: + meaning, unless BSF_DEBUGGING_RELOC is also set. */ mgl@1371: +#define BSF_DEBUGGING 0x08 mgl@1371: + mgl@1371: + /* The symbol denotes a function entry point. Used in ELF, mgl@1371: + perhaps others someday. */ mgl@1371: +#define BSF_FUNCTION 0x10 mgl@1371: + mgl@1371: + /* Used by the linker. */ mgl@1371: +#define BSF_KEEP 0x20 mgl@1371: +#define BSF_KEEP_G 0x40 mgl@1371: + mgl@1371: + /* A weak global symbol, overridable without warnings by mgl@1371: + a regular global symbol of the same name. */ mgl@1371: +#define BSF_WEAK 0x80 mgl@1371: + mgl@1371: + /* This symbol was created to point to a section, e.g. ELF's mgl@1371: + STT_SECTION symbols. */ mgl@1371: +#define BSF_SECTION_SYM 0x100 mgl@1371: + mgl@1371: + /* The symbol used to be a common symbol, but now it is mgl@1371: + allocated. */ mgl@1371: +#define BSF_OLD_COMMON 0x200 mgl@1371: + mgl@1371: + /* The default value for common data. */ mgl@1371: +#define BFD_FORT_COMM_DEFAULT_VALUE 0 mgl@1371: + mgl@1371: + /* In some files the type of a symbol sometimes alters its mgl@1371: + location in an output file - ie in coff a <> symbol mgl@1371: + which is also <> symbol appears where it was mgl@1371: + declared and not at the end of a section. This bit is set mgl@1371: + by the target BFD part to convey this information. */ mgl@1371: +#define BSF_NOT_AT_END 0x400 mgl@1371: + mgl@1371: + /* Signal that the symbol is the label of constructor section. */ mgl@1371: +#define BSF_CONSTRUCTOR 0x800 mgl@1371: + mgl@1371: + /* Signal that the symbol is a warning symbol. The name is a mgl@1371: + warning. The name of the next symbol is the one to warn about; mgl@1371: + if a reference is made to a symbol with the same name as the next mgl@1371: + symbol, a warning is issued by the linker. */ mgl@1371: +#define BSF_WARNING 0x1000 mgl@1371: + mgl@1371: + /* Signal that the symbol is indirect. This symbol is an indirect mgl@1371: + pointer to the symbol with the same name as the next symbol. */ mgl@1371: +#define BSF_INDIRECT 0x2000 mgl@1371: + mgl@1371: + /* BSF_FILE marks symbols that contain a file name. This is used mgl@1371: + for ELF STT_FILE symbols. */ mgl@1371: +#define BSF_FILE 0x4000 mgl@1371: + mgl@1371: + /* Symbol is from dynamic linking information. */ mgl@1371: +#define BSF_DYNAMIC 0x8000 mgl@1371: + mgl@1371: + /* The symbol denotes a data object. Used in ELF, and perhaps mgl@1371: + others someday. */ mgl@1371: +#define BSF_OBJECT 0x10000 mgl@1371: + mgl@1371: + /* This symbol is a debugging symbol. The value is the offset mgl@1371: + into the section of the data. BSF_DEBUGGING should be set mgl@1371: + as well. */ mgl@1371: +#define BSF_DEBUGGING_RELOC 0x20000 mgl@1371: + mgl@1371: + /* This symbol is thread local. Used in ELF. */ mgl@1371: +#define BSF_THREAD_LOCAL 0x40000 mgl@1371: + mgl@1371: + /* This symbol represents a complex relocation expression, mgl@1371: + with the expression tree serialized in the symbol name. */ mgl@1371: +#define BSF_RELC 0x80000 mgl@1371: + mgl@1371: + /* This symbol represents a signed complex relocation expression, mgl@1371: + with the expression tree serialized in the symbol name. */ mgl@1371: +#define BSF_SRELC 0x100000 mgl@1371: + mgl@1371: + flagword flags; mgl@1371: + mgl@1371: + /* A pointer to the section to which this symbol is mgl@1371: + relative. This will always be non NULL, there are special mgl@1371: + sections for undefined and absolute symbols. */ mgl@1371: + struct bfd_section *section; mgl@1371: + mgl@1371: + /* Back end special data. */ mgl@1371: + union mgl@1371: + { mgl@1371: + void *p; mgl@1371: + bfd_vma i; mgl@1371: + } mgl@1371: + udata; mgl@1371: +} mgl@1371: +asymbol; mgl@1371: + mgl@1371: +#define bfd_get_symtab_upper_bound(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd)) mgl@1371: + mgl@1371: +bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym); mgl@1371: + mgl@1371: +bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name); mgl@1371: + mgl@1371: +#define bfd_is_local_label_name(abfd, name) \ mgl@1371: + BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name)) mgl@1371: + mgl@1371: +bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym); mgl@1371: + mgl@1371: +#define bfd_is_target_special_symbol(abfd, sym) \ mgl@1371: + BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym)) mgl@1371: + mgl@1371: +#define bfd_canonicalize_symtab(abfd, location) \ mgl@1371: + BFD_SEND (abfd, _bfd_canonicalize_symtab, (abfd, location)) mgl@1371: + mgl@1371: +bfd_boolean bfd_set_symtab mgl@1371: + (bfd *abfd, asymbol **location, unsigned int count); mgl@1371: + mgl@1371: +void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol); mgl@1371: + mgl@1371: +#define bfd_make_empty_symbol(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd)) mgl@1371: + mgl@1371: +asymbol *_bfd_generic_make_empty_symbol (bfd *); mgl@1371: + mgl@1371: +#define bfd_make_debug_symbol(abfd,ptr,size) \ mgl@1371: + BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size)) mgl@1371: + mgl@1371: +int bfd_decode_symclass (asymbol *symbol); mgl@1371: + mgl@1371: +bfd_boolean bfd_is_undefined_symclass (int symclass); mgl@1371: + mgl@1371: +void bfd_symbol_info (asymbol *symbol, symbol_info *ret); mgl@1371: + mgl@1371: +bfd_boolean bfd_copy_private_symbol_data mgl@1371: + (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym); mgl@1371: + mgl@1371: +#define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \ mgl@1371: + BFD_SEND (obfd, _bfd_copy_private_symbol_data, \ mgl@1371: + (ibfd, isymbol, obfd, osymbol)) mgl@1371: + mgl@1371: +/* Extracted from bfd.c. */ mgl@1371: +struct bfd mgl@1371: +{ mgl@1371: + /* A unique identifier of the BFD */ mgl@1371: + unsigned int id; mgl@1371: + mgl@1371: + /* The filename the application opened the BFD with. */ mgl@1371: + const char *filename; mgl@1371: + mgl@1371: + /* A pointer to the target jump table. */ mgl@1371: + const struct bfd_target *xvec; mgl@1371: + mgl@1371: + /* The IOSTREAM, and corresponding IO vector that provide access mgl@1371: + to the file backing the BFD. */ mgl@1371: + void *iostream; mgl@1371: + const struct bfd_iovec *iovec; mgl@1371: + mgl@1371: + /* Is the file descriptor being cached? That is, can it be closed as mgl@1371: + needed, and re-opened when accessed later? */ mgl@1371: + bfd_boolean cacheable; mgl@1371: + mgl@1371: + /* Marks whether there was a default target specified when the mgl@1371: + BFD was opened. This is used to select which matching algorithm mgl@1371: + to use to choose the back end. */ mgl@1371: + bfd_boolean target_defaulted; mgl@1371: + mgl@1371: + /* The caching routines use these to maintain a mgl@1371: + least-recently-used list of BFDs. */ mgl@1371: + struct bfd *lru_prev, *lru_next; mgl@1371: + mgl@1371: + /* When a file is closed by the caching routines, BFD retains mgl@1371: + state information on the file here... */ mgl@1371: + ufile_ptr where; mgl@1371: + mgl@1371: + /* ... and here: (``once'' means at least once). */ mgl@1371: + bfd_boolean opened_once; mgl@1371: + mgl@1371: + /* Set if we have a locally maintained mtime value, rather than mgl@1371: + getting it from the file each time. */ mgl@1371: + bfd_boolean mtime_set; mgl@1371: + mgl@1371: + /* File modified time, if mtime_set is TRUE. */ mgl@1371: + long mtime; mgl@1371: + mgl@1371: + /* Reserved for an unimplemented file locking extension. */ mgl@1371: + int ifd; mgl@1371: + mgl@1371: + /* The format which belongs to the BFD. (object, core, etc.) */ mgl@1371: + bfd_format format; mgl@1371: + mgl@1371: + /* The direction with which the BFD was opened. */ mgl@1371: + enum bfd_direction mgl@1371: + { mgl@1371: + no_direction = 0, mgl@1371: + read_direction = 1, mgl@1371: + write_direction = 2, mgl@1371: + both_direction = 3 mgl@1371: + } mgl@1371: + direction; mgl@1371: + mgl@1371: + /* Format_specific flags. */ mgl@1371: + flagword flags; mgl@1371: + mgl@1371: + /* Currently my_archive is tested before adding origin to mgl@1371: + anything. I believe that this can become always an add of mgl@1371: + origin, with origin set to 0 for non archive files. */ mgl@1371: + ufile_ptr origin; mgl@1371: + mgl@1371: + /* Remember when output has begun, to stop strange things mgl@1371: + from happening. */ mgl@1371: + bfd_boolean output_has_begun; mgl@1371: + mgl@1371: + /* A hash table for section names. */ mgl@1371: + struct bfd_hash_table section_htab; mgl@1371: + mgl@1371: + /* Pointer to linked list of sections. */ mgl@1371: + struct bfd_section *sections; mgl@1371: + mgl@1371: + /* The last section on the section list. */ mgl@1371: + struct bfd_section *section_last; mgl@1371: + mgl@1371: + /* The number of sections. */ mgl@1371: + unsigned int section_count; mgl@1371: + mgl@1371: + /* Stuff only useful for object files: mgl@1371: + The start address. */ mgl@1371: + bfd_vma start_address; mgl@1371: + mgl@1371: + /* Used for input and output. */ mgl@1371: + unsigned int symcount; mgl@1371: + mgl@1371: + /* Symbol table for output BFD (with symcount entries). */ mgl@1371: + struct bfd_symbol **outsymbols; mgl@1371: + mgl@1371: + /* Used for slurped dynamic symbol tables. */ mgl@1371: + unsigned int dynsymcount; mgl@1371: + mgl@1371: + /* Pointer to structure which contains architecture information. */ mgl@1371: + const struct bfd_arch_info *arch_info; mgl@1371: + mgl@1371: + /* Flag set if symbols from this BFD should not be exported. */ mgl@1371: + bfd_boolean no_export; mgl@1371: + mgl@1371: + /* Stuff only useful for archives. */ mgl@1371: + void *arelt_data; mgl@1371: + struct bfd *my_archive; /* The containing archive BFD. */ mgl@1371: + struct bfd *archive_next; /* The next BFD in the archive. */ mgl@1371: + struct bfd *archive_head; /* The first BFD in the archive. */ mgl@1371: + bfd_boolean has_armap; mgl@1371: + mgl@1371: + /* A chain of BFD structures involved in a link. */ mgl@1371: + struct bfd *link_next; mgl@1371: + mgl@1371: + /* A field used by _bfd_generic_link_add_archive_symbols. This will mgl@1371: + be used only for archive elements. */ mgl@1371: + int archive_pass; mgl@1371: + mgl@1371: + /* Used by the back end to hold private data. */ mgl@1371: + union mgl@1371: + { mgl@1371: + struct aout_data_struct *aout_data; mgl@1371: + struct artdata *aout_ar_data; mgl@1371: + struct _oasys_data *oasys_obj_data; mgl@1371: + struct _oasys_ar_data *oasys_ar_data; mgl@1371: + struct coff_tdata *coff_obj_data; mgl@1371: + struct pe_tdata *pe_obj_data; mgl@1371: + struct xcoff_tdata *xcoff_obj_data; mgl@1371: + struct ecoff_tdata *ecoff_obj_data; mgl@1371: + struct ieee_data_struct *ieee_data; mgl@1371: + struct ieee_ar_data_struct *ieee_ar_data; mgl@1371: + struct srec_data_struct *srec_data; mgl@1371: + struct ihex_data_struct *ihex_data; mgl@1371: + struct tekhex_data_struct *tekhex_data; mgl@1371: + struct elf_obj_tdata *elf_obj_data; mgl@1371: + struct nlm_obj_tdata *nlm_obj_data; mgl@1371: + struct bout_data_struct *bout_data; mgl@1371: + struct mmo_data_struct *mmo_data; mgl@1371: + struct sun_core_struct *sun_core_data; mgl@1371: + struct sco5_core_struct *sco5_core_data; mgl@1371: + struct trad_core_struct *trad_core_data; mgl@1371: + struct som_data_struct *som_data; mgl@1371: + struct hpux_core_struct *hpux_core_data; mgl@1371: + struct hppabsd_core_struct *hppabsd_core_data; mgl@1371: + struct sgi_core_struct *sgi_core_data; mgl@1371: + struct lynx_core_struct *lynx_core_data; mgl@1371: + struct osf_core_struct *osf_core_data; mgl@1371: + struct cisco_core_struct *cisco_core_data; mgl@1371: + struct versados_data_struct *versados_data; mgl@1371: + struct netbsd_core_struct *netbsd_core_data; mgl@1371: + struct mach_o_data_struct *mach_o_data; mgl@1371: + struct mach_o_fat_data_struct *mach_o_fat_data; mgl@1371: + struct bfd_pef_data_struct *pef_data; mgl@1371: + struct bfd_pef_xlib_data_struct *pef_xlib_data; mgl@1371: + struct bfd_sym_data_struct *sym_data; mgl@1371: + void *any; mgl@1371: + } mgl@1371: + tdata; mgl@1371: + mgl@1371: + /* Used by the application to hold private data. */ mgl@1371: + void *usrdata; mgl@1371: + mgl@1371: + /* Where all the allocated stuff under this BFD goes. This is a mgl@1371: + struct objalloc *, but we use void * to avoid requiring the inclusion mgl@1371: + of objalloc.h. */ mgl@1371: + void *memory; mgl@1371: +}; mgl@1371: + mgl@1371: +typedef enum bfd_error mgl@1371: +{ mgl@1371: + bfd_error_no_error = 0, mgl@1371: + bfd_error_system_call, mgl@1371: + bfd_error_invalid_target, mgl@1371: + bfd_error_wrong_format, mgl@1371: + bfd_error_wrong_object_format, mgl@1371: + bfd_error_invalid_operation, mgl@1371: + bfd_error_no_memory, mgl@1371: + bfd_error_no_symbols, mgl@1371: + bfd_error_no_armap, mgl@1371: + bfd_error_no_more_archived_files, mgl@1371: + bfd_error_malformed_archive, mgl@1371: + bfd_error_file_not_recognized, mgl@1371: + bfd_error_file_ambiguously_recognized, mgl@1371: + bfd_error_no_contents, mgl@1371: + bfd_error_nonrepresentable_section, mgl@1371: + bfd_error_no_debug_section, mgl@1371: + bfd_error_bad_value, mgl@1371: + bfd_error_file_truncated, mgl@1371: + bfd_error_file_too_big, mgl@1371: + bfd_error_on_input, mgl@1371: + bfd_error_invalid_error_code mgl@1371: +} mgl@1371: +bfd_error_type; mgl@1371: + mgl@1371: +bfd_error_type bfd_get_error (void); mgl@1371: + mgl@1371: +void bfd_set_error (bfd_error_type error_tag, ...); mgl@1371: + mgl@1371: +const char *bfd_errmsg (bfd_error_type error_tag); mgl@1371: + mgl@1371: +void bfd_perror (const char *message); mgl@1371: + mgl@1371: +typedef void (*bfd_error_handler_type) (const char *, ...); mgl@1371: + mgl@1371: +bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type); mgl@1371: + mgl@1371: +void bfd_set_error_program_name (const char *); mgl@1371: + mgl@1371: +bfd_error_handler_type bfd_get_error_handler (void); mgl@1371: + mgl@1371: +long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect); mgl@1371: + mgl@1371: +long bfd_canonicalize_reloc mgl@1371: + (bfd *abfd, asection *sec, arelent **loc, asymbol **syms); mgl@1371: + mgl@1371: +void bfd_set_reloc mgl@1371: + (bfd *abfd, asection *sec, arelent **rel, unsigned int count); mgl@1371: + mgl@1371: +bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags); mgl@1371: + mgl@1371: +int bfd_get_arch_size (bfd *abfd); mgl@1371: + mgl@1371: +int bfd_get_sign_extend_vma (bfd *abfd); mgl@1371: + mgl@1371: +bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma); mgl@1371: + mgl@1371: +unsigned int bfd_get_gp_size (bfd *abfd); mgl@1371: + mgl@1371: +void bfd_set_gp_size (bfd *abfd, unsigned int i); mgl@1371: + mgl@1371: +bfd_vma bfd_scan_vma (const char *string, const char **end, int base); mgl@1371: + mgl@1371: +bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd); mgl@1371: + mgl@1371: +#define bfd_copy_private_header_data(ibfd, obfd) \ mgl@1371: + BFD_SEND (obfd, _bfd_copy_private_header_data, \ mgl@1371: + (ibfd, obfd)) mgl@1371: +bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd); mgl@1371: + mgl@1371: +#define bfd_copy_private_bfd_data(ibfd, obfd) \ mgl@1371: + BFD_SEND (obfd, _bfd_copy_private_bfd_data, \ mgl@1371: + (ibfd, obfd)) mgl@1371: +bfd_boolean bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd); mgl@1371: + mgl@1371: +#define bfd_merge_private_bfd_data(ibfd, obfd) \ mgl@1371: + BFD_SEND (obfd, _bfd_merge_private_bfd_data, \ mgl@1371: + (ibfd, obfd)) mgl@1371: +bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags); mgl@1371: + mgl@1371: +#define bfd_set_private_flags(abfd, flags) \ mgl@1371: + BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags)) mgl@1371: +#define bfd_sizeof_headers(abfd, info) \ mgl@1371: + BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info)) mgl@1371: + mgl@1371: +#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \ mgl@1371: + BFD_SEND (abfd, _bfd_find_nearest_line, \ mgl@1371: + (abfd, sec, syms, off, file, func, line)) mgl@1371: + mgl@1371: +#define bfd_find_line(abfd, syms, sym, file, line) \ mgl@1371: + BFD_SEND (abfd, _bfd_find_line, \ mgl@1371: + (abfd, syms, sym, file, line)) mgl@1371: + mgl@1371: +#define bfd_find_inliner_info(abfd, file, func, line) \ mgl@1371: + BFD_SEND (abfd, _bfd_find_inliner_info, \ mgl@1371: + (abfd, file, func, line)) mgl@1371: + mgl@1371: +#define bfd_debug_info_start(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_debug_info_start, (abfd)) mgl@1371: + mgl@1371: +#define bfd_debug_info_end(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_debug_info_end, (abfd)) mgl@1371: + mgl@1371: +#define bfd_debug_info_accumulate(abfd, section) \ mgl@1371: + BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section)) mgl@1371: + mgl@1371: +#define bfd_stat_arch_elt(abfd, stat) \ mgl@1371: + BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat)) mgl@1371: + mgl@1371: +#define bfd_update_armap_timestamp(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd)) mgl@1371: + mgl@1371: +#define bfd_set_arch_mach(abfd, arch, mach)\ mgl@1371: + BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach)) mgl@1371: + mgl@1371: +#define bfd_relax_section(abfd, section, link_info, again) \ mgl@1371: + BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again)) mgl@1371: + mgl@1371: +#define bfd_gc_sections(abfd, link_info) \ mgl@1371: + BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info)) mgl@1371: + mgl@1371: +#define bfd_merge_sections(abfd, link_info) \ mgl@1371: + BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info)) mgl@1371: + mgl@1371: +#define bfd_is_group_section(abfd, sec) \ mgl@1371: + BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec)) mgl@1371: + mgl@1371: +#define bfd_discard_group(abfd, sec) \ mgl@1371: + BFD_SEND (abfd, _bfd_discard_group, (abfd, sec)) mgl@1371: + mgl@1371: +#define bfd_link_hash_table_create(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd)) mgl@1371: + mgl@1371: +#define bfd_link_hash_table_free(abfd, hash) \ mgl@1371: + BFD_SEND (abfd, _bfd_link_hash_table_free, (hash)) mgl@1371: + mgl@1371: +#define bfd_link_add_symbols(abfd, info) \ mgl@1371: + BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info)) mgl@1371: + mgl@1371: +#define bfd_link_just_syms(abfd, sec, info) \ mgl@1371: + BFD_SEND (abfd, _bfd_link_just_syms, (sec, info)) mgl@1371: + mgl@1371: +#define bfd_final_link(abfd, info) \ mgl@1371: + BFD_SEND (abfd, _bfd_final_link, (abfd, info)) mgl@1371: + mgl@1371: +#define bfd_free_cached_info(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_free_cached_info, (abfd)) mgl@1371: + mgl@1371: +#define bfd_get_dynamic_symtab_upper_bound(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd)) mgl@1371: + mgl@1371: +#define bfd_print_private_bfd_data(abfd, file)\ mgl@1371: + BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file)) mgl@1371: + mgl@1371: +#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \ mgl@1371: + BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols)) mgl@1371: + mgl@1371: +#define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \ mgl@1371: + BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \ mgl@1371: + dyncount, dynsyms, ret)) mgl@1371: + mgl@1371: +#define bfd_get_dynamic_reloc_upper_bound(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd)) mgl@1371: + mgl@1371: +#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \ mgl@1371: + BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms)) mgl@1371: + mgl@1371: +extern bfd_byte *bfd_get_relocated_section_contents mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *, mgl@1371: + bfd_boolean, asymbol **); mgl@1371: + mgl@1371: +bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative); mgl@1371: + mgl@1371: +struct bfd_preserve mgl@1371: +{ mgl@1371: + void *marker; mgl@1371: + void *tdata; mgl@1371: + flagword flags; mgl@1371: + const struct bfd_arch_info *arch_info; mgl@1371: + struct bfd_section *sections; mgl@1371: + struct bfd_section *section_last; mgl@1371: + unsigned int section_count; mgl@1371: + struct bfd_hash_table section_htab; mgl@1371: +}; mgl@1371: + mgl@1371: +bfd_boolean bfd_preserve_save (bfd *, struct bfd_preserve *); mgl@1371: + mgl@1371: +void bfd_preserve_restore (bfd *, struct bfd_preserve *); mgl@1371: + mgl@1371: +void bfd_preserve_finish (bfd *, struct bfd_preserve *); mgl@1371: + mgl@1371: +bfd_vma bfd_emul_get_maxpagesize (const char *); mgl@1371: + mgl@1371: +void bfd_emul_set_maxpagesize (const char *, bfd_vma); mgl@1371: + mgl@1371: +bfd_vma bfd_emul_get_commonpagesize (const char *); mgl@1371: + mgl@1371: +void bfd_emul_set_commonpagesize (const char *, bfd_vma); mgl@1371: + mgl@1371: +char *bfd_demangle (bfd *, const char *, int); mgl@1371: + mgl@1371: +/* Extracted from archive.c. */ mgl@1371: +symindex bfd_get_next_mapent mgl@1371: + (bfd *abfd, symindex previous, carsym **sym); mgl@1371: + mgl@1371: +bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head); mgl@1371: + mgl@1371: +bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous); mgl@1371: + mgl@1371: +/* Extracted from corefile.c. */ mgl@1371: +const char *bfd_core_file_failing_command (bfd *abfd); mgl@1371: + mgl@1371: +int bfd_core_file_failing_signal (bfd *abfd); mgl@1371: + mgl@1371: +bfd_boolean core_file_matches_executable_p mgl@1371: + (bfd *core_bfd, bfd *exec_bfd); mgl@1371: + mgl@1371: +bfd_boolean generic_core_file_matches_executable_p mgl@1371: + (bfd *core_bfd, bfd *exec_bfd); mgl@1371: + mgl@1371: +/* Extracted from targets.c. */ mgl@1371: +#define BFD_SEND(bfd, message, arglist) \ mgl@1371: + ((*((bfd)->xvec->message)) arglist) mgl@1371: + mgl@1371: +#ifdef DEBUG_BFD_SEND mgl@1371: +#undef BFD_SEND mgl@1371: +#define BFD_SEND(bfd, message, arglist) \ mgl@1371: + (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \ mgl@1371: + ((*((bfd)->xvec->message)) arglist) : \ mgl@1371: + (bfd_assert (__FILE__,__LINE__), NULL)) mgl@1371: +#endif mgl@1371: +#define BFD_SEND_FMT(bfd, message, arglist) \ mgl@1371: + (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) mgl@1371: + mgl@1371: +#ifdef DEBUG_BFD_SEND mgl@1371: +#undef BFD_SEND_FMT mgl@1371: +#define BFD_SEND_FMT(bfd, message, arglist) \ mgl@1371: + (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \ mgl@1371: + (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) : \ mgl@1371: + (bfd_assert (__FILE__,__LINE__), NULL)) mgl@1371: +#endif mgl@1371: + mgl@1371: +enum bfd_flavour mgl@1371: +{ mgl@1371: + bfd_target_unknown_flavour, mgl@1371: + bfd_target_aout_flavour, mgl@1371: + bfd_target_coff_flavour, mgl@1371: + bfd_target_ecoff_flavour, mgl@1371: + bfd_target_xcoff_flavour, mgl@1371: + bfd_target_elf_flavour, mgl@1371: + bfd_target_ieee_flavour, mgl@1371: + bfd_target_nlm_flavour, mgl@1371: + bfd_target_oasys_flavour, mgl@1371: + bfd_target_tekhex_flavour, mgl@1371: + bfd_target_srec_flavour, mgl@1371: + bfd_target_ihex_flavour, mgl@1371: + bfd_target_som_flavour, mgl@1371: + bfd_target_os9k_flavour, mgl@1371: + bfd_target_versados_flavour, mgl@1371: + bfd_target_msdos_flavour, mgl@1371: + bfd_target_ovax_flavour, mgl@1371: + bfd_target_evax_flavour, mgl@1371: + bfd_target_mmo_flavour, mgl@1371: + bfd_target_mach_o_flavour, mgl@1371: + bfd_target_pef_flavour, mgl@1371: + bfd_target_pef_xlib_flavour, mgl@1371: + bfd_target_sym_flavour mgl@1371: +}; mgl@1371: + mgl@1371: +enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN }; mgl@1371: + mgl@1371: +/* Forward declaration. */ mgl@1371: +typedef struct bfd_link_info _bfd_link_info; mgl@1371: + mgl@1371: +typedef struct bfd_target mgl@1371: +{ mgl@1371: + /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc. */ mgl@1371: + char *name; mgl@1371: + mgl@1371: + /* The "flavour" of a back end is a general indication about mgl@1371: + the contents of a file. */ mgl@1371: + enum bfd_flavour flavour; mgl@1371: + mgl@1371: + /* The order of bytes within the data area of a file. */ mgl@1371: + enum bfd_endian byteorder; mgl@1371: + mgl@1371: + /* The order of bytes within the header parts of a file. */ mgl@1371: + enum bfd_endian header_byteorder; mgl@1371: + mgl@1371: + /* A mask of all the flags which an executable may have set - mgl@1371: + from the set <>, <>, ...<>. */ mgl@1371: + flagword object_flags; mgl@1371: + mgl@1371: + /* A mask of all the flags which a section may have set - from mgl@1371: + the set <>, <>, ...<>. */ mgl@1371: + flagword section_flags; mgl@1371: + mgl@1371: + /* The character normally found at the front of a symbol. mgl@1371: + (if any), perhaps `_'. */ mgl@1371: + char symbol_leading_char; mgl@1371: + mgl@1371: + /* The pad character for file names within an archive header. */ mgl@1371: + char ar_pad_char; mgl@1371: + mgl@1371: + /* The maximum number of characters in an archive header. */ mgl@1371: + unsigned short ar_max_namelen; mgl@1371: + mgl@1371: + /* Entries for byte swapping for data. These are different from the mgl@1371: + other entry points, since they don't take a BFD as the first argument. mgl@1371: + Certain other handlers could do the same. */ mgl@1371: + bfd_uint64_t (*bfd_getx64) (const void *); mgl@1371: + bfd_int64_t (*bfd_getx_signed_64) (const void *); mgl@1371: + void (*bfd_putx64) (bfd_uint64_t, void *); mgl@1371: + bfd_vma (*bfd_getx32) (const void *); mgl@1371: + bfd_signed_vma (*bfd_getx_signed_32) (const void *); mgl@1371: + void (*bfd_putx32) (bfd_vma, void *); mgl@1371: + bfd_vma (*bfd_getx16) (const void *); mgl@1371: + bfd_signed_vma (*bfd_getx_signed_16) (const void *); mgl@1371: + void (*bfd_putx16) (bfd_vma, void *); mgl@1371: + mgl@1371: + /* Byte swapping for the headers. */ mgl@1371: + bfd_uint64_t (*bfd_h_getx64) (const void *); mgl@1371: + bfd_int64_t (*bfd_h_getx_signed_64) (const void *); mgl@1371: + void (*bfd_h_putx64) (bfd_uint64_t, void *); mgl@1371: + bfd_vma (*bfd_h_getx32) (const void *); mgl@1371: + bfd_signed_vma (*bfd_h_getx_signed_32) (const void *); mgl@1371: + void (*bfd_h_putx32) (bfd_vma, void *); mgl@1371: + bfd_vma (*bfd_h_getx16) (const void *); mgl@1371: + bfd_signed_vma (*bfd_h_getx_signed_16) (const void *); mgl@1371: + void (*bfd_h_putx16) (bfd_vma, void *); mgl@1371: + mgl@1371: + /* Format dependent routines: these are vectors of entry points mgl@1371: + within the target vector structure, one for each format to check. */ mgl@1371: + mgl@1371: + /* Check the format of a file being read. Return a <> or zero. */ mgl@1371: + const struct bfd_target *(*_bfd_check_format[bfd_type_end]) (bfd *); mgl@1371: + mgl@1371: + /* Set the format of a file being written. */ mgl@1371: + bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *); mgl@1371: + mgl@1371: + /* Write cached information into a file being written, at <>. */ mgl@1371: + bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *); mgl@1371: + mgl@1371: + mgl@1371: + /* Generic entry points. */ mgl@1371: +#define BFD_JUMP_TABLE_GENERIC(NAME) \ mgl@1371: + NAME##_close_and_cleanup, \ mgl@1371: + NAME##_bfd_free_cached_info, \ mgl@1371: + NAME##_new_section_hook, \ mgl@1371: + NAME##_get_section_contents, \ mgl@1371: + NAME##_get_section_contents_in_window mgl@1371: + mgl@1371: + /* Called when the BFD is being closed to do any necessary cleanup. */ mgl@1371: + bfd_boolean (*_close_and_cleanup) (bfd *); mgl@1371: + /* Ask the BFD to free all cached information. */ mgl@1371: + bfd_boolean (*_bfd_free_cached_info) (bfd *); mgl@1371: + /* Called when a new section is created. */ mgl@1371: + bfd_boolean (*_new_section_hook) (bfd *, sec_ptr); mgl@1371: + /* Read the contents of a section. */ mgl@1371: + bfd_boolean (*_bfd_get_section_contents) mgl@1371: + (bfd *, sec_ptr, void *, file_ptr, bfd_size_type); mgl@1371: + bfd_boolean (*_bfd_get_section_contents_in_window) mgl@1371: + (bfd *, sec_ptr, bfd_window *, file_ptr, bfd_size_type); mgl@1371: + mgl@1371: + /* Entry points to copy private data. */ mgl@1371: +#define BFD_JUMP_TABLE_COPY(NAME) \ mgl@1371: + NAME##_bfd_copy_private_bfd_data, \ mgl@1371: + NAME##_bfd_merge_private_bfd_data, \ mgl@1371: + _bfd_generic_init_private_section_data, \ mgl@1371: + NAME##_bfd_copy_private_section_data, \ mgl@1371: + NAME##_bfd_copy_private_symbol_data, \ mgl@1371: + NAME##_bfd_copy_private_header_data, \ mgl@1371: + NAME##_bfd_set_private_flags, \ mgl@1371: + NAME##_bfd_print_private_bfd_data mgl@1371: + mgl@1371: + /* Called to copy BFD general private data from one object file mgl@1371: + to another. */ mgl@1371: + bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *); mgl@1371: + /* Called to merge BFD general private data from one object file mgl@1371: + to a common output file when linking. */ mgl@1371: + bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, bfd *); mgl@1371: + /* Called to initialize BFD private section data from one object file mgl@1371: + to another. */ mgl@1371: +#define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \ mgl@1371: + BFD_SEND (obfd, _bfd_init_private_section_data, (ibfd, isec, obfd, osec, link_info)) mgl@1371: + bfd_boolean (*_bfd_init_private_section_data) mgl@1371: + (bfd *, sec_ptr, bfd *, sec_ptr, struct bfd_link_info *); mgl@1371: + /* Called to copy BFD private section data from one object file mgl@1371: + to another. */ mgl@1371: + bfd_boolean (*_bfd_copy_private_section_data) mgl@1371: + (bfd *, sec_ptr, bfd *, sec_ptr); mgl@1371: + /* Called to copy BFD private symbol data from one symbol mgl@1371: + to another. */ mgl@1371: + bfd_boolean (*_bfd_copy_private_symbol_data) mgl@1371: + (bfd *, asymbol *, bfd *, asymbol *); mgl@1371: + /* Called to copy BFD private header data from one object file mgl@1371: + to another. */ mgl@1371: + bfd_boolean (*_bfd_copy_private_header_data) mgl@1371: + (bfd *, bfd *); mgl@1371: + /* Called to set private backend flags. */ mgl@1371: + bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword); mgl@1371: + mgl@1371: + /* Called to print private BFD data. */ mgl@1371: + bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *); mgl@1371: + mgl@1371: + /* Core file entry points. */ mgl@1371: +#define BFD_JUMP_TABLE_CORE(NAME) \ mgl@1371: + NAME##_core_file_failing_command, \ mgl@1371: + NAME##_core_file_failing_signal, \ mgl@1371: + NAME##_core_file_matches_executable_p mgl@1371: + mgl@1371: + char * (*_core_file_failing_command) (bfd *); mgl@1371: + int (*_core_file_failing_signal) (bfd *); mgl@1371: + bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *); mgl@1371: + mgl@1371: + /* Archive entry points. */ mgl@1371: +#define BFD_JUMP_TABLE_ARCHIVE(NAME) \ mgl@1371: + NAME##_slurp_armap, \ mgl@1371: + NAME##_slurp_extended_name_table, \ mgl@1371: + NAME##_construct_extended_name_table, \ mgl@1371: + NAME##_truncate_arname, \ mgl@1371: + NAME##_write_armap, \ mgl@1371: + NAME##_read_ar_hdr, \ mgl@1371: + NAME##_openr_next_archived_file, \ mgl@1371: + NAME##_get_elt_at_index, \ mgl@1371: + NAME##_generic_stat_arch_elt, \ mgl@1371: + NAME##_update_armap_timestamp mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_slurp_armap) (bfd *); mgl@1371: + bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *); mgl@1371: + bfd_boolean (*_bfd_construct_extended_name_table) mgl@1371: + (bfd *, char **, bfd_size_type *, const char **); mgl@1371: + void (*_bfd_truncate_arname) (bfd *, const char *, char *); mgl@1371: + bfd_boolean (*write_armap) mgl@1371: + (bfd *, unsigned int, struct orl *, unsigned int, int); mgl@1371: + void * (*_bfd_read_ar_hdr_fn) (bfd *); mgl@1371: + bfd * (*openr_next_archived_file) (bfd *, bfd *); mgl@1371: +#define bfd_get_elt_at_index(b,i) BFD_SEND (b, _bfd_get_elt_at_index, (b,i)) mgl@1371: + bfd * (*_bfd_get_elt_at_index) (bfd *, symindex); mgl@1371: + int (*_bfd_stat_arch_elt) (bfd *, struct stat *); mgl@1371: + bfd_boolean (*_bfd_update_armap_timestamp) (bfd *); mgl@1371: + mgl@1371: + /* Entry points used for symbols. */ mgl@1371: +#define BFD_JUMP_TABLE_SYMBOLS(NAME) \ mgl@1371: + NAME##_get_symtab_upper_bound, \ mgl@1371: + NAME##_canonicalize_symtab, \ mgl@1371: + NAME##_make_empty_symbol, \ mgl@1371: + NAME##_print_symbol, \ mgl@1371: + NAME##_get_symbol_info, \ mgl@1371: + NAME##_bfd_is_local_label_name, \ mgl@1371: + NAME##_bfd_is_target_special_symbol, \ mgl@1371: + NAME##_get_lineno, \ mgl@1371: + NAME##_find_nearest_line, \ mgl@1371: + _bfd_generic_find_line, \ mgl@1371: + NAME##_find_inliner_info, \ mgl@1371: + NAME##_bfd_make_debug_symbol, \ mgl@1371: + NAME##_read_minisymbols, \ mgl@1371: + NAME##_minisymbol_to_symbol mgl@1371: + mgl@1371: + long (*_bfd_get_symtab_upper_bound) (bfd *); mgl@1371: + long (*_bfd_canonicalize_symtab) mgl@1371: + (bfd *, struct bfd_symbol **); mgl@1371: + struct bfd_symbol * mgl@1371: + (*_bfd_make_empty_symbol) (bfd *); mgl@1371: + void (*_bfd_print_symbol) mgl@1371: + (bfd *, void *, struct bfd_symbol *, bfd_print_symbol_type); mgl@1371: +#define bfd_print_symbol(b,p,s,e) BFD_SEND (b, _bfd_print_symbol, (b,p,s,e)) mgl@1371: + void (*_bfd_get_symbol_info) mgl@1371: + (bfd *, struct bfd_symbol *, symbol_info *); mgl@1371: +#define bfd_get_symbol_info(b,p,e) BFD_SEND (b, _bfd_get_symbol_info, (b,p,e)) mgl@1371: + bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *); mgl@1371: + bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *); mgl@1371: + alent * (*_get_lineno) (bfd *, struct bfd_symbol *); mgl@1371: + bfd_boolean (*_bfd_find_nearest_line) mgl@1371: + (bfd *, struct bfd_section *, struct bfd_symbol **, bfd_vma, mgl@1371: + const char **, const char **, unsigned int *); mgl@1371: + bfd_boolean (*_bfd_find_line) mgl@1371: + (bfd *, struct bfd_symbol **, struct bfd_symbol *, mgl@1371: + const char **, unsigned int *); mgl@1371: + bfd_boolean (*_bfd_find_inliner_info) mgl@1371: + (bfd *, const char **, const char **, unsigned int *); mgl@1371: + /* Back-door to allow format-aware applications to create debug symbols mgl@1371: + while using BFD for everything else. Currently used by the assembler mgl@1371: + when creating COFF files. */ mgl@1371: + asymbol * (*_bfd_make_debug_symbol) mgl@1371: + (bfd *, void *, unsigned long size); mgl@1371: +#define bfd_read_minisymbols(b, d, m, s) \ mgl@1371: + BFD_SEND (b, _read_minisymbols, (b, d, m, s)) mgl@1371: + long (*_read_minisymbols) mgl@1371: + (bfd *, bfd_boolean, void **, unsigned int *); mgl@1371: +#define bfd_minisymbol_to_symbol(b, d, m, f) \ mgl@1371: + BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f)) mgl@1371: + asymbol * (*_minisymbol_to_symbol) mgl@1371: + (bfd *, bfd_boolean, const void *, asymbol *); mgl@1371: + mgl@1371: + /* Routines for relocs. */ mgl@1371: +#define BFD_JUMP_TABLE_RELOCS(NAME) \ mgl@1371: + NAME##_get_reloc_upper_bound, \ mgl@1371: + NAME##_canonicalize_reloc, \ mgl@1371: + NAME##_bfd_reloc_type_lookup, \ mgl@1371: + NAME##_bfd_reloc_name_lookup mgl@1371: + mgl@1371: + long (*_get_reloc_upper_bound) (bfd *, sec_ptr); mgl@1371: + long (*_bfd_canonicalize_reloc) mgl@1371: + (bfd *, sec_ptr, arelent **, struct bfd_symbol **); mgl@1371: + /* See documentation on reloc types. */ mgl@1371: + reloc_howto_type * mgl@1371: + (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type); mgl@1371: + reloc_howto_type * mgl@1371: + (*reloc_name_lookup) (bfd *, const char *); mgl@1371: + mgl@1371: + mgl@1371: + /* Routines used when writing an object file. */ mgl@1371: +#define BFD_JUMP_TABLE_WRITE(NAME) \ mgl@1371: + NAME##_set_arch_mach, \ mgl@1371: + NAME##_set_section_contents mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_set_arch_mach) mgl@1371: + (bfd *, enum bfd_architecture, unsigned long); mgl@1371: + bfd_boolean (*_bfd_set_section_contents) mgl@1371: + (bfd *, sec_ptr, const void *, file_ptr, bfd_size_type); mgl@1371: + mgl@1371: + /* Routines used by the linker. */ mgl@1371: +#define BFD_JUMP_TABLE_LINK(NAME) \ mgl@1371: + NAME##_sizeof_headers, \ mgl@1371: + NAME##_bfd_get_relocated_section_contents, \ mgl@1371: + NAME##_bfd_relax_section, \ mgl@1371: + NAME##_bfd_link_hash_table_create, \ mgl@1371: + NAME##_bfd_link_hash_table_free, \ mgl@1371: + NAME##_bfd_link_add_symbols, \ mgl@1371: + NAME##_bfd_link_just_syms, \ mgl@1371: + NAME##_bfd_final_link, \ mgl@1371: + NAME##_bfd_link_split_section, \ mgl@1371: + NAME##_bfd_gc_sections, \ mgl@1371: + NAME##_bfd_merge_sections, \ mgl@1371: + NAME##_bfd_is_group_section, \ mgl@1371: + NAME##_bfd_discard_group, \ mgl@1371: + NAME##_section_already_linked \ mgl@1371: + mgl@1371: + int (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *); mgl@1371: + bfd_byte * (*_bfd_get_relocated_section_contents) mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_link_order *, mgl@1371: + bfd_byte *, bfd_boolean, struct bfd_symbol **); mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_relax_section) mgl@1371: + (bfd *, struct bfd_section *, struct bfd_link_info *, bfd_boolean *); mgl@1371: + mgl@1371: + /* Create a hash table for the linker. Different backends store mgl@1371: + different information in this table. */ mgl@1371: + struct bfd_link_hash_table * mgl@1371: + (*_bfd_link_hash_table_create) (bfd *); mgl@1371: + mgl@1371: + /* Release the memory associated with the linker hash table. */ mgl@1371: + void (*_bfd_link_hash_table_free) (struct bfd_link_hash_table *); mgl@1371: + mgl@1371: + /* Add symbols from this object file into the hash table. */ mgl@1371: + bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: + /* Indicate that we are only retrieving symbol values from this section. */ mgl@1371: + void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *); mgl@1371: + mgl@1371: + /* Do a link based on the link_order structures attached to each mgl@1371: + section of the BFD. */ mgl@1371: + bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: + /* Should this section be split up into smaller pieces during linking. */ mgl@1371: + bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *); mgl@1371: + mgl@1371: + /* Remove sections that are not referenced from the output. */ mgl@1371: + bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: + /* Attempt to merge SEC_MERGE sections. */ mgl@1371: + bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: + /* Is this section a member of a group? */ mgl@1371: + bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *); mgl@1371: + mgl@1371: + /* Discard members of a group. */ mgl@1371: + bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *); mgl@1371: + mgl@1371: + /* Check if SEC has been already linked during a reloceatable or mgl@1371: + final link. */ mgl@1371: + void (*_section_already_linked) (bfd *, struct bfd_section *, mgl@1371: + struct bfd_link_info *); mgl@1371: + mgl@1371: + /* Routines to handle dynamic symbols and relocs. */ mgl@1371: +#define BFD_JUMP_TABLE_DYNAMIC(NAME) \ mgl@1371: + NAME##_get_dynamic_symtab_upper_bound, \ mgl@1371: + NAME##_canonicalize_dynamic_symtab, \ mgl@1371: + NAME##_get_synthetic_symtab, \ mgl@1371: + NAME##_get_dynamic_reloc_upper_bound, \ mgl@1371: + NAME##_canonicalize_dynamic_reloc mgl@1371: + mgl@1371: + /* Get the amount of memory required to hold the dynamic symbols. */ mgl@1371: + long (*_bfd_get_dynamic_symtab_upper_bound) (bfd *); mgl@1371: + /* Read in the dynamic symbols. */ mgl@1371: + long (*_bfd_canonicalize_dynamic_symtab) mgl@1371: + (bfd *, struct bfd_symbol **); mgl@1371: + /* Create synthetized symbols. */ mgl@1371: + long (*_bfd_get_synthetic_symtab) mgl@1371: + (bfd *, long, struct bfd_symbol **, long, struct bfd_symbol **, mgl@1371: + struct bfd_symbol **); mgl@1371: + /* Get the amount of memory required to hold the dynamic relocs. */ mgl@1371: + long (*_bfd_get_dynamic_reloc_upper_bound) (bfd *); mgl@1371: + /* Read in the dynamic relocs. */ mgl@1371: + long (*_bfd_canonicalize_dynamic_reloc) mgl@1371: + (bfd *, arelent **, struct bfd_symbol **); mgl@1371: + mgl@1371: + /* Opposite endian version of this target. */ mgl@1371: + const struct bfd_target * alternative_target; mgl@1371: + mgl@1371: + /* Data for use by back-end routines, which isn't mgl@1371: + generic enough to belong in this structure. */ mgl@1371: + const void *backend_data; mgl@1371: + mgl@1371: +} bfd_target; mgl@1371: + mgl@1371: +bfd_boolean bfd_set_default_target (const char *name); mgl@1371: + mgl@1371: +const bfd_target *bfd_find_target (const char *target_name, bfd *abfd); mgl@1371: + mgl@1371: +const char ** bfd_target_list (void); mgl@1371: + mgl@1371: +const bfd_target *bfd_search_for_target mgl@1371: + (int (*search_func) (const bfd_target *, void *), mgl@1371: + void *); mgl@1371: + mgl@1371: +/* Extracted from format.c. */ mgl@1371: +bfd_boolean bfd_check_format (bfd *abfd, bfd_format format); mgl@1371: + mgl@1371: +bfd_boolean bfd_check_format_matches mgl@1371: + (bfd *abfd, bfd_format format, char ***matching); mgl@1371: + mgl@1371: +bfd_boolean bfd_set_format (bfd *abfd, bfd_format format); mgl@1371: + mgl@1371: +const char *bfd_format_string (bfd_format format); mgl@1371: + mgl@1371: +/* Extracted from linker.c. */ mgl@1371: +bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec); mgl@1371: + mgl@1371: +#define bfd_link_split_section(abfd, sec) \ mgl@1371: + BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec)) mgl@1371: + mgl@1371: +void bfd_section_already_linked (bfd *abfd, asection *sec, mgl@1371: + struct bfd_link_info *info); mgl@1371: + mgl@1371: +#define bfd_section_already_linked(abfd, sec, info) \ mgl@1371: + BFD_SEND (abfd, _section_already_linked, (abfd, sec, info)) mgl@1371: + mgl@1371: +/* Extracted from simple.c. */ mgl@1371: +bfd_byte *bfd_simple_get_relocated_section_contents mgl@1371: + (bfd *abfd, asection *sec, bfd_byte *outbuf, asymbol **symbol_table); mgl@1371: + mgl@1371: +#ifdef __cplusplus mgl@1371: +} mgl@1371: +#endif mgl@1371: +#endif mgl@1371: --- /dev/null mgl@1371: +++ b/bfd/bfd_stdint.h mgl@1371: @@ -0,0 +1,47 @@ mgl@1371: +/* generated for gcc (GCC) 4.2.4 (Ubuntu 4.2.4-3ubuntu4) */ mgl@1371: + mgl@1371: +#ifndef GCC_GENERATED_STDINT_H mgl@1371: +#define GCC_GENERATED_STDINT_H 1 mgl@1371: + mgl@1371: +#include mgl@1371: +#include mgl@1371: +/* glibc uses these symbols as guards to prevent redefinitions. */ mgl@1371: +#ifdef __int8_t_defined mgl@1371: +#define _INT8_T mgl@1371: +#define _INT16_T mgl@1371: +#define _INT32_T mgl@1371: +#endif mgl@1371: +#ifdef __uint32_t_defined mgl@1371: +#define _UINT32_T mgl@1371: +#endif mgl@1371: + mgl@1371: + mgl@1371: +/* Some systems have guard macros to prevent redefinitions, define them. */ mgl@1371: +#ifndef _INT8_T mgl@1371: +#define _INT8_T mgl@1371: +#endif mgl@1371: +#ifndef _INT16_T mgl@1371: +#define _INT16_T mgl@1371: +#endif mgl@1371: +#ifndef _INT32_T mgl@1371: +#define _INT32_T mgl@1371: +#endif mgl@1371: +#ifndef _UINT8_T mgl@1371: +#define _UINT8_T mgl@1371: +#endif mgl@1371: +#ifndef _UINT16_T mgl@1371: +#define _UINT16_T mgl@1371: +#endif mgl@1371: +#ifndef _UINT32_T mgl@1371: +#define _UINT32_T mgl@1371: +#endif mgl@1371: + mgl@1371: +/* system headers have good uint64_t and int64_t */ mgl@1371: +#ifndef _INT64_T mgl@1371: +#define _INT64_T mgl@1371: +#endif mgl@1371: +#ifndef _UINT64_T mgl@1371: +#define _UINT64_T mgl@1371: +#endif mgl@1371: + mgl@1371: +#endif /* GCC_GENERATED_STDINT_H */ mgl@1371: --- a/bfd/configure mgl@1371: +++ b/bfd/configure mgl@1371: @@ -2994,7 +2994,7 @@ fi mgl@1371: mgl@1371: # Define the identity of the package. mgl@1371: PACKAGE=bfd mgl@1371: - VERSION=2.18 mgl@1371: + VERSION=2.18.atmel.1.0.1.avr32linux.1 mgl@1371: mgl@1371: mgl@1371: cat >>confdefs.h <<_ACEOF mgl@1371: @@ -19041,6 +19041,7 @@ do mgl@1371: bfd_efi_app_ia64_vec) tb="$tb efi-app-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;; mgl@1371: bfd_elf32_am33lin_vec) tb="$tb elf32-am33lin.lo elf32.lo $elf" ;; mgl@1371: bfd_elf32_avr_vec) tb="$tb elf32-avr.lo elf32.lo $elf" ;; mgl@1371: + bfd_elf32_avr32_vec) tb="$tb elf32-avr32.lo elf32.lo $elf" ;; mgl@1371: bfd_elf32_bfin_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; mgl@1371: bfd_elf32_bfinfdpic_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; mgl@1371: bfd_elf32_big_generic_vec) tb="$tb elf32-gen.lo elf32.lo $elf" ;; mgl@1371: --- /dev/null mgl@1371: +++ b/bfd/doc/bfd.h mgl@1371: @@ -0,0 +1,5493 @@ mgl@1371: +/* DO NOT EDIT! -*- buffer-read-only: t -*- This file is automatically mgl@1371: + generated from "bfd-in.h", "init.c", "opncls.c", "libbfd.c", mgl@1371: + "bfdio.c", "bfdwin.c", "section.c", "archures.c", "reloc.c", mgl@1371: + "syms.c", "bfd.c", "archive.c", "corefile.c", "targets.c", "format.c", mgl@1371: + "linker.c" and "simple.c". mgl@1371: + Run "make headers" in your build bfd/ to regenerate. */ mgl@1371: + mgl@1371: +/* Main header file for the bfd library -- portable access to object files. mgl@1371: + mgl@1371: + Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, mgl@1371: + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 mgl@1371: + Free Software Foundation, Inc. mgl@1371: + mgl@1371: + Contributed by Cygnus Support. mgl@1371: + mgl@1371: + This file is part of BFD, the Binary File Descriptor library. mgl@1371: + mgl@1371: + This program is free software; you can redistribute it and/or modify mgl@1371: + it under the terms of the GNU General Public License as published by mgl@1371: + the Free Software Foundation; either version 3 of the License, or mgl@1371: + (at your option) any later version. mgl@1371: + mgl@1371: + This program is distributed in the hope that it will be useful, mgl@1371: + but WITHOUT ANY WARRANTY; without even the implied warranty of mgl@1371: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the mgl@1371: + GNU General Public License for more details. mgl@1371: + mgl@1371: + You should have received a copy of the GNU General Public License mgl@1371: + along with this program; if not, write to the Free Software mgl@1371: + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ mgl@1371: + mgl@1371: +#ifndef __BFD_H_SEEN__ mgl@1371: +#define __BFD_H_SEEN__ mgl@1371: + mgl@1371: +#ifdef __cplusplus mgl@1371: +extern "C" { mgl@1371: +#endif mgl@1371: + mgl@1371: +#include "ansidecl.h" mgl@1371: +#include "symcat.h" mgl@1371: +#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) mgl@1371: +#ifndef SABER mgl@1371: +/* This hack is to avoid a problem with some strict ANSI C preprocessors. mgl@1371: + The problem is, "32_" is not a valid preprocessing token, and we don't mgl@1371: + want extra underscores (e.g., "nlm_32_"). The XCONCAT2 macro will mgl@1371: + cause the inner CONCAT2 macros to be evaluated first, producing mgl@1371: + still-valid pp-tokens. Then the final concatenation can be done. */ mgl@1371: +#undef CONCAT4 mgl@1371: +#define CONCAT4(a,b,c,d) XCONCAT2(CONCAT2(a,b),CONCAT2(c,d)) mgl@1371: +#endif mgl@1371: +#endif mgl@1371: + mgl@1371: +/* This is a utility macro to handle the situation where the code mgl@1371: + wants to place a constant string into the code, followed by a mgl@1371: + comma and then the length of the string. Doing this by hand mgl@1371: + is error prone, so using this macro is safer. The macro will mgl@1371: + also safely handle the case where a NULL is passed as the arg. */ mgl@1371: +#define STRING_COMMA_LEN(STR) (STR), ((STR) ? sizeof (STR) - 1 : 0) mgl@1371: +/* Unfortunately it is not possible to use the STRING_COMMA_LEN macro mgl@1371: + to create the arguments to another macro, since the preprocessor mgl@1371: + will mis-count the number of arguments to the outer macro (by not mgl@1371: + evaluating STRING_COMMA_LEN and so missing the comma). This is a mgl@1371: + problem for example when trying to use STRING_COMMA_LEN to build mgl@1371: + the arguments to the strncmp() macro. Hence this alternative mgl@1371: + definition of strncmp is provided here. mgl@1371: + mgl@1371: + Note - these macros do NOT work if STR2 is not a constant string. */ mgl@1371: +#define CONST_STRNEQ(STR1,STR2) (strncmp ((STR1), (STR2), sizeof (STR2) - 1) == 0) mgl@1371: + /* strcpy() can have a similar problem, but since we know we are mgl@1371: + copying a constant string, we can use memcpy which will be faster mgl@1371: + since there is no need to check for a NUL byte inside STR. We mgl@1371: + can also save time if we do not need to copy the terminating NUL. */ mgl@1371: +#define LITMEMCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2) - 1) mgl@1371: +#define LITSTRCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2)) mgl@1371: + mgl@1371: + mgl@1371: +/* The word size used by BFD on the host. This may be 64 with a 32 mgl@1371: + bit target if the host is 64 bit, or if other 64 bit targets have mgl@1371: + been selected with --enable-targets, or if --enable-64-bit-bfd. */ mgl@1371: +#define BFD_ARCH_SIZE @wordsize@ mgl@1371: + mgl@1371: +/* The word size of the default bfd target. */ mgl@1371: +#define BFD_DEFAULT_TARGET_SIZE @bfd_default_target_size@ mgl@1371: + mgl@1371: +#define BFD_HOST_64BIT_LONG @BFD_HOST_64BIT_LONG@ mgl@1371: +#define BFD_HOST_64BIT_LONG_LONG @BFD_HOST_64BIT_LONG_LONG@ mgl@1371: +#define BFD_HOST_LONG_LONG @BFD_HOST_LONG_LONG@ mgl@1371: +#if @BFD_HOST_64_BIT_DEFINED@ mgl@1371: +#define BFD_HOST_64_BIT @BFD_HOST_64_BIT@ mgl@1371: +#define BFD_HOST_U_64_BIT @BFD_HOST_U_64_BIT@ mgl@1371: +typedef BFD_HOST_64_BIT bfd_int64_t; mgl@1371: +typedef BFD_HOST_U_64_BIT bfd_uint64_t; mgl@1371: +#endif mgl@1371: + mgl@1371: +#if BFD_ARCH_SIZE >= 64 mgl@1371: +#define BFD64 mgl@1371: +#endif mgl@1371: + mgl@1371: +#ifndef INLINE mgl@1371: +#if __GNUC__ >= 2 mgl@1371: +#define INLINE __inline__ mgl@1371: +#else mgl@1371: +#define INLINE mgl@1371: +#endif mgl@1371: +#endif mgl@1371: + mgl@1371: +/* Declaring a type wide enough to hold a host long and a host pointer. */ mgl@1371: +#define BFD_HOSTPTR_T @BFD_HOSTPTR_T@ mgl@1371: +typedef BFD_HOSTPTR_T bfd_hostptr_t; mgl@1371: + mgl@1371: +/* Forward declaration. */ mgl@1371: +typedef struct bfd bfd; mgl@1371: + mgl@1371: +/* Boolean type used in bfd. Too many systems define their own mgl@1371: + versions of "boolean" for us to safely typedef a "boolean" of mgl@1371: + our own. Using an enum for "bfd_boolean" has its own set of mgl@1371: + problems, with strange looking casts required to avoid warnings mgl@1371: + on some older compilers. Thus we just use an int. mgl@1371: + mgl@1371: + General rule: Functions which are bfd_boolean return TRUE on mgl@1371: + success and FALSE on failure (unless they're a predicate). */ mgl@1371: + mgl@1371: +typedef int bfd_boolean; mgl@1371: +#undef FALSE mgl@1371: +#undef TRUE mgl@1371: +#define FALSE 0 mgl@1371: +#define TRUE 1 mgl@1371: + mgl@1371: +#ifdef BFD64 mgl@1371: + mgl@1371: +#ifndef BFD_HOST_64_BIT mgl@1371: + #error No 64 bit integer type available mgl@1371: +#endif /* ! defined (BFD_HOST_64_BIT) */ mgl@1371: + mgl@1371: +typedef BFD_HOST_U_64_BIT bfd_vma; mgl@1371: +typedef BFD_HOST_64_BIT bfd_signed_vma; mgl@1371: +typedef BFD_HOST_U_64_BIT bfd_size_type; mgl@1371: +typedef BFD_HOST_U_64_BIT symvalue; mgl@1371: + mgl@1371: +#ifndef fprintf_vma mgl@1371: +#if BFD_HOST_64BIT_LONG mgl@1371: +#define sprintf_vma(s,x) sprintf (s, "%016lx", x) mgl@1371: +#define fprintf_vma(f,x) fprintf (f, "%016lx", x) mgl@1371: +#elif BFD_HOST_64BIT_LONG_LONG mgl@1371: +#define sprintf_vma(s,x) sprintf (s, "%016llx", x) mgl@1371: +#define fprintf_vma(f,x) fprintf (f, "%016llx", x) mgl@1371: +#else mgl@1371: +#define _bfd_int64_low(x) ((unsigned long) (((x) & 0xffffffff))) mgl@1371: +#define _bfd_int64_high(x) ((unsigned long) (((x) >> 32) & 0xffffffff)) mgl@1371: +#define fprintf_vma(s,x) \ mgl@1371: + fprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x)) mgl@1371: +#define sprintf_vma(s,x) \ mgl@1371: + sprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x)) mgl@1371: +#endif mgl@1371: +#endif mgl@1371: + mgl@1371: +#else /* not BFD64 */ mgl@1371: + mgl@1371: +/* Represent a target address. Also used as a generic unsigned type mgl@1371: + which is guaranteed to be big enough to hold any arithmetic types mgl@1371: + we need to deal with. */ mgl@1371: +typedef unsigned long bfd_vma; mgl@1371: + mgl@1371: +/* A generic signed type which is guaranteed to be big enough to hold any mgl@1371: + arithmetic types we need to deal with. Can be assumed to be compatible mgl@1371: + with bfd_vma in the same way that signed and unsigned ints are compatible mgl@1371: + (as parameters, in assignment, etc). */ mgl@1371: +typedef long bfd_signed_vma; mgl@1371: + mgl@1371: +typedef unsigned long symvalue; mgl@1371: +typedef unsigned long bfd_size_type; mgl@1371: + mgl@1371: +/* Print a bfd_vma x on stream s. */ mgl@1371: +#define fprintf_vma(s,x) fprintf (s, "%08lx", x) mgl@1371: +#define sprintf_vma(s,x) sprintf (s, "%08lx", x) mgl@1371: + mgl@1371: +#endif /* not BFD64 */ mgl@1371: + mgl@1371: +#define HALF_BFD_SIZE_TYPE \ mgl@1371: + (((bfd_size_type) 1) << (8 * sizeof (bfd_size_type) / 2)) mgl@1371: + mgl@1371: +#ifndef BFD_HOST_64_BIT mgl@1371: +/* Fall back on a 32 bit type. The idea is to make these types always mgl@1371: + available for function return types, but in the case that mgl@1371: + BFD_HOST_64_BIT is undefined such a function should abort or mgl@1371: + otherwise signal an error. */ mgl@1371: +typedef bfd_signed_vma bfd_int64_t; mgl@1371: +typedef bfd_vma bfd_uint64_t; mgl@1371: +#endif mgl@1371: + mgl@1371: +/* An offset into a file. BFD always uses the largest possible offset mgl@1371: + based on the build time availability of fseek, fseeko, or fseeko64. */ mgl@1371: +typedef @bfd_file_ptr@ file_ptr; mgl@1371: +typedef unsigned @bfd_file_ptr@ ufile_ptr; mgl@1371: + mgl@1371: +extern void bfd_sprintf_vma (bfd *, char *, bfd_vma); mgl@1371: +extern void bfd_fprintf_vma (bfd *, void *, bfd_vma); mgl@1371: + mgl@1371: +#define printf_vma(x) fprintf_vma(stdout,x) mgl@1371: +#define bfd_printf_vma(abfd,x) bfd_fprintf_vma (abfd,stdout,x) mgl@1371: + mgl@1371: +typedef unsigned int flagword; /* 32 bits of flags */ mgl@1371: +typedef unsigned char bfd_byte; mgl@1371: + mgl@1371: +/* File formats. */ mgl@1371: + mgl@1371: +typedef enum bfd_format mgl@1371: +{ mgl@1371: + bfd_unknown = 0, /* File format is unknown. */ mgl@1371: + bfd_object, /* Linker/assembler/compiler output. */ mgl@1371: + bfd_archive, /* Object archive file. */ mgl@1371: + bfd_core, /* Core dump. */ mgl@1371: + bfd_type_end /* Marks the end; don't use it! */ mgl@1371: +} mgl@1371: +bfd_format; mgl@1371: + mgl@1371: +/* Values that may appear in the flags field of a BFD. These also mgl@1371: + appear in the object_flags field of the bfd_target structure, where mgl@1371: + they indicate the set of flags used by that backend (not all flags mgl@1371: + are meaningful for all object file formats) (FIXME: at the moment, mgl@1371: + the object_flags values have mostly just been copied from backend mgl@1371: + to another, and are not necessarily correct). */ mgl@1371: + mgl@1371: +/* No flags. */ mgl@1371: +#define BFD_NO_FLAGS 0x00 mgl@1371: + mgl@1371: +/* BFD contains relocation entries. */ mgl@1371: +#define HAS_RELOC 0x01 mgl@1371: + mgl@1371: +/* BFD is directly executable. */ mgl@1371: +#define EXEC_P 0x02 mgl@1371: + mgl@1371: +/* BFD has line number information (basically used for F_LNNO in a mgl@1371: + COFF header). */ mgl@1371: +#define HAS_LINENO 0x04 mgl@1371: + mgl@1371: +/* BFD has debugging information. */ mgl@1371: +#define HAS_DEBUG 0x08 mgl@1371: + mgl@1371: +/* BFD has symbols. */ mgl@1371: +#define HAS_SYMS 0x10 mgl@1371: + mgl@1371: +/* BFD has local symbols (basically used for F_LSYMS in a COFF mgl@1371: + header). */ mgl@1371: +#define HAS_LOCALS 0x20 mgl@1371: + mgl@1371: +/* BFD is a dynamic object. */ mgl@1371: +#define DYNAMIC 0x40 mgl@1371: + mgl@1371: +/* Text section is write protected (if D_PAGED is not set, this is mgl@1371: + like an a.out NMAGIC file) (the linker sets this by default, but mgl@1371: + clears it for -r or -N). */ mgl@1371: +#define WP_TEXT 0x80 mgl@1371: + mgl@1371: +/* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the mgl@1371: + linker sets this by default, but clears it for -r or -n or -N). */ mgl@1371: +#define D_PAGED 0x100 mgl@1371: + mgl@1371: +/* BFD is relaxable (this means that bfd_relax_section may be able to mgl@1371: + do something) (sometimes bfd_relax_section can do something even if mgl@1371: + this is not set). */ mgl@1371: +#define BFD_IS_RELAXABLE 0x200 mgl@1371: + mgl@1371: +/* This may be set before writing out a BFD to request using a mgl@1371: + traditional format. For example, this is used to request that when mgl@1371: + writing out an a.out object the symbols not be hashed to eliminate mgl@1371: + duplicates. */ mgl@1371: +#define BFD_TRADITIONAL_FORMAT 0x400 mgl@1371: + mgl@1371: +/* This flag indicates that the BFD contents are actually cached in mgl@1371: + memory. If this is set, iostream points to a bfd_in_memory struct. */ mgl@1371: +#define BFD_IN_MEMORY 0x800 mgl@1371: + mgl@1371: +/* The sections in this BFD specify a memory page. */ mgl@1371: +#define HAS_LOAD_PAGE 0x1000 mgl@1371: + mgl@1371: +/* This BFD has been created by the linker and doesn't correspond mgl@1371: + to any input file. */ mgl@1371: +#define BFD_LINKER_CREATED 0x2000 mgl@1371: + mgl@1371: +/* Symbols and relocation. */ mgl@1371: + mgl@1371: +/* A count of carsyms (canonical archive symbols). */ mgl@1371: +typedef unsigned long symindex; mgl@1371: + mgl@1371: +/* How to perform a relocation. */ mgl@1371: +typedef const struct reloc_howto_struct reloc_howto_type; mgl@1371: + mgl@1371: +#define BFD_NO_MORE_SYMBOLS ((symindex) ~0) mgl@1371: + mgl@1371: +/* General purpose part of a symbol X; mgl@1371: + target specific parts are in libcoff.h, libaout.h, etc. */ mgl@1371: + mgl@1371: +#define bfd_get_section(x) ((x)->section) mgl@1371: +#define bfd_get_output_section(x) ((x)->section->output_section) mgl@1371: +#define bfd_set_section(x,y) ((x)->section) = (y) mgl@1371: +#define bfd_asymbol_base(x) ((x)->section->vma) mgl@1371: +#define bfd_asymbol_value(x) (bfd_asymbol_base(x) + (x)->value) mgl@1371: +#define bfd_asymbol_name(x) ((x)->name) mgl@1371: +/*Perhaps future: #define bfd_asymbol_bfd(x) ((x)->section->owner)*/ mgl@1371: +#define bfd_asymbol_bfd(x) ((x)->the_bfd) mgl@1371: +#define bfd_asymbol_flavour(x) (bfd_asymbol_bfd(x)->xvec->flavour) mgl@1371: + mgl@1371: +/* A canonical archive symbol. */ mgl@1371: +/* This is a type pun with struct ranlib on purpose! */ mgl@1371: +typedef struct carsym mgl@1371: +{ mgl@1371: + char *name; mgl@1371: + file_ptr file_offset; /* Look here to find the file. */ mgl@1371: +} mgl@1371: +carsym; /* To make these you call a carsymogen. */ mgl@1371: + mgl@1371: +/* Used in generating armaps (archive tables of contents). mgl@1371: + Perhaps just a forward definition would do? */ mgl@1371: +struct orl /* Output ranlib. */ mgl@1371: +{ mgl@1371: + char **name; /* Symbol name. */ mgl@1371: + union mgl@1371: + { mgl@1371: + file_ptr pos; mgl@1371: + bfd *abfd; mgl@1371: + } u; /* bfd* or file position. */ mgl@1371: + int namidx; /* Index into string table. */ mgl@1371: +}; mgl@1371: + mgl@1371: +/* Linenumber stuff. */ mgl@1371: +typedef struct lineno_cache_entry mgl@1371: +{ mgl@1371: + unsigned int line_number; /* Linenumber from start of function. */ mgl@1371: + union mgl@1371: + { mgl@1371: + struct bfd_symbol *sym; /* Function name. */ mgl@1371: + bfd_vma offset; /* Offset into section. */ mgl@1371: + } u; mgl@1371: +} mgl@1371: +alent; mgl@1371: + mgl@1371: +/* Object and core file sections. */ mgl@1371: + mgl@1371: +#define align_power(addr, align) \ mgl@1371: + (((addr) + ((bfd_vma) 1 << (align)) - 1) & ((bfd_vma) -1 << (align))) mgl@1371: + mgl@1371: +typedef struct bfd_section *sec_ptr; mgl@1371: + mgl@1371: +#define bfd_get_section_name(bfd, ptr) ((ptr)->name + 0) mgl@1371: +#define bfd_get_section_vma(bfd, ptr) ((ptr)->vma + 0) mgl@1371: +#define bfd_get_section_lma(bfd, ptr) ((ptr)->lma + 0) mgl@1371: +#define bfd_get_section_alignment(bfd, ptr) ((ptr)->alignment_power + 0) mgl@1371: +#define bfd_section_name(bfd, ptr) ((ptr)->name) mgl@1371: +#define bfd_section_size(bfd, ptr) ((ptr)->size) mgl@1371: +#define bfd_get_section_size(ptr) ((ptr)->size) mgl@1371: +#define bfd_section_vma(bfd, ptr) ((ptr)->vma) mgl@1371: +#define bfd_section_lma(bfd, ptr) ((ptr)->lma) mgl@1371: +#define bfd_section_alignment(bfd, ptr) ((ptr)->alignment_power) mgl@1371: +#define bfd_get_section_flags(bfd, ptr) ((ptr)->flags + 0) mgl@1371: +#define bfd_get_section_userdata(bfd, ptr) ((ptr)->userdata) mgl@1371: + mgl@1371: +#define bfd_is_com_section(ptr) (((ptr)->flags & SEC_IS_COMMON) != 0) mgl@1371: + mgl@1371: +#define bfd_set_section_vma(bfd, ptr, val) (((ptr)->vma = (ptr)->lma = (val)), ((ptr)->user_set_vma = TRUE), TRUE) mgl@1371: +#define bfd_set_section_alignment(bfd, ptr, val) (((ptr)->alignment_power = (val)),TRUE) mgl@1371: +#define bfd_set_section_userdata(bfd, ptr, val) (((ptr)->userdata = (val)),TRUE) mgl@1371: +/* Find the address one past the end of SEC. */ mgl@1371: +#define bfd_get_section_limit(bfd, sec) \ mgl@1371: + (((sec)->rawsize ? (sec)->rawsize : (sec)->size) \ mgl@1371: + / bfd_octets_per_byte (bfd)) mgl@1371: + mgl@1371: +/* Return TRUE if section has been discarded. */ mgl@1371: +#define elf_discarded_section(sec) \ mgl@1371: + (!bfd_is_abs_section (sec) \ mgl@1371: + && bfd_is_abs_section ((sec)->output_section) \ mgl@1371: + && (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \ mgl@1371: + && (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS) mgl@1371: + mgl@1371: +/* Forward define. */ mgl@1371: +struct stat; mgl@1371: + mgl@1371: +typedef enum bfd_print_symbol mgl@1371: +{ mgl@1371: + bfd_print_symbol_name, mgl@1371: + bfd_print_symbol_more, mgl@1371: + bfd_print_symbol_all mgl@1371: +} bfd_print_symbol_type; mgl@1371: + mgl@1371: +/* Information about a symbol that nm needs. */ mgl@1371: + mgl@1371: +typedef struct _symbol_info mgl@1371: +{ mgl@1371: + symvalue value; mgl@1371: + char type; mgl@1371: + const char *name; /* Symbol name. */ mgl@1371: + unsigned char stab_type; /* Stab type. */ mgl@1371: + char stab_other; /* Stab other. */ mgl@1371: + short stab_desc; /* Stab desc. */ mgl@1371: + const char *stab_name; /* String for stab type. */ mgl@1371: +} symbol_info; mgl@1371: + mgl@1371: +/* Get the name of a stabs type code. */ mgl@1371: + mgl@1371: +extern const char *bfd_get_stab_name (int); mgl@1371: + mgl@1371: +/* Hash table routines. There is no way to free up a hash table. */ mgl@1371: + mgl@1371: +/* An element in the hash table. Most uses will actually use a larger mgl@1371: + structure, and an instance of this will be the first field. */ mgl@1371: + mgl@1371: +struct bfd_hash_entry mgl@1371: +{ mgl@1371: + /* Next entry for this hash code. */ mgl@1371: + struct bfd_hash_entry *next; mgl@1371: + /* String being hashed. */ mgl@1371: + const char *string; mgl@1371: + /* Hash code. This is the full hash code, not the index into the mgl@1371: + table. */ mgl@1371: + unsigned long hash; mgl@1371: +}; mgl@1371: + mgl@1371: +/* A hash table. */ mgl@1371: + mgl@1371: +struct bfd_hash_table mgl@1371: +{ mgl@1371: + /* The hash array. */ mgl@1371: + struct bfd_hash_entry **table; mgl@1371: + /* A function used to create new elements in the hash table. The mgl@1371: + first entry is itself a pointer to an element. When this mgl@1371: + function is first invoked, this pointer will be NULL. However, mgl@1371: + having the pointer permits a hierarchy of method functions to be mgl@1371: + built each of which calls the function in the superclass. Thus mgl@1371: + each function should be written to allocate a new block of memory mgl@1371: + only if the argument is NULL. */ mgl@1371: + struct bfd_hash_entry *(*newfunc) mgl@1371: + (struct bfd_hash_entry *, struct bfd_hash_table *, const char *); mgl@1371: + /* An objalloc for this hash table. This is a struct objalloc *, mgl@1371: + but we use void * to avoid requiring the inclusion of objalloc.h. */ mgl@1371: + void *memory; mgl@1371: + /* The number of slots in the hash table. */ mgl@1371: + unsigned int size; mgl@1371: + /* The number of entries in the hash table. */ mgl@1371: + unsigned int count; mgl@1371: + /* The size of elements. */ mgl@1371: + unsigned int entsize; mgl@1371: + /* If non-zero, don't grow the hash table. */ mgl@1371: + unsigned int frozen:1; mgl@1371: +}; mgl@1371: + mgl@1371: +/* Initialize a hash table. */ mgl@1371: +extern bfd_boolean bfd_hash_table_init mgl@1371: + (struct bfd_hash_table *, mgl@1371: + struct bfd_hash_entry *(*) (struct bfd_hash_entry *, mgl@1371: + struct bfd_hash_table *, mgl@1371: + const char *), mgl@1371: + unsigned int); mgl@1371: + mgl@1371: +/* Initialize a hash table specifying a size. */ mgl@1371: +extern bfd_boolean bfd_hash_table_init_n mgl@1371: + (struct bfd_hash_table *, mgl@1371: + struct bfd_hash_entry *(*) (struct bfd_hash_entry *, mgl@1371: + struct bfd_hash_table *, mgl@1371: + const char *), mgl@1371: + unsigned int, unsigned int); mgl@1371: + mgl@1371: +/* Free up a hash table. */ mgl@1371: +extern void bfd_hash_table_free mgl@1371: + (struct bfd_hash_table *); mgl@1371: + mgl@1371: +/* Look up a string in a hash table. If CREATE is TRUE, a new entry mgl@1371: + will be created for this string if one does not already exist. The mgl@1371: + COPY argument must be TRUE if this routine should copy the string mgl@1371: + into newly allocated memory when adding an entry. */ mgl@1371: +extern struct bfd_hash_entry *bfd_hash_lookup mgl@1371: + (struct bfd_hash_table *, const char *, bfd_boolean create, mgl@1371: + bfd_boolean copy); mgl@1371: + mgl@1371: +/* Replace an entry in a hash table. */ mgl@1371: +extern void bfd_hash_replace mgl@1371: + (struct bfd_hash_table *, struct bfd_hash_entry *old, mgl@1371: + struct bfd_hash_entry *nw); mgl@1371: + mgl@1371: +/* Base method for creating a hash table entry. */ mgl@1371: +extern struct bfd_hash_entry *bfd_hash_newfunc mgl@1371: + (struct bfd_hash_entry *, struct bfd_hash_table *, const char *); mgl@1371: + mgl@1371: +/* Grab some space for a hash table entry. */ mgl@1371: +extern void *bfd_hash_allocate mgl@1371: + (struct bfd_hash_table *, unsigned int); mgl@1371: + mgl@1371: +/* Traverse a hash table in a random order, calling a function on each mgl@1371: + element. If the function returns FALSE, the traversal stops. The mgl@1371: + INFO argument is passed to the function. */ mgl@1371: +extern void bfd_hash_traverse mgl@1371: + (struct bfd_hash_table *, mgl@1371: + bfd_boolean (*) (struct bfd_hash_entry *, void *), mgl@1371: + void *info); mgl@1371: + mgl@1371: +/* Allows the default size of a hash table to be configured. New hash mgl@1371: + tables allocated using bfd_hash_table_init will be created with mgl@1371: + this size. */ mgl@1371: +extern void bfd_hash_set_default_size (bfd_size_type); mgl@1371: + mgl@1371: +/* This structure is used to keep track of stabs in sections mgl@1371: + information while linking. */ mgl@1371: + mgl@1371: +struct stab_info mgl@1371: +{ mgl@1371: + /* A hash table used to hold stabs strings. */ mgl@1371: + struct bfd_strtab_hash *strings; mgl@1371: + /* The header file hash table. */ mgl@1371: + struct bfd_hash_table includes; mgl@1371: + /* The first .stabstr section. */ mgl@1371: + struct bfd_section *stabstr; mgl@1371: +}; mgl@1371: + mgl@1371: +#define COFF_SWAP_TABLE (void *) &bfd_coff_std_swap_table mgl@1371: + mgl@1371: +/* User program access to BFD facilities. */ mgl@1371: + mgl@1371: +/* Direct I/O routines, for programs which know more about the object mgl@1371: + file than BFD does. Use higher level routines if possible. */ mgl@1371: + mgl@1371: +extern bfd_size_type bfd_bread (void *, bfd_size_type, bfd *); mgl@1371: +extern bfd_size_type bfd_bwrite (const void *, bfd_size_type, bfd *); mgl@1371: +extern int bfd_seek (bfd *, file_ptr, int); mgl@1371: +extern file_ptr bfd_tell (bfd *); mgl@1371: +extern int bfd_flush (bfd *); mgl@1371: +extern int bfd_stat (bfd *, struct stat *); mgl@1371: + mgl@1371: +/* Deprecated old routines. */ mgl@1371: +#if __GNUC__ mgl@1371: +#define bfd_read(BUF, ELTSIZE, NITEMS, ABFD) \ mgl@1371: + (warn_deprecated ("bfd_read", __FILE__, __LINE__, __FUNCTION__), \ mgl@1371: + bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD))) mgl@1371: +#define bfd_write(BUF, ELTSIZE, NITEMS, ABFD) \ mgl@1371: + (warn_deprecated ("bfd_write", __FILE__, __LINE__, __FUNCTION__), \ mgl@1371: + bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD))) mgl@1371: +#else mgl@1371: +#define bfd_read(BUF, ELTSIZE, NITEMS, ABFD) \ mgl@1371: + (warn_deprecated ("bfd_read", (const char *) 0, 0, (const char *) 0), \ mgl@1371: + bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD))) mgl@1371: +#define bfd_write(BUF, ELTSIZE, NITEMS, ABFD) \ mgl@1371: + (warn_deprecated ("bfd_write", (const char *) 0, 0, (const char *) 0),\ mgl@1371: + bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD))) mgl@1371: +#endif mgl@1371: +extern void warn_deprecated (const char *, const char *, int, const char *); mgl@1371: + mgl@1371: +/* Cast from const char * to char * so that caller can assign to mgl@1371: + a char * without a warning. */ mgl@1371: +#define bfd_get_filename(abfd) ((char *) (abfd)->filename) mgl@1371: +#define bfd_get_cacheable(abfd) ((abfd)->cacheable) mgl@1371: +#define bfd_get_format(abfd) ((abfd)->format) mgl@1371: +#define bfd_get_target(abfd) ((abfd)->xvec->name) mgl@1371: +#define bfd_get_flavour(abfd) ((abfd)->xvec->flavour) mgl@1371: +#define bfd_family_coff(abfd) \ mgl@1371: + (bfd_get_flavour (abfd) == bfd_target_coff_flavour || \ mgl@1371: + bfd_get_flavour (abfd) == bfd_target_xcoff_flavour) mgl@1371: +#define bfd_big_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_BIG) mgl@1371: +#define bfd_little_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_LITTLE) mgl@1371: +#define bfd_header_big_endian(abfd) \ mgl@1371: + ((abfd)->xvec->header_byteorder == BFD_ENDIAN_BIG) mgl@1371: +#define bfd_header_little_endian(abfd) \ mgl@1371: + ((abfd)->xvec->header_byteorder == BFD_ENDIAN_LITTLE) mgl@1371: +#define bfd_get_file_flags(abfd) ((abfd)->flags) mgl@1371: +#define bfd_applicable_file_flags(abfd) ((abfd)->xvec->object_flags) mgl@1371: +#define bfd_applicable_section_flags(abfd) ((abfd)->xvec->section_flags) mgl@1371: +#define bfd_my_archive(abfd) ((abfd)->my_archive) mgl@1371: +#define bfd_has_map(abfd) ((abfd)->has_armap) mgl@1371: + mgl@1371: +#define bfd_valid_reloc_types(abfd) ((abfd)->xvec->valid_reloc_types) mgl@1371: +#define bfd_usrdata(abfd) ((abfd)->usrdata) mgl@1371: + mgl@1371: +#define bfd_get_start_address(abfd) ((abfd)->start_address) mgl@1371: +#define bfd_get_symcount(abfd) ((abfd)->symcount) mgl@1371: +#define bfd_get_outsymbols(abfd) ((abfd)->outsymbols) mgl@1371: +#define bfd_count_sections(abfd) ((abfd)->section_count) mgl@1371: + mgl@1371: +#define bfd_get_dynamic_symcount(abfd) ((abfd)->dynsymcount) mgl@1371: + mgl@1371: +#define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char) mgl@1371: + mgl@1371: +#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = bool), TRUE) mgl@1371: + mgl@1371: +extern bfd_boolean bfd_cache_close mgl@1371: + (bfd *abfd); mgl@1371: +/* NB: This declaration should match the autogenerated one in libbfd.h. */ mgl@1371: + mgl@1371: +extern bfd_boolean bfd_cache_close_all (void); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_record_phdr mgl@1371: + (bfd *, unsigned long, bfd_boolean, flagword, bfd_boolean, bfd_vma, mgl@1371: + bfd_boolean, bfd_boolean, unsigned int, struct bfd_section **); mgl@1371: + mgl@1371: +/* Byte swapping routines. */ mgl@1371: + mgl@1371: +bfd_uint64_t bfd_getb64 (const void *); mgl@1371: +bfd_uint64_t bfd_getl64 (const void *); mgl@1371: +bfd_int64_t bfd_getb_signed_64 (const void *); mgl@1371: +bfd_int64_t bfd_getl_signed_64 (const void *); mgl@1371: +bfd_vma bfd_getb32 (const void *); mgl@1371: +bfd_vma bfd_getl32 (const void *); mgl@1371: +bfd_signed_vma bfd_getb_signed_32 (const void *); mgl@1371: +bfd_signed_vma bfd_getl_signed_32 (const void *); mgl@1371: +bfd_vma bfd_getb16 (const void *); mgl@1371: +bfd_vma bfd_getl16 (const void *); mgl@1371: +bfd_signed_vma bfd_getb_signed_16 (const void *); mgl@1371: +bfd_signed_vma bfd_getl_signed_16 (const void *); mgl@1371: +void bfd_putb64 (bfd_uint64_t, void *); mgl@1371: +void bfd_putl64 (bfd_uint64_t, void *); mgl@1371: +void bfd_putb32 (bfd_vma, void *); mgl@1371: +void bfd_putl32 (bfd_vma, void *); mgl@1371: +void bfd_putb16 (bfd_vma, void *); mgl@1371: +void bfd_putl16 (bfd_vma, void *); mgl@1371: + mgl@1371: +/* Byte swapping routines which take size and endiannes as arguments. */ mgl@1371: + mgl@1371: +bfd_uint64_t bfd_get_bits (const void *, int, bfd_boolean); mgl@1371: +void bfd_put_bits (bfd_uint64_t, void *, int, bfd_boolean); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_section_already_linked_table_init (void); mgl@1371: +extern void bfd_section_already_linked_table_free (void); mgl@1371: + mgl@1371: +/* Externally visible ECOFF routines. */ mgl@1371: + mgl@1371: +#if defined(__STDC__) || defined(ALMOST_STDC) mgl@1371: +struct ecoff_debug_info; mgl@1371: +struct ecoff_debug_swap; mgl@1371: +struct ecoff_extr; mgl@1371: +struct bfd_symbol; mgl@1371: +struct bfd_link_info; mgl@1371: +struct bfd_link_hash_entry; mgl@1371: +struct bfd_elf_version_tree; mgl@1371: +#endif mgl@1371: +extern bfd_vma bfd_ecoff_get_gp_value mgl@1371: + (bfd * abfd); mgl@1371: +extern bfd_boolean bfd_ecoff_set_gp_value mgl@1371: + (bfd *abfd, bfd_vma gp_value); mgl@1371: +extern bfd_boolean bfd_ecoff_set_regmasks mgl@1371: + (bfd *abfd, unsigned long gprmask, unsigned long fprmask, mgl@1371: + unsigned long *cprmask); mgl@1371: +extern void *bfd_ecoff_debug_init mgl@1371: + (bfd *output_bfd, struct ecoff_debug_info *output_debug, mgl@1371: + const struct ecoff_debug_swap *output_swap, struct bfd_link_info *); mgl@1371: +extern void bfd_ecoff_debug_free mgl@1371: + (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug, mgl@1371: + const struct ecoff_debug_swap *output_swap, struct bfd_link_info *); mgl@1371: +extern bfd_boolean bfd_ecoff_debug_accumulate mgl@1371: + (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug, mgl@1371: + const struct ecoff_debug_swap *output_swap, bfd *input_bfd, mgl@1371: + struct ecoff_debug_info *input_debug, mgl@1371: + const struct ecoff_debug_swap *input_swap, struct bfd_link_info *); mgl@1371: +extern bfd_boolean bfd_ecoff_debug_accumulate_other mgl@1371: + (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug, mgl@1371: + const struct ecoff_debug_swap *output_swap, bfd *input_bfd, mgl@1371: + struct bfd_link_info *); mgl@1371: +extern bfd_boolean bfd_ecoff_debug_externals mgl@1371: + (bfd *abfd, struct ecoff_debug_info *debug, mgl@1371: + const struct ecoff_debug_swap *swap, bfd_boolean relocatable, mgl@1371: + bfd_boolean (*get_extr) (struct bfd_symbol *, struct ecoff_extr *), mgl@1371: + void (*set_index) (struct bfd_symbol *, bfd_size_type)); mgl@1371: +extern bfd_boolean bfd_ecoff_debug_one_external mgl@1371: + (bfd *abfd, struct ecoff_debug_info *debug, mgl@1371: + const struct ecoff_debug_swap *swap, const char *name, mgl@1371: + struct ecoff_extr *esym); mgl@1371: +extern bfd_size_type bfd_ecoff_debug_size mgl@1371: + (bfd *abfd, struct ecoff_debug_info *debug, mgl@1371: + const struct ecoff_debug_swap *swap); mgl@1371: +extern bfd_boolean bfd_ecoff_write_debug mgl@1371: + (bfd *abfd, struct ecoff_debug_info *debug, mgl@1371: + const struct ecoff_debug_swap *swap, file_ptr where); mgl@1371: +extern bfd_boolean bfd_ecoff_write_accumulated_debug mgl@1371: + (void *handle, bfd *abfd, struct ecoff_debug_info *debug, mgl@1371: + const struct ecoff_debug_swap *swap, mgl@1371: + struct bfd_link_info *info, file_ptr where); mgl@1371: + mgl@1371: +/* Externally visible ELF routines. */ mgl@1371: + mgl@1371: +struct bfd_link_needed_list mgl@1371: +{ mgl@1371: + struct bfd_link_needed_list *next; mgl@1371: + bfd *by; mgl@1371: + const char *name; mgl@1371: +}; mgl@1371: + mgl@1371: +enum dynamic_lib_link_class { mgl@1371: + DYN_NORMAL = 0, mgl@1371: + DYN_AS_NEEDED = 1, mgl@1371: + DYN_DT_NEEDED = 2, mgl@1371: + DYN_NO_ADD_NEEDED = 4, mgl@1371: + DYN_NO_NEEDED = 8 mgl@1371: +}; mgl@1371: + mgl@1371: +enum notice_asneeded_action { mgl@1371: + notice_as_needed, mgl@1371: + notice_not_needed, mgl@1371: + notice_needed mgl@1371: +}; mgl@1371: + mgl@1371: +extern bfd_boolean bfd_elf_record_link_assignment mgl@1371: + (bfd *, struct bfd_link_info *, const char *, bfd_boolean, mgl@1371: + bfd_boolean); mgl@1371: +extern struct bfd_link_needed_list *bfd_elf_get_needed_list mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern bfd_boolean bfd_elf_get_bfd_needed_list mgl@1371: + (bfd *, struct bfd_link_needed_list **); mgl@1371: +extern bfd_boolean bfd_elf_size_dynamic_sections mgl@1371: + (bfd *, const char *, const char *, const char *, const char * const *, mgl@1371: + struct bfd_link_info *, struct bfd_section **, mgl@1371: + struct bfd_elf_version_tree *); mgl@1371: +extern bfd_boolean bfd_elf_size_dynsym_hash_dynstr mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern void bfd_elf_set_dt_needed_name mgl@1371: + (bfd *, const char *); mgl@1371: +extern const char *bfd_elf_get_dt_soname mgl@1371: + (bfd *); mgl@1371: +extern void bfd_elf_set_dyn_lib_class mgl@1371: + (bfd *, enum dynamic_lib_link_class); mgl@1371: +extern int bfd_elf_get_dyn_lib_class mgl@1371: + (bfd *); mgl@1371: +extern struct bfd_link_needed_list *bfd_elf_get_runpath_list mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern bfd_boolean bfd_elf_discard_info mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern unsigned int _bfd_elf_default_action_discarded mgl@1371: + (struct bfd_section *); mgl@1371: + mgl@1371: +/* Return an upper bound on the number of bytes required to store a mgl@1371: + copy of ABFD's program header table entries. Return -1 if an error mgl@1371: + occurs; bfd_get_error will return an appropriate code. */ mgl@1371: +extern long bfd_get_elf_phdr_upper_bound mgl@1371: + (bfd *abfd); mgl@1371: + mgl@1371: +/* Copy ABFD's program header table entries to *PHDRS. The entries mgl@1371: + will be stored as an array of Elf_Internal_Phdr structures, as mgl@1371: + defined in include/elf/internal.h. To find out how large the mgl@1371: + buffer needs to be, call bfd_get_elf_phdr_upper_bound. mgl@1371: + mgl@1371: + Return the number of program header table entries read, or -1 if an mgl@1371: + error occurs; bfd_get_error will return an appropriate code. */ mgl@1371: +extern int bfd_get_elf_phdrs mgl@1371: + (bfd *abfd, void *phdrs); mgl@1371: + mgl@1371: +/* Create a new BFD as if by bfd_openr. Rather than opening a file, mgl@1371: + reconstruct an ELF file by reading the segments out of remote memory mgl@1371: + based on the ELF file header at EHDR_VMA and the ELF program headers it mgl@1371: + points to. If not null, *LOADBASEP is filled in with the difference mgl@1371: + between the VMAs from which the segments were read, and the VMAs the mgl@1371: + file headers (and hence BFD's idea of each section's VMA) put them at. mgl@1371: + mgl@1371: + The function TARGET_READ_MEMORY is called to copy LEN bytes from the mgl@1371: + remote memory at target address VMA into the local buffer at MYADDR; it mgl@1371: + should return zero on success or an `errno' code on failure. TEMPL must mgl@1371: + be a BFD for an ELF target with the word size and byte order found in mgl@1371: + the remote memory. */ mgl@1371: +extern bfd *bfd_elf_bfd_from_remote_memory mgl@1371: + (bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep, mgl@1371: + int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr, int len)); mgl@1371: + mgl@1371: +/* Return the arch_size field of an elf bfd, or -1 if not elf. */ mgl@1371: +extern int bfd_get_arch_size mgl@1371: + (bfd *); mgl@1371: + mgl@1371: +/* Return TRUE if address "naturally" sign extends, or -1 if not elf. */ mgl@1371: +extern int bfd_get_sign_extend_vma mgl@1371: + (bfd *); mgl@1371: + mgl@1371: +extern struct bfd_section *_bfd_elf_tls_setup mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +extern void _bfd_fix_excluded_sec_syms mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +extern unsigned bfd_m68k_mach_to_features (int); mgl@1371: + mgl@1371: +extern int bfd_m68k_features_to_mach (unsigned); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_m68k_elf32_create_embedded_relocs mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *, mgl@1371: + char **); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_bfin_elf32_create_embedded_relocs mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *, mgl@1371: + char **); mgl@1371: + mgl@1371: +/* SunOS shared library support routines for the linker. */ mgl@1371: + mgl@1371: +extern struct bfd_link_needed_list *bfd_sunos_get_needed_list mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern bfd_boolean bfd_sunos_record_link_assignment mgl@1371: + (bfd *, struct bfd_link_info *, const char *); mgl@1371: +extern bfd_boolean bfd_sunos_size_dynamic_sections mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_section **, mgl@1371: + struct bfd_section **, struct bfd_section **); mgl@1371: + mgl@1371: +/* Linux shared library support routines for the linker. */ mgl@1371: + mgl@1371: +extern bfd_boolean bfd_i386linux_size_dynamic_sections mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern bfd_boolean bfd_m68klinux_size_dynamic_sections mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern bfd_boolean bfd_sparclinux_size_dynamic_sections mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +/* mmap hacks */ mgl@1371: + mgl@1371: +struct _bfd_window_internal; mgl@1371: +typedef struct _bfd_window_internal bfd_window_internal; mgl@1371: + mgl@1371: +typedef struct _bfd_window mgl@1371: +{ mgl@1371: + /* What the user asked for. */ mgl@1371: + void *data; mgl@1371: + bfd_size_type size; mgl@1371: + /* The actual window used by BFD. Small user-requested read-only mgl@1371: + regions sharing a page may share a single window into the object mgl@1371: + file. Read-write versions shouldn't until I've fixed things to mgl@1371: + keep track of which portions have been claimed by the mgl@1371: + application; don't want to give the same region back when the mgl@1371: + application wants two writable copies! */ mgl@1371: + struct _bfd_window_internal *i; mgl@1371: +} mgl@1371: +bfd_window; mgl@1371: + mgl@1371: +extern void bfd_init_window mgl@1371: + (bfd_window *); mgl@1371: +extern void bfd_free_window mgl@1371: + (bfd_window *); mgl@1371: +extern bfd_boolean bfd_get_file_window mgl@1371: + (bfd *, file_ptr, bfd_size_type, bfd_window *, bfd_boolean); mgl@1371: + mgl@1371: +/* XCOFF support routines for the linker. */ mgl@1371: + mgl@1371: +extern bfd_boolean bfd_xcoff_link_record_set mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_size_type); mgl@1371: +extern bfd_boolean bfd_xcoff_import_symbol mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_vma, mgl@1371: + const char *, const char *, const char *, unsigned int); mgl@1371: +extern bfd_boolean bfd_xcoff_export_symbol mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *); mgl@1371: +extern bfd_boolean bfd_xcoff_link_count_reloc mgl@1371: + (bfd *, struct bfd_link_info *, const char *); mgl@1371: +extern bfd_boolean bfd_xcoff_record_link_assignment mgl@1371: + (bfd *, struct bfd_link_info *, const char *); mgl@1371: +extern bfd_boolean bfd_xcoff_size_dynamic_sections mgl@1371: + (bfd *, struct bfd_link_info *, const char *, const char *, mgl@1371: + unsigned long, unsigned long, unsigned long, bfd_boolean, mgl@1371: + int, bfd_boolean, bfd_boolean, struct bfd_section **, bfd_boolean); mgl@1371: +extern bfd_boolean bfd_xcoff_link_generate_rtinit mgl@1371: + (bfd *, const char *, const char *, bfd_boolean); mgl@1371: + mgl@1371: +/* XCOFF support routines for ar. */ mgl@1371: +extern bfd_boolean bfd_xcoff_ar_archive_set_magic mgl@1371: + (bfd *, char *); mgl@1371: + mgl@1371: +/* Externally visible COFF routines. */ mgl@1371: + mgl@1371: +#if defined(__STDC__) || defined(ALMOST_STDC) mgl@1371: +struct internal_syment; mgl@1371: +union internal_auxent; mgl@1371: +#endif mgl@1371: + mgl@1371: +extern bfd_boolean bfd_coff_get_syment mgl@1371: + (bfd *, struct bfd_symbol *, struct internal_syment *); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_coff_get_auxent mgl@1371: + (bfd *, struct bfd_symbol *, int, union internal_auxent *); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_coff_set_symbol_class mgl@1371: + (bfd *, struct bfd_symbol *, unsigned int); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_m68k_coff_create_embedded_relocs mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *, char **); mgl@1371: + mgl@1371: +/* ARM VFP11 erratum workaround support. */ mgl@1371: +typedef enum mgl@1371: +{ mgl@1371: + BFD_ARM_VFP11_FIX_DEFAULT, mgl@1371: + BFD_ARM_VFP11_FIX_NONE, mgl@1371: + BFD_ARM_VFP11_FIX_SCALAR, mgl@1371: + BFD_ARM_VFP11_FIX_VECTOR mgl@1371: +} bfd_arm_vfp11_fix; mgl@1371: + mgl@1371: +extern void bfd_elf32_arm_init_maps mgl@1371: + (bfd *); mgl@1371: + mgl@1371: +extern void bfd_elf32_arm_set_vfp11_fix mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_elf32_arm_vfp11_erratum_scan mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +extern void bfd_elf32_arm_vfp11_fix_veneer_locations mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +/* ARM Interworking support. Called from linker. */ mgl@1371: +extern bfd_boolean bfd_arm_allocate_interworking_sections mgl@1371: + (struct bfd_link_info *); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_arm_process_before_allocation mgl@1371: + (bfd *, struct bfd_link_info *, int); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_arm_get_bfd_for_interworking mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +/* PE ARM Interworking support. Called from linker. */ mgl@1371: +extern bfd_boolean bfd_arm_pe_allocate_interworking_sections mgl@1371: + (struct bfd_link_info *); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_arm_pe_process_before_allocation mgl@1371: + (bfd *, struct bfd_link_info *, int); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_arm_pe_get_bfd_for_interworking mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +/* ELF ARM Interworking support. Called from linker. */ mgl@1371: +extern bfd_boolean bfd_elf32_arm_allocate_interworking_sections mgl@1371: + (struct bfd_link_info *); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_elf32_arm_process_before_allocation mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +void bfd_elf32_arm_set_target_relocs mgl@1371: + (bfd *, struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix, mgl@1371: + int, int); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_elf32_arm_add_glue_sections_to_bfd mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +/* ELF ARM mapping symbol support */ mgl@1371: +#define BFD_ARM_SPECIAL_SYM_TYPE_MAP (1 << 0) mgl@1371: +#define BFD_ARM_SPECIAL_SYM_TYPE_TAG (1 << 1) mgl@1371: +#define BFD_ARM_SPECIAL_SYM_TYPE_OTHER (1 << 2) mgl@1371: +#define BFD_ARM_SPECIAL_SYM_TYPE_ANY (~0) mgl@1371: +extern bfd_boolean bfd_is_arm_special_symbol_name mgl@1371: + (const char * name, int type); mgl@1371: + mgl@1371: +extern void bfd_elf32_arm_set_byteswap_code (struct bfd_link_info *, int); mgl@1371: + mgl@1371: +/* ARM Note section processing. */ mgl@1371: +extern bfd_boolean bfd_arm_merge_machines mgl@1371: + (bfd *, bfd *); mgl@1371: + mgl@1371: +extern bfd_boolean bfd_arm_update_notes mgl@1371: + (bfd *, const char *); mgl@1371: + mgl@1371: +extern unsigned int bfd_arm_get_mach_from_notes mgl@1371: + (bfd *, const char *); mgl@1371: + mgl@1371: +/* TI COFF load page support. */ mgl@1371: +extern void bfd_ticoff_set_section_load_page mgl@1371: + (struct bfd_section *, int); mgl@1371: + mgl@1371: +extern int bfd_ticoff_get_section_load_page mgl@1371: + (struct bfd_section *); mgl@1371: + mgl@1371: +/* H8/300 functions. */ mgl@1371: +extern bfd_vma bfd_h8300_pad_address mgl@1371: + (bfd *, bfd_vma); mgl@1371: + mgl@1371: +/* IA64 Itanium code generation. Called from linker. */ mgl@1371: +extern void bfd_elf32_ia64_after_parse mgl@1371: + (int); mgl@1371: + mgl@1371: +extern void bfd_elf64_ia64_after_parse mgl@1371: + (int); mgl@1371: + mgl@1371: +/* This structure is used for a comdat section, as in PE. A comdat mgl@1371: + section is associated with a particular symbol. When the linker mgl@1371: + sees a comdat section, it keeps only one of the sections with a mgl@1371: + given name and associated with a given symbol. */ mgl@1371: + mgl@1371: +struct coff_comdat_info mgl@1371: +{ mgl@1371: + /* The name of the symbol associated with a comdat section. */ mgl@1371: + const char *name; mgl@1371: + mgl@1371: + /* The local symbol table index of the symbol associated with a mgl@1371: + comdat section. This is only meaningful to the object file format mgl@1371: + specific code; it is not an index into the list returned by mgl@1371: + bfd_canonicalize_symtab. */ mgl@1371: + long symbol; mgl@1371: +}; mgl@1371: + mgl@1371: +extern struct coff_comdat_info *bfd_coff_get_comdat_section mgl@1371: + (bfd *, struct bfd_section *); mgl@1371: + mgl@1371: +/* Extracted from init.c. */ mgl@1371: +void bfd_init (void); mgl@1371: + mgl@1371: +/* Extracted from opncls.c. */ mgl@1371: +bfd *bfd_fopen (const char *filename, const char *target, mgl@1371: + const char *mode, int fd); mgl@1371: + mgl@1371: +bfd *bfd_openr (const char *filename, const char *target); mgl@1371: + mgl@1371: +bfd *bfd_fdopenr (const char *filename, const char *target, int fd); mgl@1371: + mgl@1371: +bfd *bfd_openstreamr (const char *, const char *, void *); mgl@1371: + mgl@1371: +bfd *bfd_openr_iovec (const char *filename, const char *target, mgl@1371: + void *(*open) (struct bfd *nbfd, mgl@1371: + void *open_closure), mgl@1371: + void *open_closure, mgl@1371: + file_ptr (*pread) (struct bfd *nbfd, mgl@1371: + void *stream, mgl@1371: + void *buf, mgl@1371: + file_ptr nbytes, mgl@1371: + file_ptr offset), mgl@1371: + int (*close) (struct bfd *nbfd, mgl@1371: + void *stream), mgl@1371: + int (*stat) (struct bfd *abfd, mgl@1371: + void *stream, mgl@1371: + struct stat *sb)); mgl@1371: + mgl@1371: +bfd *bfd_openw (const char *filename, const char *target); mgl@1371: + mgl@1371: +bfd_boolean bfd_close (bfd *abfd); mgl@1371: + mgl@1371: +bfd_boolean bfd_close_all_done (bfd *); mgl@1371: + mgl@1371: +bfd *bfd_create (const char *filename, bfd *templ); mgl@1371: + mgl@1371: +bfd_boolean bfd_make_writable (bfd *abfd); mgl@1371: + mgl@1371: +bfd_boolean bfd_make_readable (bfd *abfd); mgl@1371: + mgl@1371: +unsigned long bfd_calc_gnu_debuglink_crc32 mgl@1371: + (unsigned long crc, const unsigned char *buf, bfd_size_type len); mgl@1371: + mgl@1371: +char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir); mgl@1371: + mgl@1371: +struct bfd_section *bfd_create_gnu_debuglink_section mgl@1371: + (bfd *abfd, const char *filename); mgl@1371: + mgl@1371: +bfd_boolean bfd_fill_in_gnu_debuglink_section mgl@1371: + (bfd *abfd, struct bfd_section *sect, const char *filename); mgl@1371: + mgl@1371: +/* Extracted from libbfd.c. */ mgl@1371: + mgl@1371: +/* Byte swapping macros for user section data. */ mgl@1371: + mgl@1371: +#define bfd_put_8(abfd, val, ptr) \ mgl@1371: + ((void) (*((unsigned char *) (ptr)) = (val) & 0xff)) mgl@1371: +#define bfd_put_signed_8 \ mgl@1371: + bfd_put_8 mgl@1371: +#define bfd_get_8(abfd, ptr) \ mgl@1371: + (*(unsigned char *) (ptr) & 0xff) mgl@1371: +#define bfd_get_signed_8(abfd, ptr) \ mgl@1371: + (((*(unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80) mgl@1371: + mgl@1371: +#define bfd_put_16(abfd, val, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_putx16, ((val),(ptr))) mgl@1371: +#define bfd_put_signed_16 \ mgl@1371: + bfd_put_16 mgl@1371: +#define bfd_get_16(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_getx16, (ptr)) mgl@1371: +#define bfd_get_signed_16(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_getx_signed_16, (ptr)) mgl@1371: + mgl@1371: +#define bfd_put_32(abfd, val, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_putx32, ((val),(ptr))) mgl@1371: +#define bfd_put_signed_32 \ mgl@1371: + bfd_put_32 mgl@1371: +#define bfd_get_32(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_getx32, (ptr)) mgl@1371: +#define bfd_get_signed_32(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_getx_signed_32, (ptr)) mgl@1371: + mgl@1371: +#define bfd_put_64(abfd, val, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_putx64, ((val), (ptr))) mgl@1371: +#define bfd_put_signed_64 \ mgl@1371: + bfd_put_64 mgl@1371: +#define bfd_get_64(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_getx64, (ptr)) mgl@1371: +#define bfd_get_signed_64(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_getx_signed_64, (ptr)) mgl@1371: + mgl@1371: +#define bfd_get(bits, abfd, ptr) \ mgl@1371: + ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr) \ mgl@1371: + : (bits) == 16 ? bfd_get_16 (abfd, ptr) \ mgl@1371: + : (bits) == 32 ? bfd_get_32 (abfd, ptr) \ mgl@1371: + : (bits) == 64 ? bfd_get_64 (abfd, ptr) \ mgl@1371: + : (abort (), (bfd_vma) - 1)) mgl@1371: + mgl@1371: +#define bfd_put(bits, abfd, val, ptr) \ mgl@1371: + ((bits) == 8 ? bfd_put_8 (abfd, val, ptr) \ mgl@1371: + : (bits) == 16 ? bfd_put_16 (abfd, val, ptr) \ mgl@1371: + : (bits) == 32 ? bfd_put_32 (abfd, val, ptr) \ mgl@1371: + : (bits) == 64 ? bfd_put_64 (abfd, val, ptr) \ mgl@1371: + : (abort (), (void) 0)) mgl@1371: + mgl@1371: + mgl@1371: +/* Byte swapping macros for file header data. */ mgl@1371: + mgl@1371: +#define bfd_h_put_8(abfd, val, ptr) \ mgl@1371: + bfd_put_8 (abfd, val, ptr) mgl@1371: +#define bfd_h_put_signed_8(abfd, val, ptr) \ mgl@1371: + bfd_put_8 (abfd, val, ptr) mgl@1371: +#define bfd_h_get_8(abfd, ptr) \ mgl@1371: + bfd_get_8 (abfd, ptr) mgl@1371: +#define bfd_h_get_signed_8(abfd, ptr) \ mgl@1371: + bfd_get_signed_8 (abfd, ptr) mgl@1371: + mgl@1371: +#define bfd_h_put_16(abfd, val, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_putx16, (val, ptr)) mgl@1371: +#define bfd_h_put_signed_16 \ mgl@1371: + bfd_h_put_16 mgl@1371: +#define bfd_h_get_16(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_getx16, (ptr)) mgl@1371: +#define bfd_h_get_signed_16(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_getx_signed_16, (ptr)) mgl@1371: + mgl@1371: +#define bfd_h_put_32(abfd, val, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_putx32, (val, ptr)) mgl@1371: +#define bfd_h_put_signed_32 \ mgl@1371: + bfd_h_put_32 mgl@1371: +#define bfd_h_get_32(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_getx32, (ptr)) mgl@1371: +#define bfd_h_get_signed_32(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_getx_signed_32, (ptr)) mgl@1371: + mgl@1371: +#define bfd_h_put_64(abfd, val, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_putx64, (val, ptr)) mgl@1371: +#define bfd_h_put_signed_64 \ mgl@1371: + bfd_h_put_64 mgl@1371: +#define bfd_h_get_64(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_getx64, (ptr)) mgl@1371: +#define bfd_h_get_signed_64(abfd, ptr) \ mgl@1371: + BFD_SEND (abfd, bfd_h_getx_signed_64, (ptr)) mgl@1371: + mgl@1371: +/* Aliases for the above, which should eventually go away. */ mgl@1371: + mgl@1371: +#define H_PUT_64 bfd_h_put_64 mgl@1371: +#define H_PUT_32 bfd_h_put_32 mgl@1371: +#define H_PUT_16 bfd_h_put_16 mgl@1371: +#define H_PUT_8 bfd_h_put_8 mgl@1371: +#define H_PUT_S64 bfd_h_put_signed_64 mgl@1371: +#define H_PUT_S32 bfd_h_put_signed_32 mgl@1371: +#define H_PUT_S16 bfd_h_put_signed_16 mgl@1371: +#define H_PUT_S8 bfd_h_put_signed_8 mgl@1371: +#define H_GET_64 bfd_h_get_64 mgl@1371: +#define H_GET_32 bfd_h_get_32 mgl@1371: +#define H_GET_16 bfd_h_get_16 mgl@1371: +#define H_GET_8 bfd_h_get_8 mgl@1371: +#define H_GET_S64 bfd_h_get_signed_64 mgl@1371: +#define H_GET_S32 bfd_h_get_signed_32 mgl@1371: +#define H_GET_S16 bfd_h_get_signed_16 mgl@1371: +#define H_GET_S8 bfd_h_get_signed_8 mgl@1371: + mgl@1371: + mgl@1371: +/* Extracted from bfdio.c. */ mgl@1371: +long bfd_get_mtime (bfd *abfd); mgl@1371: + mgl@1371: +file_ptr bfd_get_size (bfd *abfd); mgl@1371: + mgl@1371: +/* Extracted from bfdwin.c. */ mgl@1371: +/* Extracted from section.c. */ mgl@1371: +typedef struct bfd_section mgl@1371: +{ mgl@1371: + /* The name of the section; the name isn't a copy, the pointer is mgl@1371: + the same as that passed to bfd_make_section. */ mgl@1371: + const char *name; mgl@1371: + mgl@1371: + /* A unique sequence number. */ mgl@1371: + int id; mgl@1371: + mgl@1371: + /* Which section in the bfd; 0..n-1 as sections are created in a bfd. */ mgl@1371: + int index; mgl@1371: + mgl@1371: + /* The next section in the list belonging to the BFD, or NULL. */ mgl@1371: + struct bfd_section *next; mgl@1371: + mgl@1371: + /* The previous section in the list belonging to the BFD, or NULL. */ mgl@1371: + struct bfd_section *prev; mgl@1371: + mgl@1371: + /* The field flags contains attributes of the section. Some mgl@1371: + flags are read in from the object file, and some are mgl@1371: + synthesized from other information. */ mgl@1371: + flagword flags; mgl@1371: + mgl@1371: +#define SEC_NO_FLAGS 0x000 mgl@1371: + mgl@1371: + /* Tells the OS to allocate space for this section when loading. mgl@1371: + This is clear for a section containing debug information only. */ mgl@1371: +#define SEC_ALLOC 0x001 mgl@1371: + mgl@1371: + /* Tells the OS to load the section from the file when loading. mgl@1371: + This is clear for a .bss section. */ mgl@1371: +#define SEC_LOAD 0x002 mgl@1371: + mgl@1371: + /* The section contains data still to be relocated, so there is mgl@1371: + some relocation information too. */ mgl@1371: +#define SEC_RELOC 0x004 mgl@1371: + mgl@1371: + /* A signal to the OS that the section contains read only data. */ mgl@1371: +#define SEC_READONLY 0x008 mgl@1371: + mgl@1371: + /* The section contains code only. */ mgl@1371: +#define SEC_CODE 0x010 mgl@1371: + mgl@1371: + /* The section contains data only. */ mgl@1371: +#define SEC_DATA 0x020 mgl@1371: + mgl@1371: + /* The section will reside in ROM. */ mgl@1371: +#define SEC_ROM 0x040 mgl@1371: + mgl@1371: + /* The section contains constructor information. This section mgl@1371: + type is used by the linker to create lists of constructors and mgl@1371: + destructors used by <>. When a back end sees a symbol mgl@1371: + which should be used in a constructor list, it creates a new mgl@1371: + section for the type of name (e.g., <<__CTOR_LIST__>>), attaches mgl@1371: + the symbol to it, and builds a relocation. To build the lists mgl@1371: + of constructors, all the linker has to do is catenate all the mgl@1371: + sections called <<__CTOR_LIST__>> and relocate the data mgl@1371: + contained within - exactly the operations it would peform on mgl@1371: + standard data. */ mgl@1371: +#define SEC_CONSTRUCTOR 0x080 mgl@1371: + mgl@1371: + /* The section has contents - a data section could be mgl@1371: + <> | <>; a debug section could be mgl@1371: + <> */ mgl@1371: +#define SEC_HAS_CONTENTS 0x100 mgl@1371: + mgl@1371: + /* An instruction to the linker to not output the section mgl@1371: + even if it has information which would normally be written. */ mgl@1371: +#define SEC_NEVER_LOAD 0x200 mgl@1371: + mgl@1371: + /* The section contains thread local data. */ mgl@1371: +#define SEC_THREAD_LOCAL 0x400 mgl@1371: + mgl@1371: + /* The section has GOT references. This flag is only for the mgl@1371: + linker, and is currently only used by the elf32-hppa back end. mgl@1371: + It will be set if global offset table references were detected mgl@1371: + in this section, which indicate to the linker that the section mgl@1371: + contains PIC code, and must be handled specially when doing a mgl@1371: + static link. */ mgl@1371: +#define SEC_HAS_GOT_REF 0x800 mgl@1371: + mgl@1371: + /* The section contains common symbols (symbols may be defined mgl@1371: + multiple times, the value of a symbol is the amount of mgl@1371: + space it requires, and the largest symbol value is the one mgl@1371: + used). Most targets have exactly one of these (which we mgl@1371: + translate to bfd_com_section_ptr), but ECOFF has two. */ mgl@1371: +#define SEC_IS_COMMON 0x1000 mgl@1371: + mgl@1371: + /* The section contains only debugging information. For mgl@1371: + example, this is set for ELF .debug and .stab sections. mgl@1371: + strip tests this flag to see if a section can be mgl@1371: + discarded. */ mgl@1371: +#define SEC_DEBUGGING 0x2000 mgl@1371: + mgl@1371: + /* The contents of this section are held in memory pointed to mgl@1371: + by the contents field. This is checked by bfd_get_section_contents, mgl@1371: + and the data is retrieved from memory if appropriate. */ mgl@1371: +#define SEC_IN_MEMORY 0x4000 mgl@1371: + mgl@1371: + /* The contents of this section are to be excluded by the mgl@1371: + linker for executable and shared objects unless those mgl@1371: + objects are to be further relocated. */ mgl@1371: +#define SEC_EXCLUDE 0x8000 mgl@1371: + mgl@1371: + /* The contents of this section are to be sorted based on the sum of mgl@1371: + the symbol and addend values specified by the associated relocation mgl@1371: + entries. Entries without associated relocation entries will be mgl@1371: + appended to the end of the section in an unspecified order. */ mgl@1371: +#define SEC_SORT_ENTRIES 0x10000 mgl@1371: + mgl@1371: + /* When linking, duplicate sections of the same name should be mgl@1371: + discarded, rather than being combined into a single section as mgl@1371: + is usually done. This is similar to how common symbols are mgl@1371: + handled. See SEC_LINK_DUPLICATES below. */ mgl@1371: +#define SEC_LINK_ONCE 0x20000 mgl@1371: + mgl@1371: + /* If SEC_LINK_ONCE is set, this bitfield describes how the linker mgl@1371: + should handle duplicate sections. */ mgl@1371: +#define SEC_LINK_DUPLICATES 0x40000 mgl@1371: + mgl@1371: + /* This value for SEC_LINK_DUPLICATES means that duplicate mgl@1371: + sections with the same name should simply be discarded. */ mgl@1371: +#define SEC_LINK_DUPLICATES_DISCARD 0x0 mgl@1371: + mgl@1371: + /* This value for SEC_LINK_DUPLICATES means that the linker mgl@1371: + should warn if there are any duplicate sections, although mgl@1371: + it should still only link one copy. */ mgl@1371: +#define SEC_LINK_DUPLICATES_ONE_ONLY 0x80000 mgl@1371: + mgl@1371: + /* This value for SEC_LINK_DUPLICATES means that the linker mgl@1371: + should warn if any duplicate sections are a different size. */ mgl@1371: +#define SEC_LINK_DUPLICATES_SAME_SIZE 0x100000 mgl@1371: + mgl@1371: + /* This value for SEC_LINK_DUPLICATES means that the linker mgl@1371: + should warn if any duplicate sections contain different mgl@1371: + contents. */ mgl@1371: +#define SEC_LINK_DUPLICATES_SAME_CONTENTS \ mgl@1371: + (SEC_LINK_DUPLICATES_ONE_ONLY | SEC_LINK_DUPLICATES_SAME_SIZE) mgl@1371: + mgl@1371: + /* This section was created by the linker as part of dynamic mgl@1371: + relocation or other arcane processing. It is skipped when mgl@1371: + going through the first-pass output, trusting that someone mgl@1371: + else up the line will take care of it later. */ mgl@1371: +#define SEC_LINKER_CREATED 0x200000 mgl@1371: + mgl@1371: + /* This section should not be subject to garbage collection. mgl@1371: + Also set to inform the linker that this section should not be mgl@1371: + listed in the link map as discarded. */ mgl@1371: +#define SEC_KEEP 0x400000 mgl@1371: + mgl@1371: + /* This section contains "short" data, and should be placed mgl@1371: + "near" the GP. */ mgl@1371: +#define SEC_SMALL_DATA 0x800000 mgl@1371: + mgl@1371: + /* Attempt to merge identical entities in the section. mgl@1371: + Entity size is given in the entsize field. */ mgl@1371: +#define SEC_MERGE 0x1000000 mgl@1371: + mgl@1371: + /* If given with SEC_MERGE, entities to merge are zero terminated mgl@1371: + strings where entsize specifies character size instead of fixed mgl@1371: + size entries. */ mgl@1371: +#define SEC_STRINGS 0x2000000 mgl@1371: + mgl@1371: + /* This section contains data about section groups. */ mgl@1371: +#define SEC_GROUP 0x4000000 mgl@1371: + mgl@1371: + /* The section is a COFF shared library section. This flag is mgl@1371: + only for the linker. If this type of section appears in mgl@1371: + the input file, the linker must copy it to the output file mgl@1371: + without changing the vma or size. FIXME: Although this mgl@1371: + was originally intended to be general, it really is COFF mgl@1371: + specific (and the flag was renamed to indicate this). It mgl@1371: + might be cleaner to have some more general mechanism to mgl@1371: + allow the back end to control what the linker does with mgl@1371: + sections. */ mgl@1371: +#define SEC_COFF_SHARED_LIBRARY 0x10000000 mgl@1371: + mgl@1371: + /* This section contains data which may be shared with other mgl@1371: + executables or shared objects. This is for COFF only. */ mgl@1371: +#define SEC_COFF_SHARED 0x20000000 mgl@1371: + mgl@1371: + /* When a section with this flag is being linked, then if the size of mgl@1371: + the input section is less than a page, it should not cross a page mgl@1371: + boundary. If the size of the input section is one page or more, mgl@1371: + it should be aligned on a page boundary. This is for TI mgl@1371: + TMS320C54X only. */ mgl@1371: +#define SEC_TIC54X_BLOCK 0x40000000 mgl@1371: + mgl@1371: + /* Conditionally link this section; do not link if there are no mgl@1371: + references found to any symbol in the section. This is for TI mgl@1371: + TMS320C54X only. */ mgl@1371: +#define SEC_TIC54X_CLINK 0x80000000 mgl@1371: + mgl@1371: + /* End of section flags. */ mgl@1371: + mgl@1371: + /* Some internal packed boolean fields. */ mgl@1371: + mgl@1371: + /* See the vma field. */ mgl@1371: + unsigned int user_set_vma : 1; mgl@1371: + mgl@1371: + /* A mark flag used by some of the linker backends. */ mgl@1371: + unsigned int linker_mark : 1; mgl@1371: + mgl@1371: + /* Another mark flag used by some of the linker backends. Set for mgl@1371: + output sections that have an input section. */ mgl@1371: + unsigned int linker_has_input : 1; mgl@1371: + mgl@1371: + /* Mark flags used by some linker backends for garbage collection. */ mgl@1371: + unsigned int gc_mark : 1; mgl@1371: + unsigned int gc_mark_from_eh : 1; mgl@1371: + mgl@1371: + /* The following flags are used by the ELF linker. */ mgl@1371: + mgl@1371: + /* Mark sections which have been allocated to segments. */ mgl@1371: + unsigned int segment_mark : 1; mgl@1371: + mgl@1371: + /* Type of sec_info information. */ mgl@1371: + unsigned int sec_info_type:3; mgl@1371: +#define ELF_INFO_TYPE_NONE 0 mgl@1371: +#define ELF_INFO_TYPE_STABS 1 mgl@1371: +#define ELF_INFO_TYPE_MERGE 2 mgl@1371: +#define ELF_INFO_TYPE_EH_FRAME 3 mgl@1371: +#define ELF_INFO_TYPE_JUST_SYMS 4 mgl@1371: + mgl@1371: + /* Nonzero if this section uses RELA relocations, rather than REL. */ mgl@1371: + unsigned int use_rela_p:1; mgl@1371: + mgl@1371: + /* Bits used by various backends. The generic code doesn't touch mgl@1371: + these fields. */ mgl@1371: + mgl@1371: + /* Nonzero if this section has TLS related relocations. */ mgl@1371: + unsigned int has_tls_reloc:1; mgl@1371: + mgl@1371: + /* Nonzero if this section has a gp reloc. */ mgl@1371: + unsigned int has_gp_reloc:1; mgl@1371: + mgl@1371: + /* Nonzero if this section needs the relax finalize pass. */ mgl@1371: + unsigned int need_finalize_relax:1; mgl@1371: + mgl@1371: + /* Whether relocations have been processed. */ mgl@1371: + unsigned int reloc_done : 1; mgl@1371: + mgl@1371: + /* End of internal packed boolean fields. */ mgl@1371: + mgl@1371: + /* The virtual memory address of the section - where it will be mgl@1371: + at run time. The symbols are relocated against this. The mgl@1371: + user_set_vma flag is maintained by bfd; if it's not set, the mgl@1371: + backend can assign addresses (for example, in <>, where mgl@1371: + the default address for <<.data>> is dependent on the specific mgl@1371: + target and various flags). */ mgl@1371: + bfd_vma vma; mgl@1371: + mgl@1371: + /* The load address of the section - where it would be in a mgl@1371: + rom image; really only used for writing section header mgl@1371: + information. */ mgl@1371: + bfd_vma lma; mgl@1371: + mgl@1371: + /* The size of the section in octets, as it will be output. mgl@1371: + Contains a value even if the section has no contents (e.g., the mgl@1371: + size of <<.bss>>). */ mgl@1371: + bfd_size_type size; mgl@1371: + mgl@1371: + /* For input sections, the original size on disk of the section, in mgl@1371: + octets. This field is used by the linker relaxation code. It is mgl@1371: + currently only set for sections where the linker relaxation scheme mgl@1371: + doesn't cache altered section and reloc contents (stabs, eh_frame, mgl@1371: + SEC_MERGE, some coff relaxing targets), and thus the original size mgl@1371: + needs to be kept to read the section multiple times. mgl@1371: + For output sections, rawsize holds the section size calculated on mgl@1371: + a previous linker relaxation pass. */ mgl@1371: + bfd_size_type rawsize; mgl@1371: + mgl@1371: + /* If this section is going to be output, then this value is the mgl@1371: + offset in *bytes* into the output section of the first byte in the mgl@1371: + input section (byte ==> smallest addressable unit on the mgl@1371: + target). In most cases, if this was going to start at the mgl@1371: + 100th octet (8-bit quantity) in the output section, this value mgl@1371: + would be 100. However, if the target byte size is 16 bits mgl@1371: + (bfd_octets_per_byte is "2"), this value would be 50. */ mgl@1371: + bfd_vma output_offset; mgl@1371: + mgl@1371: + /* The output section through which to map on output. */ mgl@1371: + struct bfd_section *output_section; mgl@1371: + mgl@1371: + /* The alignment requirement of the section, as an exponent of 2 - mgl@1371: + e.g., 3 aligns to 2^3 (or 8). */ mgl@1371: + unsigned int alignment_power; mgl@1371: + mgl@1371: + /* If an input section, a pointer to a vector of relocation mgl@1371: + records for the data in this section. */ mgl@1371: + struct reloc_cache_entry *relocation; mgl@1371: + mgl@1371: + /* If an output section, a pointer to a vector of pointers to mgl@1371: + relocation records for the data in this section. */ mgl@1371: + struct reloc_cache_entry **orelocation; mgl@1371: + mgl@1371: + /* The number of relocation records in one of the above. */ mgl@1371: + unsigned reloc_count; mgl@1371: + mgl@1371: + /* Information below is back end specific - and not always used mgl@1371: + or updated. */ mgl@1371: + mgl@1371: + /* File position of section data. */ mgl@1371: + file_ptr filepos; mgl@1371: + mgl@1371: + /* File position of relocation info. */ mgl@1371: + file_ptr rel_filepos; mgl@1371: + mgl@1371: + /* File position of line data. */ mgl@1371: + file_ptr line_filepos; mgl@1371: + mgl@1371: + /* Pointer to data for applications. */ mgl@1371: + void *userdata; mgl@1371: + mgl@1371: + /* If the SEC_IN_MEMORY flag is set, this points to the actual mgl@1371: + contents. */ mgl@1371: + unsigned char *contents; mgl@1371: + mgl@1371: + /* Attached line number information. */ mgl@1371: + alent *lineno; mgl@1371: + mgl@1371: + /* Number of line number records. */ mgl@1371: + unsigned int lineno_count; mgl@1371: + mgl@1371: + /* Entity size for merging purposes. */ mgl@1371: + unsigned int entsize; mgl@1371: + mgl@1371: + /* Points to the kept section if this section is a link-once section, mgl@1371: + and is discarded. */ mgl@1371: + struct bfd_section *kept_section; mgl@1371: + mgl@1371: + /* When a section is being output, this value changes as more mgl@1371: + linenumbers are written out. */ mgl@1371: + file_ptr moving_line_filepos; mgl@1371: + mgl@1371: + /* What the section number is in the target world. */ mgl@1371: + int target_index; mgl@1371: + mgl@1371: + void *used_by_bfd; mgl@1371: + mgl@1371: + /* If this is a constructor section then here is a list of the mgl@1371: + relocations created to relocate items within it. */ mgl@1371: + struct relent_chain *constructor_chain; mgl@1371: + mgl@1371: + /* The BFD which owns the section. */ mgl@1371: + bfd *owner; mgl@1371: + mgl@1371: + /* A symbol which points at this section only. */ mgl@1371: + struct bfd_symbol *symbol; mgl@1371: + struct bfd_symbol **symbol_ptr_ptr; mgl@1371: + mgl@1371: + /* Early in the link process, map_head and map_tail are used to build mgl@1371: + a list of input sections attached to an output section. Later, mgl@1371: + output sections use these fields for a list of bfd_link_order mgl@1371: + structs. */ mgl@1371: + union { mgl@1371: + struct bfd_link_order *link_order; mgl@1371: + struct bfd_section *s; mgl@1371: + } map_head, map_tail; mgl@1371: +} asection; mgl@1371: + mgl@1371: +/* These sections are global, and are managed by BFD. The application mgl@1371: + and target back end are not permitted to change the values in mgl@1371: + these sections. New code should use the section_ptr macros rather mgl@1371: + than referring directly to the const sections. The const sections mgl@1371: + may eventually vanish. */ mgl@1371: +#define BFD_ABS_SECTION_NAME "*ABS*" mgl@1371: +#define BFD_UND_SECTION_NAME "*UND*" mgl@1371: +#define BFD_COM_SECTION_NAME "*COM*" mgl@1371: +#define BFD_IND_SECTION_NAME "*IND*" mgl@1371: + mgl@1371: +/* The absolute section. */ mgl@1371: +extern asection bfd_abs_section; mgl@1371: +#define bfd_abs_section_ptr ((asection *) &bfd_abs_section) mgl@1371: +#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr) mgl@1371: +/* Pointer to the undefined section. */ mgl@1371: +extern asection bfd_und_section; mgl@1371: +#define bfd_und_section_ptr ((asection *) &bfd_und_section) mgl@1371: +#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr) mgl@1371: +/* Pointer to the common section. */ mgl@1371: +extern asection bfd_com_section; mgl@1371: +#define bfd_com_section_ptr ((asection *) &bfd_com_section) mgl@1371: +/* Pointer to the indirect section. */ mgl@1371: +extern asection bfd_ind_section; mgl@1371: +#define bfd_ind_section_ptr ((asection *) &bfd_ind_section) mgl@1371: +#define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr) mgl@1371: + mgl@1371: +#define bfd_is_const_section(SEC) \ mgl@1371: + ( ((SEC) == bfd_abs_section_ptr) \ mgl@1371: + || ((SEC) == bfd_und_section_ptr) \ mgl@1371: + || ((SEC) == bfd_com_section_ptr) \ mgl@1371: + || ((SEC) == bfd_ind_section_ptr)) mgl@1371: + mgl@1371: +/* Macros to handle insertion and deletion of a bfd's sections. These mgl@1371: + only handle the list pointers, ie. do not adjust section_count, mgl@1371: + target_index etc. */ mgl@1371: +#define bfd_section_list_remove(ABFD, S) \ mgl@1371: + do \ mgl@1371: + { \ mgl@1371: + asection *_s = S; \ mgl@1371: + asection *_next = _s->next; \ mgl@1371: + asection *_prev = _s->prev; \ mgl@1371: + if (_prev) \ mgl@1371: + _prev->next = _next; \ mgl@1371: + else \ mgl@1371: + (ABFD)->sections = _next; \ mgl@1371: + if (_next) \ mgl@1371: + _next->prev = _prev; \ mgl@1371: + else \ mgl@1371: + (ABFD)->section_last = _prev; \ mgl@1371: + } \ mgl@1371: + while (0) mgl@1371: +#define bfd_section_list_append(ABFD, S) \ mgl@1371: + do \ mgl@1371: + { \ mgl@1371: + asection *_s = S; \ mgl@1371: + bfd *_abfd = ABFD; \ mgl@1371: + _s->next = NULL; \ mgl@1371: + if (_abfd->section_last) \ mgl@1371: + { \ mgl@1371: + _s->prev = _abfd->section_last; \ mgl@1371: + _abfd->section_last->next = _s; \ mgl@1371: + } \ mgl@1371: + else \ mgl@1371: + { \ mgl@1371: + _s->prev = NULL; \ mgl@1371: + _abfd->sections = _s; \ mgl@1371: + } \ mgl@1371: + _abfd->section_last = _s; \ mgl@1371: + } \ mgl@1371: + while (0) mgl@1371: +#define bfd_section_list_prepend(ABFD, S) \ mgl@1371: + do \ mgl@1371: + { \ mgl@1371: + asection *_s = S; \ mgl@1371: + bfd *_abfd = ABFD; \ mgl@1371: + _s->prev = NULL; \ mgl@1371: + if (_abfd->sections) \ mgl@1371: + { \ mgl@1371: + _s->next = _abfd->sections; \ mgl@1371: + _abfd->sections->prev = _s; \ mgl@1371: + } \ mgl@1371: + else \ mgl@1371: + { \ mgl@1371: + _s->next = NULL; \ mgl@1371: + _abfd->section_last = _s; \ mgl@1371: + } \ mgl@1371: + _abfd->sections = _s; \ mgl@1371: + } \ mgl@1371: + while (0) mgl@1371: +#define bfd_section_list_insert_after(ABFD, A, S) \ mgl@1371: + do \ mgl@1371: + { \ mgl@1371: + asection *_a = A; \ mgl@1371: + asection *_s = S; \ mgl@1371: + asection *_next = _a->next; \ mgl@1371: + _s->next = _next; \ mgl@1371: + _s->prev = _a; \ mgl@1371: + _a->next = _s; \ mgl@1371: + if (_next) \ mgl@1371: + _next->prev = _s; \ mgl@1371: + else \ mgl@1371: + (ABFD)->section_last = _s; \ mgl@1371: + } \ mgl@1371: + while (0) mgl@1371: +#define bfd_section_list_insert_before(ABFD, B, S) \ mgl@1371: + do \ mgl@1371: + { \ mgl@1371: + asection *_b = B; \ mgl@1371: + asection *_s = S; \ mgl@1371: + asection *_prev = _b->prev; \ mgl@1371: + _s->prev = _prev; \ mgl@1371: + _s->next = _b; \ mgl@1371: + _b->prev = _s; \ mgl@1371: + if (_prev) \ mgl@1371: + _prev->next = _s; \ mgl@1371: + else \ mgl@1371: + (ABFD)->sections = _s; \ mgl@1371: + } \ mgl@1371: + while (0) mgl@1371: +#define bfd_section_removed_from_list(ABFD, S) \ mgl@1371: + ((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S)) mgl@1371: + mgl@1371: +#define BFD_FAKE_SECTION(SEC, FLAGS, SYM, NAME, IDX) \ mgl@1371: + /* name, id, index, next, prev, flags, user_set_vma, */ \ mgl@1371: + { NAME, IDX, 0, NULL, NULL, FLAGS, 0, \ mgl@1371: + \ mgl@1371: + /* linker_mark, linker_has_input, gc_mark, gc_mark_from_eh, */ \ mgl@1371: + 0, 0, 1, 0, \ mgl@1371: + \ mgl@1371: + /* segment_mark, sec_info_type, use_rela_p, has_tls_reloc, */ \ mgl@1371: + 0, 0, 0, 0, \ mgl@1371: + \ mgl@1371: + /* has_gp_reloc, need_finalize_relax, reloc_done, */ \ mgl@1371: + 0, 0, 0, \ mgl@1371: + \ mgl@1371: + /* vma, lma, size, rawsize */ \ mgl@1371: + 0, 0, 0, 0, \ mgl@1371: + \ mgl@1371: + /* output_offset, output_section, alignment_power, */ \ mgl@1371: + 0, (struct bfd_section *) &SEC, 0, \ mgl@1371: + \ mgl@1371: + /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \ mgl@1371: + NULL, NULL, 0, 0, 0, \ mgl@1371: + \ mgl@1371: + /* line_filepos, userdata, contents, lineno, lineno_count, */ \ mgl@1371: + 0, NULL, NULL, NULL, 0, \ mgl@1371: + \ mgl@1371: + /* entsize, kept_section, moving_line_filepos, */ \ mgl@1371: + 0, NULL, 0, \ mgl@1371: + \ mgl@1371: + /* target_index, used_by_bfd, constructor_chain, owner, */ \ mgl@1371: + 0, NULL, NULL, NULL, \ mgl@1371: + \ mgl@1371: + /* symbol, symbol_ptr_ptr, */ \ mgl@1371: + (struct bfd_symbol *) SYM, &SEC.symbol, \ mgl@1371: + \ mgl@1371: + /* map_head, map_tail */ \ mgl@1371: + { NULL }, { NULL } \ mgl@1371: + } mgl@1371: + mgl@1371: +void bfd_section_list_clear (bfd *); mgl@1371: + mgl@1371: +asection *bfd_get_section_by_name (bfd *abfd, const char *name); mgl@1371: + mgl@1371: +asection *bfd_get_section_by_name_if mgl@1371: + (bfd *abfd, mgl@1371: + const char *name, mgl@1371: + bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj), mgl@1371: + void *obj); mgl@1371: + mgl@1371: +char *bfd_get_unique_section_name mgl@1371: + (bfd *abfd, const char *templat, int *count); mgl@1371: + mgl@1371: +asection *bfd_make_section_old_way (bfd *abfd, const char *name); mgl@1371: + mgl@1371: +asection *bfd_make_section_anyway_with_flags mgl@1371: + (bfd *abfd, const char *name, flagword flags); mgl@1371: + mgl@1371: +asection *bfd_make_section_anyway (bfd *abfd, const char *name); mgl@1371: + mgl@1371: +asection *bfd_make_section_with_flags mgl@1371: + (bfd *, const char *name, flagword flags); mgl@1371: + mgl@1371: +asection *bfd_make_section (bfd *, const char *name); mgl@1371: + mgl@1371: +bfd_boolean bfd_set_section_flags mgl@1371: + (bfd *abfd, asection *sec, flagword flags); mgl@1371: + mgl@1371: +void bfd_map_over_sections mgl@1371: + (bfd *abfd, mgl@1371: + void (*func) (bfd *abfd, asection *sect, void *obj), mgl@1371: + void *obj); mgl@1371: + mgl@1371: +asection *bfd_sections_find_if mgl@1371: + (bfd *abfd, mgl@1371: + bfd_boolean (*operation) (bfd *abfd, asection *sect, void *obj), mgl@1371: + void *obj); mgl@1371: + mgl@1371: +bfd_boolean bfd_set_section_size mgl@1371: + (bfd *abfd, asection *sec, bfd_size_type val); mgl@1371: + mgl@1371: +bfd_boolean bfd_set_section_contents mgl@1371: + (bfd *abfd, asection *section, const void *data, mgl@1371: + file_ptr offset, bfd_size_type count); mgl@1371: + mgl@1371: +bfd_boolean bfd_get_section_contents mgl@1371: + (bfd *abfd, asection *section, void *location, file_ptr offset, mgl@1371: + bfd_size_type count); mgl@1371: + mgl@1371: +bfd_boolean bfd_malloc_and_get_section mgl@1371: + (bfd *abfd, asection *section, bfd_byte **buf); mgl@1371: + mgl@1371: +bfd_boolean bfd_copy_private_section_data mgl@1371: + (bfd *ibfd, asection *isec, bfd *obfd, asection *osec); mgl@1371: + mgl@1371: +#define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \ mgl@1371: + BFD_SEND (obfd, _bfd_copy_private_section_data, \ mgl@1371: + (ibfd, isection, obfd, osection)) mgl@1371: +bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec); mgl@1371: + mgl@1371: +bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group); mgl@1371: + mgl@1371: +/* Extracted from archures.c. */ mgl@1371: +enum bfd_architecture mgl@1371: +{ mgl@1371: + bfd_arch_unknown, /* File arch not known. */ mgl@1371: + bfd_arch_obscure, /* Arch known, not one of these. */ mgl@1371: + bfd_arch_m68k, /* Motorola 68xxx */ mgl@1371: +#define bfd_mach_m68000 1 mgl@1371: +#define bfd_mach_m68008 2 mgl@1371: +#define bfd_mach_m68010 3 mgl@1371: +#define bfd_mach_m68020 4 mgl@1371: +#define bfd_mach_m68030 5 mgl@1371: +#define bfd_mach_m68040 6 mgl@1371: +#define bfd_mach_m68060 7 mgl@1371: +#define bfd_mach_cpu32 8 mgl@1371: +#define bfd_mach_fido 9 mgl@1371: +#define bfd_mach_mcf_isa_a_nodiv 10 mgl@1371: +#define bfd_mach_mcf_isa_a 11 mgl@1371: +#define bfd_mach_mcf_isa_a_mac 12 mgl@1371: +#define bfd_mach_mcf_isa_a_emac 13 mgl@1371: +#define bfd_mach_mcf_isa_aplus 14 mgl@1371: +#define bfd_mach_mcf_isa_aplus_mac 15 mgl@1371: +#define bfd_mach_mcf_isa_aplus_emac 16 mgl@1371: +#define bfd_mach_mcf_isa_b_nousp 17 mgl@1371: +#define bfd_mach_mcf_isa_b_nousp_mac 18 mgl@1371: +#define bfd_mach_mcf_isa_b_nousp_emac 19 mgl@1371: +#define bfd_mach_mcf_isa_b 20 mgl@1371: +#define bfd_mach_mcf_isa_b_mac 21 mgl@1371: +#define bfd_mach_mcf_isa_b_emac 22 mgl@1371: +#define bfd_mach_mcf_isa_b_float 23 mgl@1371: +#define bfd_mach_mcf_isa_b_float_mac 24 mgl@1371: +#define bfd_mach_mcf_isa_b_float_emac 25 mgl@1371: +#define bfd_mach_mcf_isa_c 26 mgl@1371: +#define bfd_mach_mcf_isa_c_mac 27 mgl@1371: +#define bfd_mach_mcf_isa_c_emac 28 mgl@1371: + bfd_arch_vax, /* DEC Vax */ mgl@1371: + bfd_arch_i960, /* Intel 960 */ mgl@1371: + /* The order of the following is important. mgl@1371: + lower number indicates a machine type that mgl@1371: + only accepts a subset of the instructions mgl@1371: + available to machines with higher numbers. mgl@1371: + The exception is the "ca", which is mgl@1371: + incompatible with all other machines except mgl@1371: + "core". */ mgl@1371: + mgl@1371: +#define bfd_mach_i960_core 1 mgl@1371: +#define bfd_mach_i960_ka_sa 2 mgl@1371: +#define bfd_mach_i960_kb_sb 3 mgl@1371: +#define bfd_mach_i960_mc 4 mgl@1371: +#define bfd_mach_i960_xa 5 mgl@1371: +#define bfd_mach_i960_ca 6 mgl@1371: +#define bfd_mach_i960_jx 7 mgl@1371: +#define bfd_mach_i960_hx 8 mgl@1371: + mgl@1371: + bfd_arch_or32, /* OpenRISC 32 */ mgl@1371: + mgl@1371: + bfd_arch_sparc, /* SPARC */ mgl@1371: +#define bfd_mach_sparc 1 mgl@1371: +/* The difference between v8plus and v9 is that v9 is a true 64 bit env. */ mgl@1371: +#define bfd_mach_sparc_sparclet 2 mgl@1371: +#define bfd_mach_sparc_sparclite 3 mgl@1371: +#define bfd_mach_sparc_v8plus 4 mgl@1371: +#define bfd_mach_sparc_v8plusa 5 /* with ultrasparc add'ns. */ mgl@1371: +#define bfd_mach_sparc_sparclite_le 6 mgl@1371: +#define bfd_mach_sparc_v9 7 mgl@1371: +#define bfd_mach_sparc_v9a 8 /* with ultrasparc add'ns. */ mgl@1371: +#define bfd_mach_sparc_v8plusb 9 /* with cheetah add'ns. */ mgl@1371: +#define bfd_mach_sparc_v9b 10 /* with cheetah add'ns. */ mgl@1371: +/* Nonzero if MACH has the v9 instruction set. */ mgl@1371: +#define bfd_mach_sparc_v9_p(mach) \ mgl@1371: + ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \ mgl@1371: + && (mach) != bfd_mach_sparc_sparclite_le) mgl@1371: +/* Nonzero if MACH is a 64 bit sparc architecture. */ mgl@1371: +#define bfd_mach_sparc_64bit_p(mach) \ mgl@1371: + ((mach) >= bfd_mach_sparc_v9 && (mach) != bfd_mach_sparc_v8plusb) mgl@1371: + bfd_arch_spu, /* PowerPC SPU */ mgl@1371: +#define bfd_mach_spu 256 mgl@1371: + bfd_arch_mips, /* MIPS Rxxxx */ mgl@1371: +#define bfd_mach_mips3000 3000 mgl@1371: +#define bfd_mach_mips3900 3900 mgl@1371: +#define bfd_mach_mips4000 4000 mgl@1371: +#define bfd_mach_mips4010 4010 mgl@1371: +#define bfd_mach_mips4100 4100 mgl@1371: +#define bfd_mach_mips4111 4111 mgl@1371: +#define bfd_mach_mips4120 4120 mgl@1371: +#define bfd_mach_mips4300 4300 mgl@1371: +#define bfd_mach_mips4400 4400 mgl@1371: +#define bfd_mach_mips4600 4600 mgl@1371: +#define bfd_mach_mips4650 4650 mgl@1371: +#define bfd_mach_mips5000 5000 mgl@1371: +#define bfd_mach_mips5400 5400 mgl@1371: +#define bfd_mach_mips5500 5500 mgl@1371: +#define bfd_mach_mips6000 6000 mgl@1371: +#define bfd_mach_mips7000 7000 mgl@1371: +#define bfd_mach_mips8000 8000 mgl@1371: +#define bfd_mach_mips9000 9000 mgl@1371: +#define bfd_mach_mips10000 10000 mgl@1371: +#define bfd_mach_mips12000 12000 mgl@1371: +#define bfd_mach_mips16 16 mgl@1371: +#define bfd_mach_mips5 5 mgl@1371: +#define bfd_mach_mips_sb1 12310201 /* octal 'SB', 01 */ mgl@1371: +#define bfd_mach_mipsisa32 32 mgl@1371: +#define bfd_mach_mipsisa32r2 33 mgl@1371: +#define bfd_mach_mipsisa64 64 mgl@1371: +#define bfd_mach_mipsisa64r2 65 mgl@1371: + bfd_arch_i386, /* Intel 386 */ mgl@1371: +#define bfd_mach_i386_i386 1 mgl@1371: +#define bfd_mach_i386_i8086 2 mgl@1371: +#define bfd_mach_i386_i386_intel_syntax 3 mgl@1371: +#define bfd_mach_x86_64 64 mgl@1371: +#define bfd_mach_x86_64_intel_syntax 65 mgl@1371: + bfd_arch_we32k, /* AT&T WE32xxx */ mgl@1371: + bfd_arch_tahoe, /* CCI/Harris Tahoe */ mgl@1371: + bfd_arch_i860, /* Intel 860 */ mgl@1371: + bfd_arch_i370, /* IBM 360/370 Mainframes */ mgl@1371: + bfd_arch_romp, /* IBM ROMP PC/RT */ mgl@1371: + bfd_arch_convex, /* Convex */ mgl@1371: + bfd_arch_m88k, /* Motorola 88xxx */ mgl@1371: + bfd_arch_m98k, /* Motorola 98xxx */ mgl@1371: + bfd_arch_pyramid, /* Pyramid Technology */ mgl@1371: + bfd_arch_h8300, /* Renesas H8/300 (formerly Hitachi H8/300) */ mgl@1371: +#define bfd_mach_h8300 1 mgl@1371: +#define bfd_mach_h8300h 2 mgl@1371: +#define bfd_mach_h8300s 3 mgl@1371: +#define bfd_mach_h8300hn 4 mgl@1371: +#define bfd_mach_h8300sn 5 mgl@1371: +#define bfd_mach_h8300sx 6 mgl@1371: +#define bfd_mach_h8300sxn 7 mgl@1371: + bfd_arch_pdp11, /* DEC PDP-11 */ mgl@1371: + bfd_arch_powerpc, /* PowerPC */ mgl@1371: +#define bfd_mach_ppc 32 mgl@1371: +#define bfd_mach_ppc64 64 mgl@1371: +#define bfd_mach_ppc_403 403 mgl@1371: +#define bfd_mach_ppc_403gc 4030 mgl@1371: +#define bfd_mach_ppc_505 505 mgl@1371: +#define bfd_mach_ppc_601 601 mgl@1371: +#define bfd_mach_ppc_602 602 mgl@1371: +#define bfd_mach_ppc_603 603 mgl@1371: +#define bfd_mach_ppc_ec603e 6031 mgl@1371: +#define bfd_mach_ppc_604 604 mgl@1371: +#define bfd_mach_ppc_620 620 mgl@1371: +#define bfd_mach_ppc_630 630 mgl@1371: +#define bfd_mach_ppc_750 750 mgl@1371: +#define bfd_mach_ppc_860 860 mgl@1371: +#define bfd_mach_ppc_a35 35 mgl@1371: +#define bfd_mach_ppc_rs64ii 642 mgl@1371: +#define bfd_mach_ppc_rs64iii 643 mgl@1371: +#define bfd_mach_ppc_7400 7400 mgl@1371: +#define bfd_mach_ppc_e500 500 mgl@1371: + bfd_arch_rs6000, /* IBM RS/6000 */ mgl@1371: +#define bfd_mach_rs6k 6000 mgl@1371: +#define bfd_mach_rs6k_rs1 6001 mgl@1371: +#define bfd_mach_rs6k_rsc 6003 mgl@1371: +#define bfd_mach_rs6k_rs2 6002 mgl@1371: + bfd_arch_hppa, /* HP PA RISC */ mgl@1371: +#define bfd_mach_hppa10 10 mgl@1371: +#define bfd_mach_hppa11 11 mgl@1371: +#define bfd_mach_hppa20 20 mgl@1371: +#define bfd_mach_hppa20w 25 mgl@1371: + bfd_arch_d10v, /* Mitsubishi D10V */ mgl@1371: +#define bfd_mach_d10v 1 mgl@1371: +#define bfd_mach_d10v_ts2 2 mgl@1371: +#define bfd_mach_d10v_ts3 3 mgl@1371: + bfd_arch_d30v, /* Mitsubishi D30V */ mgl@1371: + bfd_arch_dlx, /* DLX */ mgl@1371: + bfd_arch_m68hc11, /* Motorola 68HC11 */ mgl@1371: + bfd_arch_m68hc12, /* Motorola 68HC12 */ mgl@1371: +#define bfd_mach_m6812_default 0 mgl@1371: +#define bfd_mach_m6812 1 mgl@1371: +#define bfd_mach_m6812s 2 mgl@1371: + bfd_arch_z8k, /* Zilog Z8000 */ mgl@1371: +#define bfd_mach_z8001 1 mgl@1371: +#define bfd_mach_z8002 2 mgl@1371: + bfd_arch_h8500, /* Renesas H8/500 (formerly Hitachi H8/500) */ mgl@1371: + bfd_arch_sh, /* Renesas / SuperH SH (formerly Hitachi SH) */ mgl@1371: +#define bfd_mach_sh 1 mgl@1371: +#define bfd_mach_sh2 0x20 mgl@1371: +#define bfd_mach_sh_dsp 0x2d mgl@1371: +#define bfd_mach_sh2a 0x2a mgl@1371: +#define bfd_mach_sh2a_nofpu 0x2b mgl@1371: +#define bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu 0x2a1 mgl@1371: +#define bfd_mach_sh2a_nofpu_or_sh3_nommu 0x2a2 mgl@1371: +#define bfd_mach_sh2a_or_sh4 0x2a3 mgl@1371: +#define bfd_mach_sh2a_or_sh3e 0x2a4 mgl@1371: +#define bfd_mach_sh2e 0x2e mgl@1371: +#define bfd_mach_sh3 0x30 mgl@1371: +#define bfd_mach_sh3_nommu 0x31 mgl@1371: +#define bfd_mach_sh3_dsp 0x3d mgl@1371: +#define bfd_mach_sh3e 0x3e mgl@1371: +#define bfd_mach_sh4 0x40 mgl@1371: +#define bfd_mach_sh4_nofpu 0x41 mgl@1371: +#define bfd_mach_sh4_nommu_nofpu 0x42 mgl@1371: +#define bfd_mach_sh4a 0x4a mgl@1371: +#define bfd_mach_sh4a_nofpu 0x4b mgl@1371: +#define bfd_mach_sh4al_dsp 0x4d mgl@1371: +#define bfd_mach_sh5 0x50 mgl@1371: + bfd_arch_alpha, /* Dec Alpha */ mgl@1371: +#define bfd_mach_alpha_ev4 0x10 mgl@1371: +#define bfd_mach_alpha_ev5 0x20 mgl@1371: +#define bfd_mach_alpha_ev6 0x30 mgl@1371: + bfd_arch_arm, /* Advanced Risc Machines ARM. */ mgl@1371: +#define bfd_mach_arm_unknown 0 mgl@1371: +#define bfd_mach_arm_2 1 mgl@1371: +#define bfd_mach_arm_2a 2 mgl@1371: +#define bfd_mach_arm_3 3 mgl@1371: +#define bfd_mach_arm_3M 4 mgl@1371: +#define bfd_mach_arm_4 5 mgl@1371: +#define bfd_mach_arm_4T 6 mgl@1371: +#define bfd_mach_arm_5 7 mgl@1371: +#define bfd_mach_arm_5T 8 mgl@1371: +#define bfd_mach_arm_5TE 9 mgl@1371: +#define bfd_mach_arm_XScale 10 mgl@1371: +#define bfd_mach_arm_ep9312 11 mgl@1371: +#define bfd_mach_arm_iWMMXt 12 mgl@1371: +#define bfd_mach_arm_iWMMXt2 13 mgl@1371: + bfd_arch_ns32k, /* National Semiconductors ns32000 */ mgl@1371: + bfd_arch_w65, /* WDC 65816 */ mgl@1371: + bfd_arch_tic30, /* Texas Instruments TMS320C30 */ mgl@1371: + bfd_arch_tic4x, /* Texas Instruments TMS320C3X/4X */ mgl@1371: +#define bfd_mach_tic3x 30 mgl@1371: +#define bfd_mach_tic4x 40 mgl@1371: + bfd_arch_tic54x, /* Texas Instruments TMS320C54X */ mgl@1371: + bfd_arch_tic80, /* TI TMS320c80 (MVP) */ mgl@1371: + bfd_arch_v850, /* NEC V850 */ mgl@1371: +#define bfd_mach_v850 1 mgl@1371: +#define bfd_mach_v850e 'E' mgl@1371: +#define bfd_mach_v850e1 '1' mgl@1371: + bfd_arch_arc, /* ARC Cores */ mgl@1371: +#define bfd_mach_arc_5 5 mgl@1371: +#define bfd_mach_arc_6 6 mgl@1371: +#define bfd_mach_arc_7 7 mgl@1371: +#define bfd_mach_arc_8 8 mgl@1371: + bfd_arch_m32c, /* Renesas M16C/M32C. */ mgl@1371: +#define bfd_mach_m16c 0x75 mgl@1371: +#define bfd_mach_m32c 0x78 mgl@1371: + bfd_arch_m32r, /* Renesas M32R (formerly Mitsubishi M32R/D) */ mgl@1371: +#define bfd_mach_m32r 1 /* For backwards compatibility. */ mgl@1371: +#define bfd_mach_m32rx 'x' mgl@1371: +#define bfd_mach_m32r2 '2' mgl@1371: + bfd_arch_mn10200, /* Matsushita MN10200 */ mgl@1371: + bfd_arch_mn10300, /* Matsushita MN10300 */ mgl@1371: +#define bfd_mach_mn10300 300 mgl@1371: +#define bfd_mach_am33 330 mgl@1371: +#define bfd_mach_am33_2 332 mgl@1371: + bfd_arch_fr30, mgl@1371: +#define bfd_mach_fr30 0x46523330 mgl@1371: + bfd_arch_frv, mgl@1371: +#define bfd_mach_frv 1 mgl@1371: +#define bfd_mach_frvsimple 2 mgl@1371: +#define bfd_mach_fr300 300 mgl@1371: +#define bfd_mach_fr400 400 mgl@1371: +#define bfd_mach_fr450 450 mgl@1371: +#define bfd_mach_frvtomcat 499 /* fr500 prototype */ mgl@1371: +#define bfd_mach_fr500 500 mgl@1371: +#define bfd_mach_fr550 550 mgl@1371: + bfd_arch_mcore, mgl@1371: + bfd_arch_mep, mgl@1371: +#define bfd_mach_mep 1 mgl@1371: +#define bfd_mach_mep_h1 0x6831 mgl@1371: + bfd_arch_ia64, /* HP/Intel ia64 */ mgl@1371: +#define bfd_mach_ia64_elf64 64 mgl@1371: +#define bfd_mach_ia64_elf32 32 mgl@1371: + bfd_arch_ip2k, /* Ubicom IP2K microcontrollers. */ mgl@1371: +#define bfd_mach_ip2022 1 mgl@1371: +#define bfd_mach_ip2022ext 2 mgl@1371: + bfd_arch_iq2000, /* Vitesse IQ2000. */ mgl@1371: +#define bfd_mach_iq2000 1 mgl@1371: +#define bfd_mach_iq10 2 mgl@1371: + bfd_arch_mt, mgl@1371: +#define bfd_mach_ms1 1 mgl@1371: +#define bfd_mach_mrisc2 2 mgl@1371: +#define bfd_mach_ms2 3 mgl@1371: + bfd_arch_pj, mgl@1371: + bfd_arch_avr, /* Atmel AVR microcontrollers. */ mgl@1371: +#define bfd_mach_avr1 1 mgl@1371: +#define bfd_mach_avr2 2 mgl@1371: +#define bfd_mach_avr3 3 mgl@1371: +#define bfd_mach_avr4 4 mgl@1371: +#define bfd_mach_avr5 5 mgl@1371: +#define bfd_mach_avr6 6 mgl@1371: + bfd_arch_avr32, /* Atmel AVR32 */ mgl@1371: +#define bfd_mach_avr32_ap 7000 mgl@1371: +#define bfd_mach_avr32_uc 3000 mgl@1371: +#define bfd_mach_avr32_ucr1 3001 mgl@1371: +#define bfd_mach_avr32_ucr2 3002 mgl@1371: + bfd_arch_bfin, /* ADI Blackfin */ mgl@1371: +#define bfd_mach_bfin 1 mgl@1371: + bfd_arch_cr16, /* National Semiconductor CompactRISC (ie CR16). */ mgl@1371: +#define bfd_mach_cr16 1 mgl@1371: + bfd_arch_cr16c, /* National Semiconductor CompactRISC. */ mgl@1371: +#define bfd_mach_cr16c 1 mgl@1371: + bfd_arch_crx, /* National Semiconductor CRX. */ mgl@1371: +#define bfd_mach_crx 1 mgl@1371: + bfd_arch_cris, /* Axis CRIS */ mgl@1371: +#define bfd_mach_cris_v0_v10 255 mgl@1371: +#define bfd_mach_cris_v32 32 mgl@1371: +#define bfd_mach_cris_v10_v32 1032 mgl@1371: + bfd_arch_s390, /* IBM s390 */ mgl@1371: +#define bfd_mach_s390_31 31 mgl@1371: +#define bfd_mach_s390_64 64 mgl@1371: + bfd_arch_score, /* Sunplus score */ mgl@1371: + bfd_arch_openrisc, /* OpenRISC */ mgl@1371: + bfd_arch_mmix, /* Donald Knuth's educational processor. */ mgl@1371: + bfd_arch_xstormy16, mgl@1371: +#define bfd_mach_xstormy16 1 mgl@1371: + bfd_arch_msp430, /* Texas Instruments MSP430 architecture. */ mgl@1371: +#define bfd_mach_msp11 11 mgl@1371: +#define bfd_mach_msp110 110 mgl@1371: +#define bfd_mach_msp12 12 mgl@1371: +#define bfd_mach_msp13 13 mgl@1371: +#define bfd_mach_msp14 14 mgl@1371: +#define bfd_mach_msp15 15 mgl@1371: +#define bfd_mach_msp16 16 mgl@1371: +#define bfd_mach_msp21 21 mgl@1371: +#define bfd_mach_msp31 31 mgl@1371: +#define bfd_mach_msp32 32 mgl@1371: +#define bfd_mach_msp33 33 mgl@1371: +#define bfd_mach_msp41 41 mgl@1371: +#define bfd_mach_msp42 42 mgl@1371: +#define bfd_mach_msp43 43 mgl@1371: +#define bfd_mach_msp44 44 mgl@1371: + bfd_arch_xc16x, /* Infineon's XC16X Series. */ mgl@1371: +#define bfd_mach_xc16x 1 mgl@1371: +#define bfd_mach_xc16xl 2 mgl@1371: +#define bfd_mach_xc16xs 3 mgl@1371: + bfd_arch_xtensa, /* Tensilica's Xtensa cores. */ mgl@1371: +#define bfd_mach_xtensa 1 mgl@1371: + bfd_arch_maxq, /* Dallas MAXQ 10/20 */ mgl@1371: +#define bfd_mach_maxq10 10 mgl@1371: +#define bfd_mach_maxq20 20 mgl@1371: + bfd_arch_z80, mgl@1371: +#define bfd_mach_z80strict 1 /* No undocumented opcodes. */ mgl@1371: +#define bfd_mach_z80 3 /* With ixl, ixh, iyl, and iyh. */ mgl@1371: +#define bfd_mach_z80full 7 /* All undocumented instructions. */ mgl@1371: +#define bfd_mach_r800 11 /* R800: successor with multiplication. */ mgl@1371: + bfd_arch_last mgl@1371: + }; mgl@1371: + mgl@1371: +typedef struct bfd_arch_info mgl@1371: +{ mgl@1371: + int bits_per_word; mgl@1371: + int bits_per_address; mgl@1371: + int bits_per_byte; mgl@1371: + enum bfd_architecture arch; mgl@1371: + unsigned long mach; mgl@1371: + const char *arch_name; mgl@1371: + const char *printable_name; mgl@1371: + unsigned int section_align_power; mgl@1371: + /* TRUE if this is the default machine for the architecture. mgl@1371: + The default arch should be the first entry for an arch so that mgl@1371: + all the entries for that arch can be accessed via <>. */ mgl@1371: + bfd_boolean the_default; mgl@1371: + const struct bfd_arch_info * (*compatible) mgl@1371: + (const struct bfd_arch_info *a, const struct bfd_arch_info *b); mgl@1371: + mgl@1371: + bfd_boolean (*scan) (const struct bfd_arch_info *, const char *); mgl@1371: + mgl@1371: + const struct bfd_arch_info *next; mgl@1371: +} mgl@1371: +bfd_arch_info_type; mgl@1371: + mgl@1371: +const char *bfd_printable_name (bfd *abfd); mgl@1371: + mgl@1371: +const bfd_arch_info_type *bfd_scan_arch (const char *string); mgl@1371: + mgl@1371: +const char **bfd_arch_list (void); mgl@1371: + mgl@1371: +const bfd_arch_info_type *bfd_arch_get_compatible mgl@1371: + (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns); mgl@1371: + mgl@1371: +void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg); mgl@1371: + mgl@1371: +enum bfd_architecture bfd_get_arch (bfd *abfd); mgl@1371: + mgl@1371: +unsigned long bfd_get_mach (bfd *abfd); mgl@1371: + mgl@1371: +unsigned int bfd_arch_bits_per_byte (bfd *abfd); mgl@1371: + mgl@1371: +unsigned int bfd_arch_bits_per_address (bfd *abfd); mgl@1371: + mgl@1371: +const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd); mgl@1371: + mgl@1371: +const bfd_arch_info_type *bfd_lookup_arch mgl@1371: + (enum bfd_architecture arch, unsigned long machine); mgl@1371: + mgl@1371: +const char *bfd_printable_arch_mach mgl@1371: + (enum bfd_architecture arch, unsigned long machine); mgl@1371: + mgl@1371: +unsigned int bfd_octets_per_byte (bfd *abfd); mgl@1371: + mgl@1371: +unsigned int bfd_arch_mach_octets_per_byte mgl@1371: + (enum bfd_architecture arch, unsigned long machine); mgl@1371: + mgl@1371: +/* Extracted from reloc.c. */ mgl@1371: +typedef enum bfd_reloc_status mgl@1371: +{ mgl@1371: + /* No errors detected. */ mgl@1371: + bfd_reloc_ok, mgl@1371: + mgl@1371: + /* The relocation was performed, but there was an overflow. */ mgl@1371: + bfd_reloc_overflow, mgl@1371: + mgl@1371: + /* The address to relocate was not within the section supplied. */ mgl@1371: + bfd_reloc_outofrange, mgl@1371: + mgl@1371: + /* Used by special functions. */ mgl@1371: + bfd_reloc_continue, mgl@1371: + mgl@1371: + /* Unsupported relocation size requested. */ mgl@1371: + bfd_reloc_notsupported, mgl@1371: + mgl@1371: + /* Unused. */ mgl@1371: + bfd_reloc_other, mgl@1371: + mgl@1371: + /* The symbol to relocate against was undefined. */ mgl@1371: + bfd_reloc_undefined, mgl@1371: + mgl@1371: + /* The relocation was performed, but may not be ok - presently mgl@1371: + generated only when linking i960 coff files with i960 b.out mgl@1371: + symbols. If this type is returned, the error_message argument mgl@1371: + to bfd_perform_relocation will be set. */ mgl@1371: + bfd_reloc_dangerous mgl@1371: + } mgl@1371: + bfd_reloc_status_type; mgl@1371: + mgl@1371: + mgl@1371: +typedef struct reloc_cache_entry mgl@1371: +{ mgl@1371: + /* A pointer into the canonical table of pointers. */ mgl@1371: + struct bfd_symbol **sym_ptr_ptr; mgl@1371: + mgl@1371: + /* offset in section. */ mgl@1371: + bfd_size_type address; mgl@1371: + mgl@1371: + /* addend for relocation value. */ mgl@1371: + bfd_vma addend; mgl@1371: + mgl@1371: + /* Pointer to how to perform the required relocation. */ mgl@1371: + reloc_howto_type *howto; mgl@1371: + mgl@1371: +} mgl@1371: +arelent; mgl@1371: + mgl@1371: +enum complain_overflow mgl@1371: +{ mgl@1371: + /* Do not complain on overflow. */ mgl@1371: + complain_overflow_dont, mgl@1371: + mgl@1371: + /* Complain if the value overflows when considered as a signed mgl@1371: + number one bit larger than the field. ie. A bitfield of N bits mgl@1371: + is allowed to represent -2**n to 2**n-1. */ mgl@1371: + complain_overflow_bitfield, mgl@1371: + mgl@1371: + /* Complain if the value overflows when considered as a signed mgl@1371: + number. */ mgl@1371: + complain_overflow_signed, mgl@1371: + mgl@1371: + /* Complain if the value overflows when considered as an mgl@1371: + unsigned number. */ mgl@1371: + complain_overflow_unsigned mgl@1371: +}; mgl@1371: + mgl@1371: +struct reloc_howto_struct mgl@1371: +{ mgl@1371: + /* The type field has mainly a documentary use - the back end can mgl@1371: + do what it wants with it, though normally the back end's mgl@1371: + external idea of what a reloc number is stored mgl@1371: + in this field. For example, a PC relative word relocation mgl@1371: + in a coff environment has the type 023 - because that's mgl@1371: + what the outside world calls a R_PCRWORD reloc. */ mgl@1371: + unsigned int type; mgl@1371: + mgl@1371: + /* The value the final relocation is shifted right by. This drops mgl@1371: + unwanted data from the relocation. */ mgl@1371: + unsigned int rightshift; mgl@1371: + mgl@1371: + /* The size of the item to be relocated. This is *not* a mgl@1371: + power-of-two measure. To get the number of bytes operated mgl@1371: + on by a type of relocation, use bfd_get_reloc_size. */ mgl@1371: + int size; mgl@1371: + mgl@1371: + /* The number of bits in the item to be relocated. This is used mgl@1371: + when doing overflow checking. */ mgl@1371: + unsigned int bitsize; mgl@1371: + mgl@1371: + /* Notes that the relocation is relative to the location in the mgl@1371: + data section of the addend. The relocation function will mgl@1371: + subtract from the relocation value the address of the location mgl@1371: + being relocated. */ mgl@1371: + bfd_boolean pc_relative; mgl@1371: + mgl@1371: + /* The bit position of the reloc value in the destination. mgl@1371: + The relocated value is left shifted by this amount. */ mgl@1371: + unsigned int bitpos; mgl@1371: + mgl@1371: + /* What type of overflow error should be checked for when mgl@1371: + relocating. */ mgl@1371: + enum complain_overflow complain_on_overflow; mgl@1371: + mgl@1371: + /* If this field is non null, then the supplied function is mgl@1371: + called rather than the normal function. This allows really mgl@1371: + strange relocation methods to be accommodated (e.g., i960 callj mgl@1371: + instructions). */ mgl@1371: + bfd_reloc_status_type (*special_function) mgl@1371: + (bfd *, arelent *, struct bfd_symbol *, void *, asection *, mgl@1371: + bfd *, char **); mgl@1371: + mgl@1371: + /* The textual name of the relocation type. */ mgl@1371: + char *name; mgl@1371: + mgl@1371: + /* Some formats record a relocation addend in the section contents mgl@1371: + rather than with the relocation. For ELF formats this is the mgl@1371: + distinction between USE_REL and USE_RELA (though the code checks mgl@1371: + for USE_REL == 1/0). The value of this field is TRUE if the mgl@1371: + addend is recorded with the section contents; when performing a mgl@1371: + partial link (ld -r) the section contents (the data) will be mgl@1371: + modified. The value of this field is FALSE if addends are mgl@1371: + recorded with the relocation (in arelent.addend); when performing mgl@1371: + a partial link the relocation will be modified. mgl@1371: + All relocations for all ELF USE_RELA targets should set this field mgl@1371: + to FALSE (values of TRUE should be looked on with suspicion). mgl@1371: + However, the converse is not true: not all relocations of all ELF mgl@1371: + USE_REL targets set this field to TRUE. Why this is so is peculiar mgl@1371: + to each particular target. For relocs that aren't used in partial mgl@1371: + links (e.g. GOT stuff) it doesn't matter what this is set to. */ mgl@1371: + bfd_boolean partial_inplace; mgl@1371: + mgl@1371: + /* src_mask selects the part of the instruction (or data) to be used mgl@1371: + in the relocation sum. If the target relocations don't have an mgl@1371: + addend in the reloc, eg. ELF USE_REL, src_mask will normally equal mgl@1371: + dst_mask to extract the addend from the section contents. If mgl@1371: + relocations do have an addend in the reloc, eg. ELF USE_RELA, this mgl@1371: + field should be zero. Non-zero values for ELF USE_RELA targets are mgl@1371: + bogus as in those cases the value in the dst_mask part of the mgl@1371: + section contents should be treated as garbage. */ mgl@1371: + bfd_vma src_mask; mgl@1371: + mgl@1371: + /* dst_mask selects which parts of the instruction (or data) are mgl@1371: + replaced with a relocated value. */ mgl@1371: + bfd_vma dst_mask; mgl@1371: + mgl@1371: + /* When some formats create PC relative instructions, they leave mgl@1371: + the value of the pc of the place being relocated in the offset mgl@1371: + slot of the instruction, so that a PC relative relocation can mgl@1371: + be made just by adding in an ordinary offset (e.g., sun3 a.out). mgl@1371: + Some formats leave the displacement part of an instruction mgl@1371: + empty (e.g., m88k bcs); this flag signals the fact. */ mgl@1371: + bfd_boolean pcrel_offset; mgl@1371: +}; mgl@1371: + mgl@1371: +#define HOWTO(C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \ mgl@1371: + { (unsigned) C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC } mgl@1371: +#define NEWHOWTO(FUNCTION, NAME, SIZE, REL, IN) \ mgl@1371: + HOWTO (0, 0, SIZE, 0, REL, 0, complain_overflow_dont, FUNCTION, \ mgl@1371: + NAME, FALSE, 0, 0, IN) mgl@1371: + mgl@1371: +#define EMPTY_HOWTO(C) \ mgl@1371: + HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \ mgl@1371: + NULL, FALSE, 0, 0, FALSE) mgl@1371: + mgl@1371: +#define HOWTO_PREPARE(relocation, symbol) \ mgl@1371: + { \ mgl@1371: + if (symbol != NULL) \ mgl@1371: + { \ mgl@1371: + if (bfd_is_com_section (symbol->section)) \ mgl@1371: + { \ mgl@1371: + relocation = 0; \ mgl@1371: + } \ mgl@1371: + else \ mgl@1371: + { \ mgl@1371: + relocation = symbol->value; \ mgl@1371: + } \ mgl@1371: + } \ mgl@1371: + } mgl@1371: + mgl@1371: +unsigned int bfd_get_reloc_size (reloc_howto_type *); mgl@1371: + mgl@1371: +typedef struct relent_chain mgl@1371: +{ mgl@1371: + arelent relent; mgl@1371: + struct relent_chain *next; mgl@1371: +} mgl@1371: +arelent_chain; mgl@1371: + mgl@1371: +bfd_reloc_status_type bfd_check_overflow mgl@1371: + (enum complain_overflow how, mgl@1371: + unsigned int bitsize, mgl@1371: + unsigned int rightshift, mgl@1371: + unsigned int addrsize, mgl@1371: + bfd_vma relocation); mgl@1371: + mgl@1371: +bfd_reloc_status_type bfd_perform_relocation mgl@1371: + (bfd *abfd, mgl@1371: + arelent *reloc_entry, mgl@1371: + void *data, mgl@1371: + asection *input_section, mgl@1371: + bfd *output_bfd, mgl@1371: + char **error_message); mgl@1371: + mgl@1371: +bfd_reloc_status_type bfd_install_relocation mgl@1371: + (bfd *abfd, mgl@1371: + arelent *reloc_entry, mgl@1371: + void *data, bfd_vma data_start, mgl@1371: + asection *input_section, mgl@1371: + char **error_message); mgl@1371: + mgl@1371: +enum bfd_reloc_code_real { mgl@1371: + _dummy_first_bfd_reloc_code_real, mgl@1371: + mgl@1371: + mgl@1371: +/* Basic absolute relocations of N bits. */ mgl@1371: + BFD_RELOC_64, mgl@1371: + BFD_RELOC_32, mgl@1371: + BFD_RELOC_26, mgl@1371: + BFD_RELOC_24, mgl@1371: + BFD_RELOC_16, mgl@1371: + BFD_RELOC_14, mgl@1371: + BFD_RELOC_8, mgl@1371: + mgl@1371: +/* PC-relative relocations. Sometimes these are relative to the address mgl@1371: +of the relocation itself; sometimes they are relative to the start of mgl@1371: +the section containing the relocation. It depends on the specific target. mgl@1371: + mgl@1371: +The 24-bit relocation is used in some Intel 960 configurations. */ mgl@1371: + BFD_RELOC_64_PCREL, mgl@1371: + BFD_RELOC_32_PCREL, mgl@1371: + BFD_RELOC_24_PCREL, mgl@1371: + BFD_RELOC_16_PCREL, mgl@1371: + BFD_RELOC_12_PCREL, mgl@1371: + BFD_RELOC_8_PCREL, mgl@1371: + mgl@1371: +/* Section relative relocations. Some targets need this for DWARF2. */ mgl@1371: + BFD_RELOC_32_SECREL, mgl@1371: + mgl@1371: +/* For ELF. */ mgl@1371: + BFD_RELOC_32_GOT_PCREL, mgl@1371: + BFD_RELOC_16_GOT_PCREL, mgl@1371: + BFD_RELOC_8_GOT_PCREL, mgl@1371: + BFD_RELOC_32_GOTOFF, mgl@1371: + BFD_RELOC_16_GOTOFF, mgl@1371: + BFD_RELOC_LO16_GOTOFF, mgl@1371: + BFD_RELOC_HI16_GOTOFF, mgl@1371: + BFD_RELOC_HI16_S_GOTOFF, mgl@1371: + BFD_RELOC_8_GOTOFF, mgl@1371: + BFD_RELOC_64_PLT_PCREL, mgl@1371: + BFD_RELOC_32_PLT_PCREL, mgl@1371: + BFD_RELOC_24_PLT_PCREL, mgl@1371: + BFD_RELOC_16_PLT_PCREL, mgl@1371: + BFD_RELOC_8_PLT_PCREL, mgl@1371: + BFD_RELOC_64_PLTOFF, mgl@1371: + BFD_RELOC_32_PLTOFF, mgl@1371: + BFD_RELOC_16_PLTOFF, mgl@1371: + BFD_RELOC_LO16_PLTOFF, mgl@1371: + BFD_RELOC_HI16_PLTOFF, mgl@1371: + BFD_RELOC_HI16_S_PLTOFF, mgl@1371: + BFD_RELOC_8_PLTOFF, mgl@1371: + mgl@1371: +/* Relocations used by 68K ELF. */ mgl@1371: + BFD_RELOC_68K_GLOB_DAT, mgl@1371: + BFD_RELOC_68K_JMP_SLOT, mgl@1371: + BFD_RELOC_68K_RELATIVE, mgl@1371: + mgl@1371: +/* Linkage-table relative. */ mgl@1371: + BFD_RELOC_32_BASEREL, mgl@1371: + BFD_RELOC_16_BASEREL, mgl@1371: + BFD_RELOC_LO16_BASEREL, mgl@1371: + BFD_RELOC_HI16_BASEREL, mgl@1371: + BFD_RELOC_HI16_S_BASEREL, mgl@1371: + BFD_RELOC_8_BASEREL, mgl@1371: + BFD_RELOC_RVA, mgl@1371: + mgl@1371: +/* Absolute 8-bit relocation, but used to form an address like 0xFFnn. */ mgl@1371: + BFD_RELOC_8_FFnn, mgl@1371: + mgl@1371: +/* These PC-relative relocations are stored as word displacements -- mgl@1371: +i.e., byte displacements shifted right two bits. The 30-bit word mgl@1371: +displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the mgl@1371: +SPARC. (SPARC tools generally refer to this as <>.) The mgl@1371: +signed 16-bit displacement is used on the MIPS, and the 23-bit mgl@1371: +displacement is used on the Alpha. */ mgl@1371: + BFD_RELOC_32_PCREL_S2, mgl@1371: + BFD_RELOC_16_PCREL_S2, mgl@1371: + BFD_RELOC_23_PCREL_S2, mgl@1371: + mgl@1371: +/* High 22 bits and low 10 bits of 32-bit value, placed into lower bits of mgl@1371: +the target word. These are used on the SPARC. */ mgl@1371: + BFD_RELOC_HI22, mgl@1371: + BFD_RELOC_LO10, mgl@1371: + mgl@1371: +/* For systems that allocate a Global Pointer register, these are mgl@1371: +displacements off that register. These relocation types are mgl@1371: +handled specially, because the value the register will have is mgl@1371: +decided relatively late. */ mgl@1371: + BFD_RELOC_GPREL16, mgl@1371: + BFD_RELOC_GPREL32, mgl@1371: + mgl@1371: +/* Reloc types used for i960/b.out. */ mgl@1371: + BFD_RELOC_I960_CALLJ, mgl@1371: + mgl@1371: +/* SPARC ELF relocations. There is probably some overlap with other mgl@1371: +relocation types already defined. */ mgl@1371: + BFD_RELOC_NONE, mgl@1371: + BFD_RELOC_SPARC_WDISP22, mgl@1371: + BFD_RELOC_SPARC22, mgl@1371: + BFD_RELOC_SPARC13, mgl@1371: + BFD_RELOC_SPARC_GOT10, mgl@1371: + BFD_RELOC_SPARC_GOT13, mgl@1371: + BFD_RELOC_SPARC_GOT22, mgl@1371: + BFD_RELOC_SPARC_PC10, mgl@1371: + BFD_RELOC_SPARC_PC22, mgl@1371: + BFD_RELOC_SPARC_WPLT30, mgl@1371: + BFD_RELOC_SPARC_COPY, mgl@1371: + BFD_RELOC_SPARC_GLOB_DAT, mgl@1371: + BFD_RELOC_SPARC_JMP_SLOT, mgl@1371: + BFD_RELOC_SPARC_RELATIVE, mgl@1371: + BFD_RELOC_SPARC_UA16, mgl@1371: + BFD_RELOC_SPARC_UA32, mgl@1371: + BFD_RELOC_SPARC_UA64, mgl@1371: + mgl@1371: +/* I think these are specific to SPARC a.out (e.g., Sun 4). */ mgl@1371: + BFD_RELOC_SPARC_BASE13, mgl@1371: + BFD_RELOC_SPARC_BASE22, mgl@1371: + mgl@1371: +/* SPARC64 relocations */ mgl@1371: +#define BFD_RELOC_SPARC_64 BFD_RELOC_64 mgl@1371: + BFD_RELOC_SPARC_10, mgl@1371: + BFD_RELOC_SPARC_11, mgl@1371: + BFD_RELOC_SPARC_OLO10, mgl@1371: + BFD_RELOC_SPARC_HH22, mgl@1371: + BFD_RELOC_SPARC_HM10, mgl@1371: + BFD_RELOC_SPARC_LM22, mgl@1371: + BFD_RELOC_SPARC_PC_HH22, mgl@1371: + BFD_RELOC_SPARC_PC_HM10, mgl@1371: + BFD_RELOC_SPARC_PC_LM22, mgl@1371: + BFD_RELOC_SPARC_WDISP16, mgl@1371: + BFD_RELOC_SPARC_WDISP19, mgl@1371: + BFD_RELOC_SPARC_7, mgl@1371: + BFD_RELOC_SPARC_6, mgl@1371: + BFD_RELOC_SPARC_5, mgl@1371: +#define BFD_RELOC_SPARC_DISP64 BFD_RELOC_64_PCREL mgl@1371: + BFD_RELOC_SPARC_PLT32, mgl@1371: + BFD_RELOC_SPARC_PLT64, mgl@1371: + BFD_RELOC_SPARC_HIX22, mgl@1371: + BFD_RELOC_SPARC_LOX10, mgl@1371: + BFD_RELOC_SPARC_H44, mgl@1371: + BFD_RELOC_SPARC_M44, mgl@1371: + BFD_RELOC_SPARC_L44, mgl@1371: + BFD_RELOC_SPARC_REGISTER, mgl@1371: + mgl@1371: +/* SPARC little endian relocation */ mgl@1371: + BFD_RELOC_SPARC_REV32, mgl@1371: + mgl@1371: +/* SPARC TLS relocations */ mgl@1371: + BFD_RELOC_SPARC_TLS_GD_HI22, mgl@1371: + BFD_RELOC_SPARC_TLS_GD_LO10, mgl@1371: + BFD_RELOC_SPARC_TLS_GD_ADD, mgl@1371: + BFD_RELOC_SPARC_TLS_GD_CALL, mgl@1371: + BFD_RELOC_SPARC_TLS_LDM_HI22, mgl@1371: + BFD_RELOC_SPARC_TLS_LDM_LO10, mgl@1371: + BFD_RELOC_SPARC_TLS_LDM_ADD, mgl@1371: + BFD_RELOC_SPARC_TLS_LDM_CALL, mgl@1371: + BFD_RELOC_SPARC_TLS_LDO_HIX22, mgl@1371: + BFD_RELOC_SPARC_TLS_LDO_LOX10, mgl@1371: + BFD_RELOC_SPARC_TLS_LDO_ADD, mgl@1371: + BFD_RELOC_SPARC_TLS_IE_HI22, mgl@1371: + BFD_RELOC_SPARC_TLS_IE_LO10, mgl@1371: + BFD_RELOC_SPARC_TLS_IE_LD, mgl@1371: + BFD_RELOC_SPARC_TLS_IE_LDX, mgl@1371: + BFD_RELOC_SPARC_TLS_IE_ADD, mgl@1371: + BFD_RELOC_SPARC_TLS_LE_HIX22, mgl@1371: + BFD_RELOC_SPARC_TLS_LE_LOX10, mgl@1371: + BFD_RELOC_SPARC_TLS_DTPMOD32, mgl@1371: + BFD_RELOC_SPARC_TLS_DTPMOD64, mgl@1371: + BFD_RELOC_SPARC_TLS_DTPOFF32, mgl@1371: + BFD_RELOC_SPARC_TLS_DTPOFF64, mgl@1371: + BFD_RELOC_SPARC_TLS_TPOFF32, mgl@1371: + BFD_RELOC_SPARC_TLS_TPOFF64, mgl@1371: + mgl@1371: +/* SPU Relocations. */ mgl@1371: + BFD_RELOC_SPU_IMM7, mgl@1371: + BFD_RELOC_SPU_IMM8, mgl@1371: + BFD_RELOC_SPU_IMM10, mgl@1371: + BFD_RELOC_SPU_IMM10W, mgl@1371: + BFD_RELOC_SPU_IMM16, mgl@1371: + BFD_RELOC_SPU_IMM16W, mgl@1371: + BFD_RELOC_SPU_IMM18, mgl@1371: + BFD_RELOC_SPU_PCREL9a, mgl@1371: + BFD_RELOC_SPU_PCREL9b, mgl@1371: + BFD_RELOC_SPU_PCREL16, mgl@1371: + BFD_RELOC_SPU_LO16, mgl@1371: + BFD_RELOC_SPU_HI16, mgl@1371: + BFD_RELOC_SPU_PPU32, mgl@1371: + BFD_RELOC_SPU_PPU64, mgl@1371: + mgl@1371: +/* Alpha ECOFF and ELF relocations. Some of these treat the symbol or mgl@1371: +"addend" in some special way. mgl@1371: +For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when mgl@1371: +writing; when reading, it will be the absolute section symbol. The mgl@1371: +addend is the displacement in bytes of the "lda" instruction from mgl@1371: +the "ldah" instruction (which is at the address of this reloc). */ mgl@1371: + BFD_RELOC_ALPHA_GPDISP_HI16, mgl@1371: + mgl@1371: +/* For GPDISP_LO16 ("ignore") relocations, the symbol is handled as mgl@1371: +with GPDISP_HI16 relocs. The addend is ignored when writing the mgl@1371: +relocations out, and is filled in with the file's GP value on mgl@1371: +reading, for convenience. */ mgl@1371: + BFD_RELOC_ALPHA_GPDISP_LO16, mgl@1371: + mgl@1371: +/* The ELF GPDISP relocation is exactly the same as the GPDISP_HI16 mgl@1371: +relocation except that there is no accompanying GPDISP_LO16 mgl@1371: +relocation. */ mgl@1371: + BFD_RELOC_ALPHA_GPDISP, mgl@1371: + mgl@1371: +/* The Alpha LITERAL/LITUSE relocs are produced by a symbol reference; mgl@1371: +the assembler turns it into a LDQ instruction to load the address of mgl@1371: +the symbol, and then fills in a register in the real instruction. mgl@1371: + mgl@1371: +The LITERAL reloc, at the LDQ instruction, refers to the .lita mgl@1371: +section symbol. The addend is ignored when writing, but is filled mgl@1371: +in with the file's GP value on reading, for convenience, as with the mgl@1371: +GPDISP_LO16 reloc. mgl@1371: + mgl@1371: +The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16. mgl@1371: +It should refer to the symbol to be referenced, as with 16_GOTOFF, mgl@1371: +but it generates output not based on the position within the .got mgl@1371: +section, but relative to the GP value chosen for the file during the mgl@1371: +final link stage. mgl@1371: + mgl@1371: +The LITUSE reloc, on the instruction using the loaded address, gives mgl@1371: +information to the linker that it might be able to use to optimize mgl@1371: +away some literal section references. The symbol is ignored (read mgl@1371: +as the absolute section symbol), and the "addend" indicates the type mgl@1371: +of instruction using the register: mgl@1371: +1 - "memory" fmt insn mgl@1371: +2 - byte-manipulation (byte offset reg) mgl@1371: +3 - jsr (target of branch) */ mgl@1371: + BFD_RELOC_ALPHA_LITERAL, mgl@1371: + BFD_RELOC_ALPHA_ELF_LITERAL, mgl@1371: + BFD_RELOC_ALPHA_LITUSE, mgl@1371: + mgl@1371: +/* The HINT relocation indicates a value that should be filled into the mgl@1371: +"hint" field of a jmp/jsr/ret instruction, for possible branch- mgl@1371: +prediction logic which may be provided on some processors. */ mgl@1371: + BFD_RELOC_ALPHA_HINT, mgl@1371: + mgl@1371: +/* The LINKAGE relocation outputs a linkage pair in the object file, mgl@1371: +which is filled by the linker. */ mgl@1371: + BFD_RELOC_ALPHA_LINKAGE, mgl@1371: + mgl@1371: +/* The CODEADDR relocation outputs a STO_CA in the object file, mgl@1371: +which is filled by the linker. */ mgl@1371: + BFD_RELOC_ALPHA_CODEADDR, mgl@1371: + mgl@1371: +/* The GPREL_HI/LO relocations together form a 32-bit offset from the mgl@1371: +GP register. */ mgl@1371: + BFD_RELOC_ALPHA_GPREL_HI16, mgl@1371: + BFD_RELOC_ALPHA_GPREL_LO16, mgl@1371: + mgl@1371: +/* Like BFD_RELOC_23_PCREL_S2, except that the source and target must mgl@1371: +share a common GP, and the target address is adjusted for mgl@1371: +STO_ALPHA_STD_GPLOAD. */ mgl@1371: + BFD_RELOC_ALPHA_BRSGP, mgl@1371: + mgl@1371: +/* Alpha thread-local storage relocations. */ mgl@1371: + BFD_RELOC_ALPHA_TLSGD, mgl@1371: + BFD_RELOC_ALPHA_TLSLDM, mgl@1371: + BFD_RELOC_ALPHA_DTPMOD64, mgl@1371: + BFD_RELOC_ALPHA_GOTDTPREL16, mgl@1371: + BFD_RELOC_ALPHA_DTPREL64, mgl@1371: + BFD_RELOC_ALPHA_DTPREL_HI16, mgl@1371: + BFD_RELOC_ALPHA_DTPREL_LO16, mgl@1371: + BFD_RELOC_ALPHA_DTPREL16, mgl@1371: + BFD_RELOC_ALPHA_GOTTPREL16, mgl@1371: + BFD_RELOC_ALPHA_TPREL64, mgl@1371: + BFD_RELOC_ALPHA_TPREL_HI16, mgl@1371: + BFD_RELOC_ALPHA_TPREL_LO16, mgl@1371: + BFD_RELOC_ALPHA_TPREL16, mgl@1371: + mgl@1371: +/* Bits 27..2 of the relocation address shifted right 2 bits; mgl@1371: +simple reloc otherwise. */ mgl@1371: + BFD_RELOC_MIPS_JMP, mgl@1371: + mgl@1371: +/* The MIPS16 jump instruction. */ mgl@1371: + BFD_RELOC_MIPS16_JMP, mgl@1371: + mgl@1371: +/* MIPS16 GP relative reloc. */ mgl@1371: + BFD_RELOC_MIPS16_GPREL, mgl@1371: + mgl@1371: +/* High 16 bits of 32-bit value; simple reloc. */ mgl@1371: + BFD_RELOC_HI16, mgl@1371: + mgl@1371: +/* High 16 bits of 32-bit value but the low 16 bits will be sign mgl@1371: +extended and added to form the final result. If the low 16 mgl@1371: +bits form a negative number, we need to add one to the high value mgl@1371: +to compensate for the borrow when the low bits are added. */ mgl@1371: + BFD_RELOC_HI16_S, mgl@1371: + mgl@1371: +/* Low 16 bits. */ mgl@1371: + BFD_RELOC_LO16, mgl@1371: + mgl@1371: +/* High 16 bits of 32-bit pc-relative value */ mgl@1371: + BFD_RELOC_HI16_PCREL, mgl@1371: + mgl@1371: +/* High 16 bits of 32-bit pc-relative value, adjusted */ mgl@1371: + BFD_RELOC_HI16_S_PCREL, mgl@1371: + mgl@1371: +/* Low 16 bits of pc-relative value */ mgl@1371: + BFD_RELOC_LO16_PCREL, mgl@1371: + mgl@1371: +/* MIPS16 high 16 bits of 32-bit value. */ mgl@1371: + BFD_RELOC_MIPS16_HI16, mgl@1371: + mgl@1371: +/* MIPS16 high 16 bits of 32-bit value but the low 16 bits will be sign mgl@1371: +extended and added to form the final result. If the low 16 mgl@1371: +bits form a negative number, we need to add one to the high value mgl@1371: +to compensate for the borrow when the low bits are added. */ mgl@1371: + BFD_RELOC_MIPS16_HI16_S, mgl@1371: + mgl@1371: +/* MIPS16 low 16 bits. */ mgl@1371: + BFD_RELOC_MIPS16_LO16, mgl@1371: + mgl@1371: +/* Relocation against a MIPS literal section. */ mgl@1371: + BFD_RELOC_MIPS_LITERAL, mgl@1371: + mgl@1371: +/* MIPS ELF relocations. */ mgl@1371: + BFD_RELOC_MIPS_GOT16, mgl@1371: + BFD_RELOC_MIPS_CALL16, mgl@1371: + BFD_RELOC_MIPS_GOT_HI16, mgl@1371: + BFD_RELOC_MIPS_GOT_LO16, mgl@1371: + BFD_RELOC_MIPS_CALL_HI16, mgl@1371: + BFD_RELOC_MIPS_CALL_LO16, mgl@1371: + BFD_RELOC_MIPS_SUB, mgl@1371: + BFD_RELOC_MIPS_GOT_PAGE, mgl@1371: + BFD_RELOC_MIPS_GOT_OFST, mgl@1371: + BFD_RELOC_MIPS_GOT_DISP, mgl@1371: + BFD_RELOC_MIPS_SHIFT5, mgl@1371: + BFD_RELOC_MIPS_SHIFT6, mgl@1371: + BFD_RELOC_MIPS_INSERT_A, mgl@1371: + BFD_RELOC_MIPS_INSERT_B, mgl@1371: + BFD_RELOC_MIPS_DELETE, mgl@1371: + BFD_RELOC_MIPS_HIGHEST, mgl@1371: + BFD_RELOC_MIPS_HIGHER, mgl@1371: + BFD_RELOC_MIPS_SCN_DISP, mgl@1371: + BFD_RELOC_MIPS_REL16, mgl@1371: + BFD_RELOC_MIPS_RELGOT, mgl@1371: + BFD_RELOC_MIPS_JALR, mgl@1371: + BFD_RELOC_MIPS_TLS_DTPMOD32, mgl@1371: + BFD_RELOC_MIPS_TLS_DTPREL32, mgl@1371: + BFD_RELOC_MIPS_TLS_DTPMOD64, mgl@1371: + BFD_RELOC_MIPS_TLS_DTPREL64, mgl@1371: + BFD_RELOC_MIPS_TLS_GD, mgl@1371: + BFD_RELOC_MIPS_TLS_LDM, mgl@1371: + BFD_RELOC_MIPS_TLS_DTPREL_HI16, mgl@1371: + BFD_RELOC_MIPS_TLS_DTPREL_LO16, mgl@1371: + BFD_RELOC_MIPS_TLS_GOTTPREL, mgl@1371: + BFD_RELOC_MIPS_TLS_TPREL32, mgl@1371: + BFD_RELOC_MIPS_TLS_TPREL64, mgl@1371: + BFD_RELOC_MIPS_TLS_TPREL_HI16, mgl@1371: + BFD_RELOC_MIPS_TLS_TPREL_LO16, mgl@1371: + mgl@1371: + mgl@1371: +/* MIPS ELF relocations (VxWorks extensions). */ mgl@1371: + BFD_RELOC_MIPS_COPY, mgl@1371: + BFD_RELOC_MIPS_JUMP_SLOT, mgl@1371: + mgl@1371: + mgl@1371: +/* Fujitsu Frv Relocations. */ mgl@1371: + BFD_RELOC_FRV_LABEL16, mgl@1371: + BFD_RELOC_FRV_LABEL24, mgl@1371: + BFD_RELOC_FRV_LO16, mgl@1371: + BFD_RELOC_FRV_HI16, mgl@1371: + BFD_RELOC_FRV_GPREL12, mgl@1371: + BFD_RELOC_FRV_GPRELU12, mgl@1371: + BFD_RELOC_FRV_GPREL32, mgl@1371: + BFD_RELOC_FRV_GPRELHI, mgl@1371: + BFD_RELOC_FRV_GPRELLO, mgl@1371: + BFD_RELOC_FRV_GOT12, mgl@1371: + BFD_RELOC_FRV_GOTHI, mgl@1371: + BFD_RELOC_FRV_GOTLO, mgl@1371: + BFD_RELOC_FRV_FUNCDESC, mgl@1371: + BFD_RELOC_FRV_FUNCDESC_GOT12, mgl@1371: + BFD_RELOC_FRV_FUNCDESC_GOTHI, mgl@1371: + BFD_RELOC_FRV_FUNCDESC_GOTLO, mgl@1371: + BFD_RELOC_FRV_FUNCDESC_VALUE, mgl@1371: + BFD_RELOC_FRV_FUNCDESC_GOTOFF12, mgl@1371: + BFD_RELOC_FRV_FUNCDESC_GOTOFFHI, mgl@1371: + BFD_RELOC_FRV_FUNCDESC_GOTOFFLO, mgl@1371: + BFD_RELOC_FRV_GOTOFF12, mgl@1371: + BFD_RELOC_FRV_GOTOFFHI, mgl@1371: + BFD_RELOC_FRV_GOTOFFLO, mgl@1371: + BFD_RELOC_FRV_GETTLSOFF, mgl@1371: + BFD_RELOC_FRV_TLSDESC_VALUE, mgl@1371: + BFD_RELOC_FRV_GOTTLSDESC12, mgl@1371: + BFD_RELOC_FRV_GOTTLSDESCHI, mgl@1371: + BFD_RELOC_FRV_GOTTLSDESCLO, mgl@1371: + BFD_RELOC_FRV_TLSMOFF12, mgl@1371: + BFD_RELOC_FRV_TLSMOFFHI, mgl@1371: + BFD_RELOC_FRV_TLSMOFFLO, mgl@1371: + BFD_RELOC_FRV_GOTTLSOFF12, mgl@1371: + BFD_RELOC_FRV_GOTTLSOFFHI, mgl@1371: + BFD_RELOC_FRV_GOTTLSOFFLO, mgl@1371: + BFD_RELOC_FRV_TLSOFF, mgl@1371: + BFD_RELOC_FRV_TLSDESC_RELAX, mgl@1371: + BFD_RELOC_FRV_GETTLSOFF_RELAX, mgl@1371: + BFD_RELOC_FRV_TLSOFF_RELAX, mgl@1371: + BFD_RELOC_FRV_TLSMOFF, mgl@1371: + mgl@1371: + mgl@1371: +/* This is a 24bit GOT-relative reloc for the mn10300. */ mgl@1371: + BFD_RELOC_MN10300_GOTOFF24, mgl@1371: + mgl@1371: +/* This is a 32bit GOT-relative reloc for the mn10300, offset by two bytes mgl@1371: +in the instruction. */ mgl@1371: + BFD_RELOC_MN10300_GOT32, mgl@1371: + mgl@1371: +/* This is a 24bit GOT-relative reloc for the mn10300, offset by two bytes mgl@1371: +in the instruction. */ mgl@1371: + BFD_RELOC_MN10300_GOT24, mgl@1371: + mgl@1371: +/* This is a 16bit GOT-relative reloc for the mn10300, offset by two bytes mgl@1371: +in the instruction. */ mgl@1371: + BFD_RELOC_MN10300_GOT16, mgl@1371: + mgl@1371: +/* Copy symbol at runtime. */ mgl@1371: + BFD_RELOC_MN10300_COPY, mgl@1371: + mgl@1371: +/* Create GOT entry. */ mgl@1371: + BFD_RELOC_MN10300_GLOB_DAT, mgl@1371: + mgl@1371: +/* Create PLT entry. */ mgl@1371: + BFD_RELOC_MN10300_JMP_SLOT, mgl@1371: + mgl@1371: +/* Adjust by program base. */ mgl@1371: + BFD_RELOC_MN10300_RELATIVE, mgl@1371: + mgl@1371: + mgl@1371: +/* i386/elf relocations */ mgl@1371: + BFD_RELOC_386_GOT32, mgl@1371: + BFD_RELOC_386_PLT32, mgl@1371: + BFD_RELOC_386_COPY, mgl@1371: + BFD_RELOC_386_GLOB_DAT, mgl@1371: + BFD_RELOC_386_JUMP_SLOT, mgl@1371: + BFD_RELOC_386_RELATIVE, mgl@1371: + BFD_RELOC_386_GOTOFF, mgl@1371: + BFD_RELOC_386_GOTPC, mgl@1371: + BFD_RELOC_386_TLS_TPOFF, mgl@1371: + BFD_RELOC_386_TLS_IE, mgl@1371: + BFD_RELOC_386_TLS_GOTIE, mgl@1371: + BFD_RELOC_386_TLS_LE, mgl@1371: + BFD_RELOC_386_TLS_GD, mgl@1371: + BFD_RELOC_386_TLS_LDM, mgl@1371: + BFD_RELOC_386_TLS_LDO_32, mgl@1371: + BFD_RELOC_386_TLS_IE_32, mgl@1371: + BFD_RELOC_386_TLS_LE_32, mgl@1371: + BFD_RELOC_386_TLS_DTPMOD32, mgl@1371: + BFD_RELOC_386_TLS_DTPOFF32, mgl@1371: + BFD_RELOC_386_TLS_TPOFF32, mgl@1371: + BFD_RELOC_386_TLS_GOTDESC, mgl@1371: + BFD_RELOC_386_TLS_DESC_CALL, mgl@1371: + BFD_RELOC_386_TLS_DESC, mgl@1371: + mgl@1371: +/* x86-64/elf relocations */ mgl@1371: + BFD_RELOC_X86_64_GOT32, mgl@1371: + BFD_RELOC_X86_64_PLT32, mgl@1371: + BFD_RELOC_X86_64_COPY, mgl@1371: + BFD_RELOC_X86_64_GLOB_DAT, mgl@1371: + BFD_RELOC_X86_64_JUMP_SLOT, mgl@1371: + BFD_RELOC_X86_64_RELATIVE, mgl@1371: + BFD_RELOC_X86_64_GOTPCREL, mgl@1371: + BFD_RELOC_X86_64_32S, mgl@1371: + BFD_RELOC_X86_64_DTPMOD64, mgl@1371: + BFD_RELOC_X86_64_DTPOFF64, mgl@1371: + BFD_RELOC_X86_64_TPOFF64, mgl@1371: + BFD_RELOC_X86_64_TLSGD, mgl@1371: + BFD_RELOC_X86_64_TLSLD, mgl@1371: + BFD_RELOC_X86_64_DTPOFF32, mgl@1371: + BFD_RELOC_X86_64_GOTTPOFF, mgl@1371: + BFD_RELOC_X86_64_TPOFF32, mgl@1371: + BFD_RELOC_X86_64_GOTOFF64, mgl@1371: + BFD_RELOC_X86_64_GOTPC32, mgl@1371: + BFD_RELOC_X86_64_GOT64, mgl@1371: + BFD_RELOC_X86_64_GOTPCREL64, mgl@1371: + BFD_RELOC_X86_64_GOTPC64, mgl@1371: + BFD_RELOC_X86_64_GOTPLT64, mgl@1371: + BFD_RELOC_X86_64_PLTOFF64, mgl@1371: + BFD_RELOC_X86_64_GOTPC32_TLSDESC, mgl@1371: + BFD_RELOC_X86_64_TLSDESC_CALL, mgl@1371: + BFD_RELOC_X86_64_TLSDESC, mgl@1371: + mgl@1371: +/* ns32k relocations */ mgl@1371: + BFD_RELOC_NS32K_IMM_8, mgl@1371: + BFD_RELOC_NS32K_IMM_16, mgl@1371: + BFD_RELOC_NS32K_IMM_32, mgl@1371: + BFD_RELOC_NS32K_IMM_8_PCREL, mgl@1371: + BFD_RELOC_NS32K_IMM_16_PCREL, mgl@1371: + BFD_RELOC_NS32K_IMM_32_PCREL, mgl@1371: + BFD_RELOC_NS32K_DISP_8, mgl@1371: + BFD_RELOC_NS32K_DISP_16, mgl@1371: + BFD_RELOC_NS32K_DISP_32, mgl@1371: + BFD_RELOC_NS32K_DISP_8_PCREL, mgl@1371: + BFD_RELOC_NS32K_DISP_16_PCREL, mgl@1371: + BFD_RELOC_NS32K_DISP_32_PCREL, mgl@1371: + mgl@1371: +/* PDP11 relocations */ mgl@1371: + BFD_RELOC_PDP11_DISP_8_PCREL, mgl@1371: + BFD_RELOC_PDP11_DISP_6_PCREL, mgl@1371: + mgl@1371: +/* Picojava relocs. Not all of these appear in object files. */ mgl@1371: + BFD_RELOC_PJ_CODE_HI16, mgl@1371: + BFD_RELOC_PJ_CODE_LO16, mgl@1371: + BFD_RELOC_PJ_CODE_DIR16, mgl@1371: + BFD_RELOC_PJ_CODE_DIR32, mgl@1371: + BFD_RELOC_PJ_CODE_REL16, mgl@1371: + BFD_RELOC_PJ_CODE_REL32, mgl@1371: + mgl@1371: +/* Power(rs6000) and PowerPC relocations. */ mgl@1371: + BFD_RELOC_PPC_B26, mgl@1371: + BFD_RELOC_PPC_BA26, mgl@1371: + BFD_RELOC_PPC_TOC16, mgl@1371: + BFD_RELOC_PPC_B16, mgl@1371: + BFD_RELOC_PPC_B16_BRTAKEN, mgl@1371: + BFD_RELOC_PPC_B16_BRNTAKEN, mgl@1371: + BFD_RELOC_PPC_BA16, mgl@1371: + BFD_RELOC_PPC_BA16_BRTAKEN, mgl@1371: + BFD_RELOC_PPC_BA16_BRNTAKEN, mgl@1371: + BFD_RELOC_PPC_COPY, mgl@1371: + BFD_RELOC_PPC_GLOB_DAT, mgl@1371: + BFD_RELOC_PPC_JMP_SLOT, mgl@1371: + BFD_RELOC_PPC_RELATIVE, mgl@1371: + BFD_RELOC_PPC_LOCAL24PC, mgl@1371: + BFD_RELOC_PPC_EMB_NADDR32, mgl@1371: + BFD_RELOC_PPC_EMB_NADDR16, mgl@1371: + BFD_RELOC_PPC_EMB_NADDR16_LO, mgl@1371: + BFD_RELOC_PPC_EMB_NADDR16_HI, mgl@1371: + BFD_RELOC_PPC_EMB_NADDR16_HA, mgl@1371: + BFD_RELOC_PPC_EMB_SDAI16, mgl@1371: + BFD_RELOC_PPC_EMB_SDA2I16, mgl@1371: + BFD_RELOC_PPC_EMB_SDA2REL, mgl@1371: + BFD_RELOC_PPC_EMB_SDA21, mgl@1371: + BFD_RELOC_PPC_EMB_MRKREF, mgl@1371: + BFD_RELOC_PPC_EMB_RELSEC16, mgl@1371: + BFD_RELOC_PPC_EMB_RELST_LO, mgl@1371: + BFD_RELOC_PPC_EMB_RELST_HI, mgl@1371: + BFD_RELOC_PPC_EMB_RELST_HA, mgl@1371: + BFD_RELOC_PPC_EMB_BIT_FLD, mgl@1371: + BFD_RELOC_PPC_EMB_RELSDA, mgl@1371: + BFD_RELOC_PPC64_HIGHER, mgl@1371: + BFD_RELOC_PPC64_HIGHER_S, mgl@1371: + BFD_RELOC_PPC64_HIGHEST, mgl@1371: + BFD_RELOC_PPC64_HIGHEST_S, mgl@1371: + BFD_RELOC_PPC64_TOC16_LO, mgl@1371: + BFD_RELOC_PPC64_TOC16_HI, mgl@1371: + BFD_RELOC_PPC64_TOC16_HA, mgl@1371: + BFD_RELOC_PPC64_TOC, mgl@1371: + BFD_RELOC_PPC64_PLTGOT16, mgl@1371: + BFD_RELOC_PPC64_PLTGOT16_LO, mgl@1371: + BFD_RELOC_PPC64_PLTGOT16_HI, mgl@1371: + BFD_RELOC_PPC64_PLTGOT16_HA, mgl@1371: + BFD_RELOC_PPC64_ADDR16_DS, mgl@1371: + BFD_RELOC_PPC64_ADDR16_LO_DS, mgl@1371: + BFD_RELOC_PPC64_GOT16_DS, mgl@1371: + BFD_RELOC_PPC64_GOT16_LO_DS, mgl@1371: + BFD_RELOC_PPC64_PLT16_LO_DS, mgl@1371: + BFD_RELOC_PPC64_SECTOFF_DS, mgl@1371: + BFD_RELOC_PPC64_SECTOFF_LO_DS, mgl@1371: + BFD_RELOC_PPC64_TOC16_DS, mgl@1371: + BFD_RELOC_PPC64_TOC16_LO_DS, mgl@1371: + BFD_RELOC_PPC64_PLTGOT16_DS, mgl@1371: + BFD_RELOC_PPC64_PLTGOT16_LO_DS, mgl@1371: + mgl@1371: +/* PowerPC and PowerPC64 thread-local storage relocations. */ mgl@1371: + BFD_RELOC_PPC_TLS, mgl@1371: + BFD_RELOC_PPC_DTPMOD, mgl@1371: + BFD_RELOC_PPC_TPREL16, mgl@1371: + BFD_RELOC_PPC_TPREL16_LO, mgl@1371: + BFD_RELOC_PPC_TPREL16_HI, mgl@1371: + BFD_RELOC_PPC_TPREL16_HA, mgl@1371: + BFD_RELOC_PPC_TPREL, mgl@1371: + BFD_RELOC_PPC_DTPREL16, mgl@1371: + BFD_RELOC_PPC_DTPREL16_LO, mgl@1371: + BFD_RELOC_PPC_DTPREL16_HI, mgl@1371: + BFD_RELOC_PPC_DTPREL16_HA, mgl@1371: + BFD_RELOC_PPC_DTPREL, mgl@1371: + BFD_RELOC_PPC_GOT_TLSGD16, mgl@1371: + BFD_RELOC_PPC_GOT_TLSGD16_LO, mgl@1371: + BFD_RELOC_PPC_GOT_TLSGD16_HI, mgl@1371: + BFD_RELOC_PPC_GOT_TLSGD16_HA, mgl@1371: + BFD_RELOC_PPC_GOT_TLSLD16, mgl@1371: + BFD_RELOC_PPC_GOT_TLSLD16_LO, mgl@1371: + BFD_RELOC_PPC_GOT_TLSLD16_HI, mgl@1371: + BFD_RELOC_PPC_GOT_TLSLD16_HA, mgl@1371: + BFD_RELOC_PPC_GOT_TPREL16, mgl@1371: + BFD_RELOC_PPC_GOT_TPREL16_LO, mgl@1371: + BFD_RELOC_PPC_GOT_TPREL16_HI, mgl@1371: + BFD_RELOC_PPC_GOT_TPREL16_HA, mgl@1371: + BFD_RELOC_PPC_GOT_DTPREL16, mgl@1371: + BFD_RELOC_PPC_GOT_DTPREL16_LO, mgl@1371: + BFD_RELOC_PPC_GOT_DTPREL16_HI, mgl@1371: + BFD_RELOC_PPC_GOT_DTPREL16_HA, mgl@1371: + BFD_RELOC_PPC64_TPREL16_DS, mgl@1371: + BFD_RELOC_PPC64_TPREL16_LO_DS, mgl@1371: + BFD_RELOC_PPC64_TPREL16_HIGHER, mgl@1371: + BFD_RELOC_PPC64_TPREL16_HIGHERA, mgl@1371: + BFD_RELOC_PPC64_TPREL16_HIGHEST, mgl@1371: + BFD_RELOC_PPC64_TPREL16_HIGHESTA, mgl@1371: + BFD_RELOC_PPC64_DTPREL16_DS, mgl@1371: + BFD_RELOC_PPC64_DTPREL16_LO_DS, mgl@1371: + BFD_RELOC_PPC64_DTPREL16_HIGHER, mgl@1371: + BFD_RELOC_PPC64_DTPREL16_HIGHERA, mgl@1371: + BFD_RELOC_PPC64_DTPREL16_HIGHEST, mgl@1371: + BFD_RELOC_PPC64_DTPREL16_HIGHESTA, mgl@1371: + mgl@1371: +/* IBM 370/390 relocations */ mgl@1371: + BFD_RELOC_I370_D12, mgl@1371: + mgl@1371: +/* The type of reloc used to build a constructor table - at the moment mgl@1371: +probably a 32 bit wide absolute relocation, but the target can choose. mgl@1371: +It generally does map to one of the other relocation types. */ mgl@1371: + BFD_RELOC_CTOR, mgl@1371: + mgl@1371: +/* ARM 26 bit pc-relative branch. The lowest two bits must be zero and are mgl@1371: +not stored in the instruction. */ mgl@1371: + BFD_RELOC_ARM_PCREL_BRANCH, mgl@1371: + mgl@1371: +/* ARM 26 bit pc-relative branch. The lowest bit must be zero and is mgl@1371: +not stored in the instruction. The 2nd lowest bit comes from a 1 bit mgl@1371: +field in the instruction. */ mgl@1371: + BFD_RELOC_ARM_PCREL_BLX, mgl@1371: + mgl@1371: +/* Thumb 22 bit pc-relative branch. The lowest bit must be zero and is mgl@1371: +not stored in the instruction. The 2nd lowest bit comes from a 1 bit mgl@1371: +field in the instruction. */ mgl@1371: + BFD_RELOC_THUMB_PCREL_BLX, mgl@1371: + mgl@1371: +/* ARM 26-bit pc-relative branch for an unconditional BL or BLX instruction. */ mgl@1371: + BFD_RELOC_ARM_PCREL_CALL, mgl@1371: + mgl@1371: +/* ARM 26-bit pc-relative branch for B or conditional BL instruction. */ mgl@1371: + BFD_RELOC_ARM_PCREL_JUMP, mgl@1371: + mgl@1371: +/* Thumb 7-, 9-, 12-, 20-, 23-, and 25-bit pc-relative branches. mgl@1371: +The lowest bit must be zero and is not stored in the instruction. mgl@1371: +Note that the corresponding ELF R_ARM_THM_JUMPnn constant has an mgl@1371: +"nn" one smaller in all cases. Note further that BRANCH23 mgl@1371: +corresponds to R_ARM_THM_CALL. */ mgl@1371: + BFD_RELOC_THUMB_PCREL_BRANCH7, mgl@1371: + BFD_RELOC_THUMB_PCREL_BRANCH9, mgl@1371: + BFD_RELOC_THUMB_PCREL_BRANCH12, mgl@1371: + BFD_RELOC_THUMB_PCREL_BRANCH20, mgl@1371: + BFD_RELOC_THUMB_PCREL_BRANCH23, mgl@1371: + BFD_RELOC_THUMB_PCREL_BRANCH25, mgl@1371: + mgl@1371: +/* 12-bit immediate offset, used in ARM-format ldr and str instructions. */ mgl@1371: + BFD_RELOC_ARM_OFFSET_IMM, mgl@1371: + mgl@1371: +/* 5-bit immediate offset, used in Thumb-format ldr and str instructions. */ mgl@1371: + BFD_RELOC_ARM_THUMB_OFFSET, mgl@1371: + mgl@1371: +/* Pc-relative or absolute relocation depending on target. Used for mgl@1371: +entries in .init_array sections. */ mgl@1371: + BFD_RELOC_ARM_TARGET1, mgl@1371: + mgl@1371: +/* Read-only segment base relative address. */ mgl@1371: + BFD_RELOC_ARM_ROSEGREL32, mgl@1371: + mgl@1371: +/* Data segment base relative address. */ mgl@1371: + BFD_RELOC_ARM_SBREL32, mgl@1371: + mgl@1371: +/* This reloc is used for references to RTTI data from exception handling mgl@1371: +tables. The actual definition depends on the target. It may be a mgl@1371: +pc-relative or some form of GOT-indirect relocation. */ mgl@1371: + BFD_RELOC_ARM_TARGET2, mgl@1371: + mgl@1371: +/* 31-bit PC relative address. */ mgl@1371: + BFD_RELOC_ARM_PREL31, mgl@1371: + mgl@1371: +/* Low and High halfword relocations for MOVW and MOVT instructions. */ mgl@1371: + BFD_RELOC_ARM_MOVW, mgl@1371: + BFD_RELOC_ARM_MOVT, mgl@1371: + BFD_RELOC_ARM_MOVW_PCREL, mgl@1371: + BFD_RELOC_ARM_MOVT_PCREL, mgl@1371: + BFD_RELOC_ARM_THUMB_MOVW, mgl@1371: + BFD_RELOC_ARM_THUMB_MOVT, mgl@1371: + BFD_RELOC_ARM_THUMB_MOVW_PCREL, mgl@1371: + BFD_RELOC_ARM_THUMB_MOVT_PCREL, mgl@1371: + mgl@1371: +/* Relocations for setting up GOTs and PLTs for shared libraries. */ mgl@1371: + BFD_RELOC_ARM_JUMP_SLOT, mgl@1371: + BFD_RELOC_ARM_GLOB_DAT, mgl@1371: + BFD_RELOC_ARM_GOT32, mgl@1371: + BFD_RELOC_ARM_PLT32, mgl@1371: + BFD_RELOC_ARM_RELATIVE, mgl@1371: + BFD_RELOC_ARM_GOTOFF, mgl@1371: + BFD_RELOC_ARM_GOTPC, mgl@1371: + mgl@1371: +/* ARM thread-local storage relocations. */ mgl@1371: + BFD_RELOC_ARM_TLS_GD32, mgl@1371: + BFD_RELOC_ARM_TLS_LDO32, mgl@1371: + BFD_RELOC_ARM_TLS_LDM32, mgl@1371: + BFD_RELOC_ARM_TLS_DTPOFF32, mgl@1371: + BFD_RELOC_ARM_TLS_DTPMOD32, mgl@1371: + BFD_RELOC_ARM_TLS_TPOFF32, mgl@1371: + BFD_RELOC_ARM_TLS_IE32, mgl@1371: + BFD_RELOC_ARM_TLS_LE32, mgl@1371: + mgl@1371: +/* ARM group relocations. */ mgl@1371: + BFD_RELOC_ARM_ALU_PC_G0_NC, mgl@1371: + BFD_RELOC_ARM_ALU_PC_G0, mgl@1371: + BFD_RELOC_ARM_ALU_PC_G1_NC, mgl@1371: + BFD_RELOC_ARM_ALU_PC_G1, mgl@1371: + BFD_RELOC_ARM_ALU_PC_G2, mgl@1371: + BFD_RELOC_ARM_LDR_PC_G0, mgl@1371: + BFD_RELOC_ARM_LDR_PC_G1, mgl@1371: + BFD_RELOC_ARM_LDR_PC_G2, mgl@1371: + BFD_RELOC_ARM_LDRS_PC_G0, mgl@1371: + BFD_RELOC_ARM_LDRS_PC_G1, mgl@1371: + BFD_RELOC_ARM_LDRS_PC_G2, mgl@1371: + BFD_RELOC_ARM_LDC_PC_G0, mgl@1371: + BFD_RELOC_ARM_LDC_PC_G1, mgl@1371: + BFD_RELOC_ARM_LDC_PC_G2, mgl@1371: + BFD_RELOC_ARM_ALU_SB_G0_NC, mgl@1371: + BFD_RELOC_ARM_ALU_SB_G0, mgl@1371: + BFD_RELOC_ARM_ALU_SB_G1_NC, mgl@1371: + BFD_RELOC_ARM_ALU_SB_G1, mgl@1371: + BFD_RELOC_ARM_ALU_SB_G2, mgl@1371: + BFD_RELOC_ARM_LDR_SB_G0, mgl@1371: + BFD_RELOC_ARM_LDR_SB_G1, mgl@1371: + BFD_RELOC_ARM_LDR_SB_G2, mgl@1371: + BFD_RELOC_ARM_LDRS_SB_G0, mgl@1371: + BFD_RELOC_ARM_LDRS_SB_G1, mgl@1371: + BFD_RELOC_ARM_LDRS_SB_G2, mgl@1371: + BFD_RELOC_ARM_LDC_SB_G0, mgl@1371: + BFD_RELOC_ARM_LDC_SB_G1, mgl@1371: + BFD_RELOC_ARM_LDC_SB_G2, mgl@1371: + mgl@1371: +/* These relocs are only used within the ARM assembler. They are not mgl@1371: +(at present) written to any object files. */ mgl@1371: + BFD_RELOC_ARM_IMMEDIATE, mgl@1371: + BFD_RELOC_ARM_ADRL_IMMEDIATE, mgl@1371: + BFD_RELOC_ARM_T32_IMMEDIATE, mgl@1371: + BFD_RELOC_ARM_T32_ADD_IMM, mgl@1371: + BFD_RELOC_ARM_T32_IMM12, mgl@1371: + BFD_RELOC_ARM_T32_ADD_PC12, mgl@1371: + BFD_RELOC_ARM_SHIFT_IMM, mgl@1371: + BFD_RELOC_ARM_SMC, mgl@1371: + BFD_RELOC_ARM_SWI, mgl@1371: + BFD_RELOC_ARM_MULTI, mgl@1371: + BFD_RELOC_ARM_CP_OFF_IMM, mgl@1371: + BFD_RELOC_ARM_CP_OFF_IMM_S2, mgl@1371: + BFD_RELOC_ARM_T32_CP_OFF_IMM, mgl@1371: + BFD_RELOC_ARM_T32_CP_OFF_IMM_S2, mgl@1371: + BFD_RELOC_ARM_ADR_IMM, mgl@1371: + BFD_RELOC_ARM_LDR_IMM, mgl@1371: + BFD_RELOC_ARM_LITERAL, mgl@1371: + BFD_RELOC_ARM_IN_POOL, mgl@1371: + BFD_RELOC_ARM_OFFSET_IMM8, mgl@1371: + BFD_RELOC_ARM_T32_OFFSET_U8, mgl@1371: + BFD_RELOC_ARM_T32_OFFSET_IMM, mgl@1371: + BFD_RELOC_ARM_HWLITERAL, mgl@1371: + BFD_RELOC_ARM_THUMB_ADD, mgl@1371: + BFD_RELOC_ARM_THUMB_IMM, mgl@1371: + BFD_RELOC_ARM_THUMB_SHIFT, mgl@1371: + mgl@1371: +/* Renesas / SuperH SH relocs. Not all of these appear in object files. */ mgl@1371: + BFD_RELOC_SH_PCDISP8BY2, mgl@1371: + BFD_RELOC_SH_PCDISP12BY2, mgl@1371: + BFD_RELOC_SH_IMM3, mgl@1371: + BFD_RELOC_SH_IMM3U, mgl@1371: + BFD_RELOC_SH_DISP12, mgl@1371: + BFD_RELOC_SH_DISP12BY2, mgl@1371: + BFD_RELOC_SH_DISP12BY4, mgl@1371: + BFD_RELOC_SH_DISP12BY8, mgl@1371: + BFD_RELOC_SH_DISP20, mgl@1371: + BFD_RELOC_SH_DISP20BY8, mgl@1371: + BFD_RELOC_SH_IMM4, mgl@1371: + BFD_RELOC_SH_IMM4BY2, mgl@1371: + BFD_RELOC_SH_IMM4BY4, mgl@1371: + BFD_RELOC_SH_IMM8, mgl@1371: + BFD_RELOC_SH_IMM8BY2, mgl@1371: + BFD_RELOC_SH_IMM8BY4, mgl@1371: + BFD_RELOC_SH_PCRELIMM8BY2, mgl@1371: + BFD_RELOC_SH_PCRELIMM8BY4, mgl@1371: + BFD_RELOC_SH_SWITCH16, mgl@1371: + BFD_RELOC_SH_SWITCH32, mgl@1371: + BFD_RELOC_SH_USES, mgl@1371: + BFD_RELOC_SH_COUNT, mgl@1371: + BFD_RELOC_SH_ALIGN, mgl@1371: + BFD_RELOC_SH_CODE, mgl@1371: + BFD_RELOC_SH_DATA, mgl@1371: + BFD_RELOC_SH_LABEL, mgl@1371: + BFD_RELOC_SH_LOOP_START, mgl@1371: + BFD_RELOC_SH_LOOP_END, mgl@1371: + BFD_RELOC_SH_COPY, mgl@1371: + BFD_RELOC_SH_GLOB_DAT, mgl@1371: + BFD_RELOC_SH_JMP_SLOT, mgl@1371: + BFD_RELOC_SH_RELATIVE, mgl@1371: + BFD_RELOC_SH_GOTPC, mgl@1371: + BFD_RELOC_SH_GOT_LOW16, mgl@1371: + BFD_RELOC_SH_GOT_MEDLOW16, mgl@1371: + BFD_RELOC_SH_GOT_MEDHI16, mgl@1371: + BFD_RELOC_SH_GOT_HI16, mgl@1371: + BFD_RELOC_SH_GOTPLT_LOW16, mgl@1371: + BFD_RELOC_SH_GOTPLT_MEDLOW16, mgl@1371: + BFD_RELOC_SH_GOTPLT_MEDHI16, mgl@1371: + BFD_RELOC_SH_GOTPLT_HI16, mgl@1371: + BFD_RELOC_SH_PLT_LOW16, mgl@1371: + BFD_RELOC_SH_PLT_MEDLOW16, mgl@1371: + BFD_RELOC_SH_PLT_MEDHI16, mgl@1371: + BFD_RELOC_SH_PLT_HI16, mgl@1371: + BFD_RELOC_SH_GOTOFF_LOW16, mgl@1371: + BFD_RELOC_SH_GOTOFF_MEDLOW16, mgl@1371: + BFD_RELOC_SH_GOTOFF_MEDHI16, mgl@1371: + BFD_RELOC_SH_GOTOFF_HI16, mgl@1371: + BFD_RELOC_SH_GOTPC_LOW16, mgl@1371: + BFD_RELOC_SH_GOTPC_MEDLOW16, mgl@1371: + BFD_RELOC_SH_GOTPC_MEDHI16, mgl@1371: + BFD_RELOC_SH_GOTPC_HI16, mgl@1371: + BFD_RELOC_SH_COPY64, mgl@1371: + BFD_RELOC_SH_GLOB_DAT64, mgl@1371: + BFD_RELOC_SH_JMP_SLOT64, mgl@1371: + BFD_RELOC_SH_RELATIVE64, mgl@1371: + BFD_RELOC_SH_GOT10BY4, mgl@1371: + BFD_RELOC_SH_GOT10BY8, mgl@1371: + BFD_RELOC_SH_GOTPLT10BY4, mgl@1371: + BFD_RELOC_SH_GOTPLT10BY8, mgl@1371: + BFD_RELOC_SH_GOTPLT32, mgl@1371: + BFD_RELOC_SH_SHMEDIA_CODE, mgl@1371: + BFD_RELOC_SH_IMMU5, mgl@1371: + BFD_RELOC_SH_IMMS6, mgl@1371: + BFD_RELOC_SH_IMMS6BY32, mgl@1371: + BFD_RELOC_SH_IMMU6, mgl@1371: + BFD_RELOC_SH_IMMS10, mgl@1371: + BFD_RELOC_SH_IMMS10BY2, mgl@1371: + BFD_RELOC_SH_IMMS10BY4, mgl@1371: + BFD_RELOC_SH_IMMS10BY8, mgl@1371: + BFD_RELOC_SH_IMMS16, mgl@1371: + BFD_RELOC_SH_IMMU16, mgl@1371: + BFD_RELOC_SH_IMM_LOW16, mgl@1371: + BFD_RELOC_SH_IMM_LOW16_PCREL, mgl@1371: + BFD_RELOC_SH_IMM_MEDLOW16, mgl@1371: + BFD_RELOC_SH_IMM_MEDLOW16_PCREL, mgl@1371: + BFD_RELOC_SH_IMM_MEDHI16, mgl@1371: + BFD_RELOC_SH_IMM_MEDHI16_PCREL, mgl@1371: + BFD_RELOC_SH_IMM_HI16, mgl@1371: + BFD_RELOC_SH_IMM_HI16_PCREL, mgl@1371: + BFD_RELOC_SH_PT_16, mgl@1371: + BFD_RELOC_SH_TLS_GD_32, mgl@1371: + BFD_RELOC_SH_TLS_LD_32, mgl@1371: + BFD_RELOC_SH_TLS_LDO_32, mgl@1371: + BFD_RELOC_SH_TLS_IE_32, mgl@1371: + BFD_RELOC_SH_TLS_LE_32, mgl@1371: + BFD_RELOC_SH_TLS_DTPMOD32, mgl@1371: + BFD_RELOC_SH_TLS_DTPOFF32, mgl@1371: + BFD_RELOC_SH_TLS_TPOFF32, mgl@1371: + mgl@1371: +/* ARC Cores relocs. mgl@1371: +ARC 22 bit pc-relative branch. The lowest two bits must be zero and are mgl@1371: +not stored in the instruction. The high 20 bits are installed in bits 26 mgl@1371: +through 7 of the instruction. */ mgl@1371: + BFD_RELOC_ARC_B22_PCREL, mgl@1371: + mgl@1371: +/* ARC 26 bit absolute branch. The lowest two bits must be zero and are not mgl@1371: +stored in the instruction. The high 24 bits are installed in bits 23 mgl@1371: +through 0. */ mgl@1371: + BFD_RELOC_ARC_B26, mgl@1371: + mgl@1371: +/* ADI Blackfin 16 bit immediate absolute reloc. */ mgl@1371: + BFD_RELOC_BFIN_16_IMM, mgl@1371: + mgl@1371: +/* ADI Blackfin 16 bit immediate absolute reloc higher 16 bits. */ mgl@1371: + BFD_RELOC_BFIN_16_HIGH, mgl@1371: + mgl@1371: +/* ADI Blackfin 'a' part of LSETUP. */ mgl@1371: + BFD_RELOC_BFIN_4_PCREL, mgl@1371: + mgl@1371: +/* ADI Blackfin. */ mgl@1371: + BFD_RELOC_BFIN_5_PCREL, mgl@1371: + mgl@1371: +/* ADI Blackfin 16 bit immediate absolute reloc lower 16 bits. */ mgl@1371: + BFD_RELOC_BFIN_16_LOW, mgl@1371: + mgl@1371: +/* ADI Blackfin. */ mgl@1371: + BFD_RELOC_BFIN_10_PCREL, mgl@1371: + mgl@1371: +/* ADI Blackfin 'b' part of LSETUP. */ mgl@1371: + BFD_RELOC_BFIN_11_PCREL, mgl@1371: + mgl@1371: +/* ADI Blackfin. */ mgl@1371: + BFD_RELOC_BFIN_12_PCREL_JUMP, mgl@1371: + mgl@1371: +/* ADI Blackfin Short jump, pcrel. */ mgl@1371: + BFD_RELOC_BFIN_12_PCREL_JUMP_S, mgl@1371: + mgl@1371: +/* ADI Blackfin Call.x not implemented. */ mgl@1371: + BFD_RELOC_BFIN_24_PCREL_CALL_X, mgl@1371: + mgl@1371: +/* ADI Blackfin Long Jump pcrel. */ mgl@1371: + BFD_RELOC_BFIN_24_PCREL_JUMP_L, mgl@1371: + mgl@1371: +/* ADI Blackfin FD-PIC relocations. */ mgl@1371: + BFD_RELOC_BFIN_GOT17M4, mgl@1371: + BFD_RELOC_BFIN_GOTHI, mgl@1371: + BFD_RELOC_BFIN_GOTLO, mgl@1371: + BFD_RELOC_BFIN_FUNCDESC, mgl@1371: + BFD_RELOC_BFIN_FUNCDESC_GOT17M4, mgl@1371: + BFD_RELOC_BFIN_FUNCDESC_GOTHI, mgl@1371: + BFD_RELOC_BFIN_FUNCDESC_GOTLO, mgl@1371: + BFD_RELOC_BFIN_FUNCDESC_VALUE, mgl@1371: + BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4, mgl@1371: + BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI, mgl@1371: + BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO, mgl@1371: + BFD_RELOC_BFIN_GOTOFF17M4, mgl@1371: + BFD_RELOC_BFIN_GOTOFFHI, mgl@1371: + BFD_RELOC_BFIN_GOTOFFLO, mgl@1371: + mgl@1371: +/* ADI Blackfin GOT relocation. */ mgl@1371: + BFD_RELOC_BFIN_GOT, mgl@1371: + mgl@1371: +/* ADI Blackfin PLTPC relocation. */ mgl@1371: + BFD_RELOC_BFIN_PLTPC, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_PUSH, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_CONST, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_ADD, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_SUB, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_MULT, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_DIV, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_MOD, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_LSHIFT, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_RSHIFT, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_AND, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_OR, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_XOR, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_LAND, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_LOR, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_LEN, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_NEG, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_COMP, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_PAGE, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_HWPAGE, mgl@1371: + mgl@1371: +/* ADI Blackfin arithmetic relocation. */ mgl@1371: + BFD_ARELOC_BFIN_ADDR, mgl@1371: + mgl@1371: +/* Mitsubishi D10V relocs. mgl@1371: +This is a 10-bit reloc with the right 2 bits mgl@1371: +assumed to be 0. */ mgl@1371: + BFD_RELOC_D10V_10_PCREL_R, mgl@1371: + mgl@1371: +/* Mitsubishi D10V relocs. mgl@1371: +This is a 10-bit reloc with the right 2 bits mgl@1371: +assumed to be 0. This is the same as the previous reloc mgl@1371: +except it is in the left container, i.e., mgl@1371: +shifted left 15 bits. */ mgl@1371: + BFD_RELOC_D10V_10_PCREL_L, mgl@1371: + mgl@1371: +/* This is an 18-bit reloc with the right 2 bits mgl@1371: +assumed to be 0. */ mgl@1371: + BFD_RELOC_D10V_18, mgl@1371: + mgl@1371: +/* This is an 18-bit reloc with the right 2 bits mgl@1371: +assumed to be 0. */ mgl@1371: + BFD_RELOC_D10V_18_PCREL, mgl@1371: + mgl@1371: +/* Mitsubishi D30V relocs. mgl@1371: +This is a 6-bit absolute reloc. */ mgl@1371: + BFD_RELOC_D30V_6, mgl@1371: + mgl@1371: +/* This is a 6-bit pc-relative reloc with mgl@1371: +the right 3 bits assumed to be 0. */ mgl@1371: + BFD_RELOC_D30V_9_PCREL, mgl@1371: + mgl@1371: +/* This is a 6-bit pc-relative reloc with mgl@1371: +the right 3 bits assumed to be 0. Same mgl@1371: +as the previous reloc but on the right side mgl@1371: +of the container. */ mgl@1371: + BFD_RELOC_D30V_9_PCREL_R, mgl@1371: + mgl@1371: +/* This is a 12-bit absolute reloc with the mgl@1371: +right 3 bitsassumed to be 0. */ mgl@1371: + BFD_RELOC_D30V_15, mgl@1371: + mgl@1371: +/* This is a 12-bit pc-relative reloc with mgl@1371: +the right 3 bits assumed to be 0. */ mgl@1371: + BFD_RELOC_D30V_15_PCREL, mgl@1371: + mgl@1371: +/* This is a 12-bit pc-relative reloc with mgl@1371: +the right 3 bits assumed to be 0. Same mgl@1371: +as the previous reloc but on the right side mgl@1371: +of the container. */ mgl@1371: + BFD_RELOC_D30V_15_PCREL_R, mgl@1371: + mgl@1371: +/* This is an 18-bit absolute reloc with mgl@1371: +the right 3 bits assumed to be 0. */ mgl@1371: + BFD_RELOC_D30V_21, mgl@1371: + mgl@1371: +/* This is an 18-bit pc-relative reloc with mgl@1371: +the right 3 bits assumed to be 0. */ mgl@1371: + BFD_RELOC_D30V_21_PCREL, mgl@1371: + mgl@1371: +/* This is an 18-bit pc-relative reloc with mgl@1371: +the right 3 bits assumed to be 0. Same mgl@1371: +as the previous reloc but on the right side mgl@1371: +of the container. */ mgl@1371: + BFD_RELOC_D30V_21_PCREL_R, mgl@1371: + mgl@1371: +/* This is a 32-bit absolute reloc. */ mgl@1371: + BFD_RELOC_D30V_32, mgl@1371: + mgl@1371: +/* This is a 32-bit pc-relative reloc. */ mgl@1371: + BFD_RELOC_D30V_32_PCREL, mgl@1371: + mgl@1371: +/* DLX relocs */ mgl@1371: + BFD_RELOC_DLX_HI16_S, mgl@1371: + mgl@1371: +/* DLX relocs */ mgl@1371: + BFD_RELOC_DLX_LO16, mgl@1371: + mgl@1371: +/* DLX relocs */ mgl@1371: + BFD_RELOC_DLX_JMP26, mgl@1371: + mgl@1371: +/* Renesas M16C/M32C Relocations. */ mgl@1371: + BFD_RELOC_M32C_HI8, mgl@1371: + BFD_RELOC_M32C_RL_JUMP, mgl@1371: + BFD_RELOC_M32C_RL_1ADDR, mgl@1371: + BFD_RELOC_M32C_RL_2ADDR, mgl@1371: + mgl@1371: +/* Renesas M32R (formerly Mitsubishi M32R) relocs. mgl@1371: +This is a 24 bit absolute address. */ mgl@1371: + BFD_RELOC_M32R_24, mgl@1371: + mgl@1371: +/* This is a 10-bit pc-relative reloc with the right 2 bits assumed to be 0. */ mgl@1371: + BFD_RELOC_M32R_10_PCREL, mgl@1371: + mgl@1371: +/* This is an 18-bit reloc with the right 2 bits assumed to be 0. */ mgl@1371: + BFD_RELOC_M32R_18_PCREL, mgl@1371: + mgl@1371: +/* This is a 26-bit reloc with the right 2 bits assumed to be 0. */ mgl@1371: + BFD_RELOC_M32R_26_PCREL, mgl@1371: + mgl@1371: +/* This is a 16-bit reloc containing the high 16 bits of an address mgl@1371: +used when the lower 16 bits are treated as unsigned. */ mgl@1371: + BFD_RELOC_M32R_HI16_ULO, mgl@1371: + mgl@1371: +/* This is a 16-bit reloc containing the high 16 bits of an address mgl@1371: +used when the lower 16 bits are treated as signed. */ mgl@1371: + BFD_RELOC_M32R_HI16_SLO, mgl@1371: + mgl@1371: +/* This is a 16-bit reloc containing the lower 16 bits of an address. */ mgl@1371: + BFD_RELOC_M32R_LO16, mgl@1371: + mgl@1371: +/* This is a 16-bit reloc containing the small data area offset for use in mgl@1371: +add3, load, and store instructions. */ mgl@1371: + BFD_RELOC_M32R_SDA16, mgl@1371: + mgl@1371: +/* For PIC. */ mgl@1371: + BFD_RELOC_M32R_GOT24, mgl@1371: + BFD_RELOC_M32R_26_PLTREL, mgl@1371: + BFD_RELOC_M32R_COPY, mgl@1371: + BFD_RELOC_M32R_GLOB_DAT, mgl@1371: + BFD_RELOC_M32R_JMP_SLOT, mgl@1371: + BFD_RELOC_M32R_RELATIVE, mgl@1371: + BFD_RELOC_M32R_GOTOFF, mgl@1371: + BFD_RELOC_M32R_GOTOFF_HI_ULO, mgl@1371: + BFD_RELOC_M32R_GOTOFF_HI_SLO, mgl@1371: + BFD_RELOC_M32R_GOTOFF_LO, mgl@1371: + BFD_RELOC_M32R_GOTPC24, mgl@1371: + BFD_RELOC_M32R_GOT16_HI_ULO, mgl@1371: + BFD_RELOC_M32R_GOT16_HI_SLO, mgl@1371: + BFD_RELOC_M32R_GOT16_LO, mgl@1371: + BFD_RELOC_M32R_GOTPC_HI_ULO, mgl@1371: + BFD_RELOC_M32R_GOTPC_HI_SLO, mgl@1371: + BFD_RELOC_M32R_GOTPC_LO, mgl@1371: + mgl@1371: +/* This is a 9-bit reloc */ mgl@1371: + BFD_RELOC_V850_9_PCREL, mgl@1371: + mgl@1371: +/* This is a 22-bit reloc */ mgl@1371: + BFD_RELOC_V850_22_PCREL, mgl@1371: + mgl@1371: +/* This is a 16 bit offset from the short data area pointer. */ mgl@1371: + BFD_RELOC_V850_SDA_16_16_OFFSET, mgl@1371: + mgl@1371: +/* This is a 16 bit offset (of which only 15 bits are used) from the mgl@1371: +short data area pointer. */ mgl@1371: + BFD_RELOC_V850_SDA_15_16_OFFSET, mgl@1371: + mgl@1371: +/* This is a 16 bit offset from the zero data area pointer. */ mgl@1371: + BFD_RELOC_V850_ZDA_16_16_OFFSET, mgl@1371: + mgl@1371: +/* This is a 16 bit offset (of which only 15 bits are used) from the mgl@1371: +zero data area pointer. */ mgl@1371: + BFD_RELOC_V850_ZDA_15_16_OFFSET, mgl@1371: + mgl@1371: +/* This is an 8 bit offset (of which only 6 bits are used) from the mgl@1371: +tiny data area pointer. */ mgl@1371: + BFD_RELOC_V850_TDA_6_8_OFFSET, mgl@1371: + mgl@1371: +/* This is an 8bit offset (of which only 7 bits are used) from the tiny mgl@1371: +data area pointer. */ mgl@1371: + BFD_RELOC_V850_TDA_7_8_OFFSET, mgl@1371: + mgl@1371: +/* This is a 7 bit offset from the tiny data area pointer. */ mgl@1371: + BFD_RELOC_V850_TDA_7_7_OFFSET, mgl@1371: + mgl@1371: +/* This is a 16 bit offset from the tiny data area pointer. */ mgl@1371: + BFD_RELOC_V850_TDA_16_16_OFFSET, mgl@1371: + mgl@1371: +/* This is a 5 bit offset (of which only 4 bits are used) from the tiny mgl@1371: +data area pointer. */ mgl@1371: + BFD_RELOC_V850_TDA_4_5_OFFSET, mgl@1371: + mgl@1371: +/* This is a 4 bit offset from the tiny data area pointer. */ mgl@1371: + BFD_RELOC_V850_TDA_4_4_OFFSET, mgl@1371: + mgl@1371: +/* This is a 16 bit offset from the short data area pointer, with the mgl@1371: +bits placed non-contiguously in the instruction. */ mgl@1371: + BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET, mgl@1371: + mgl@1371: +/* This is a 16 bit offset from the zero data area pointer, with the mgl@1371: +bits placed non-contiguously in the instruction. */ mgl@1371: + BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET, mgl@1371: + mgl@1371: +/* This is a 6 bit offset from the call table base pointer. */ mgl@1371: + BFD_RELOC_V850_CALLT_6_7_OFFSET, mgl@1371: + mgl@1371: +/* This is a 16 bit offset from the call table base pointer. */ mgl@1371: + BFD_RELOC_V850_CALLT_16_16_OFFSET, mgl@1371: + mgl@1371: +/* Used for relaxing indirect function calls. */ mgl@1371: + BFD_RELOC_V850_LONGCALL, mgl@1371: + mgl@1371: +/* Used for relaxing indirect jumps. */ mgl@1371: + BFD_RELOC_V850_LONGJUMP, mgl@1371: + mgl@1371: +/* Used to maintain alignment whilst relaxing. */ mgl@1371: + BFD_RELOC_V850_ALIGN, mgl@1371: + mgl@1371: +/* This is a variation of BFD_RELOC_LO16 that can be used in v850e ld.bu mgl@1371: +instructions. */ mgl@1371: + BFD_RELOC_V850_LO16_SPLIT_OFFSET, mgl@1371: + mgl@1371: +/* This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the mgl@1371: +instruction. */ mgl@1371: + BFD_RELOC_MN10300_32_PCREL, mgl@1371: + mgl@1371: +/* This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the mgl@1371: +instruction. */ mgl@1371: + BFD_RELOC_MN10300_16_PCREL, mgl@1371: + mgl@1371: +/* This is a 8bit DP reloc for the tms320c30, where the most mgl@1371: +significant 8 bits of a 24 bit word are placed into the least mgl@1371: +significant 8 bits of the opcode. */ mgl@1371: + BFD_RELOC_TIC30_LDP, mgl@1371: + mgl@1371: +/* This is a 7bit reloc for the tms320c54x, where the least mgl@1371: +significant 7 bits of a 16 bit word are placed into the least mgl@1371: +significant 7 bits of the opcode. */ mgl@1371: + BFD_RELOC_TIC54X_PARTLS7, mgl@1371: + mgl@1371: +/* This is a 9bit DP reloc for the tms320c54x, where the most mgl@1371: +significant 9 bits of a 16 bit word are placed into the least mgl@1371: +significant 9 bits of the opcode. */ mgl@1371: + BFD_RELOC_TIC54X_PARTMS9, mgl@1371: + mgl@1371: +/* This is an extended address 23-bit reloc for the tms320c54x. */ mgl@1371: + BFD_RELOC_TIC54X_23, mgl@1371: + mgl@1371: +/* This is a 16-bit reloc for the tms320c54x, where the least mgl@1371: +significant 16 bits of a 23-bit extended address are placed into mgl@1371: +the opcode. */ mgl@1371: + BFD_RELOC_TIC54X_16_OF_23, mgl@1371: + mgl@1371: +/* This is a reloc for the tms320c54x, where the most mgl@1371: +significant 7 bits of a 23-bit extended address are placed into mgl@1371: +the opcode. */ mgl@1371: + BFD_RELOC_TIC54X_MS7_OF_23, mgl@1371: + mgl@1371: +/* This is a 48 bit reloc for the FR30 that stores 32 bits. */ mgl@1371: + BFD_RELOC_FR30_48, mgl@1371: + mgl@1371: +/* This is a 32 bit reloc for the FR30 that stores 20 bits split up into mgl@1371: +two sections. */ mgl@1371: + BFD_RELOC_FR30_20, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the FR30 that stores a 6 bit word offset in mgl@1371: +4 bits. */ mgl@1371: + BFD_RELOC_FR30_6_IN_4, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the FR30 that stores an 8 bit byte offset mgl@1371: +into 8 bits. */ mgl@1371: + BFD_RELOC_FR30_8_IN_8, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the FR30 that stores a 9 bit short offset mgl@1371: +into 8 bits. */ mgl@1371: + BFD_RELOC_FR30_9_IN_8, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the FR30 that stores a 10 bit word offset mgl@1371: +into 8 bits. */ mgl@1371: + BFD_RELOC_FR30_10_IN_8, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative mgl@1371: +short offset into 8 bits. */ mgl@1371: + BFD_RELOC_FR30_9_PCREL, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the FR30 that stores a 12 bit pc relative mgl@1371: +short offset into 11 bits. */ mgl@1371: + BFD_RELOC_FR30_12_PCREL, mgl@1371: + mgl@1371: +/* Motorola Mcore relocations. */ mgl@1371: + BFD_RELOC_MCORE_PCREL_IMM8BY4, mgl@1371: + BFD_RELOC_MCORE_PCREL_IMM11BY2, mgl@1371: + BFD_RELOC_MCORE_PCREL_IMM4BY2, mgl@1371: + BFD_RELOC_MCORE_PCREL_32, mgl@1371: + BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2, mgl@1371: + BFD_RELOC_MCORE_RVA, mgl@1371: + mgl@1371: +/* Toshiba Media Processor Relocations. */ mgl@1371: + BFD_RELOC_MEP_8, mgl@1371: + BFD_RELOC_MEP_16, mgl@1371: + BFD_RELOC_MEP_32, mgl@1371: + BFD_RELOC_MEP_PCREL8A2, mgl@1371: + BFD_RELOC_MEP_PCREL12A2, mgl@1371: + BFD_RELOC_MEP_PCREL17A2, mgl@1371: + BFD_RELOC_MEP_PCREL24A2, mgl@1371: + BFD_RELOC_MEP_PCABS24A2, mgl@1371: + BFD_RELOC_MEP_LOW16, mgl@1371: + BFD_RELOC_MEP_HI16U, mgl@1371: + BFD_RELOC_MEP_HI16S, mgl@1371: + BFD_RELOC_MEP_GPREL, mgl@1371: + BFD_RELOC_MEP_TPREL, mgl@1371: + BFD_RELOC_MEP_TPREL7, mgl@1371: + BFD_RELOC_MEP_TPREL7A2, mgl@1371: + BFD_RELOC_MEP_TPREL7A4, mgl@1371: + BFD_RELOC_MEP_UIMM24, mgl@1371: + BFD_RELOC_MEP_ADDR24A4, mgl@1371: + BFD_RELOC_MEP_GNU_VTINHERIT, mgl@1371: + BFD_RELOC_MEP_GNU_VTENTRY, mgl@1371: + mgl@1371: + mgl@1371: +/* These are relocations for the GETA instruction. */ mgl@1371: + BFD_RELOC_MMIX_GETA, mgl@1371: + BFD_RELOC_MMIX_GETA_1, mgl@1371: + BFD_RELOC_MMIX_GETA_2, mgl@1371: + BFD_RELOC_MMIX_GETA_3, mgl@1371: + mgl@1371: +/* These are relocations for a conditional branch instruction. */ mgl@1371: + BFD_RELOC_MMIX_CBRANCH, mgl@1371: + BFD_RELOC_MMIX_CBRANCH_J, mgl@1371: + BFD_RELOC_MMIX_CBRANCH_1, mgl@1371: + BFD_RELOC_MMIX_CBRANCH_2, mgl@1371: + BFD_RELOC_MMIX_CBRANCH_3, mgl@1371: + mgl@1371: +/* These are relocations for the PUSHJ instruction. */ mgl@1371: + BFD_RELOC_MMIX_PUSHJ, mgl@1371: + BFD_RELOC_MMIX_PUSHJ_1, mgl@1371: + BFD_RELOC_MMIX_PUSHJ_2, mgl@1371: + BFD_RELOC_MMIX_PUSHJ_3, mgl@1371: + BFD_RELOC_MMIX_PUSHJ_STUBBABLE, mgl@1371: + mgl@1371: +/* These are relocations for the JMP instruction. */ mgl@1371: + BFD_RELOC_MMIX_JMP, mgl@1371: + BFD_RELOC_MMIX_JMP_1, mgl@1371: + BFD_RELOC_MMIX_JMP_2, mgl@1371: + BFD_RELOC_MMIX_JMP_3, mgl@1371: + mgl@1371: +/* This is a relocation for a relative address as in a GETA instruction or mgl@1371: +a branch. */ mgl@1371: + BFD_RELOC_MMIX_ADDR19, mgl@1371: + mgl@1371: +/* This is a relocation for a relative address as in a JMP instruction. */ mgl@1371: + BFD_RELOC_MMIX_ADDR27, mgl@1371: + mgl@1371: +/* This is a relocation for an instruction field that may be a general mgl@1371: +register or a value 0..255. */ mgl@1371: + BFD_RELOC_MMIX_REG_OR_BYTE, mgl@1371: + mgl@1371: +/* This is a relocation for an instruction field that may be a general mgl@1371: +register. */ mgl@1371: + BFD_RELOC_MMIX_REG, mgl@1371: + mgl@1371: +/* This is a relocation for two instruction fields holding a register and mgl@1371: +an offset, the equivalent of the relocation. */ mgl@1371: + BFD_RELOC_MMIX_BASE_PLUS_OFFSET, mgl@1371: + mgl@1371: +/* This relocation is an assertion that the expression is not allocated as mgl@1371: +a global register. It does not modify contents. */ mgl@1371: + BFD_RELOC_MMIX_LOCAL, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit pc relative mgl@1371: +short offset into 7 bits. */ mgl@1371: + BFD_RELOC_AVR_7_PCREL, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 13 bit pc relative mgl@1371: +short offset into 12 bits. */ mgl@1371: + BFD_RELOC_AVR_13_PCREL, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 17 bit value (usually mgl@1371: +program memory address) into 16 bits. */ mgl@1371: + BFD_RELOC_AVR_16_PM, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value (usually mgl@1371: +data memory address) into 8 bit immediate value of LDI insn. */ mgl@1371: + BFD_RELOC_AVR_LO8_LDI, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit mgl@1371: +of data memory address) into 8 bit immediate value of LDI insn. */ mgl@1371: + BFD_RELOC_AVR_HI8_LDI, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit mgl@1371: +of program memory address) into 8 bit immediate value of LDI insn. */ mgl@1371: + BFD_RELOC_AVR_HH8_LDI, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit mgl@1371: +of 32 bit value) into 8 bit immediate value of LDI insn. */ mgl@1371: + BFD_RELOC_AVR_MS8_LDI, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores negated 8 bit value mgl@1371: +(usually data memory address) into 8 bit immediate value of SUBI insn. */ mgl@1371: + BFD_RELOC_AVR_LO8_LDI_NEG, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores negated 8 bit value mgl@1371: +(high 8 bit of data memory address) into 8 bit immediate value of mgl@1371: +SUBI insn. */ mgl@1371: + BFD_RELOC_AVR_HI8_LDI_NEG, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores negated 8 bit value mgl@1371: +(most high 8 bit of program memory address) into 8 bit immediate value mgl@1371: +of LDI or SUBI insn. */ mgl@1371: + BFD_RELOC_AVR_HH8_LDI_NEG, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores negated 8 bit value (msb mgl@1371: +of 32 bit value) into 8 bit immediate value of LDI insn. */ mgl@1371: + BFD_RELOC_AVR_MS8_LDI_NEG, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value (usually mgl@1371: +command address) into 8 bit immediate value of LDI insn. */ mgl@1371: + BFD_RELOC_AVR_LO8_LDI_PM, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value mgl@1371: +(command address) into 8 bit immediate value of LDI insn. If the address mgl@1371: +is beyond the 128k boundary, the linker inserts a jump stub for this reloc mgl@1371: +in the lower 128k. */ mgl@1371: + BFD_RELOC_AVR_LO8_LDI_GS, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit mgl@1371: +of command address) into 8 bit immediate value of LDI insn. */ mgl@1371: + BFD_RELOC_AVR_HI8_LDI_PM, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit mgl@1371: +of command address) into 8 bit immediate value of LDI insn. If the address mgl@1371: +is beyond the 128k boundary, the linker inserts a jump stub for this reloc mgl@1371: +below 128k. */ mgl@1371: + BFD_RELOC_AVR_HI8_LDI_GS, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit mgl@1371: +of command address) into 8 bit immediate value of LDI insn. */ mgl@1371: + BFD_RELOC_AVR_HH8_LDI_PM, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores negated 8 bit value mgl@1371: +(usually command address) into 8 bit immediate value of SUBI insn. */ mgl@1371: + BFD_RELOC_AVR_LO8_LDI_PM_NEG, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores negated 8 bit value mgl@1371: +(high 8 bit of 16 bit command address) into 8 bit immediate value mgl@1371: +of SUBI insn. */ mgl@1371: + BFD_RELOC_AVR_HI8_LDI_PM_NEG, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores negated 8 bit value mgl@1371: +(high 6 bit of 22 bit command address) into 8 bit immediate mgl@1371: +value of SUBI insn. */ mgl@1371: + BFD_RELOC_AVR_HH8_LDI_PM_NEG, mgl@1371: + mgl@1371: +/* This is a 32 bit reloc for the AVR that stores 23 bit value mgl@1371: +into 22 bits. */ mgl@1371: + BFD_RELOC_AVR_CALL, mgl@1371: + mgl@1371: +/* This is a 16 bit reloc for the AVR that stores all needed bits mgl@1371: +for absolute addressing with ldi with overflow check to linktime */ mgl@1371: + BFD_RELOC_AVR_LDI, mgl@1371: + mgl@1371: +/* This is a 6 bit reloc for the AVR that stores offset for ldd/std mgl@1371: +instructions */ mgl@1371: + BFD_RELOC_AVR_6, mgl@1371: + mgl@1371: +/* This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw mgl@1371: +instructions */ mgl@1371: + BFD_RELOC_AVR_6_ADIW, mgl@1371: + mgl@1371: +/* Difference between two labels: L2 - L1. The value of L1 is encoded mgl@1371: +as sym + addend, while the initial difference after assembly is mgl@1371: +inserted into the object file by the assembler. */ mgl@1371: + BFD_RELOC_AVR32_DIFF32, mgl@1371: + BFD_RELOC_AVR32_DIFF16, mgl@1371: + BFD_RELOC_AVR32_DIFF8, mgl@1371: + mgl@1371: +/* Reference to a symbol through the Global Offset Table. The linker mgl@1371: +will allocate an entry for symbol in the GOT and insert the offset mgl@1371: +of this entry as the relocation value. */ mgl@1371: + BFD_RELOC_AVR32_GOT32, mgl@1371: + BFD_RELOC_AVR32_GOT16, mgl@1371: + BFD_RELOC_AVR32_GOT8, mgl@1371: + mgl@1371: +/* Normal (non-pc-relative) code relocations. Alignment and signedness mgl@1371: +is indicated by the suffixes. S means signed, U means unsigned. W mgl@1371: +means word-aligned, H means halfword-aligned, neither means mgl@1371: +byte-aligned (no alignment.) SUB5 is the same relocation as 16S. */ mgl@1371: + BFD_RELOC_AVR32_21S, mgl@1371: + BFD_RELOC_AVR32_16U, mgl@1371: + BFD_RELOC_AVR32_16S, mgl@1371: + BFD_RELOC_AVR32_SUB5, mgl@1371: + BFD_RELOC_AVR32_8S_EXT, mgl@1371: + BFD_RELOC_AVR32_8S, mgl@1371: + BFD_RELOC_AVR32_15S, mgl@1371: + mgl@1371: +/* PC-relative relocations are signed if neither 'U' nor 'S' is mgl@1371: +specified. However, we explicitly tack on a 'B' to indicate no mgl@1371: +alignment, to avoid confusion with data relocs. All of these resolve mgl@1371: +to sym + addend - offset, except the one with 'N' (negated) suffix. mgl@1371: +This particular one resolves to offset - sym - addend. */ mgl@1371: + BFD_RELOC_AVR32_22H_PCREL, mgl@1371: + BFD_RELOC_AVR32_18W_PCREL, mgl@1371: + BFD_RELOC_AVR32_16B_PCREL, mgl@1371: + BFD_RELOC_AVR32_16N_PCREL, mgl@1371: + BFD_RELOC_AVR32_14UW_PCREL, mgl@1371: + BFD_RELOC_AVR32_11H_PCREL, mgl@1371: + BFD_RELOC_AVR32_10UW_PCREL, mgl@1371: + BFD_RELOC_AVR32_9H_PCREL, mgl@1371: + BFD_RELOC_AVR32_9UW_PCREL, mgl@1371: + mgl@1371: +/* Subtract the link-time address of the GOT from (symbol + addend) mgl@1371: +and insert the result. */ mgl@1371: + BFD_RELOC_AVR32_GOTPC, mgl@1371: + mgl@1371: +/* Reference to a symbol through the GOT. The linker will allocate an mgl@1371: +entry for symbol in the GOT and insert the offset of this entry as mgl@1371: +the relocation value. addend must be zero. As usual, 'S' means mgl@1371: +signed, 'W' means word-aligned, etc. */ mgl@1371: + BFD_RELOC_AVR32_GOTCALL, mgl@1371: + BFD_RELOC_AVR32_LDA_GOT, mgl@1371: + BFD_RELOC_AVR32_GOT21S, mgl@1371: + BFD_RELOC_AVR32_GOT18SW, mgl@1371: + BFD_RELOC_AVR32_GOT16S, mgl@1371: + mgl@1371: +/* 32-bit constant pool entry. I don't think 8- and 16-bit entries make mgl@1371: +a whole lot of sense. */ mgl@1371: + BFD_RELOC_AVR32_32_CPENT, mgl@1371: + mgl@1371: +/* Constant pool references. Some of these relocations are signed, mgl@1371: +others are unsigned. It doesn't really matter, since the constant mgl@1371: +pool always comes after the code that references it. */ mgl@1371: + BFD_RELOC_AVR32_CPCALL, mgl@1371: + BFD_RELOC_AVR32_16_CP, mgl@1371: + BFD_RELOC_AVR32_9W_CP, mgl@1371: + mgl@1371: +/* sym must be the absolute symbol. The addend specifies the alignment mgl@1371: +order, e.g. if addend is 2, the linker must add padding so that the mgl@1371: +next address is aligned to a 4-byte boundary. */ mgl@1371: + BFD_RELOC_AVR32_ALIGN, mgl@1371: + mgl@1371: +/* Code relocations that will never make it to the output file. */ mgl@1371: + BFD_RELOC_AVR32_14UW, mgl@1371: + BFD_RELOC_AVR32_10UW, mgl@1371: + BFD_RELOC_AVR32_10SW, mgl@1371: + BFD_RELOC_AVR32_STHH_W, mgl@1371: + BFD_RELOC_AVR32_7UW, mgl@1371: + BFD_RELOC_AVR32_6S, mgl@1371: + BFD_RELOC_AVR32_6UW, mgl@1371: + BFD_RELOC_AVR32_4UH, mgl@1371: + BFD_RELOC_AVR32_3U, mgl@1371: + mgl@1371: +/* Direct 12 bit. */ mgl@1371: + BFD_RELOC_390_12, mgl@1371: + mgl@1371: +/* 12 bit GOT offset. */ mgl@1371: + BFD_RELOC_390_GOT12, mgl@1371: + mgl@1371: +/* 32 bit PC relative PLT address. */ mgl@1371: + BFD_RELOC_390_PLT32, mgl@1371: + mgl@1371: +/* Copy symbol at runtime. */ mgl@1371: + BFD_RELOC_390_COPY, mgl@1371: + mgl@1371: +/* Create GOT entry. */ mgl@1371: + BFD_RELOC_390_GLOB_DAT, mgl@1371: + mgl@1371: +/* Create PLT entry. */ mgl@1371: + BFD_RELOC_390_JMP_SLOT, mgl@1371: + mgl@1371: +/* Adjust by program base. */ mgl@1371: + BFD_RELOC_390_RELATIVE, mgl@1371: + mgl@1371: +/* 32 bit PC relative offset to GOT. */ mgl@1371: + BFD_RELOC_390_GOTPC, mgl@1371: + mgl@1371: +/* 16 bit GOT offset. */ mgl@1371: + BFD_RELOC_390_GOT16, mgl@1371: + mgl@1371: +/* PC relative 16 bit shifted by 1. */ mgl@1371: + BFD_RELOC_390_PC16DBL, mgl@1371: + mgl@1371: +/* 16 bit PC rel. PLT shifted by 1. */ mgl@1371: + BFD_RELOC_390_PLT16DBL, mgl@1371: + mgl@1371: +/* PC relative 32 bit shifted by 1. */ mgl@1371: + BFD_RELOC_390_PC32DBL, mgl@1371: + mgl@1371: +/* 32 bit PC rel. PLT shifted by 1. */ mgl@1371: + BFD_RELOC_390_PLT32DBL, mgl@1371: + mgl@1371: +/* 32 bit PC rel. GOT shifted by 1. */ mgl@1371: + BFD_RELOC_390_GOTPCDBL, mgl@1371: + mgl@1371: +/* 64 bit GOT offset. */ mgl@1371: + BFD_RELOC_390_GOT64, mgl@1371: + mgl@1371: +/* 64 bit PC relative PLT address. */ mgl@1371: + BFD_RELOC_390_PLT64, mgl@1371: + mgl@1371: +/* 32 bit rel. offset to GOT entry. */ mgl@1371: + BFD_RELOC_390_GOTENT, mgl@1371: + mgl@1371: +/* 64 bit offset to GOT. */ mgl@1371: + BFD_RELOC_390_GOTOFF64, mgl@1371: + mgl@1371: +/* 12-bit offset to symbol-entry within GOT, with PLT handling. */ mgl@1371: + BFD_RELOC_390_GOTPLT12, mgl@1371: + mgl@1371: +/* 16-bit offset to symbol-entry within GOT, with PLT handling. */ mgl@1371: + BFD_RELOC_390_GOTPLT16, mgl@1371: + mgl@1371: +/* 32-bit offset to symbol-entry within GOT, with PLT handling. */ mgl@1371: + BFD_RELOC_390_GOTPLT32, mgl@1371: + mgl@1371: +/* 64-bit offset to symbol-entry within GOT, with PLT handling. */ mgl@1371: + BFD_RELOC_390_GOTPLT64, mgl@1371: + mgl@1371: +/* 32-bit rel. offset to symbol-entry within GOT, with PLT handling. */ mgl@1371: + BFD_RELOC_390_GOTPLTENT, mgl@1371: + mgl@1371: +/* 16-bit rel. offset from the GOT to a PLT entry. */ mgl@1371: + BFD_RELOC_390_PLTOFF16, mgl@1371: + mgl@1371: +/* 32-bit rel. offset from the GOT to a PLT entry. */ mgl@1371: + BFD_RELOC_390_PLTOFF32, mgl@1371: + mgl@1371: +/* 64-bit rel. offset from the GOT to a PLT entry. */ mgl@1371: + BFD_RELOC_390_PLTOFF64, mgl@1371: + mgl@1371: +/* s390 tls relocations. */ mgl@1371: + BFD_RELOC_390_TLS_LOAD, mgl@1371: + BFD_RELOC_390_TLS_GDCALL, mgl@1371: + BFD_RELOC_390_TLS_LDCALL, mgl@1371: + BFD_RELOC_390_TLS_GD32, mgl@1371: + BFD_RELOC_390_TLS_GD64, mgl@1371: + BFD_RELOC_390_TLS_GOTIE12, mgl@1371: + BFD_RELOC_390_TLS_GOTIE32, mgl@1371: + BFD_RELOC_390_TLS_GOTIE64, mgl@1371: + BFD_RELOC_390_TLS_LDM32, mgl@1371: + BFD_RELOC_390_TLS_LDM64, mgl@1371: + BFD_RELOC_390_TLS_IE32, mgl@1371: + BFD_RELOC_390_TLS_IE64, mgl@1371: + BFD_RELOC_390_TLS_IEENT, mgl@1371: + BFD_RELOC_390_TLS_LE32, mgl@1371: + BFD_RELOC_390_TLS_LE64, mgl@1371: + BFD_RELOC_390_TLS_LDO32, mgl@1371: + BFD_RELOC_390_TLS_LDO64, mgl@1371: + BFD_RELOC_390_TLS_DTPMOD, mgl@1371: + BFD_RELOC_390_TLS_DTPOFF, mgl@1371: + BFD_RELOC_390_TLS_TPOFF, mgl@1371: + mgl@1371: +/* Long displacement extension. */ mgl@1371: + BFD_RELOC_390_20, mgl@1371: + BFD_RELOC_390_GOT20, mgl@1371: + BFD_RELOC_390_GOTPLT20, mgl@1371: + BFD_RELOC_390_TLS_GOTIE20, mgl@1371: + mgl@1371: +/* Score relocations */ mgl@1371: + BFD_RELOC_SCORE_DUMMY1, mgl@1371: + mgl@1371: +/* Low 16 bit for load/store */ mgl@1371: + BFD_RELOC_SCORE_GPREL15, mgl@1371: + mgl@1371: +/* This is a 24-bit reloc with the right 1 bit assumed to be 0 */ mgl@1371: + BFD_RELOC_SCORE_DUMMY2, mgl@1371: + BFD_RELOC_SCORE_JMP, mgl@1371: + mgl@1371: +/* This is a 19-bit reloc with the right 1 bit assumed to be 0 */ mgl@1371: + BFD_RELOC_SCORE_BRANCH, mgl@1371: + mgl@1371: +/* This is a 11-bit reloc with the right 1 bit assumed to be 0 */ mgl@1371: + BFD_RELOC_SCORE16_JMP, mgl@1371: + mgl@1371: +/* This is a 8-bit reloc with the right 1 bit assumed to be 0 */ mgl@1371: + BFD_RELOC_SCORE16_BRANCH, mgl@1371: + mgl@1371: +/* Undocumented Score relocs */ mgl@1371: + BFD_RELOC_SCORE_GOT15, mgl@1371: + BFD_RELOC_SCORE_GOT_LO16, mgl@1371: + BFD_RELOC_SCORE_CALL15, mgl@1371: + BFD_RELOC_SCORE_DUMMY_HI16, mgl@1371: + mgl@1371: +/* Scenix IP2K - 9-bit register number / data address */ mgl@1371: + BFD_RELOC_IP2K_FR9, mgl@1371: + mgl@1371: +/* Scenix IP2K - 4-bit register/data bank number */ mgl@1371: + BFD_RELOC_IP2K_BANK, mgl@1371: + mgl@1371: +/* Scenix IP2K - low 13 bits of instruction word address */ mgl@1371: + BFD_RELOC_IP2K_ADDR16CJP, mgl@1371: + mgl@1371: +/* Scenix IP2K - high 3 bits of instruction word address */ mgl@1371: + BFD_RELOC_IP2K_PAGE3, mgl@1371: + mgl@1371: +/* Scenix IP2K - ext/low/high 8 bits of data address */ mgl@1371: + BFD_RELOC_IP2K_LO8DATA, mgl@1371: + BFD_RELOC_IP2K_HI8DATA, mgl@1371: + BFD_RELOC_IP2K_EX8DATA, mgl@1371: + mgl@1371: +/* Scenix IP2K - low/high 8 bits of instruction word address */ mgl@1371: + BFD_RELOC_IP2K_LO8INSN, mgl@1371: + BFD_RELOC_IP2K_HI8INSN, mgl@1371: + mgl@1371: +/* Scenix IP2K - even/odd PC modifier to modify snb pcl.0 */ mgl@1371: + BFD_RELOC_IP2K_PC_SKIP, mgl@1371: + mgl@1371: +/* Scenix IP2K - 16 bit word address in text section. */ mgl@1371: + BFD_RELOC_IP2K_TEXT, mgl@1371: + mgl@1371: +/* Scenix IP2K - 7-bit sp or dp offset */ mgl@1371: + BFD_RELOC_IP2K_FR_OFFSET, mgl@1371: + mgl@1371: +/* Scenix VPE4K coprocessor - data/insn-space addressing */ mgl@1371: + BFD_RELOC_VPE4KMATH_DATA, mgl@1371: + BFD_RELOC_VPE4KMATH_INSN, mgl@1371: + mgl@1371: +/* These two relocations are used by the linker to determine which of mgl@1371: +the entries in a C++ virtual function table are actually used. When mgl@1371: +the --gc-sections option is given, the linker will zero out the entries mgl@1371: +that are not used, so that the code for those functions need not be mgl@1371: +included in the output. mgl@1371: + mgl@1371: +VTABLE_INHERIT is a zero-space relocation used to describe to the mgl@1371: +linker the inheritance tree of a C++ virtual function table. The mgl@1371: +relocation's symbol should be the parent class' vtable, and the mgl@1371: +relocation should be located at the child vtable. mgl@1371: + mgl@1371: +VTABLE_ENTRY is a zero-space relocation that describes the use of a mgl@1371: +virtual function table entry. The reloc's symbol should refer to the mgl@1371: +table of the class mentioned in the code. Off of that base, an offset mgl@1371: +describes the entry that is being used. For Rela hosts, this offset mgl@1371: +is stored in the reloc's addend. For Rel hosts, we are forced to put mgl@1371: +this offset in the reloc's section offset. */ mgl@1371: + BFD_RELOC_VTABLE_INHERIT, mgl@1371: + BFD_RELOC_VTABLE_ENTRY, mgl@1371: + mgl@1371: +/* Intel IA64 Relocations. */ mgl@1371: + BFD_RELOC_IA64_IMM14, mgl@1371: + BFD_RELOC_IA64_IMM22, mgl@1371: + BFD_RELOC_IA64_IMM64, mgl@1371: + BFD_RELOC_IA64_DIR32MSB, mgl@1371: + BFD_RELOC_IA64_DIR32LSB, mgl@1371: + BFD_RELOC_IA64_DIR64MSB, mgl@1371: + BFD_RELOC_IA64_DIR64LSB, mgl@1371: + BFD_RELOC_IA64_GPREL22, mgl@1371: + BFD_RELOC_IA64_GPREL64I, mgl@1371: + BFD_RELOC_IA64_GPREL32MSB, mgl@1371: + BFD_RELOC_IA64_GPREL32LSB, mgl@1371: + BFD_RELOC_IA64_GPREL64MSB, mgl@1371: + BFD_RELOC_IA64_GPREL64LSB, mgl@1371: + BFD_RELOC_IA64_LTOFF22, mgl@1371: + BFD_RELOC_IA64_LTOFF64I, mgl@1371: + BFD_RELOC_IA64_PLTOFF22, mgl@1371: + BFD_RELOC_IA64_PLTOFF64I, mgl@1371: + BFD_RELOC_IA64_PLTOFF64MSB, mgl@1371: + BFD_RELOC_IA64_PLTOFF64LSB, mgl@1371: + BFD_RELOC_IA64_FPTR64I, mgl@1371: + BFD_RELOC_IA64_FPTR32MSB, mgl@1371: + BFD_RELOC_IA64_FPTR32LSB, mgl@1371: + BFD_RELOC_IA64_FPTR64MSB, mgl@1371: + BFD_RELOC_IA64_FPTR64LSB, mgl@1371: + BFD_RELOC_IA64_PCREL21B, mgl@1371: + BFD_RELOC_IA64_PCREL21BI, mgl@1371: + BFD_RELOC_IA64_PCREL21M, mgl@1371: + BFD_RELOC_IA64_PCREL21F, mgl@1371: + BFD_RELOC_IA64_PCREL22, mgl@1371: + BFD_RELOC_IA64_PCREL60B, mgl@1371: + BFD_RELOC_IA64_PCREL64I, mgl@1371: + BFD_RELOC_IA64_PCREL32MSB, mgl@1371: + BFD_RELOC_IA64_PCREL32LSB, mgl@1371: + BFD_RELOC_IA64_PCREL64MSB, mgl@1371: + BFD_RELOC_IA64_PCREL64LSB, mgl@1371: + BFD_RELOC_IA64_LTOFF_FPTR22, mgl@1371: + BFD_RELOC_IA64_LTOFF_FPTR64I, mgl@1371: + BFD_RELOC_IA64_LTOFF_FPTR32MSB, mgl@1371: + BFD_RELOC_IA64_LTOFF_FPTR32LSB, mgl@1371: + BFD_RELOC_IA64_LTOFF_FPTR64MSB, mgl@1371: + BFD_RELOC_IA64_LTOFF_FPTR64LSB, mgl@1371: + BFD_RELOC_IA64_SEGREL32MSB, mgl@1371: + BFD_RELOC_IA64_SEGREL32LSB, mgl@1371: + BFD_RELOC_IA64_SEGREL64MSB, mgl@1371: + BFD_RELOC_IA64_SEGREL64LSB, mgl@1371: + BFD_RELOC_IA64_SECREL32MSB, mgl@1371: + BFD_RELOC_IA64_SECREL32LSB, mgl@1371: + BFD_RELOC_IA64_SECREL64MSB, mgl@1371: + BFD_RELOC_IA64_SECREL64LSB, mgl@1371: + BFD_RELOC_IA64_REL32MSB, mgl@1371: + BFD_RELOC_IA64_REL32LSB, mgl@1371: + BFD_RELOC_IA64_REL64MSB, mgl@1371: + BFD_RELOC_IA64_REL64LSB, mgl@1371: + BFD_RELOC_IA64_LTV32MSB, mgl@1371: + BFD_RELOC_IA64_LTV32LSB, mgl@1371: + BFD_RELOC_IA64_LTV64MSB, mgl@1371: + BFD_RELOC_IA64_LTV64LSB, mgl@1371: + BFD_RELOC_IA64_IPLTMSB, mgl@1371: + BFD_RELOC_IA64_IPLTLSB, mgl@1371: + BFD_RELOC_IA64_COPY, mgl@1371: + BFD_RELOC_IA64_LTOFF22X, mgl@1371: + BFD_RELOC_IA64_LDXMOV, mgl@1371: + BFD_RELOC_IA64_TPREL14, mgl@1371: + BFD_RELOC_IA64_TPREL22, mgl@1371: + BFD_RELOC_IA64_TPREL64I, mgl@1371: + BFD_RELOC_IA64_TPREL64MSB, mgl@1371: + BFD_RELOC_IA64_TPREL64LSB, mgl@1371: + BFD_RELOC_IA64_LTOFF_TPREL22, mgl@1371: + BFD_RELOC_IA64_DTPMOD64MSB, mgl@1371: + BFD_RELOC_IA64_DTPMOD64LSB, mgl@1371: + BFD_RELOC_IA64_LTOFF_DTPMOD22, mgl@1371: + BFD_RELOC_IA64_DTPREL14, mgl@1371: + BFD_RELOC_IA64_DTPREL22, mgl@1371: + BFD_RELOC_IA64_DTPREL64I, mgl@1371: + BFD_RELOC_IA64_DTPREL32MSB, mgl@1371: + BFD_RELOC_IA64_DTPREL32LSB, mgl@1371: + BFD_RELOC_IA64_DTPREL64MSB, mgl@1371: + BFD_RELOC_IA64_DTPREL64LSB, mgl@1371: + BFD_RELOC_IA64_LTOFF_DTPREL22, mgl@1371: + mgl@1371: +/* Motorola 68HC11 reloc. mgl@1371: +This is the 8 bit high part of an absolute address. */ mgl@1371: + BFD_RELOC_M68HC11_HI8, mgl@1371: + mgl@1371: +/* Motorola 68HC11 reloc. mgl@1371: +This is the 8 bit low part of an absolute address. */ mgl@1371: + BFD_RELOC_M68HC11_LO8, mgl@1371: + mgl@1371: +/* Motorola 68HC11 reloc. mgl@1371: +This is the 3 bit of a value. */ mgl@1371: + BFD_RELOC_M68HC11_3B, mgl@1371: + mgl@1371: +/* Motorola 68HC11 reloc. mgl@1371: +This reloc marks the beginning of a jump/call instruction. mgl@1371: +It is used for linker relaxation to correctly identify beginning mgl@1371: +of instruction and change some branches to use PC-relative mgl@1371: +addressing mode. */ mgl@1371: + BFD_RELOC_M68HC11_RL_JUMP, mgl@1371: + mgl@1371: +/* Motorola 68HC11 reloc. mgl@1371: +This reloc marks a group of several instructions that gcc generates mgl@1371: +and for which the linker relaxation pass can modify and/or remove mgl@1371: +some of them. */ mgl@1371: + BFD_RELOC_M68HC11_RL_GROUP, mgl@1371: + mgl@1371: +/* Motorola 68HC11 reloc. mgl@1371: +This is the 16-bit lower part of an address. It is used for 'call' mgl@1371: +instruction to specify the symbol address without any special mgl@1371: +transformation (due to memory bank window). */ mgl@1371: + BFD_RELOC_M68HC11_LO16, mgl@1371: + mgl@1371: +/* Motorola 68HC11 reloc. mgl@1371: +This is a 8-bit reloc that specifies the page number of an address. mgl@1371: +It is used by 'call' instruction to specify the page number of mgl@1371: +the symbol. */ mgl@1371: + BFD_RELOC_M68HC11_PAGE, mgl@1371: + mgl@1371: +/* Motorola 68HC11 reloc. mgl@1371: +This is a 24-bit reloc that represents the address with a 16-bit mgl@1371: +value and a 8-bit page number. The symbol address is transformed mgl@1371: +to follow the 16K memory bank of 68HC12 (seen as mapped in the window). */ mgl@1371: + BFD_RELOC_M68HC11_24, mgl@1371: + mgl@1371: +/* Motorola 68HC12 reloc. mgl@1371: +This is the 5 bits of a value. */ mgl@1371: + BFD_RELOC_M68HC12_5B, mgl@1371: + mgl@1371: +/* NS CR16C Relocations. */ mgl@1371: + BFD_RELOC_16C_NUM08, mgl@1371: + BFD_RELOC_16C_NUM08_C, mgl@1371: + BFD_RELOC_16C_NUM16, mgl@1371: + BFD_RELOC_16C_NUM16_C, mgl@1371: + BFD_RELOC_16C_NUM32, mgl@1371: + BFD_RELOC_16C_NUM32_C, mgl@1371: + BFD_RELOC_16C_DISP04, mgl@1371: + BFD_RELOC_16C_DISP04_C, mgl@1371: + BFD_RELOC_16C_DISP08, mgl@1371: + BFD_RELOC_16C_DISP08_C, mgl@1371: + BFD_RELOC_16C_DISP16, mgl@1371: + BFD_RELOC_16C_DISP16_C, mgl@1371: + BFD_RELOC_16C_DISP24, mgl@1371: + BFD_RELOC_16C_DISP24_C, mgl@1371: + BFD_RELOC_16C_DISP24a, mgl@1371: + BFD_RELOC_16C_DISP24a_C, mgl@1371: + BFD_RELOC_16C_REG04, mgl@1371: + BFD_RELOC_16C_REG04_C, mgl@1371: + BFD_RELOC_16C_REG04a, mgl@1371: + BFD_RELOC_16C_REG04a_C, mgl@1371: + BFD_RELOC_16C_REG14, mgl@1371: + BFD_RELOC_16C_REG14_C, mgl@1371: + BFD_RELOC_16C_REG16, mgl@1371: + BFD_RELOC_16C_REG16_C, mgl@1371: + BFD_RELOC_16C_REG20, mgl@1371: + BFD_RELOC_16C_REG20_C, mgl@1371: + BFD_RELOC_16C_ABS20, mgl@1371: + BFD_RELOC_16C_ABS20_C, mgl@1371: + BFD_RELOC_16C_ABS24, mgl@1371: + BFD_RELOC_16C_ABS24_C, mgl@1371: + BFD_RELOC_16C_IMM04, mgl@1371: + BFD_RELOC_16C_IMM04_C, mgl@1371: + BFD_RELOC_16C_IMM16, mgl@1371: + BFD_RELOC_16C_IMM16_C, mgl@1371: + BFD_RELOC_16C_IMM20, mgl@1371: + BFD_RELOC_16C_IMM20_C, mgl@1371: + BFD_RELOC_16C_IMM24, mgl@1371: + BFD_RELOC_16C_IMM24_C, mgl@1371: + BFD_RELOC_16C_IMM32, mgl@1371: + BFD_RELOC_16C_IMM32_C, mgl@1371: + mgl@1371: +/* NS CR16 Relocations. */ mgl@1371: + BFD_RELOC_CR16_NUM8, mgl@1371: + BFD_RELOC_CR16_NUM16, mgl@1371: + BFD_RELOC_CR16_NUM32, mgl@1371: + BFD_RELOC_CR16_NUM32a, mgl@1371: + BFD_RELOC_CR16_REGREL0, mgl@1371: + BFD_RELOC_CR16_REGREL4, mgl@1371: + BFD_RELOC_CR16_REGREL4a, mgl@1371: + BFD_RELOC_CR16_REGREL14, mgl@1371: + BFD_RELOC_CR16_REGREL14a, mgl@1371: + BFD_RELOC_CR16_REGREL16, mgl@1371: + BFD_RELOC_CR16_REGREL20, mgl@1371: + BFD_RELOC_CR16_REGREL20a, mgl@1371: + BFD_RELOC_CR16_ABS20, mgl@1371: + BFD_RELOC_CR16_ABS24, mgl@1371: + BFD_RELOC_CR16_IMM4, mgl@1371: + BFD_RELOC_CR16_IMM8, mgl@1371: + BFD_RELOC_CR16_IMM16, mgl@1371: + BFD_RELOC_CR16_IMM20, mgl@1371: + BFD_RELOC_CR16_IMM24, mgl@1371: + BFD_RELOC_CR16_IMM32, mgl@1371: + BFD_RELOC_CR16_IMM32a, mgl@1371: + BFD_RELOC_CR16_DISP4, mgl@1371: + BFD_RELOC_CR16_DISP8, mgl@1371: + BFD_RELOC_CR16_DISP16, mgl@1371: + BFD_RELOC_CR16_DISP20, mgl@1371: + BFD_RELOC_CR16_DISP24, mgl@1371: + BFD_RELOC_CR16_DISP24a, mgl@1371: + mgl@1371: +/* NS CRX Relocations. */ mgl@1371: + BFD_RELOC_CRX_REL4, mgl@1371: + BFD_RELOC_CRX_REL8, mgl@1371: + BFD_RELOC_CRX_REL8_CMP, mgl@1371: + BFD_RELOC_CRX_REL16, mgl@1371: + BFD_RELOC_CRX_REL24, mgl@1371: + BFD_RELOC_CRX_REL32, mgl@1371: + BFD_RELOC_CRX_REGREL12, mgl@1371: + BFD_RELOC_CRX_REGREL22, mgl@1371: + BFD_RELOC_CRX_REGREL28, mgl@1371: + BFD_RELOC_CRX_REGREL32, mgl@1371: + BFD_RELOC_CRX_ABS16, mgl@1371: + BFD_RELOC_CRX_ABS32, mgl@1371: + BFD_RELOC_CRX_NUM8, mgl@1371: + BFD_RELOC_CRX_NUM16, mgl@1371: + BFD_RELOC_CRX_NUM32, mgl@1371: + BFD_RELOC_CRX_IMM16, mgl@1371: + BFD_RELOC_CRX_IMM32, mgl@1371: + BFD_RELOC_CRX_SWITCH8, mgl@1371: + BFD_RELOC_CRX_SWITCH16, mgl@1371: + BFD_RELOC_CRX_SWITCH32, mgl@1371: + mgl@1371: +/* These relocs are only used within the CRIS assembler. They are not mgl@1371: +(at present) written to any object files. */ mgl@1371: + BFD_RELOC_CRIS_BDISP8, mgl@1371: + BFD_RELOC_CRIS_UNSIGNED_5, mgl@1371: + BFD_RELOC_CRIS_SIGNED_6, mgl@1371: + BFD_RELOC_CRIS_UNSIGNED_6, mgl@1371: + BFD_RELOC_CRIS_SIGNED_8, mgl@1371: + BFD_RELOC_CRIS_UNSIGNED_8, mgl@1371: + BFD_RELOC_CRIS_SIGNED_16, mgl@1371: + BFD_RELOC_CRIS_UNSIGNED_16, mgl@1371: + BFD_RELOC_CRIS_LAPCQ_OFFSET, mgl@1371: + BFD_RELOC_CRIS_UNSIGNED_4, mgl@1371: + mgl@1371: +/* Relocs used in ELF shared libraries for CRIS. */ mgl@1371: + BFD_RELOC_CRIS_COPY, mgl@1371: + BFD_RELOC_CRIS_GLOB_DAT, mgl@1371: + BFD_RELOC_CRIS_JUMP_SLOT, mgl@1371: + BFD_RELOC_CRIS_RELATIVE, mgl@1371: + mgl@1371: +/* 32-bit offset to symbol-entry within GOT. */ mgl@1371: + BFD_RELOC_CRIS_32_GOT, mgl@1371: + mgl@1371: +/* 16-bit offset to symbol-entry within GOT. */ mgl@1371: + BFD_RELOC_CRIS_16_GOT, mgl@1371: + mgl@1371: +/* 32-bit offset to symbol-entry within GOT, with PLT handling. */ mgl@1371: + BFD_RELOC_CRIS_32_GOTPLT, mgl@1371: + mgl@1371: +/* 16-bit offset to symbol-entry within GOT, with PLT handling. */ mgl@1371: + BFD_RELOC_CRIS_16_GOTPLT, mgl@1371: + mgl@1371: +/* 32-bit offset to symbol, relative to GOT. */ mgl@1371: + BFD_RELOC_CRIS_32_GOTREL, mgl@1371: + mgl@1371: +/* 32-bit offset to symbol with PLT entry, relative to GOT. */ mgl@1371: + BFD_RELOC_CRIS_32_PLT_GOTREL, mgl@1371: + mgl@1371: +/* 32-bit offset to symbol with PLT entry, relative to this relocation. */ mgl@1371: + BFD_RELOC_CRIS_32_PLT_PCREL, mgl@1371: + mgl@1371: +/* Intel i860 Relocations. */ mgl@1371: + BFD_RELOC_860_COPY, mgl@1371: + BFD_RELOC_860_GLOB_DAT, mgl@1371: + BFD_RELOC_860_JUMP_SLOT, mgl@1371: + BFD_RELOC_860_RELATIVE, mgl@1371: + BFD_RELOC_860_PC26, mgl@1371: + BFD_RELOC_860_PLT26, mgl@1371: + BFD_RELOC_860_PC16, mgl@1371: + BFD_RELOC_860_LOW0, mgl@1371: + BFD_RELOC_860_SPLIT0, mgl@1371: + BFD_RELOC_860_LOW1, mgl@1371: + BFD_RELOC_860_SPLIT1, mgl@1371: + BFD_RELOC_860_LOW2, mgl@1371: + BFD_RELOC_860_SPLIT2, mgl@1371: + BFD_RELOC_860_LOW3, mgl@1371: + BFD_RELOC_860_LOGOT0, mgl@1371: + BFD_RELOC_860_SPGOT0, mgl@1371: + BFD_RELOC_860_LOGOT1, mgl@1371: + BFD_RELOC_860_SPGOT1, mgl@1371: + BFD_RELOC_860_LOGOTOFF0, mgl@1371: + BFD_RELOC_860_SPGOTOFF0, mgl@1371: + BFD_RELOC_860_LOGOTOFF1, mgl@1371: + BFD_RELOC_860_SPGOTOFF1, mgl@1371: + BFD_RELOC_860_LOGOTOFF2, mgl@1371: + BFD_RELOC_860_LOGOTOFF3, mgl@1371: + BFD_RELOC_860_LOPC, mgl@1371: + BFD_RELOC_860_HIGHADJ, mgl@1371: + BFD_RELOC_860_HAGOT, mgl@1371: + BFD_RELOC_860_HAGOTOFF, mgl@1371: + BFD_RELOC_860_HAPC, mgl@1371: + BFD_RELOC_860_HIGH, mgl@1371: + BFD_RELOC_860_HIGOT, mgl@1371: + BFD_RELOC_860_HIGOTOFF, mgl@1371: + mgl@1371: +/* OpenRISC Relocations. */ mgl@1371: + BFD_RELOC_OPENRISC_ABS_26, mgl@1371: + BFD_RELOC_OPENRISC_REL_26, mgl@1371: + mgl@1371: +/* H8 elf Relocations. */ mgl@1371: + BFD_RELOC_H8_DIR16A8, mgl@1371: + BFD_RELOC_H8_DIR16R8, mgl@1371: + BFD_RELOC_H8_DIR24A8, mgl@1371: + BFD_RELOC_H8_DIR24R8, mgl@1371: + BFD_RELOC_H8_DIR32A16, mgl@1371: + mgl@1371: +/* Sony Xstormy16 Relocations. */ mgl@1371: + BFD_RELOC_XSTORMY16_REL_12, mgl@1371: + BFD_RELOC_XSTORMY16_12, mgl@1371: + BFD_RELOC_XSTORMY16_24, mgl@1371: + BFD_RELOC_XSTORMY16_FPTR16, mgl@1371: + mgl@1371: +/* Self-describing complex relocations. */ mgl@1371: + BFD_RELOC_RELC, mgl@1371: + mgl@1371: + mgl@1371: +/* Infineon Relocations. */ mgl@1371: + BFD_RELOC_XC16X_PAG, mgl@1371: + BFD_RELOC_XC16X_POF, mgl@1371: + BFD_RELOC_XC16X_SEG, mgl@1371: + BFD_RELOC_XC16X_SOF, mgl@1371: + mgl@1371: +/* Relocations used by VAX ELF. */ mgl@1371: + BFD_RELOC_VAX_GLOB_DAT, mgl@1371: + BFD_RELOC_VAX_JMP_SLOT, mgl@1371: + BFD_RELOC_VAX_RELATIVE, mgl@1371: + mgl@1371: +/* Morpho MT - 16 bit immediate relocation. */ mgl@1371: + BFD_RELOC_MT_PC16, mgl@1371: + mgl@1371: +/* Morpho MT - Hi 16 bits of an address. */ mgl@1371: + BFD_RELOC_MT_HI16, mgl@1371: + mgl@1371: +/* Morpho MT - Low 16 bits of an address. */ mgl@1371: + BFD_RELOC_MT_LO16, mgl@1371: + mgl@1371: +/* Morpho MT - Used to tell the linker which vtable entries are used. */ mgl@1371: + BFD_RELOC_MT_GNU_VTINHERIT, mgl@1371: + mgl@1371: +/* Morpho MT - Used to tell the linker which vtable entries are used. */ mgl@1371: + BFD_RELOC_MT_GNU_VTENTRY, mgl@1371: + mgl@1371: +/* Morpho MT - 8 bit immediate relocation. */ mgl@1371: + BFD_RELOC_MT_PCINSN8, mgl@1371: + mgl@1371: +/* msp430 specific relocation codes */ mgl@1371: + BFD_RELOC_MSP430_10_PCREL, mgl@1371: + BFD_RELOC_MSP430_16_PCREL, mgl@1371: + BFD_RELOC_MSP430_16, mgl@1371: + BFD_RELOC_MSP430_16_PCREL_BYTE, mgl@1371: + BFD_RELOC_MSP430_16_BYTE, mgl@1371: + BFD_RELOC_MSP430_2X_PCREL, mgl@1371: + BFD_RELOC_MSP430_RL_PCREL, mgl@1371: + mgl@1371: +/* IQ2000 Relocations. */ mgl@1371: + BFD_RELOC_IQ2000_OFFSET_16, mgl@1371: + BFD_RELOC_IQ2000_OFFSET_21, mgl@1371: + BFD_RELOC_IQ2000_UHI16, mgl@1371: + mgl@1371: +/* Special Xtensa relocation used only by PLT entries in ELF shared mgl@1371: +objects to indicate that the runtime linker should set the value mgl@1371: +to one of its own internal functions or data structures. */ mgl@1371: + BFD_RELOC_XTENSA_RTLD, mgl@1371: + mgl@1371: +/* Xtensa relocations for ELF shared objects. */ mgl@1371: + BFD_RELOC_XTENSA_GLOB_DAT, mgl@1371: + BFD_RELOC_XTENSA_JMP_SLOT, mgl@1371: + BFD_RELOC_XTENSA_RELATIVE, mgl@1371: + mgl@1371: +/* Xtensa relocation used in ELF object files for symbols that may require mgl@1371: +PLT entries. Otherwise, this is just a generic 32-bit relocation. */ mgl@1371: + BFD_RELOC_XTENSA_PLT, mgl@1371: + mgl@1371: +/* Xtensa relocations to mark the difference of two local symbols. mgl@1371: +These are only needed to support linker relaxation and can be ignored mgl@1371: +when not relaxing. The field is set to the value of the difference mgl@1371: +assuming no relaxation. The relocation encodes the position of the mgl@1371: +first symbol so the linker can determine whether to adjust the field mgl@1371: +value. */ mgl@1371: + BFD_RELOC_XTENSA_DIFF8, mgl@1371: + BFD_RELOC_XTENSA_DIFF16, mgl@1371: + BFD_RELOC_XTENSA_DIFF32, mgl@1371: + mgl@1371: +/* Generic Xtensa relocations for instruction operands. Only the slot mgl@1371: +number is encoded in the relocation. The relocation applies to the mgl@1371: +last PC-relative immediate operand, or if there are no PC-relative mgl@1371: +immediates, to the last immediate operand. */ mgl@1371: + BFD_RELOC_XTENSA_SLOT0_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT1_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT2_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT3_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT4_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT5_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT6_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT7_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT8_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT9_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT10_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT11_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT12_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT13_OP, mgl@1371: + BFD_RELOC_XTENSA_SLOT14_OP, mgl@1371: + mgl@1371: +/* Alternate Xtensa relocations. Only the slot is encoded in the mgl@1371: +relocation. The meaning of these relocations is opcode-specific. */ mgl@1371: + BFD_RELOC_XTENSA_SLOT0_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT1_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT2_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT3_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT4_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT5_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT6_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT7_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT8_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT9_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT10_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT11_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT12_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT13_ALT, mgl@1371: + BFD_RELOC_XTENSA_SLOT14_ALT, mgl@1371: + mgl@1371: +/* Xtensa relocations for backward compatibility. These have all been mgl@1371: +replaced by BFD_RELOC_XTENSA_SLOT0_OP. */ mgl@1371: + BFD_RELOC_XTENSA_OP0, mgl@1371: + BFD_RELOC_XTENSA_OP1, mgl@1371: + BFD_RELOC_XTENSA_OP2, mgl@1371: + mgl@1371: +/* Xtensa relocation to mark that the assembler expanded the mgl@1371: +instructions from an original target. The expansion size is mgl@1371: +encoded in the reloc size. */ mgl@1371: + BFD_RELOC_XTENSA_ASM_EXPAND, mgl@1371: + mgl@1371: +/* Xtensa relocation to mark that the linker should simplify mgl@1371: +assembler-expanded instructions. This is commonly used mgl@1371: +internally by the linker after analysis of a mgl@1371: +BFD_RELOC_XTENSA_ASM_EXPAND. */ mgl@1371: + BFD_RELOC_XTENSA_ASM_SIMPLIFY, mgl@1371: + mgl@1371: +/* 8 bit signed offset in (ix+d) or (iy+d). */ mgl@1371: + BFD_RELOC_Z80_DISP8, mgl@1371: + mgl@1371: +/* DJNZ offset. */ mgl@1371: + BFD_RELOC_Z8K_DISP7, mgl@1371: + mgl@1371: +/* CALR offset. */ mgl@1371: + BFD_RELOC_Z8K_CALLR, mgl@1371: + mgl@1371: +/* 4 bit value. */ mgl@1371: + BFD_RELOC_Z8K_IMM4L, mgl@1371: + BFD_RELOC_UNUSED }; mgl@1371: +typedef enum bfd_reloc_code_real bfd_reloc_code_real_type; mgl@1371: +reloc_howto_type *bfd_reloc_type_lookup mgl@1371: + (bfd *abfd, bfd_reloc_code_real_type code); mgl@1371: +reloc_howto_type *bfd_reloc_name_lookup mgl@1371: + (bfd *abfd, const char *reloc_name); mgl@1371: + mgl@1371: +const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code); mgl@1371: + mgl@1371: +/* Extracted from syms.c. */ mgl@1371: + mgl@1371: +typedef struct bfd_symbol mgl@1371: +{ mgl@1371: + /* A pointer to the BFD which owns the symbol. This information mgl@1371: + is necessary so that a back end can work out what additional mgl@1371: + information (invisible to the application writer) is carried mgl@1371: + with the symbol. mgl@1371: + mgl@1371: + This field is *almost* redundant, since you can use section->owner mgl@1371: + instead, except that some symbols point to the global sections mgl@1371: + bfd_{abs,com,und}_section. This could be fixed by making mgl@1371: + these globals be per-bfd (or per-target-flavor). FIXME. */ mgl@1371: + struct bfd *the_bfd; /* Use bfd_asymbol_bfd(sym) to access this field. */ mgl@1371: + mgl@1371: + /* The text of the symbol. The name is left alone, and not copied; the mgl@1371: + application may not alter it. */ mgl@1371: + const char *name; mgl@1371: + mgl@1371: + /* The value of the symbol. This really should be a union of a mgl@1371: + numeric value with a pointer, since some flags indicate that mgl@1371: + a pointer to another symbol is stored here. */ mgl@1371: + symvalue value; mgl@1371: + mgl@1371: + /* Attributes of a symbol. */ mgl@1371: +#define BSF_NO_FLAGS 0x00 mgl@1371: + mgl@1371: + /* The symbol has local scope; <> in <>. The value mgl@1371: + is the offset into the section of the data. */ mgl@1371: +#define BSF_LOCAL 0x01 mgl@1371: + mgl@1371: + /* The symbol has global scope; initialized data in <>. The mgl@1371: + value is the offset into the section of the data. */ mgl@1371: +#define BSF_GLOBAL 0x02 mgl@1371: + mgl@1371: + /* The symbol has global scope and is exported. The value is mgl@1371: + the offset into the section of the data. */ mgl@1371: +#define BSF_EXPORT BSF_GLOBAL /* No real difference. */ mgl@1371: + mgl@1371: + /* A normal C symbol would be one of: mgl@1371: + <>, <>, <> or mgl@1371: + <>. */ mgl@1371: + mgl@1371: + /* The symbol is a debugging record. The value has an arbitrary mgl@1371: + meaning, unless BSF_DEBUGGING_RELOC is also set. */ mgl@1371: +#define BSF_DEBUGGING 0x08 mgl@1371: + mgl@1371: + /* The symbol denotes a function entry point. Used in ELF, mgl@1371: + perhaps others someday. */ mgl@1371: +#define BSF_FUNCTION 0x10 mgl@1371: + mgl@1371: + /* Used by the linker. */ mgl@1371: +#define BSF_KEEP 0x20 mgl@1371: +#define BSF_KEEP_G 0x40 mgl@1371: + mgl@1371: + /* A weak global symbol, overridable without warnings by mgl@1371: + a regular global symbol of the same name. */ mgl@1371: +#define BSF_WEAK 0x80 mgl@1371: + mgl@1371: + /* This symbol was created to point to a section, e.g. ELF's mgl@1371: + STT_SECTION symbols. */ mgl@1371: +#define BSF_SECTION_SYM 0x100 mgl@1371: + mgl@1371: + /* The symbol used to be a common symbol, but now it is mgl@1371: + allocated. */ mgl@1371: +#define BSF_OLD_COMMON 0x200 mgl@1371: + mgl@1371: + /* The default value for common data. */ mgl@1371: +#define BFD_FORT_COMM_DEFAULT_VALUE 0 mgl@1371: + mgl@1371: + /* In some files the type of a symbol sometimes alters its mgl@1371: + location in an output file - ie in coff a <> symbol mgl@1371: + which is also <> symbol appears where it was mgl@1371: + declared and not at the end of a section. This bit is set mgl@1371: + by the target BFD part to convey this information. */ mgl@1371: +#define BSF_NOT_AT_END 0x400 mgl@1371: + mgl@1371: + /* Signal that the symbol is the label of constructor section. */ mgl@1371: +#define BSF_CONSTRUCTOR 0x800 mgl@1371: + mgl@1371: + /* Signal that the symbol is a warning symbol. The name is a mgl@1371: + warning. The name of the next symbol is the one to warn about; mgl@1371: + if a reference is made to a symbol with the same name as the next mgl@1371: + symbol, a warning is issued by the linker. */ mgl@1371: +#define BSF_WARNING 0x1000 mgl@1371: + mgl@1371: + /* Signal that the symbol is indirect. This symbol is an indirect mgl@1371: + pointer to the symbol with the same name as the next symbol. */ mgl@1371: +#define BSF_INDIRECT 0x2000 mgl@1371: + mgl@1371: + /* BSF_FILE marks symbols that contain a file name. This is used mgl@1371: + for ELF STT_FILE symbols. */ mgl@1371: +#define BSF_FILE 0x4000 mgl@1371: + mgl@1371: + /* Symbol is from dynamic linking information. */ mgl@1371: +#define BSF_DYNAMIC 0x8000 mgl@1371: + mgl@1371: + /* The symbol denotes a data object. Used in ELF, and perhaps mgl@1371: + others someday. */ mgl@1371: +#define BSF_OBJECT 0x10000 mgl@1371: + mgl@1371: + /* This symbol is a debugging symbol. The value is the offset mgl@1371: + into the section of the data. BSF_DEBUGGING should be set mgl@1371: + as well. */ mgl@1371: +#define BSF_DEBUGGING_RELOC 0x20000 mgl@1371: + mgl@1371: + /* This symbol is thread local. Used in ELF. */ mgl@1371: +#define BSF_THREAD_LOCAL 0x40000 mgl@1371: + mgl@1371: + /* This symbol represents a complex relocation expression, mgl@1371: + with the expression tree serialized in the symbol name. */ mgl@1371: +#define BSF_RELC 0x80000 mgl@1371: + mgl@1371: + /* This symbol represents a signed complex relocation expression, mgl@1371: + with the expression tree serialized in the symbol name. */ mgl@1371: +#define BSF_SRELC 0x100000 mgl@1371: + mgl@1371: + flagword flags; mgl@1371: + mgl@1371: + /* A pointer to the section to which this symbol is mgl@1371: + relative. This will always be non NULL, there are special mgl@1371: + sections for undefined and absolute symbols. */ mgl@1371: + struct bfd_section *section; mgl@1371: + mgl@1371: + /* Back end special data. */ mgl@1371: + union mgl@1371: + { mgl@1371: + void *p; mgl@1371: + bfd_vma i; mgl@1371: + } mgl@1371: + udata; mgl@1371: +} mgl@1371: +asymbol; mgl@1371: + mgl@1371: +#define bfd_get_symtab_upper_bound(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd)) mgl@1371: + mgl@1371: +bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym); mgl@1371: + mgl@1371: +bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name); mgl@1371: + mgl@1371: +#define bfd_is_local_label_name(abfd, name) \ mgl@1371: + BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name)) mgl@1371: + mgl@1371: +bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym); mgl@1371: + mgl@1371: +#define bfd_is_target_special_symbol(abfd, sym) \ mgl@1371: + BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym)) mgl@1371: + mgl@1371: +#define bfd_canonicalize_symtab(abfd, location) \ mgl@1371: + BFD_SEND (abfd, _bfd_canonicalize_symtab, (abfd, location)) mgl@1371: + mgl@1371: +bfd_boolean bfd_set_symtab mgl@1371: + (bfd *abfd, asymbol **location, unsigned int count); mgl@1371: + mgl@1371: +void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol); mgl@1371: + mgl@1371: +#define bfd_make_empty_symbol(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd)) mgl@1371: + mgl@1371: +asymbol *_bfd_generic_make_empty_symbol (bfd *); mgl@1371: + mgl@1371: +#define bfd_make_debug_symbol(abfd,ptr,size) \ mgl@1371: + BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size)) mgl@1371: + mgl@1371: +int bfd_decode_symclass (asymbol *symbol); mgl@1371: + mgl@1371: +bfd_boolean bfd_is_undefined_symclass (int symclass); mgl@1371: + mgl@1371: +void bfd_symbol_info (asymbol *symbol, symbol_info *ret); mgl@1371: + mgl@1371: +bfd_boolean bfd_copy_private_symbol_data mgl@1371: + (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym); mgl@1371: + mgl@1371: +#define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \ mgl@1371: + BFD_SEND (obfd, _bfd_copy_private_symbol_data, \ mgl@1371: + (ibfd, isymbol, obfd, osymbol)) mgl@1371: + mgl@1371: +/* Extracted from bfd.c. */ mgl@1371: +struct bfd mgl@1371: +{ mgl@1371: + /* A unique identifier of the BFD */ mgl@1371: + unsigned int id; mgl@1371: + mgl@1371: + /* The filename the application opened the BFD with. */ mgl@1371: + const char *filename; mgl@1371: + mgl@1371: + /* A pointer to the target jump table. */ mgl@1371: + const struct bfd_target *xvec; mgl@1371: + mgl@1371: + /* The IOSTREAM, and corresponding IO vector that provide access mgl@1371: + to the file backing the BFD. */ mgl@1371: + void *iostream; mgl@1371: + const struct bfd_iovec *iovec; mgl@1371: + mgl@1371: + /* Is the file descriptor being cached? That is, can it be closed as mgl@1371: + needed, and re-opened when accessed later? */ mgl@1371: + bfd_boolean cacheable; mgl@1371: + mgl@1371: + /* Marks whether there was a default target specified when the mgl@1371: + BFD was opened. This is used to select which matching algorithm mgl@1371: + to use to choose the back end. */ mgl@1371: + bfd_boolean target_defaulted; mgl@1371: + mgl@1371: + /* The caching routines use these to maintain a mgl@1371: + least-recently-used list of BFDs. */ mgl@1371: + struct bfd *lru_prev, *lru_next; mgl@1371: + mgl@1371: + /* When a file is closed by the caching routines, BFD retains mgl@1371: + state information on the file here... */ mgl@1371: + ufile_ptr where; mgl@1371: + mgl@1371: + /* ... and here: (``once'' means at least once). */ mgl@1371: + bfd_boolean opened_once; mgl@1371: + mgl@1371: + /* Set if we have a locally maintained mtime value, rather than mgl@1371: + getting it from the file each time. */ mgl@1371: + bfd_boolean mtime_set; mgl@1371: + mgl@1371: + /* File modified time, if mtime_set is TRUE. */ mgl@1371: + long mtime; mgl@1371: + mgl@1371: + /* Reserved for an unimplemented file locking extension. */ mgl@1371: + int ifd; mgl@1371: + mgl@1371: + /* The format which belongs to the BFD. (object, core, etc.) */ mgl@1371: + bfd_format format; mgl@1371: + mgl@1371: + /* The direction with which the BFD was opened. */ mgl@1371: + enum bfd_direction mgl@1371: + { mgl@1371: + no_direction = 0, mgl@1371: + read_direction = 1, mgl@1371: + write_direction = 2, mgl@1371: + both_direction = 3 mgl@1371: + } mgl@1371: + direction; mgl@1371: + mgl@1371: + /* Format_specific flags. */ mgl@1371: + flagword flags; mgl@1371: + mgl@1371: + /* Currently my_archive is tested before adding origin to mgl@1371: + anything. I believe that this can become always an add of mgl@1371: + origin, with origin set to 0 for non archive files. */ mgl@1371: + ufile_ptr origin; mgl@1371: + mgl@1371: + /* Remember when output has begun, to stop strange things mgl@1371: + from happening. */ mgl@1371: + bfd_boolean output_has_begun; mgl@1371: + mgl@1371: + /* A hash table for section names. */ mgl@1371: + struct bfd_hash_table section_htab; mgl@1371: + mgl@1371: + /* Pointer to linked list of sections. */ mgl@1371: + struct bfd_section *sections; mgl@1371: + mgl@1371: + /* The last section on the section list. */ mgl@1371: + struct bfd_section *section_last; mgl@1371: + mgl@1371: + /* The number of sections. */ mgl@1371: + unsigned int section_count; mgl@1371: + mgl@1371: + /* Stuff only useful for object files: mgl@1371: + The start address. */ mgl@1371: + bfd_vma start_address; mgl@1371: + mgl@1371: + /* Used for input and output. */ mgl@1371: + unsigned int symcount; mgl@1371: + mgl@1371: + /* Symbol table for output BFD (with symcount entries). */ mgl@1371: + struct bfd_symbol **outsymbols; mgl@1371: + mgl@1371: + /* Used for slurped dynamic symbol tables. */ mgl@1371: + unsigned int dynsymcount; mgl@1371: + mgl@1371: + /* Pointer to structure which contains architecture information. */ mgl@1371: + const struct bfd_arch_info *arch_info; mgl@1371: + mgl@1371: + /* Flag set if symbols from this BFD should not be exported. */ mgl@1371: + bfd_boolean no_export; mgl@1371: + mgl@1371: + /* Stuff only useful for archives. */ mgl@1371: + void *arelt_data; mgl@1371: + struct bfd *my_archive; /* The containing archive BFD. */ mgl@1371: + struct bfd *archive_next; /* The next BFD in the archive. */ mgl@1371: + struct bfd *archive_head; /* The first BFD in the archive. */ mgl@1371: + bfd_boolean has_armap; mgl@1371: + mgl@1371: + /* A chain of BFD structures involved in a link. */ mgl@1371: + struct bfd *link_next; mgl@1371: + mgl@1371: + /* A field used by _bfd_generic_link_add_archive_symbols. This will mgl@1371: + be used only for archive elements. */ mgl@1371: + int archive_pass; mgl@1371: + mgl@1371: + /* Used by the back end to hold private data. */ mgl@1371: + union mgl@1371: + { mgl@1371: + struct aout_data_struct *aout_data; mgl@1371: + struct artdata *aout_ar_data; mgl@1371: + struct _oasys_data *oasys_obj_data; mgl@1371: + struct _oasys_ar_data *oasys_ar_data; mgl@1371: + struct coff_tdata *coff_obj_data; mgl@1371: + struct pe_tdata *pe_obj_data; mgl@1371: + struct xcoff_tdata *xcoff_obj_data; mgl@1371: + struct ecoff_tdata *ecoff_obj_data; mgl@1371: + struct ieee_data_struct *ieee_data; mgl@1371: + struct ieee_ar_data_struct *ieee_ar_data; mgl@1371: + struct srec_data_struct *srec_data; mgl@1371: + struct ihex_data_struct *ihex_data; mgl@1371: + struct tekhex_data_struct *tekhex_data; mgl@1371: + struct elf_obj_tdata *elf_obj_data; mgl@1371: + struct nlm_obj_tdata *nlm_obj_data; mgl@1371: + struct bout_data_struct *bout_data; mgl@1371: + struct mmo_data_struct *mmo_data; mgl@1371: + struct sun_core_struct *sun_core_data; mgl@1371: + struct sco5_core_struct *sco5_core_data; mgl@1371: + struct trad_core_struct *trad_core_data; mgl@1371: + struct som_data_struct *som_data; mgl@1371: + struct hpux_core_struct *hpux_core_data; mgl@1371: + struct hppabsd_core_struct *hppabsd_core_data; mgl@1371: + struct sgi_core_struct *sgi_core_data; mgl@1371: + struct lynx_core_struct *lynx_core_data; mgl@1371: + struct osf_core_struct *osf_core_data; mgl@1371: + struct cisco_core_struct *cisco_core_data; mgl@1371: + struct versados_data_struct *versados_data; mgl@1371: + struct netbsd_core_struct *netbsd_core_data; mgl@1371: + struct mach_o_data_struct *mach_o_data; mgl@1371: + struct mach_o_fat_data_struct *mach_o_fat_data; mgl@1371: + struct bfd_pef_data_struct *pef_data; mgl@1371: + struct bfd_pef_xlib_data_struct *pef_xlib_data; mgl@1371: + struct bfd_sym_data_struct *sym_data; mgl@1371: + void *any; mgl@1371: + } mgl@1371: + tdata; mgl@1371: + mgl@1371: + /* Used by the application to hold private data. */ mgl@1371: + void *usrdata; mgl@1371: + mgl@1371: + /* Where all the allocated stuff under this BFD goes. This is a mgl@1371: + struct objalloc *, but we use void * to avoid requiring the inclusion mgl@1371: + of objalloc.h. */ mgl@1371: + void *memory; mgl@1371: +}; mgl@1371: + mgl@1371: +typedef enum bfd_error mgl@1371: +{ mgl@1371: + bfd_error_no_error = 0, mgl@1371: + bfd_error_system_call, mgl@1371: + bfd_error_invalid_target, mgl@1371: + bfd_error_wrong_format, mgl@1371: + bfd_error_wrong_object_format, mgl@1371: + bfd_error_invalid_operation, mgl@1371: + bfd_error_no_memory, mgl@1371: + bfd_error_no_symbols, mgl@1371: + bfd_error_no_armap, mgl@1371: + bfd_error_no_more_archived_files, mgl@1371: + bfd_error_malformed_archive, mgl@1371: + bfd_error_file_not_recognized, mgl@1371: + bfd_error_file_ambiguously_recognized, mgl@1371: + bfd_error_no_contents, mgl@1371: + bfd_error_nonrepresentable_section, mgl@1371: + bfd_error_no_debug_section, mgl@1371: + bfd_error_bad_value, mgl@1371: + bfd_error_file_truncated, mgl@1371: + bfd_error_file_too_big, mgl@1371: + bfd_error_on_input, mgl@1371: + bfd_error_invalid_error_code mgl@1371: +} mgl@1371: +bfd_error_type; mgl@1371: + mgl@1371: +bfd_error_type bfd_get_error (void); mgl@1371: + mgl@1371: +void bfd_set_error (bfd_error_type error_tag, ...); mgl@1371: + mgl@1371: +const char *bfd_errmsg (bfd_error_type error_tag); mgl@1371: + mgl@1371: +void bfd_perror (const char *message); mgl@1371: + mgl@1371: +typedef void (*bfd_error_handler_type) (const char *, ...); mgl@1371: + mgl@1371: +bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type); mgl@1371: + mgl@1371: +void bfd_set_error_program_name (const char *); mgl@1371: + mgl@1371: +bfd_error_handler_type bfd_get_error_handler (void); mgl@1371: + mgl@1371: +long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect); mgl@1371: + mgl@1371: +long bfd_canonicalize_reloc mgl@1371: + (bfd *abfd, asection *sec, arelent **loc, asymbol **syms); mgl@1371: + mgl@1371: +void bfd_set_reloc mgl@1371: + (bfd *abfd, asection *sec, arelent **rel, unsigned int count); mgl@1371: + mgl@1371: +bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags); mgl@1371: + mgl@1371: +int bfd_get_arch_size (bfd *abfd); mgl@1371: + mgl@1371: +int bfd_get_sign_extend_vma (bfd *abfd); mgl@1371: + mgl@1371: +bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma); mgl@1371: + mgl@1371: +unsigned int bfd_get_gp_size (bfd *abfd); mgl@1371: + mgl@1371: +void bfd_set_gp_size (bfd *abfd, unsigned int i); mgl@1371: + mgl@1371: +bfd_vma bfd_scan_vma (const char *string, const char **end, int base); mgl@1371: + mgl@1371: +bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd); mgl@1371: + mgl@1371: +#define bfd_copy_private_header_data(ibfd, obfd) \ mgl@1371: + BFD_SEND (obfd, _bfd_copy_private_header_data, \ mgl@1371: + (ibfd, obfd)) mgl@1371: +bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd); mgl@1371: + mgl@1371: +#define bfd_copy_private_bfd_data(ibfd, obfd) \ mgl@1371: + BFD_SEND (obfd, _bfd_copy_private_bfd_data, \ mgl@1371: + (ibfd, obfd)) mgl@1371: +bfd_boolean bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd); mgl@1371: + mgl@1371: +#define bfd_merge_private_bfd_data(ibfd, obfd) \ mgl@1371: + BFD_SEND (obfd, _bfd_merge_private_bfd_data, \ mgl@1371: + (ibfd, obfd)) mgl@1371: +bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags); mgl@1371: + mgl@1371: +#define bfd_set_private_flags(abfd, flags) \ mgl@1371: + BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags)) mgl@1371: +#define bfd_sizeof_headers(abfd, info) \ mgl@1371: + BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info)) mgl@1371: + mgl@1371: +#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \ mgl@1371: + BFD_SEND (abfd, _bfd_find_nearest_line, \ mgl@1371: + (abfd, sec, syms, off, file, func, line)) mgl@1371: + mgl@1371: +#define bfd_find_line(abfd, syms, sym, file, line) \ mgl@1371: + BFD_SEND (abfd, _bfd_find_line, \ mgl@1371: + (abfd, syms, sym, file, line)) mgl@1371: + mgl@1371: +#define bfd_find_inliner_info(abfd, file, func, line) \ mgl@1371: + BFD_SEND (abfd, _bfd_find_inliner_info, \ mgl@1371: + (abfd, file, func, line)) mgl@1371: + mgl@1371: +#define bfd_debug_info_start(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_debug_info_start, (abfd)) mgl@1371: + mgl@1371: +#define bfd_debug_info_end(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_debug_info_end, (abfd)) mgl@1371: + mgl@1371: +#define bfd_debug_info_accumulate(abfd, section) \ mgl@1371: + BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section)) mgl@1371: + mgl@1371: +#define bfd_stat_arch_elt(abfd, stat) \ mgl@1371: + BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat)) mgl@1371: + mgl@1371: +#define bfd_update_armap_timestamp(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd)) mgl@1371: + mgl@1371: +#define bfd_set_arch_mach(abfd, arch, mach)\ mgl@1371: + BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach)) mgl@1371: + mgl@1371: +#define bfd_relax_section(abfd, section, link_info, again) \ mgl@1371: + BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again)) mgl@1371: + mgl@1371: +#define bfd_gc_sections(abfd, link_info) \ mgl@1371: + BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info)) mgl@1371: + mgl@1371: +#define bfd_merge_sections(abfd, link_info) \ mgl@1371: + BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info)) mgl@1371: + mgl@1371: +#define bfd_is_group_section(abfd, sec) \ mgl@1371: + BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec)) mgl@1371: + mgl@1371: +#define bfd_discard_group(abfd, sec) \ mgl@1371: + BFD_SEND (abfd, _bfd_discard_group, (abfd, sec)) mgl@1371: + mgl@1371: +#define bfd_link_hash_table_create(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd)) mgl@1371: + mgl@1371: +#define bfd_link_hash_table_free(abfd, hash) \ mgl@1371: + BFD_SEND (abfd, _bfd_link_hash_table_free, (hash)) mgl@1371: + mgl@1371: +#define bfd_link_add_symbols(abfd, info) \ mgl@1371: + BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info)) mgl@1371: + mgl@1371: +#define bfd_link_just_syms(abfd, sec, info) \ mgl@1371: + BFD_SEND (abfd, _bfd_link_just_syms, (sec, info)) mgl@1371: + mgl@1371: +#define bfd_final_link(abfd, info) \ mgl@1371: + BFD_SEND (abfd, _bfd_final_link, (abfd, info)) mgl@1371: + mgl@1371: +#define bfd_free_cached_info(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_free_cached_info, (abfd)) mgl@1371: + mgl@1371: +#define bfd_get_dynamic_symtab_upper_bound(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd)) mgl@1371: + mgl@1371: +#define bfd_print_private_bfd_data(abfd, file)\ mgl@1371: + BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file)) mgl@1371: + mgl@1371: +#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \ mgl@1371: + BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols)) mgl@1371: + mgl@1371: +#define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \ mgl@1371: + BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \ mgl@1371: + dyncount, dynsyms, ret)) mgl@1371: + mgl@1371: +#define bfd_get_dynamic_reloc_upper_bound(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd)) mgl@1371: + mgl@1371: +#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \ mgl@1371: + BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms)) mgl@1371: + mgl@1371: +extern bfd_byte *bfd_get_relocated_section_contents mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *, mgl@1371: + bfd_boolean, asymbol **); mgl@1371: + mgl@1371: +bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative); mgl@1371: + mgl@1371: +struct bfd_preserve mgl@1371: +{ mgl@1371: + void *marker; mgl@1371: + void *tdata; mgl@1371: + flagword flags; mgl@1371: + const struct bfd_arch_info *arch_info; mgl@1371: + struct bfd_section *sections; mgl@1371: + struct bfd_section *section_last; mgl@1371: + unsigned int section_count; mgl@1371: + struct bfd_hash_table section_htab; mgl@1371: +}; mgl@1371: + mgl@1371: +bfd_boolean bfd_preserve_save (bfd *, struct bfd_preserve *); mgl@1371: + mgl@1371: +void bfd_preserve_restore (bfd *, struct bfd_preserve *); mgl@1371: + mgl@1371: +void bfd_preserve_finish (bfd *, struct bfd_preserve *); mgl@1371: + mgl@1371: +bfd_vma bfd_emul_get_maxpagesize (const char *); mgl@1371: + mgl@1371: +void bfd_emul_set_maxpagesize (const char *, bfd_vma); mgl@1371: + mgl@1371: +bfd_vma bfd_emul_get_commonpagesize (const char *); mgl@1371: + mgl@1371: +void bfd_emul_set_commonpagesize (const char *, bfd_vma); mgl@1371: + mgl@1371: +char *bfd_demangle (bfd *, const char *, int); mgl@1371: + mgl@1371: +/* Extracted from archive.c. */ mgl@1371: +symindex bfd_get_next_mapent mgl@1371: + (bfd *abfd, symindex previous, carsym **sym); mgl@1371: + mgl@1371: +bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head); mgl@1371: + mgl@1371: +bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous); mgl@1371: + mgl@1371: +/* Extracted from corefile.c. */ mgl@1371: +const char *bfd_core_file_failing_command (bfd *abfd); mgl@1371: + mgl@1371: +int bfd_core_file_failing_signal (bfd *abfd); mgl@1371: + mgl@1371: +bfd_boolean core_file_matches_executable_p mgl@1371: + (bfd *core_bfd, bfd *exec_bfd); mgl@1371: + mgl@1371: +bfd_boolean generic_core_file_matches_executable_p mgl@1371: + (bfd *core_bfd, bfd *exec_bfd); mgl@1371: + mgl@1371: +/* Extracted from targets.c. */ mgl@1371: +#define BFD_SEND(bfd, message, arglist) \ mgl@1371: + ((*((bfd)->xvec->message)) arglist) mgl@1371: + mgl@1371: +#ifdef DEBUG_BFD_SEND mgl@1371: +#undef BFD_SEND mgl@1371: +#define BFD_SEND(bfd, message, arglist) \ mgl@1371: + (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \ mgl@1371: + ((*((bfd)->xvec->message)) arglist) : \ mgl@1371: + (bfd_assert (__FILE__,__LINE__), NULL)) mgl@1371: +#endif mgl@1371: +#define BFD_SEND_FMT(bfd, message, arglist) \ mgl@1371: + (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) mgl@1371: + mgl@1371: +#ifdef DEBUG_BFD_SEND mgl@1371: +#undef BFD_SEND_FMT mgl@1371: +#define BFD_SEND_FMT(bfd, message, arglist) \ mgl@1371: + (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \ mgl@1371: + (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) : \ mgl@1371: + (bfd_assert (__FILE__,__LINE__), NULL)) mgl@1371: +#endif mgl@1371: + mgl@1371: +enum bfd_flavour mgl@1371: +{ mgl@1371: + bfd_target_unknown_flavour, mgl@1371: + bfd_target_aout_flavour, mgl@1371: + bfd_target_coff_flavour, mgl@1371: + bfd_target_ecoff_flavour, mgl@1371: + bfd_target_xcoff_flavour, mgl@1371: + bfd_target_elf_flavour, mgl@1371: + bfd_target_ieee_flavour, mgl@1371: + bfd_target_nlm_flavour, mgl@1371: + bfd_target_oasys_flavour, mgl@1371: + bfd_target_tekhex_flavour, mgl@1371: + bfd_target_srec_flavour, mgl@1371: + bfd_target_ihex_flavour, mgl@1371: + bfd_target_som_flavour, mgl@1371: + bfd_target_os9k_flavour, mgl@1371: + bfd_target_versados_flavour, mgl@1371: + bfd_target_msdos_flavour, mgl@1371: + bfd_target_ovax_flavour, mgl@1371: + bfd_target_evax_flavour, mgl@1371: + bfd_target_mmo_flavour, mgl@1371: + bfd_target_mach_o_flavour, mgl@1371: + bfd_target_pef_flavour, mgl@1371: + bfd_target_pef_xlib_flavour, mgl@1371: + bfd_target_sym_flavour mgl@1371: +}; mgl@1371: + mgl@1371: +enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN }; mgl@1371: + mgl@1371: +/* Forward declaration. */ mgl@1371: +typedef struct bfd_link_info _bfd_link_info; mgl@1371: + mgl@1371: +typedef struct bfd_target mgl@1371: +{ mgl@1371: + /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc. */ mgl@1371: + char *name; mgl@1371: + mgl@1371: + /* The "flavour" of a back end is a general indication about mgl@1371: + the contents of a file. */ mgl@1371: + enum bfd_flavour flavour; mgl@1371: + mgl@1371: + /* The order of bytes within the data area of a file. */ mgl@1371: + enum bfd_endian byteorder; mgl@1371: + mgl@1371: + /* The order of bytes within the header parts of a file. */ mgl@1371: + enum bfd_endian header_byteorder; mgl@1371: + mgl@1371: + /* A mask of all the flags which an executable may have set - mgl@1371: + from the set <>, <>, ...<>. */ mgl@1371: + flagword object_flags; mgl@1371: + mgl@1371: + /* A mask of all the flags which a section may have set - from mgl@1371: + the set <>, <>, ...<>. */ mgl@1371: + flagword section_flags; mgl@1371: + mgl@1371: + /* The character normally found at the front of a symbol. mgl@1371: + (if any), perhaps `_'. */ mgl@1371: + char symbol_leading_char; mgl@1371: + mgl@1371: + /* The pad character for file names within an archive header. */ mgl@1371: + char ar_pad_char; mgl@1371: + mgl@1371: + /* The maximum number of characters in an archive header. */ mgl@1371: + unsigned short ar_max_namelen; mgl@1371: + mgl@1371: + /* Entries for byte swapping for data. These are different from the mgl@1371: + other entry points, since they don't take a BFD as the first argument. mgl@1371: + Certain other handlers could do the same. */ mgl@1371: + bfd_uint64_t (*bfd_getx64) (const void *); mgl@1371: + bfd_int64_t (*bfd_getx_signed_64) (const void *); mgl@1371: + void (*bfd_putx64) (bfd_uint64_t, void *); mgl@1371: + bfd_vma (*bfd_getx32) (const void *); mgl@1371: + bfd_signed_vma (*bfd_getx_signed_32) (const void *); mgl@1371: + void (*bfd_putx32) (bfd_vma, void *); mgl@1371: + bfd_vma (*bfd_getx16) (const void *); mgl@1371: + bfd_signed_vma (*bfd_getx_signed_16) (const void *); mgl@1371: + void (*bfd_putx16) (bfd_vma, void *); mgl@1371: + mgl@1371: + /* Byte swapping for the headers. */ mgl@1371: + bfd_uint64_t (*bfd_h_getx64) (const void *); mgl@1371: + bfd_int64_t (*bfd_h_getx_signed_64) (const void *); mgl@1371: + void (*bfd_h_putx64) (bfd_uint64_t, void *); mgl@1371: + bfd_vma (*bfd_h_getx32) (const void *); mgl@1371: + bfd_signed_vma (*bfd_h_getx_signed_32) (const void *); mgl@1371: + void (*bfd_h_putx32) (bfd_vma, void *); mgl@1371: + bfd_vma (*bfd_h_getx16) (const void *); mgl@1371: + bfd_signed_vma (*bfd_h_getx_signed_16) (const void *); mgl@1371: + void (*bfd_h_putx16) (bfd_vma, void *); mgl@1371: + mgl@1371: + /* Format dependent routines: these are vectors of entry points mgl@1371: + within the target vector structure, one for each format to check. */ mgl@1371: + mgl@1371: + /* Check the format of a file being read. Return a <> or zero. */ mgl@1371: + const struct bfd_target *(*_bfd_check_format[bfd_type_end]) (bfd *); mgl@1371: + mgl@1371: + /* Set the format of a file being written. */ mgl@1371: + bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *); mgl@1371: + mgl@1371: + /* Write cached information into a file being written, at <>. */ mgl@1371: + bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *); mgl@1371: + mgl@1371: + mgl@1371: + /* Generic entry points. */ mgl@1371: +#define BFD_JUMP_TABLE_GENERIC(NAME) \ mgl@1371: + NAME##_close_and_cleanup, \ mgl@1371: + NAME##_bfd_free_cached_info, \ mgl@1371: + NAME##_new_section_hook, \ mgl@1371: + NAME##_get_section_contents, \ mgl@1371: + NAME##_get_section_contents_in_window mgl@1371: + mgl@1371: + /* Called when the BFD is being closed to do any necessary cleanup. */ mgl@1371: + bfd_boolean (*_close_and_cleanup) (bfd *); mgl@1371: + /* Ask the BFD to free all cached information. */ mgl@1371: + bfd_boolean (*_bfd_free_cached_info) (bfd *); mgl@1371: + /* Called when a new section is created. */ mgl@1371: + bfd_boolean (*_new_section_hook) (bfd *, sec_ptr); mgl@1371: + /* Read the contents of a section. */ mgl@1371: + bfd_boolean (*_bfd_get_section_contents) mgl@1371: + (bfd *, sec_ptr, void *, file_ptr, bfd_size_type); mgl@1371: + bfd_boolean (*_bfd_get_section_contents_in_window) mgl@1371: + (bfd *, sec_ptr, bfd_window *, file_ptr, bfd_size_type); mgl@1371: + mgl@1371: + /* Entry points to copy private data. */ mgl@1371: +#define BFD_JUMP_TABLE_COPY(NAME) \ mgl@1371: + NAME##_bfd_copy_private_bfd_data, \ mgl@1371: + NAME##_bfd_merge_private_bfd_data, \ mgl@1371: + _bfd_generic_init_private_section_data, \ mgl@1371: + NAME##_bfd_copy_private_section_data, \ mgl@1371: + NAME##_bfd_copy_private_symbol_data, \ mgl@1371: + NAME##_bfd_copy_private_header_data, \ mgl@1371: + NAME##_bfd_set_private_flags, \ mgl@1371: + NAME##_bfd_print_private_bfd_data mgl@1371: + mgl@1371: + /* Called to copy BFD general private data from one object file mgl@1371: + to another. */ mgl@1371: + bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *); mgl@1371: + /* Called to merge BFD general private data from one object file mgl@1371: + to a common output file when linking. */ mgl@1371: + bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, bfd *); mgl@1371: + /* Called to initialize BFD private section data from one object file mgl@1371: + to another. */ mgl@1371: +#define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \ mgl@1371: + BFD_SEND (obfd, _bfd_init_private_section_data, (ibfd, isec, obfd, osec, link_info)) mgl@1371: + bfd_boolean (*_bfd_init_private_section_data) mgl@1371: + (bfd *, sec_ptr, bfd *, sec_ptr, struct bfd_link_info *); mgl@1371: + /* Called to copy BFD private section data from one object file mgl@1371: + to another. */ mgl@1371: + bfd_boolean (*_bfd_copy_private_section_data) mgl@1371: + (bfd *, sec_ptr, bfd *, sec_ptr); mgl@1371: + /* Called to copy BFD private symbol data from one symbol mgl@1371: + to another. */ mgl@1371: + bfd_boolean (*_bfd_copy_private_symbol_data) mgl@1371: + (bfd *, asymbol *, bfd *, asymbol *); mgl@1371: + /* Called to copy BFD private header data from one object file mgl@1371: + to another. */ mgl@1371: + bfd_boolean (*_bfd_copy_private_header_data) mgl@1371: + (bfd *, bfd *); mgl@1371: + /* Called to set private backend flags. */ mgl@1371: + bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword); mgl@1371: + mgl@1371: + /* Called to print private BFD data. */ mgl@1371: + bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *); mgl@1371: + mgl@1371: + /* Core file entry points. */ mgl@1371: +#define BFD_JUMP_TABLE_CORE(NAME) \ mgl@1371: + NAME##_core_file_failing_command, \ mgl@1371: + NAME##_core_file_failing_signal, \ mgl@1371: + NAME##_core_file_matches_executable_p mgl@1371: + mgl@1371: + char * (*_core_file_failing_command) (bfd *); mgl@1371: + int (*_core_file_failing_signal) (bfd *); mgl@1371: + bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *); mgl@1371: + mgl@1371: + /* Archive entry points. */ mgl@1371: +#define BFD_JUMP_TABLE_ARCHIVE(NAME) \ mgl@1371: + NAME##_slurp_armap, \ mgl@1371: + NAME##_slurp_extended_name_table, \ mgl@1371: + NAME##_construct_extended_name_table, \ mgl@1371: + NAME##_truncate_arname, \ mgl@1371: + NAME##_write_armap, \ mgl@1371: + NAME##_read_ar_hdr, \ mgl@1371: + NAME##_openr_next_archived_file, \ mgl@1371: + NAME##_get_elt_at_index, \ mgl@1371: + NAME##_generic_stat_arch_elt, \ mgl@1371: + NAME##_update_armap_timestamp mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_slurp_armap) (bfd *); mgl@1371: + bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *); mgl@1371: + bfd_boolean (*_bfd_construct_extended_name_table) mgl@1371: + (bfd *, char **, bfd_size_type *, const char **); mgl@1371: + void (*_bfd_truncate_arname) (bfd *, const char *, char *); mgl@1371: + bfd_boolean (*write_armap) mgl@1371: + (bfd *, unsigned int, struct orl *, unsigned int, int); mgl@1371: + void * (*_bfd_read_ar_hdr_fn) (bfd *); mgl@1371: + bfd * (*openr_next_archived_file) (bfd *, bfd *); mgl@1371: +#define bfd_get_elt_at_index(b,i) BFD_SEND (b, _bfd_get_elt_at_index, (b,i)) mgl@1371: + bfd * (*_bfd_get_elt_at_index) (bfd *, symindex); mgl@1371: + int (*_bfd_stat_arch_elt) (bfd *, struct stat *); mgl@1371: + bfd_boolean (*_bfd_update_armap_timestamp) (bfd *); mgl@1371: + mgl@1371: + /* Entry points used for symbols. */ mgl@1371: +#define BFD_JUMP_TABLE_SYMBOLS(NAME) \ mgl@1371: + NAME##_get_symtab_upper_bound, \ mgl@1371: + NAME##_canonicalize_symtab, \ mgl@1371: + NAME##_make_empty_symbol, \ mgl@1371: + NAME##_print_symbol, \ mgl@1371: + NAME##_get_symbol_info, \ mgl@1371: + NAME##_bfd_is_local_label_name, \ mgl@1371: + NAME##_bfd_is_target_special_symbol, \ mgl@1371: + NAME##_get_lineno, \ mgl@1371: + NAME##_find_nearest_line, \ mgl@1371: + _bfd_generic_find_line, \ mgl@1371: + NAME##_find_inliner_info, \ mgl@1371: + NAME##_bfd_make_debug_symbol, \ mgl@1371: + NAME##_read_minisymbols, \ mgl@1371: + NAME##_minisymbol_to_symbol mgl@1371: + mgl@1371: + long (*_bfd_get_symtab_upper_bound) (bfd *); mgl@1371: + long (*_bfd_canonicalize_symtab) mgl@1371: + (bfd *, struct bfd_symbol **); mgl@1371: + struct bfd_symbol * mgl@1371: + (*_bfd_make_empty_symbol) (bfd *); mgl@1371: + void (*_bfd_print_symbol) mgl@1371: + (bfd *, void *, struct bfd_symbol *, bfd_print_symbol_type); mgl@1371: +#define bfd_print_symbol(b,p,s,e) BFD_SEND (b, _bfd_print_symbol, (b,p,s,e)) mgl@1371: + void (*_bfd_get_symbol_info) mgl@1371: + (bfd *, struct bfd_symbol *, symbol_info *); mgl@1371: +#define bfd_get_symbol_info(b,p,e) BFD_SEND (b, _bfd_get_symbol_info, (b,p,e)) mgl@1371: + bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *); mgl@1371: + bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *); mgl@1371: + alent * (*_get_lineno) (bfd *, struct bfd_symbol *); mgl@1371: + bfd_boolean (*_bfd_find_nearest_line) mgl@1371: + (bfd *, struct bfd_section *, struct bfd_symbol **, bfd_vma, mgl@1371: + const char **, const char **, unsigned int *); mgl@1371: + bfd_boolean (*_bfd_find_line) mgl@1371: + (bfd *, struct bfd_symbol **, struct bfd_symbol *, mgl@1371: + const char **, unsigned int *); mgl@1371: + bfd_boolean (*_bfd_find_inliner_info) mgl@1371: + (bfd *, const char **, const char **, unsigned int *); mgl@1371: + /* Back-door to allow format-aware applications to create debug symbols mgl@1371: + while using BFD for everything else. Currently used by the assembler mgl@1371: + when creating COFF files. */ mgl@1371: + asymbol * (*_bfd_make_debug_symbol) mgl@1371: + (bfd *, void *, unsigned long size); mgl@1371: +#define bfd_read_minisymbols(b, d, m, s) \ mgl@1371: + BFD_SEND (b, _read_minisymbols, (b, d, m, s)) mgl@1371: + long (*_read_minisymbols) mgl@1371: + (bfd *, bfd_boolean, void **, unsigned int *); mgl@1371: +#define bfd_minisymbol_to_symbol(b, d, m, f) \ mgl@1371: + BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f)) mgl@1371: + asymbol * (*_minisymbol_to_symbol) mgl@1371: + (bfd *, bfd_boolean, const void *, asymbol *); mgl@1371: + mgl@1371: + /* Routines for relocs. */ mgl@1371: +#define BFD_JUMP_TABLE_RELOCS(NAME) \ mgl@1371: + NAME##_get_reloc_upper_bound, \ mgl@1371: + NAME##_canonicalize_reloc, \ mgl@1371: + NAME##_bfd_reloc_type_lookup, \ mgl@1371: + NAME##_bfd_reloc_name_lookup mgl@1371: + mgl@1371: + long (*_get_reloc_upper_bound) (bfd *, sec_ptr); mgl@1371: + long (*_bfd_canonicalize_reloc) mgl@1371: + (bfd *, sec_ptr, arelent **, struct bfd_symbol **); mgl@1371: + /* See documentation on reloc types. */ mgl@1371: + reloc_howto_type * mgl@1371: + (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type); mgl@1371: + reloc_howto_type * mgl@1371: + (*reloc_name_lookup) (bfd *, const char *); mgl@1371: + mgl@1371: + mgl@1371: + /* Routines used when writing an object file. */ mgl@1371: +#define BFD_JUMP_TABLE_WRITE(NAME) \ mgl@1371: + NAME##_set_arch_mach, \ mgl@1371: + NAME##_set_section_contents mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_set_arch_mach) mgl@1371: + (bfd *, enum bfd_architecture, unsigned long); mgl@1371: + bfd_boolean (*_bfd_set_section_contents) mgl@1371: + (bfd *, sec_ptr, const void *, file_ptr, bfd_size_type); mgl@1371: + mgl@1371: + /* Routines used by the linker. */ mgl@1371: +#define BFD_JUMP_TABLE_LINK(NAME) \ mgl@1371: + NAME##_sizeof_headers, \ mgl@1371: + NAME##_bfd_get_relocated_section_contents, \ mgl@1371: + NAME##_bfd_relax_section, \ mgl@1371: + NAME##_bfd_link_hash_table_create, \ mgl@1371: + NAME##_bfd_link_hash_table_free, \ mgl@1371: + NAME##_bfd_link_add_symbols, \ mgl@1371: + NAME##_bfd_link_just_syms, \ mgl@1371: + NAME##_bfd_final_link, \ mgl@1371: + NAME##_bfd_link_split_section, \ mgl@1371: + NAME##_bfd_gc_sections, \ mgl@1371: + NAME##_bfd_merge_sections, \ mgl@1371: + NAME##_bfd_is_group_section, \ mgl@1371: + NAME##_bfd_discard_group, \ mgl@1371: + NAME##_section_already_linked \ mgl@1371: + mgl@1371: + int (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *); mgl@1371: + bfd_byte * (*_bfd_get_relocated_section_contents) mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_link_order *, mgl@1371: + bfd_byte *, bfd_boolean, struct bfd_symbol **); mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_relax_section) mgl@1371: + (bfd *, struct bfd_section *, struct bfd_link_info *, bfd_boolean *); mgl@1371: + mgl@1371: + /* Create a hash table for the linker. Different backends store mgl@1371: + different information in this table. */ mgl@1371: + struct bfd_link_hash_table * mgl@1371: + (*_bfd_link_hash_table_create) (bfd *); mgl@1371: + mgl@1371: + /* Release the memory associated with the linker hash table. */ mgl@1371: + void (*_bfd_link_hash_table_free) (struct bfd_link_hash_table *); mgl@1371: + mgl@1371: + /* Add symbols from this object file into the hash table. */ mgl@1371: + bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: + /* Indicate that we are only retrieving symbol values from this section. */ mgl@1371: + void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *); mgl@1371: + mgl@1371: + /* Do a link based on the link_order structures attached to each mgl@1371: + section of the BFD. */ mgl@1371: + bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: + /* Should this section be split up into smaller pieces during linking. */ mgl@1371: + bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *); mgl@1371: + mgl@1371: + /* Remove sections that are not referenced from the output. */ mgl@1371: + bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: + /* Attempt to merge SEC_MERGE sections. */ mgl@1371: + bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: + /* Is this section a member of a group? */ mgl@1371: + bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *); mgl@1371: + mgl@1371: + /* Discard members of a group. */ mgl@1371: + bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *); mgl@1371: + mgl@1371: + /* Check if SEC has been already linked during a reloceatable or mgl@1371: + final link. */ mgl@1371: + void (*_section_already_linked) (bfd *, struct bfd_section *, mgl@1371: + struct bfd_link_info *); mgl@1371: + mgl@1371: + /* Routines to handle dynamic symbols and relocs. */ mgl@1371: +#define BFD_JUMP_TABLE_DYNAMIC(NAME) \ mgl@1371: + NAME##_get_dynamic_symtab_upper_bound, \ mgl@1371: + NAME##_canonicalize_dynamic_symtab, \ mgl@1371: + NAME##_get_synthetic_symtab, \ mgl@1371: + NAME##_get_dynamic_reloc_upper_bound, \ mgl@1371: + NAME##_canonicalize_dynamic_reloc mgl@1371: + mgl@1371: + /* Get the amount of memory required to hold the dynamic symbols. */ mgl@1371: + long (*_bfd_get_dynamic_symtab_upper_bound) (bfd *); mgl@1371: + /* Read in the dynamic symbols. */ mgl@1371: + long (*_bfd_canonicalize_dynamic_symtab) mgl@1371: + (bfd *, struct bfd_symbol **); mgl@1371: + /* Create synthetized symbols. */ mgl@1371: + long (*_bfd_get_synthetic_symtab) mgl@1371: + (bfd *, long, struct bfd_symbol **, long, struct bfd_symbol **, mgl@1371: + struct bfd_symbol **); mgl@1371: + /* Get the amount of memory required to hold the dynamic relocs. */ mgl@1371: + long (*_bfd_get_dynamic_reloc_upper_bound) (bfd *); mgl@1371: + /* Read in the dynamic relocs. */ mgl@1371: + long (*_bfd_canonicalize_dynamic_reloc) mgl@1371: + (bfd *, arelent **, struct bfd_symbol **); mgl@1371: + mgl@1371: + /* Opposite endian version of this target. */ mgl@1371: + const struct bfd_target * alternative_target; mgl@1371: + mgl@1371: + /* Data for use by back-end routines, which isn't mgl@1371: + generic enough to belong in this structure. */ mgl@1371: + const void *backend_data; mgl@1371: + mgl@1371: +} bfd_target; mgl@1371: + mgl@1371: +bfd_boolean bfd_set_default_target (const char *name); mgl@1371: + mgl@1371: +const bfd_target *bfd_find_target (const char *target_name, bfd *abfd); mgl@1371: + mgl@1371: +const char ** bfd_target_list (void); mgl@1371: + mgl@1371: +const bfd_target *bfd_search_for_target mgl@1371: + (int (*search_func) (const bfd_target *, void *), mgl@1371: + void *); mgl@1371: + mgl@1371: +/* Extracted from format.c. */ mgl@1371: +bfd_boolean bfd_check_format (bfd *abfd, bfd_format format); mgl@1371: + mgl@1371: +bfd_boolean bfd_check_format_matches mgl@1371: + (bfd *abfd, bfd_format format, char ***matching); mgl@1371: + mgl@1371: +bfd_boolean bfd_set_format (bfd *abfd, bfd_format format); mgl@1371: + mgl@1371: +const char *bfd_format_string (bfd_format format); mgl@1371: + mgl@1371: +/* Extracted from linker.c. */ mgl@1371: +bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec); mgl@1371: + mgl@1371: +#define bfd_link_split_section(abfd, sec) \ mgl@1371: + BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec)) mgl@1371: + mgl@1371: +void bfd_section_already_linked (bfd *abfd, asection *sec, mgl@1371: + struct bfd_link_info *info); mgl@1371: + mgl@1371: +#define bfd_section_already_linked(abfd, sec, info) \ mgl@1371: + BFD_SEND (abfd, _section_already_linked, (abfd, sec, info)) mgl@1371: + mgl@1371: +/* Extracted from simple.c. */ mgl@1371: +bfd_byte *bfd_simple_get_relocated_section_contents mgl@1371: + (bfd *abfd, asection *sec, bfd_byte *outbuf, asymbol **symbol_table); mgl@1371: + mgl@1371: +#ifdef __cplusplus mgl@1371: +} mgl@1371: +#endif mgl@1371: +#endif mgl@1371: --- /dev/null mgl@1371: +++ b/bfd/doc/libbfd.h mgl@1371: @@ -0,0 +1,2074 @@ mgl@1371: +/* DO NOT EDIT! -*- buffer-read-only: t -*- This file is automatically mgl@1371: + generated from "libbfd-in.h", "init.c", "libbfd.c", "bfdio.c", mgl@1371: + "bfdwin.c", "cache.c", "reloc.c", "archures.c" and "elf.c". mgl@1371: + Run "make headers" in your build bfd/ to regenerate. */ mgl@1371: + mgl@1371: +/* libbfd.h -- Declarations used by bfd library *implementation*. mgl@1371: + (This include file is not for users of the library.) mgl@1371: + mgl@1371: + Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, mgl@1371: + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 mgl@1371: + Free Software Foundation, Inc. mgl@1371: + mgl@1371: + Written by Cygnus Support. mgl@1371: + mgl@1371: + This file is part of BFD, the Binary File Descriptor library. mgl@1371: + mgl@1371: + This program is free software; you can redistribute it and/or modify mgl@1371: + it under the terms of the GNU General Public License as published by mgl@1371: + the Free Software Foundation; either version 3 of the License, or mgl@1371: + (at your option) any later version. mgl@1371: + mgl@1371: + This program is distributed in the hope that it will be useful, mgl@1371: + but WITHOUT ANY WARRANTY; without even the implied warranty of mgl@1371: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the mgl@1371: + GNU General Public License for more details. mgl@1371: + mgl@1371: + You should have received a copy of the GNU General Public License mgl@1371: + along with this program; if not, write to the Free Software mgl@1371: + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, mgl@1371: + MA 02110-1301, USA. */ mgl@1371: + mgl@1371: +#include "hashtab.h" mgl@1371: + mgl@1371: +/* Align an address upward to a boundary, expressed as a number of bytes. mgl@1371: + E.g. align to an 8-byte boundary with argument of 8. Take care never mgl@1371: + to wrap around if the address is within boundary-1 of the end of the mgl@1371: + address space. */ mgl@1371: +#define BFD_ALIGN(this, boundary) \ mgl@1371: + ((((bfd_vma) (this) + (boundary) - 1) >= (bfd_vma) (this)) \ mgl@1371: + ? (((bfd_vma) (this) + ((boundary) - 1)) & ~ (bfd_vma) ((boundary)-1)) \ mgl@1371: + : ~ (bfd_vma) 0) mgl@1371: + mgl@1371: +/* If you want to read and write large blocks, you might want to do it mgl@1371: + in quanta of this amount */ mgl@1371: +#define DEFAULT_BUFFERSIZE 8192 mgl@1371: + mgl@1371: +/* Set a tdata field. Can't use the other macros for this, since they mgl@1371: + do casts, and casting to the left of assignment isn't portable. */ mgl@1371: +#define set_tdata(bfd, v) ((bfd)->tdata.any = (v)) mgl@1371: + mgl@1371: +/* If BFD_IN_MEMORY is set for a BFD, then the iostream fields points mgl@1371: + to an instance of this structure. */ mgl@1371: + mgl@1371: +struct bfd_in_memory mgl@1371: +{ mgl@1371: + /* Size of buffer. */ mgl@1371: + bfd_size_type size; mgl@1371: + /* Buffer holding contents of BFD. */ mgl@1371: + bfd_byte *buffer; mgl@1371: +}; mgl@1371: + mgl@1371: +struct section_hash_entry mgl@1371: +{ mgl@1371: + struct bfd_hash_entry root; mgl@1371: + asection section; mgl@1371: +}; mgl@1371: + mgl@1371: +/* tdata for an archive. For an input archive, cache mgl@1371: + needs to be free()'d. For an output archive, symdefs do. */ mgl@1371: + mgl@1371: +struct artdata { mgl@1371: + file_ptr first_file_filepos; mgl@1371: + /* Speed up searching the armap */ mgl@1371: + htab_t cache; mgl@1371: + bfd *archive_head; /* Only interesting in output routines */ mgl@1371: + carsym *symdefs; /* the symdef entries */ mgl@1371: + symindex symdef_count; /* how many there are */ mgl@1371: + char *extended_names; /* clever intel extension */ mgl@1371: + bfd_size_type extended_names_size; /* Size of extended names */ mgl@1371: + /* when more compilers are standard C, this can be a time_t */ mgl@1371: + long armap_timestamp; /* Timestamp value written into armap. mgl@1371: + This is used for BSD archives to check mgl@1371: + that the timestamp is recent enough mgl@1371: + for the BSD linker to not complain, mgl@1371: + just before we finish writing an mgl@1371: + archive. */ mgl@1371: + file_ptr armap_datepos; /* Position within archive to seek to mgl@1371: + rewrite the date field. */ mgl@1371: + void *tdata; /* Backend specific information. */ mgl@1371: +}; mgl@1371: + mgl@1371: +#define bfd_ardata(bfd) ((bfd)->tdata.aout_ar_data) mgl@1371: + mgl@1371: +/* Goes in bfd's arelt_data slot */ mgl@1371: +struct areltdata { mgl@1371: + char * arch_header; /* it's actually a string */ mgl@1371: + unsigned int parsed_size; /* octets of filesize not including ar_hdr */ mgl@1371: + char *filename; /* null-terminated */ mgl@1371: +}; mgl@1371: + mgl@1371: +#define arelt_size(bfd) (((struct areltdata *)((bfd)->arelt_data))->parsed_size) mgl@1371: + mgl@1371: +extern void *bfd_malloc mgl@1371: + (bfd_size_type); mgl@1371: +extern void *bfd_realloc mgl@1371: + (void *, bfd_size_type); mgl@1371: +extern void *bfd_zmalloc mgl@1371: + (bfd_size_type); mgl@1371: +extern void *bfd_malloc2 mgl@1371: + (bfd_size_type, bfd_size_type); mgl@1371: +extern void *bfd_realloc2 mgl@1371: + (void *, bfd_size_type, bfd_size_type); mgl@1371: +extern void *bfd_zmalloc2 mgl@1371: + (bfd_size_type, bfd_size_type); mgl@1371: + mgl@1371: +extern void _bfd_default_error_handler (const char *s, ...); mgl@1371: +extern bfd_error_handler_type _bfd_error_handler; mgl@1371: + mgl@1371: +/* These routines allocate and free things on the BFD's objalloc. */ mgl@1371: + mgl@1371: +extern void *bfd_alloc mgl@1371: + (bfd *, bfd_size_type); mgl@1371: +extern void *bfd_zalloc mgl@1371: + (bfd *, bfd_size_type); mgl@1371: +extern void *bfd_alloc2 mgl@1371: + (bfd *, bfd_size_type, bfd_size_type); mgl@1371: +extern void *bfd_zalloc2 mgl@1371: + (bfd *, bfd_size_type, bfd_size_type); mgl@1371: +extern void bfd_release mgl@1371: + (bfd *, void *); mgl@1371: + mgl@1371: +bfd * _bfd_create_empty_archive_element_shell mgl@1371: + (bfd *obfd); mgl@1371: +bfd * _bfd_look_for_bfd_in_cache mgl@1371: + (bfd *, file_ptr); mgl@1371: +bfd_boolean _bfd_add_bfd_to_archive_cache mgl@1371: + (bfd *, file_ptr, bfd *); mgl@1371: +bfd_boolean _bfd_generic_mkarchive mgl@1371: + (bfd *abfd); mgl@1371: +const bfd_target *bfd_generic_archive_p mgl@1371: + (bfd *abfd); mgl@1371: +bfd_boolean bfd_slurp_armap mgl@1371: + (bfd *abfd); mgl@1371: +bfd_boolean bfd_slurp_bsd_armap_f2 mgl@1371: + (bfd *abfd); mgl@1371: +#define bfd_slurp_bsd_armap bfd_slurp_armap mgl@1371: +#define bfd_slurp_coff_armap bfd_slurp_armap mgl@1371: +bfd_boolean _bfd_slurp_extended_name_table mgl@1371: + (bfd *abfd); mgl@1371: +extern bfd_boolean _bfd_construct_extended_name_table mgl@1371: + (bfd *, bfd_boolean, char **, bfd_size_type *); mgl@1371: +bfd_boolean _bfd_write_archive_contents mgl@1371: + (bfd *abfd); mgl@1371: +bfd_boolean _bfd_compute_and_write_armap mgl@1371: + (bfd *, unsigned int elength); mgl@1371: +bfd *_bfd_get_elt_at_filepos mgl@1371: + (bfd *archive, file_ptr filepos); mgl@1371: +extern bfd *_bfd_generic_get_elt_at_index mgl@1371: + (bfd *, symindex); mgl@1371: +bfd * _bfd_new_bfd mgl@1371: + (void); mgl@1371: +void _bfd_delete_bfd mgl@1371: + (bfd *); mgl@1371: +bfd_boolean _bfd_free_cached_info mgl@1371: + (bfd *); mgl@1371: + mgl@1371: +bfd_boolean bfd_false mgl@1371: + (bfd *ignore); mgl@1371: +bfd_boolean bfd_true mgl@1371: + (bfd *ignore); mgl@1371: +void *bfd_nullvoidptr mgl@1371: + (bfd *ignore); mgl@1371: +int bfd_0 mgl@1371: + (bfd *ignore); mgl@1371: +unsigned int bfd_0u mgl@1371: + (bfd *ignore); mgl@1371: +long bfd_0l mgl@1371: + (bfd *ignore); mgl@1371: +long _bfd_n1 mgl@1371: + (bfd *ignore); mgl@1371: +void bfd_void mgl@1371: + (bfd *ignore); mgl@1371: + mgl@1371: +bfd *_bfd_new_bfd_contained_in mgl@1371: + (bfd *); mgl@1371: +const bfd_target *_bfd_dummy_target mgl@1371: + (bfd *abfd); mgl@1371: + mgl@1371: +void bfd_dont_truncate_arname mgl@1371: + (bfd *abfd, const char *filename, char *hdr); mgl@1371: +void bfd_bsd_truncate_arname mgl@1371: + (bfd *abfd, const char *filename, char *hdr); mgl@1371: +void bfd_gnu_truncate_arname mgl@1371: + (bfd *abfd, const char *filename, char *hdr); mgl@1371: + mgl@1371: +bfd_boolean bsd_write_armap mgl@1371: + (bfd *arch, unsigned int elength, struct orl *map, unsigned int orl_count, mgl@1371: + int stridx); mgl@1371: + mgl@1371: +bfd_boolean coff_write_armap mgl@1371: + (bfd *arch, unsigned int elength, struct orl *map, unsigned int orl_count, mgl@1371: + int stridx); mgl@1371: + mgl@1371: +extern void *_bfd_generic_read_ar_hdr mgl@1371: + (bfd *); mgl@1371: +extern void _bfd_ar_spacepad mgl@1371: + (char *, size_t, const char *, long); mgl@1371: + mgl@1371: +extern void *_bfd_generic_read_ar_hdr_mag mgl@1371: + (bfd *, const char *); mgl@1371: + mgl@1371: +bfd * bfd_generic_openr_next_archived_file mgl@1371: + (bfd *archive, bfd *last_file); mgl@1371: + mgl@1371: +int bfd_generic_stat_arch_elt mgl@1371: + (bfd *, struct stat *); mgl@1371: + mgl@1371: +#define _bfd_read_ar_hdr(abfd) \ mgl@1371: + BFD_SEND (abfd, _bfd_read_ar_hdr_fn, (abfd)) mgl@1371: + mgl@1371: +/* Generic routines to use for BFD_JUMP_TABLE_GENERIC. Use mgl@1371: + BFD_JUMP_TABLE_GENERIC (_bfd_generic). */ mgl@1371: + mgl@1371: +#define _bfd_generic_close_and_cleanup bfd_true mgl@1371: +#define _bfd_generic_bfd_free_cached_info bfd_true mgl@1371: +extern bfd_boolean _bfd_generic_new_section_hook mgl@1371: + (bfd *, asection *); mgl@1371: +extern bfd_boolean _bfd_generic_get_section_contents mgl@1371: + (bfd *, asection *, void *, file_ptr, bfd_size_type); mgl@1371: +extern bfd_boolean _bfd_generic_get_section_contents_in_window mgl@1371: + (bfd *, asection *, bfd_window *, file_ptr, bfd_size_type); mgl@1371: + mgl@1371: +/* Generic routines to use for BFD_JUMP_TABLE_COPY. Use mgl@1371: + BFD_JUMP_TABLE_COPY (_bfd_generic). */ mgl@1371: + mgl@1371: +#define _bfd_generic_bfd_copy_private_bfd_data \ mgl@1371: + ((bfd_boolean (*) (bfd *, bfd *)) bfd_true) mgl@1371: +#define _bfd_generic_bfd_merge_private_bfd_data \ mgl@1371: + ((bfd_boolean (*) (bfd *, bfd *)) bfd_true) mgl@1371: +#define _bfd_generic_bfd_set_private_flags \ mgl@1371: + ((bfd_boolean (*) (bfd *, flagword)) bfd_true) mgl@1371: +#define _bfd_generic_bfd_copy_private_section_data \ mgl@1371: + ((bfd_boolean (*) (bfd *, asection *, bfd *, asection *)) bfd_true) mgl@1371: +#define _bfd_generic_bfd_copy_private_symbol_data \ mgl@1371: + ((bfd_boolean (*) (bfd *, asymbol *, bfd *, asymbol *)) bfd_true) mgl@1371: +#define _bfd_generic_bfd_copy_private_header_data \ mgl@1371: + ((bfd_boolean (*) (bfd *, bfd *)) bfd_true) mgl@1371: +#define _bfd_generic_bfd_print_private_bfd_data \ mgl@1371: + ((bfd_boolean (*) (bfd *, void *)) bfd_true) mgl@1371: + mgl@1371: +extern bfd_boolean _bfd_generic_init_private_section_data mgl@1371: + (bfd *, asection *, bfd *, asection *, struct bfd_link_info *); mgl@1371: + mgl@1371: +/* Routines to use for BFD_JUMP_TABLE_CORE when there is no core file mgl@1371: + support. Use BFD_JUMP_TABLE_CORE (_bfd_nocore). */ mgl@1371: + mgl@1371: +extern char *_bfd_nocore_core_file_failing_command mgl@1371: + (bfd *); mgl@1371: +extern int _bfd_nocore_core_file_failing_signal mgl@1371: + (bfd *); mgl@1371: +extern bfd_boolean _bfd_nocore_core_file_matches_executable_p mgl@1371: + (bfd *, bfd *); mgl@1371: + mgl@1371: +/* Routines to use for BFD_JUMP_TABLE_ARCHIVE when there is no archive mgl@1371: + file support. Use BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive). */ mgl@1371: + mgl@1371: +#define _bfd_noarchive_slurp_armap bfd_false mgl@1371: +#define _bfd_noarchive_slurp_extended_name_table bfd_false mgl@1371: +#define _bfd_noarchive_construct_extended_name_table \ mgl@1371: + ((bfd_boolean (*) (bfd *, char **, bfd_size_type *, const char **)) \ mgl@1371: + bfd_false) mgl@1371: +#define _bfd_noarchive_truncate_arname \ mgl@1371: + ((void (*) (bfd *, const char *, char *)) bfd_void) mgl@1371: +#define _bfd_noarchive_write_armap \ mgl@1371: + ((bfd_boolean (*) (bfd *, unsigned int, struct orl *, unsigned int, int)) \ mgl@1371: + bfd_false) mgl@1371: +#define _bfd_noarchive_read_ar_hdr bfd_nullvoidptr mgl@1371: +#define _bfd_noarchive_openr_next_archived_file \ mgl@1371: + ((bfd *(*) (bfd *, bfd *)) bfd_nullvoidptr) mgl@1371: +#define _bfd_noarchive_get_elt_at_index \ mgl@1371: + ((bfd *(*) (bfd *, symindex)) bfd_nullvoidptr) mgl@1371: +#define _bfd_noarchive_generic_stat_arch_elt bfd_generic_stat_arch_elt mgl@1371: +#define _bfd_noarchive_update_armap_timestamp bfd_false mgl@1371: + mgl@1371: +/* Routines to use for BFD_JUMP_TABLE_ARCHIVE to get BSD style mgl@1371: + archives. Use BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_bsd). */ mgl@1371: + mgl@1371: +#define _bfd_archive_bsd_slurp_armap bfd_slurp_bsd_armap mgl@1371: +#define _bfd_archive_bsd_slurp_extended_name_table \ mgl@1371: + _bfd_slurp_extended_name_table mgl@1371: +extern bfd_boolean _bfd_archive_bsd_construct_extended_name_table mgl@1371: + (bfd *, char **, bfd_size_type *, const char **); mgl@1371: +#define _bfd_archive_bsd_truncate_arname bfd_bsd_truncate_arname mgl@1371: +#define _bfd_archive_bsd_write_armap bsd_write_armap mgl@1371: +#define _bfd_archive_bsd_read_ar_hdr _bfd_generic_read_ar_hdr mgl@1371: +#define _bfd_archive_bsd_openr_next_archived_file \ mgl@1371: + bfd_generic_openr_next_archived_file mgl@1371: +#define _bfd_archive_bsd_get_elt_at_index _bfd_generic_get_elt_at_index mgl@1371: +#define _bfd_archive_bsd_generic_stat_arch_elt \ mgl@1371: + bfd_generic_stat_arch_elt mgl@1371: +extern bfd_boolean _bfd_archive_bsd_update_armap_timestamp mgl@1371: + (bfd *); mgl@1371: + mgl@1371: +/* Routines to use for BFD_JUMP_TABLE_ARCHIVE to get COFF style mgl@1371: + archives. Use BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff). */ mgl@1371: + mgl@1371: +#define _bfd_archive_coff_slurp_armap bfd_slurp_coff_armap mgl@1371: +#define _bfd_archive_coff_slurp_extended_name_table \ mgl@1371: + _bfd_slurp_extended_name_table mgl@1371: +extern bfd_boolean _bfd_archive_coff_construct_extended_name_table mgl@1371: + (bfd *, char **, bfd_size_type *, const char **); mgl@1371: +#define _bfd_archive_coff_truncate_arname bfd_dont_truncate_arname mgl@1371: +#define _bfd_archive_coff_write_armap coff_write_armap mgl@1371: +#define _bfd_archive_coff_read_ar_hdr _bfd_generic_read_ar_hdr mgl@1371: +#define _bfd_archive_coff_openr_next_archived_file \ mgl@1371: + bfd_generic_openr_next_archived_file mgl@1371: +#define _bfd_archive_coff_get_elt_at_index _bfd_generic_get_elt_at_index mgl@1371: +#define _bfd_archive_coff_generic_stat_arch_elt \ mgl@1371: + bfd_generic_stat_arch_elt mgl@1371: +#define _bfd_archive_coff_update_armap_timestamp bfd_true mgl@1371: + mgl@1371: +/* Routines to use for BFD_JUMP_TABLE_SYMBOLS where there is no symbol mgl@1371: + support. Use BFD_JUMP_TABLE_SYMBOLS (_bfd_nosymbols). */ mgl@1371: + mgl@1371: +#define _bfd_nosymbols_get_symtab_upper_bound _bfd_n1 mgl@1371: +#define _bfd_nosymbols_canonicalize_symtab \ mgl@1371: + ((long (*) (bfd *, asymbol **)) _bfd_n1) mgl@1371: +#define _bfd_nosymbols_make_empty_symbol _bfd_generic_make_empty_symbol mgl@1371: +#define _bfd_nosymbols_print_symbol \ mgl@1371: + ((void (*) (bfd *, void *, asymbol *, bfd_print_symbol_type)) bfd_void) mgl@1371: +#define _bfd_nosymbols_get_symbol_info \ mgl@1371: + ((void (*) (bfd *, asymbol *, symbol_info *)) bfd_void) mgl@1371: +#define _bfd_nosymbols_bfd_is_local_label_name \ mgl@1371: + ((bfd_boolean (*) (bfd *, const char *)) bfd_false) mgl@1371: +#define _bfd_nosymbols_bfd_is_target_special_symbol \ mgl@1371: + ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false) mgl@1371: +#define _bfd_nosymbols_get_lineno \ mgl@1371: + ((alent *(*) (bfd *, asymbol *)) bfd_nullvoidptr) mgl@1371: +#define _bfd_nosymbols_find_nearest_line \ mgl@1371: + ((bfd_boolean (*) (bfd *, asection *, asymbol **, bfd_vma, const char **, \ mgl@1371: + const char **, unsigned int *)) \ mgl@1371: + bfd_false) mgl@1371: +#define _bfd_nosymbols_find_inliner_info \ mgl@1371: + ((bfd_boolean (*) (bfd *, const char **, const char **, unsigned int *)) \ mgl@1371: + bfd_false) mgl@1371: +#define _bfd_nosymbols_bfd_make_debug_symbol \ mgl@1371: + ((asymbol *(*) (bfd *, void *, unsigned long)) bfd_nullvoidptr) mgl@1371: +#define _bfd_nosymbols_read_minisymbols \ mgl@1371: + ((long (*) (bfd *, bfd_boolean, void **, unsigned int *)) _bfd_n1) mgl@1371: +#define _bfd_nosymbols_minisymbol_to_symbol \ mgl@1371: + ((asymbol *(*) (bfd *, bfd_boolean, const void *, asymbol *)) \ mgl@1371: + bfd_nullvoidptr) mgl@1371: + mgl@1371: +/* Routines to use for BFD_JUMP_TABLE_RELOCS when there is no reloc mgl@1371: + support. Use BFD_JUMP_TABLE_RELOCS (_bfd_norelocs). */ mgl@1371: + mgl@1371: +extern long _bfd_norelocs_get_reloc_upper_bound (bfd *, asection *); mgl@1371: +extern long _bfd_norelocs_canonicalize_reloc (bfd *, asection *, mgl@1371: + arelent **, asymbol **); mgl@1371: +#define _bfd_norelocs_bfd_reloc_type_lookup \ mgl@1371: + ((reloc_howto_type *(*) (bfd *, bfd_reloc_code_real_type)) bfd_nullvoidptr) mgl@1371: +#define _bfd_norelocs_bfd_reloc_name_lookup \ mgl@1371: + ((reloc_howto_type *(*) (bfd *, const char *)) bfd_nullvoidptr) mgl@1371: + mgl@1371: +/* Routines to use for BFD_JUMP_TABLE_WRITE for targets which may not mgl@1371: + be written. Use BFD_JUMP_TABLE_WRITE (_bfd_nowrite). */ mgl@1371: + mgl@1371: +#define _bfd_nowrite_set_arch_mach \ mgl@1371: + ((bfd_boolean (*) (bfd *, enum bfd_architecture, unsigned long)) \ mgl@1371: + bfd_false) mgl@1371: +#define _bfd_nowrite_set_section_contents \ mgl@1371: + ((bfd_boolean (*) (bfd *, asection *, const void *, file_ptr, bfd_size_type)) \ mgl@1371: + bfd_false) mgl@1371: + mgl@1371: +/* Generic routines to use for BFD_JUMP_TABLE_WRITE. Use mgl@1371: + BFD_JUMP_TABLE_WRITE (_bfd_generic). */ mgl@1371: + mgl@1371: +#define _bfd_generic_set_arch_mach bfd_default_set_arch_mach mgl@1371: +extern bfd_boolean _bfd_generic_set_section_contents mgl@1371: + (bfd *, asection *, const void *, file_ptr, bfd_size_type); mgl@1371: + mgl@1371: +/* Routines to use for BFD_JUMP_TABLE_LINK for targets which do not mgl@1371: + support linking. Use BFD_JUMP_TABLE_LINK (_bfd_nolink). */ mgl@1371: + mgl@1371: +#define _bfd_nolink_sizeof_headers \ mgl@1371: + ((int (*) (bfd *, struct bfd_link_info *)) bfd_0) mgl@1371: +#define _bfd_nolink_bfd_get_relocated_section_contents \ mgl@1371: + ((bfd_byte *(*) (bfd *, struct bfd_link_info *, struct bfd_link_order *, \ mgl@1371: + bfd_byte *, bfd_boolean, asymbol **)) \ mgl@1371: + bfd_nullvoidptr) mgl@1371: +#define _bfd_nolink_bfd_relax_section \ mgl@1371: + ((bfd_boolean (*) \ mgl@1371: + (bfd *, asection *, struct bfd_link_info *, bfd_boolean *)) \ mgl@1371: + bfd_false) mgl@1371: +#define _bfd_nolink_bfd_gc_sections \ mgl@1371: + ((bfd_boolean (*) (bfd *, struct bfd_link_info *)) \ mgl@1371: + bfd_false) mgl@1371: +#define _bfd_nolink_bfd_merge_sections \ mgl@1371: + ((bfd_boolean (*) (bfd *, struct bfd_link_info *)) \ mgl@1371: + bfd_false) mgl@1371: +#define _bfd_nolink_bfd_is_group_section \ mgl@1371: + ((bfd_boolean (*) (bfd *, const struct bfd_section *)) \ mgl@1371: + bfd_false) mgl@1371: +#define _bfd_nolink_bfd_discard_group \ mgl@1371: + ((bfd_boolean (*) (bfd *, struct bfd_section *)) \ mgl@1371: + bfd_false) mgl@1371: +#define _bfd_nolink_bfd_link_hash_table_create \ mgl@1371: + ((struct bfd_link_hash_table *(*) (bfd *)) bfd_nullvoidptr) mgl@1371: +#define _bfd_nolink_bfd_link_hash_table_free \ mgl@1371: + ((void (*) (struct bfd_link_hash_table *)) bfd_void) mgl@1371: +#define _bfd_nolink_bfd_link_add_symbols \ mgl@1371: + ((bfd_boolean (*) (bfd *, struct bfd_link_info *)) bfd_false) mgl@1371: +#define _bfd_nolink_bfd_link_just_syms \ mgl@1371: + ((void (*) (asection *, struct bfd_link_info *)) bfd_void) mgl@1371: +#define _bfd_nolink_bfd_final_link \ mgl@1371: + ((bfd_boolean (*) (bfd *, struct bfd_link_info *)) bfd_false) mgl@1371: +#define _bfd_nolink_bfd_link_split_section \ mgl@1371: + ((bfd_boolean (*) (bfd *, struct bfd_section *)) bfd_false) mgl@1371: +#define _bfd_nolink_section_already_linked \ mgl@1371: + ((void (*) (bfd *, struct bfd_section *, struct bfd_link_info *)) bfd_void) mgl@1371: + mgl@1371: +/* Routines to use for BFD_JUMP_TABLE_DYNAMIC for targets which do not mgl@1371: + have dynamic symbols or relocs. Use BFD_JUMP_TABLE_DYNAMIC mgl@1371: + (_bfd_nodynamic). */ mgl@1371: + mgl@1371: +#define _bfd_nodynamic_get_dynamic_symtab_upper_bound _bfd_n1 mgl@1371: +#define _bfd_nodynamic_canonicalize_dynamic_symtab \ mgl@1371: + ((long (*) (bfd *, asymbol **)) _bfd_n1) mgl@1371: +#define _bfd_nodynamic_get_synthetic_symtab \ mgl@1371: + ((long (*) (bfd *, long, asymbol **, long, asymbol **, asymbol **)) _bfd_n1) mgl@1371: +#define _bfd_nodynamic_get_dynamic_reloc_upper_bound _bfd_n1 mgl@1371: +#define _bfd_nodynamic_canonicalize_dynamic_reloc \ mgl@1371: + ((long (*) (bfd *, arelent **, asymbol **)) _bfd_n1) mgl@1371: + mgl@1371: +/* Generic routine to determine of the given symbol is a local mgl@1371: + label. */ mgl@1371: +extern bfd_boolean bfd_generic_is_local_label_name mgl@1371: + (bfd *, const char *); mgl@1371: + mgl@1371: +/* Generic minisymbol routines. */ mgl@1371: +extern long _bfd_generic_read_minisymbols mgl@1371: + (bfd *, bfd_boolean, void **, unsigned int *); mgl@1371: +extern asymbol *_bfd_generic_minisymbol_to_symbol mgl@1371: + (bfd *, bfd_boolean, const void *, asymbol *); mgl@1371: + mgl@1371: +/* Find the nearest line using .stab/.stabstr sections. */ mgl@1371: +extern bfd_boolean _bfd_stab_section_find_nearest_line mgl@1371: + (bfd *, asymbol **, asection *, bfd_vma, bfd_boolean *, mgl@1371: + const char **, const char **, unsigned int *, void **); mgl@1371: + mgl@1371: +/* Find the nearest line using DWARF 1 debugging information. */ mgl@1371: +extern bfd_boolean _bfd_dwarf1_find_nearest_line mgl@1371: + (bfd *, asection *, asymbol **, bfd_vma, const char **, mgl@1371: + const char **, unsigned int *); mgl@1371: + mgl@1371: +/* Find the nearest line using DWARF 2 debugging information. */ mgl@1371: +extern bfd_boolean _bfd_dwarf2_find_nearest_line mgl@1371: + (bfd *, asection *, asymbol **, bfd_vma, const char **, const char **, mgl@1371: + unsigned int *, unsigned int, void **); mgl@1371: + mgl@1371: +/* Find the line using DWARF 2 debugging information. */ mgl@1371: +extern bfd_boolean _bfd_dwarf2_find_line mgl@1371: + (bfd *, asymbol **, asymbol *, const char **, mgl@1371: + unsigned int *, unsigned int, void **); mgl@1371: + mgl@1371: +bfd_boolean _bfd_generic_find_line mgl@1371: + (bfd *, asymbol **, asymbol *, const char **, unsigned int *); mgl@1371: + mgl@1371: +/* Find inliner info after calling bfd_find_nearest_line. */ mgl@1371: +extern bfd_boolean _bfd_dwarf2_find_inliner_info mgl@1371: + (bfd *, const char **, const char **, unsigned int *, void **); mgl@1371: + mgl@1371: +/* Create a new section entry. */ mgl@1371: +extern struct bfd_hash_entry *bfd_section_hash_newfunc mgl@1371: + (struct bfd_hash_entry *, struct bfd_hash_table *, const char *); mgl@1371: + mgl@1371: +/* A routine to create entries for a bfd_link_hash_table. */ mgl@1371: +extern struct bfd_hash_entry *_bfd_link_hash_newfunc mgl@1371: + (struct bfd_hash_entry *entry, struct bfd_hash_table *table, mgl@1371: + const char *string); mgl@1371: + mgl@1371: +/* Initialize a bfd_link_hash_table. */ mgl@1371: +extern bfd_boolean _bfd_link_hash_table_init mgl@1371: + (struct bfd_link_hash_table *, bfd *, mgl@1371: + struct bfd_hash_entry *(*) (struct bfd_hash_entry *, mgl@1371: + struct bfd_hash_table *, mgl@1371: + const char *), mgl@1371: + unsigned int); mgl@1371: + mgl@1371: +/* Generic link hash table creation routine. */ mgl@1371: +extern struct bfd_link_hash_table *_bfd_generic_link_hash_table_create mgl@1371: + (bfd *); mgl@1371: + mgl@1371: +/* Generic link hash table destruction routine. */ mgl@1371: +extern void _bfd_generic_link_hash_table_free mgl@1371: + (struct bfd_link_hash_table *); mgl@1371: + mgl@1371: +/* Generic add symbol routine. */ mgl@1371: +extern bfd_boolean _bfd_generic_link_add_symbols mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +/* Generic add symbol routine. This version is used by targets for mgl@1371: + which the linker must collect constructors and destructors by name, mgl@1371: + as the collect2 program does. */ mgl@1371: +extern bfd_boolean _bfd_generic_link_add_symbols_collect mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +/* Generic archive add symbol routine. */ mgl@1371: +extern bfd_boolean _bfd_generic_link_add_archive_symbols mgl@1371: + (bfd *, struct bfd_link_info *, mgl@1371: + bfd_boolean (*) (bfd *, struct bfd_link_info *, bfd_boolean *)); mgl@1371: + mgl@1371: +/* Forward declaration to avoid prototype errors. */ mgl@1371: +typedef struct bfd_link_hash_entry _bfd_link_hash_entry; mgl@1371: + mgl@1371: +/* Generic routine to add a single symbol. */ mgl@1371: +extern bfd_boolean _bfd_generic_link_add_one_symbol mgl@1371: + (struct bfd_link_info *, bfd *, const char *name, flagword, mgl@1371: + asection *, bfd_vma, const char *, bfd_boolean copy, mgl@1371: + bfd_boolean constructor, struct bfd_link_hash_entry **); mgl@1371: + mgl@1371: +/* Generic routine to mark section as supplying symbols only. */ mgl@1371: +extern void _bfd_generic_link_just_syms mgl@1371: + (asection *, struct bfd_link_info *); mgl@1371: + mgl@1371: +/* Generic link routine. */ mgl@1371: +extern bfd_boolean _bfd_generic_final_link mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +extern bfd_boolean _bfd_generic_link_split_section mgl@1371: + (bfd *, struct bfd_section *); mgl@1371: + mgl@1371: +extern void _bfd_generic_section_already_linked mgl@1371: + (bfd *, struct bfd_section *, struct bfd_link_info *); mgl@1371: + mgl@1371: +/* Generic reloc_link_order processing routine. */ mgl@1371: +extern bfd_boolean _bfd_generic_reloc_link_order mgl@1371: + (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *); mgl@1371: + mgl@1371: +/* Default link order processing routine. */ mgl@1371: +extern bfd_boolean _bfd_default_link_order mgl@1371: + (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *); mgl@1371: + mgl@1371: +/* Count the number of reloc entries in a link order list. */ mgl@1371: +extern unsigned int _bfd_count_link_order_relocs mgl@1371: + (struct bfd_link_order *); mgl@1371: + mgl@1371: +/* Final link relocation routine. */ mgl@1371: +extern bfd_reloc_status_type _bfd_final_link_relocate mgl@1371: + (reloc_howto_type *, bfd *, asection *, bfd_byte *, mgl@1371: + bfd_vma, bfd_vma, bfd_vma); mgl@1371: + mgl@1371: +/* Relocate a particular location by a howto and a value. */ mgl@1371: +extern bfd_reloc_status_type _bfd_relocate_contents mgl@1371: + (reloc_howto_type *, bfd *, bfd_vma, bfd_byte *); mgl@1371: + mgl@1371: +/* Clear a given location using a given howto. */ mgl@1371: +extern void _bfd_clear_contents (reloc_howto_type *howto, bfd *input_bfd, mgl@1371: + bfd_byte *location); mgl@1371: + mgl@1371: +/* Link stabs in sections in the first pass. */ mgl@1371: + mgl@1371: +extern bfd_boolean _bfd_link_section_stabs mgl@1371: + (bfd *, struct stab_info *, asection *, asection *, void **, mgl@1371: + bfd_size_type *); mgl@1371: + mgl@1371: +/* Eliminate stabs for discarded functions and symbols. */ mgl@1371: +extern bfd_boolean _bfd_discard_section_stabs mgl@1371: + (bfd *, asection *, void *, bfd_boolean (*) (bfd_vma, void *), void *); mgl@1371: + mgl@1371: +/* Write out the .stab section when linking stabs in sections. */ mgl@1371: + mgl@1371: +extern bfd_boolean _bfd_write_section_stabs mgl@1371: + (bfd *, struct stab_info *, asection *, void **, bfd_byte *); mgl@1371: + mgl@1371: +/* Write out the .stabstr string table when linking stabs in sections. */ mgl@1371: + mgl@1371: +extern bfd_boolean _bfd_write_stab_strings mgl@1371: + (bfd *, struct stab_info *); mgl@1371: + mgl@1371: +/* Find an offset within a .stab section when linking stabs in mgl@1371: + sections. */ mgl@1371: + mgl@1371: +extern bfd_vma _bfd_stab_section_offset mgl@1371: + (asection *, void *, bfd_vma); mgl@1371: + mgl@1371: +/* Register a SEC_MERGE section as a candidate for merging. */ mgl@1371: + mgl@1371: +extern bfd_boolean _bfd_add_merge_section mgl@1371: + (bfd *, void **, asection *, void **); mgl@1371: + mgl@1371: +/* Attempt to merge SEC_MERGE sections. */ mgl@1371: + mgl@1371: +extern bfd_boolean _bfd_merge_sections mgl@1371: + (bfd *, struct bfd_link_info *, void *, void (*) (bfd *, asection *)); mgl@1371: + mgl@1371: +/* Write out a merged section. */ mgl@1371: + mgl@1371: +extern bfd_boolean _bfd_write_merged_section mgl@1371: + (bfd *, asection *, void *); mgl@1371: + mgl@1371: +/* Find an offset within a modified SEC_MERGE section. */ mgl@1371: + mgl@1371: +extern bfd_vma _bfd_merged_section_offset mgl@1371: + (bfd *, asection **, void *, bfd_vma); mgl@1371: + mgl@1371: +/* Create a string table. */ mgl@1371: +extern struct bfd_strtab_hash *_bfd_stringtab_init mgl@1371: + (void); mgl@1371: + mgl@1371: +/* Create an XCOFF .debug section style string table. */ mgl@1371: +extern struct bfd_strtab_hash *_bfd_xcoff_stringtab_init mgl@1371: + (void); mgl@1371: + mgl@1371: +/* Free a string table. */ mgl@1371: +extern void _bfd_stringtab_free mgl@1371: + (struct bfd_strtab_hash *); mgl@1371: + mgl@1371: +/* Get the size of a string table. */ mgl@1371: +extern bfd_size_type _bfd_stringtab_size mgl@1371: + (struct bfd_strtab_hash *); mgl@1371: + mgl@1371: +/* Add a string to a string table. */ mgl@1371: +extern bfd_size_type _bfd_stringtab_add mgl@1371: + (struct bfd_strtab_hash *, const char *, bfd_boolean hash, bfd_boolean copy); mgl@1371: + mgl@1371: +/* Write out a string table. */ mgl@1371: +extern bfd_boolean _bfd_stringtab_emit mgl@1371: + (bfd *, struct bfd_strtab_hash *); mgl@1371: + mgl@1371: +/* Check that endianness of input and output file match. */ mgl@1371: +extern bfd_boolean _bfd_generic_verify_endian_match mgl@1371: + (bfd *, bfd *); mgl@1371: + mgl@1371: +/* Macros to tell if bfds are read or write enabled. mgl@1371: + mgl@1371: + Note that bfds open for read may be scribbled into if the fd passed mgl@1371: + to bfd_fdopenr is actually open both for read and write mgl@1371: + simultaneously. However an output bfd will never be open for mgl@1371: + read. Therefore sometimes you want to check bfd_read_p or mgl@1371: + !bfd_read_p, and only sometimes bfd_write_p. mgl@1371: +*/ mgl@1371: + mgl@1371: +#define bfd_read_p(abfd) \ mgl@1371: + ((abfd)->direction == read_direction || (abfd)->direction == both_direction) mgl@1371: +#define bfd_write_p(abfd) \ mgl@1371: + ((abfd)->direction == write_direction || (abfd)->direction == both_direction) mgl@1371: + mgl@1371: +void bfd_assert mgl@1371: + (const char*,int); mgl@1371: + mgl@1371: +#define BFD_ASSERT(x) \ mgl@1371: + do { if (!(x)) bfd_assert(__FILE__,__LINE__); } while (0) mgl@1371: + mgl@1371: +#define BFD_FAIL() \ mgl@1371: + do { bfd_assert(__FILE__,__LINE__); } while (0) mgl@1371: + mgl@1371: +extern void _bfd_abort mgl@1371: + (const char *, int, const char *) ATTRIBUTE_NORETURN; mgl@1371: + mgl@1371: +/* if gcc >= 2.6, we can give a function name, too */ mgl@1371: +#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6) mgl@1371: +#define __PRETTY_FUNCTION__ ((char *) NULL) mgl@1371: +#endif mgl@1371: + mgl@1371: +#undef abort mgl@1371: +#define abort() _bfd_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__) mgl@1371: + mgl@1371: +/* Manipulate a system FILE but using BFD's "file_ptr", rather than mgl@1371: + the system "off_t" or "off64_t", as the offset. */ mgl@1371: +extern file_ptr real_ftell (FILE *file); mgl@1371: +extern int real_fseek (FILE *file, file_ptr offset, int whence); mgl@1371: +extern FILE *real_fopen (const char *filename, const char *modes); mgl@1371: + mgl@1371: +/* List of supported target vectors, and the default vector (if mgl@1371: + bfd_default_vector[0] is NULL, there is no default). */ mgl@1371: +extern const bfd_target * const *bfd_target_vector; mgl@1371: +extern const bfd_target *bfd_default_vector[]; mgl@1371: + mgl@1371: +/* List of associated target vectors. */ mgl@1371: +extern const bfd_target * const *bfd_associated_vector; mgl@1371: + mgl@1371: +/* Functions shared by the ECOFF and MIPS ELF backends, which have no mgl@1371: + other common header files. */ mgl@1371: + mgl@1371: +#if defined(__STDC__) || defined(ALMOST_STDC) mgl@1371: +struct ecoff_find_line; mgl@1371: +#endif mgl@1371: + mgl@1371: +extern bfd_boolean _bfd_ecoff_locate_line mgl@1371: + (bfd *, asection *, bfd_vma, struct ecoff_debug_info * const, mgl@1371: + const struct ecoff_debug_swap * const, struct ecoff_find_line *, mgl@1371: + const char **, const char **, unsigned int *); mgl@1371: +extern bfd_boolean _bfd_ecoff_get_accumulated_pdr mgl@1371: + (void *, bfd_byte *); mgl@1371: +extern bfd_boolean _bfd_ecoff_get_accumulated_sym mgl@1371: + (void *, bfd_byte *); mgl@1371: +extern bfd_boolean _bfd_ecoff_get_accumulated_ss mgl@1371: + (void *, bfd_byte *); mgl@1371: + mgl@1371: +extern bfd_vma _bfd_get_gp_value mgl@1371: + (bfd *); mgl@1371: +extern void _bfd_set_gp_value mgl@1371: + (bfd *, bfd_vma); mgl@1371: + mgl@1371: +/* Function shared by the COFF and ELF SH backends, which have no mgl@1371: + other common header files. */ mgl@1371: + mgl@1371: +#ifndef _bfd_sh_align_load_span mgl@1371: +extern bfd_boolean _bfd_sh_align_load_span mgl@1371: + (bfd *, asection *, bfd_byte *, mgl@1371: + bfd_boolean (*) (bfd *, asection *, void *, bfd_byte *, bfd_vma), mgl@1371: + void *, bfd_vma **, bfd_vma *, bfd_vma, bfd_vma, bfd_boolean *); mgl@1371: +#endif mgl@1371: + mgl@1371: +/* This is the shape of the elements inside the already_linked hash mgl@1371: + table. It maps a name onto a list of already_linked elements with mgl@1371: + the same name. */ mgl@1371: + mgl@1371: +struct bfd_section_already_linked_hash_entry mgl@1371: +{ mgl@1371: + struct bfd_hash_entry root; mgl@1371: + struct bfd_section_already_linked *entry; mgl@1371: +}; mgl@1371: + mgl@1371: +struct bfd_section_already_linked mgl@1371: +{ mgl@1371: + struct bfd_section_already_linked *next; mgl@1371: + asection *sec; mgl@1371: +}; mgl@1371: + mgl@1371: +extern struct bfd_section_already_linked_hash_entry * mgl@1371: + bfd_section_already_linked_table_lookup (const char *); mgl@1371: +extern bfd_boolean bfd_section_already_linked_table_insert mgl@1371: + (struct bfd_section_already_linked_hash_entry *, asection *); mgl@1371: +extern void bfd_section_already_linked_table_traverse mgl@1371: + (bfd_boolean (*) (struct bfd_section_already_linked_hash_entry *, mgl@1371: + void *), void *); mgl@1371: + mgl@1371: +extern bfd_vma read_unsigned_leb128 (bfd *, bfd_byte *, unsigned int *); mgl@1371: +extern bfd_signed_vma read_signed_leb128 (bfd *, bfd_byte *, unsigned int *); mgl@1371: + mgl@1371: +/* Extracted from init.c. */ mgl@1371: +/* Extracted from libbfd.c. */ mgl@1371: +bfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int); mgl@1371: + mgl@1371: +unsigned int bfd_log2 (bfd_vma x); mgl@1371: + mgl@1371: +/* Extracted from bfdio.c. */ mgl@1371: +struct bfd_iovec mgl@1371: +{ mgl@1371: + /* To avoid problems with macros, a "b" rather than "f" mgl@1371: + prefix is prepended to each method name. */ mgl@1371: + /* Attempt to read/write NBYTES on ABFD's IOSTREAM storing/fetching mgl@1371: + bytes starting at PTR. Return the number of bytes actually mgl@1371: + transfered (a read past end-of-file returns less than NBYTES), mgl@1371: + or -1 (setting <>) if an error occurs. */ mgl@1371: + file_ptr (*bread) (struct bfd *abfd, void *ptr, file_ptr nbytes); mgl@1371: + file_ptr (*bwrite) (struct bfd *abfd, const void *ptr, mgl@1371: + file_ptr nbytes); mgl@1371: + /* Return the current IOSTREAM file offset, or -1 (setting <> mgl@1371: + if an error occurs. */ mgl@1371: + file_ptr (*btell) (struct bfd *abfd); mgl@1371: + /* For the following, on successful completion a value of 0 is returned. mgl@1371: + Otherwise, a value of -1 is returned (and <> is set). */ mgl@1371: + int (*bseek) (struct bfd *abfd, file_ptr offset, int whence); mgl@1371: + int (*bclose) (struct bfd *abfd); mgl@1371: + int (*bflush) (struct bfd *abfd); mgl@1371: + int (*bstat) (struct bfd *abfd, struct stat *sb); mgl@1371: +}; mgl@1371: +/* Extracted from bfdwin.c. */ mgl@1371: +struct _bfd_window_internal { mgl@1371: + struct _bfd_window_internal *next; mgl@1371: + void *data; mgl@1371: + bfd_size_type size; mgl@1371: + int refcount : 31; /* should be enough... */ mgl@1371: + unsigned mapped : 1; /* 1 = mmap, 0 = malloc */ mgl@1371: +}; mgl@1371: +/* Extracted from cache.c. */ mgl@1371: +bfd_boolean bfd_cache_init (bfd *abfd); mgl@1371: + mgl@1371: +bfd_boolean bfd_cache_close (bfd *abfd); mgl@1371: + mgl@1371: +FILE* bfd_open_file (bfd *abfd); mgl@1371: + mgl@1371: +/* Extracted from reloc.c. */ mgl@1371: +#ifdef _BFD_MAKE_TABLE_bfd_reloc_code_real mgl@1371: + mgl@1371: +static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", mgl@1371: + mgl@1371: + "BFD_RELOC_64", mgl@1371: + "BFD_RELOC_32", mgl@1371: + "BFD_RELOC_26", mgl@1371: + "BFD_RELOC_24", mgl@1371: + "BFD_RELOC_16", mgl@1371: + "BFD_RELOC_14", mgl@1371: + "BFD_RELOC_8", mgl@1371: + "BFD_RELOC_64_PCREL", mgl@1371: + "BFD_RELOC_32_PCREL", mgl@1371: + "BFD_RELOC_24_PCREL", mgl@1371: + "BFD_RELOC_16_PCREL", mgl@1371: + "BFD_RELOC_12_PCREL", mgl@1371: + "BFD_RELOC_8_PCREL", mgl@1371: + "BFD_RELOC_32_SECREL", mgl@1371: + "BFD_RELOC_32_GOT_PCREL", mgl@1371: + "BFD_RELOC_16_GOT_PCREL", mgl@1371: + "BFD_RELOC_8_GOT_PCREL", mgl@1371: + "BFD_RELOC_32_GOTOFF", mgl@1371: + "BFD_RELOC_16_GOTOFF", mgl@1371: + "BFD_RELOC_LO16_GOTOFF", mgl@1371: + "BFD_RELOC_HI16_GOTOFF", mgl@1371: + "BFD_RELOC_HI16_S_GOTOFF", mgl@1371: + "BFD_RELOC_8_GOTOFF", mgl@1371: + "BFD_RELOC_64_PLT_PCREL", mgl@1371: + "BFD_RELOC_32_PLT_PCREL", mgl@1371: + "BFD_RELOC_24_PLT_PCREL", mgl@1371: + "BFD_RELOC_16_PLT_PCREL", mgl@1371: + "BFD_RELOC_8_PLT_PCREL", mgl@1371: + "BFD_RELOC_64_PLTOFF", mgl@1371: + "BFD_RELOC_32_PLTOFF", mgl@1371: + "BFD_RELOC_16_PLTOFF", mgl@1371: + "BFD_RELOC_LO16_PLTOFF", mgl@1371: + "BFD_RELOC_HI16_PLTOFF", mgl@1371: + "BFD_RELOC_HI16_S_PLTOFF", mgl@1371: + "BFD_RELOC_8_PLTOFF", mgl@1371: + "BFD_RELOC_68K_GLOB_DAT", mgl@1371: + "BFD_RELOC_68K_JMP_SLOT", mgl@1371: + "BFD_RELOC_68K_RELATIVE", mgl@1371: + "BFD_RELOC_32_BASEREL", mgl@1371: + "BFD_RELOC_16_BASEREL", mgl@1371: + "BFD_RELOC_LO16_BASEREL", mgl@1371: + "BFD_RELOC_HI16_BASEREL", mgl@1371: + "BFD_RELOC_HI16_S_BASEREL", mgl@1371: + "BFD_RELOC_8_BASEREL", mgl@1371: + "BFD_RELOC_RVA", mgl@1371: + "BFD_RELOC_8_FFnn", mgl@1371: + "BFD_RELOC_32_PCREL_S2", mgl@1371: + "BFD_RELOC_16_PCREL_S2", mgl@1371: + "BFD_RELOC_23_PCREL_S2", mgl@1371: + "BFD_RELOC_HI22", mgl@1371: + "BFD_RELOC_LO10", mgl@1371: + "BFD_RELOC_GPREL16", mgl@1371: + "BFD_RELOC_GPREL32", mgl@1371: + "BFD_RELOC_I960_CALLJ", mgl@1371: + "BFD_RELOC_NONE", mgl@1371: + "BFD_RELOC_SPARC_WDISP22", mgl@1371: + "BFD_RELOC_SPARC22", mgl@1371: + "BFD_RELOC_SPARC13", mgl@1371: + "BFD_RELOC_SPARC_GOT10", mgl@1371: + "BFD_RELOC_SPARC_GOT13", mgl@1371: + "BFD_RELOC_SPARC_GOT22", mgl@1371: + "BFD_RELOC_SPARC_PC10", mgl@1371: + "BFD_RELOC_SPARC_PC22", mgl@1371: + "BFD_RELOC_SPARC_WPLT30", mgl@1371: + "BFD_RELOC_SPARC_COPY", mgl@1371: + "BFD_RELOC_SPARC_GLOB_DAT", mgl@1371: + "BFD_RELOC_SPARC_JMP_SLOT", mgl@1371: + "BFD_RELOC_SPARC_RELATIVE", mgl@1371: + "BFD_RELOC_SPARC_UA16", mgl@1371: + "BFD_RELOC_SPARC_UA32", mgl@1371: + "BFD_RELOC_SPARC_UA64", mgl@1371: + "BFD_RELOC_SPARC_BASE13", mgl@1371: + "BFD_RELOC_SPARC_BASE22", mgl@1371: + "BFD_RELOC_SPARC_10", mgl@1371: + "BFD_RELOC_SPARC_11", mgl@1371: + "BFD_RELOC_SPARC_OLO10", mgl@1371: + "BFD_RELOC_SPARC_HH22", mgl@1371: + "BFD_RELOC_SPARC_HM10", mgl@1371: + "BFD_RELOC_SPARC_LM22", mgl@1371: + "BFD_RELOC_SPARC_PC_HH22", mgl@1371: + "BFD_RELOC_SPARC_PC_HM10", mgl@1371: + "BFD_RELOC_SPARC_PC_LM22", mgl@1371: + "BFD_RELOC_SPARC_WDISP16", mgl@1371: + "BFD_RELOC_SPARC_WDISP19", mgl@1371: + "BFD_RELOC_SPARC_7", mgl@1371: + "BFD_RELOC_SPARC_6", mgl@1371: + "BFD_RELOC_SPARC_5", mgl@1371: + "BFD_RELOC_SPARC_PLT32", mgl@1371: + "BFD_RELOC_SPARC_PLT64", mgl@1371: + "BFD_RELOC_SPARC_HIX22", mgl@1371: + "BFD_RELOC_SPARC_LOX10", mgl@1371: + "BFD_RELOC_SPARC_H44", mgl@1371: + "BFD_RELOC_SPARC_M44", mgl@1371: + "BFD_RELOC_SPARC_L44", mgl@1371: + "BFD_RELOC_SPARC_REGISTER", mgl@1371: + "BFD_RELOC_SPARC_REV32", mgl@1371: + "BFD_RELOC_SPARC_TLS_GD_HI22", mgl@1371: + "BFD_RELOC_SPARC_TLS_GD_LO10", mgl@1371: + "BFD_RELOC_SPARC_TLS_GD_ADD", mgl@1371: + "BFD_RELOC_SPARC_TLS_GD_CALL", mgl@1371: + "BFD_RELOC_SPARC_TLS_LDM_HI22", mgl@1371: + "BFD_RELOC_SPARC_TLS_LDM_LO10", mgl@1371: + "BFD_RELOC_SPARC_TLS_LDM_ADD", mgl@1371: + "BFD_RELOC_SPARC_TLS_LDM_CALL", mgl@1371: + "BFD_RELOC_SPARC_TLS_LDO_HIX22", mgl@1371: + "BFD_RELOC_SPARC_TLS_LDO_LOX10", mgl@1371: + "BFD_RELOC_SPARC_TLS_LDO_ADD", mgl@1371: + "BFD_RELOC_SPARC_TLS_IE_HI22", mgl@1371: + "BFD_RELOC_SPARC_TLS_IE_LO10", mgl@1371: + "BFD_RELOC_SPARC_TLS_IE_LD", mgl@1371: + "BFD_RELOC_SPARC_TLS_IE_LDX", mgl@1371: + "BFD_RELOC_SPARC_TLS_IE_ADD", mgl@1371: + "BFD_RELOC_SPARC_TLS_LE_HIX22", mgl@1371: + "BFD_RELOC_SPARC_TLS_LE_LOX10", mgl@1371: + "BFD_RELOC_SPARC_TLS_DTPMOD32", mgl@1371: + "BFD_RELOC_SPARC_TLS_DTPMOD64", mgl@1371: + "BFD_RELOC_SPARC_TLS_DTPOFF32", mgl@1371: + "BFD_RELOC_SPARC_TLS_DTPOFF64", mgl@1371: + "BFD_RELOC_SPARC_TLS_TPOFF32", mgl@1371: + "BFD_RELOC_SPARC_TLS_TPOFF64", mgl@1371: + "BFD_RELOC_SPU_IMM7", mgl@1371: + "BFD_RELOC_SPU_IMM8", mgl@1371: + "BFD_RELOC_SPU_IMM10", mgl@1371: + "BFD_RELOC_SPU_IMM10W", mgl@1371: + "BFD_RELOC_SPU_IMM16", mgl@1371: + "BFD_RELOC_SPU_IMM16W", mgl@1371: + "BFD_RELOC_SPU_IMM18", mgl@1371: + "BFD_RELOC_SPU_PCREL9a", mgl@1371: + "BFD_RELOC_SPU_PCREL9b", mgl@1371: + "BFD_RELOC_SPU_PCREL16", mgl@1371: + "BFD_RELOC_SPU_LO16", mgl@1371: + "BFD_RELOC_SPU_HI16", mgl@1371: + "BFD_RELOC_SPU_PPU32", mgl@1371: + "BFD_RELOC_SPU_PPU64", mgl@1371: + "BFD_RELOC_ALPHA_GPDISP_HI16", mgl@1371: + "BFD_RELOC_ALPHA_GPDISP_LO16", mgl@1371: + "BFD_RELOC_ALPHA_GPDISP", mgl@1371: + "BFD_RELOC_ALPHA_LITERAL", mgl@1371: + "BFD_RELOC_ALPHA_ELF_LITERAL", mgl@1371: + "BFD_RELOC_ALPHA_LITUSE", mgl@1371: + "BFD_RELOC_ALPHA_HINT", mgl@1371: + "BFD_RELOC_ALPHA_LINKAGE", mgl@1371: + "BFD_RELOC_ALPHA_CODEADDR", mgl@1371: + "BFD_RELOC_ALPHA_GPREL_HI16", mgl@1371: + "BFD_RELOC_ALPHA_GPREL_LO16", mgl@1371: + "BFD_RELOC_ALPHA_BRSGP", mgl@1371: + "BFD_RELOC_ALPHA_TLSGD", mgl@1371: + "BFD_RELOC_ALPHA_TLSLDM", mgl@1371: + "BFD_RELOC_ALPHA_DTPMOD64", mgl@1371: + "BFD_RELOC_ALPHA_GOTDTPREL16", mgl@1371: + "BFD_RELOC_ALPHA_DTPREL64", mgl@1371: + "BFD_RELOC_ALPHA_DTPREL_HI16", mgl@1371: + "BFD_RELOC_ALPHA_DTPREL_LO16", mgl@1371: + "BFD_RELOC_ALPHA_DTPREL16", mgl@1371: + "BFD_RELOC_ALPHA_GOTTPREL16", mgl@1371: + "BFD_RELOC_ALPHA_TPREL64", mgl@1371: + "BFD_RELOC_ALPHA_TPREL_HI16", mgl@1371: + "BFD_RELOC_ALPHA_TPREL_LO16", mgl@1371: + "BFD_RELOC_ALPHA_TPREL16", mgl@1371: + "BFD_RELOC_MIPS_JMP", mgl@1371: + "BFD_RELOC_MIPS16_JMP", mgl@1371: + "BFD_RELOC_MIPS16_GPREL", mgl@1371: + "BFD_RELOC_HI16", mgl@1371: + "BFD_RELOC_HI16_S", mgl@1371: + "BFD_RELOC_LO16", mgl@1371: + "BFD_RELOC_HI16_PCREL", mgl@1371: + "BFD_RELOC_HI16_S_PCREL", mgl@1371: + "BFD_RELOC_LO16_PCREL", mgl@1371: + "BFD_RELOC_MIPS16_HI16", mgl@1371: + "BFD_RELOC_MIPS16_HI16_S", mgl@1371: + "BFD_RELOC_MIPS16_LO16", mgl@1371: + "BFD_RELOC_MIPS_LITERAL", mgl@1371: + "BFD_RELOC_MIPS_GOT16", mgl@1371: + "BFD_RELOC_MIPS_CALL16", mgl@1371: + "BFD_RELOC_MIPS_GOT_HI16", mgl@1371: + "BFD_RELOC_MIPS_GOT_LO16", mgl@1371: + "BFD_RELOC_MIPS_CALL_HI16", mgl@1371: + "BFD_RELOC_MIPS_CALL_LO16", mgl@1371: + "BFD_RELOC_MIPS_SUB", mgl@1371: + "BFD_RELOC_MIPS_GOT_PAGE", mgl@1371: + "BFD_RELOC_MIPS_GOT_OFST", mgl@1371: + "BFD_RELOC_MIPS_GOT_DISP", mgl@1371: + "BFD_RELOC_MIPS_SHIFT5", mgl@1371: + "BFD_RELOC_MIPS_SHIFT6", mgl@1371: + "BFD_RELOC_MIPS_INSERT_A", mgl@1371: + "BFD_RELOC_MIPS_INSERT_B", mgl@1371: + "BFD_RELOC_MIPS_DELETE", mgl@1371: + "BFD_RELOC_MIPS_HIGHEST", mgl@1371: + "BFD_RELOC_MIPS_HIGHER", mgl@1371: + "BFD_RELOC_MIPS_SCN_DISP", mgl@1371: + "BFD_RELOC_MIPS_REL16", mgl@1371: + "BFD_RELOC_MIPS_RELGOT", mgl@1371: + "BFD_RELOC_MIPS_JALR", mgl@1371: + "BFD_RELOC_MIPS_TLS_DTPMOD32", mgl@1371: + "BFD_RELOC_MIPS_TLS_DTPREL32", mgl@1371: + "BFD_RELOC_MIPS_TLS_DTPMOD64", mgl@1371: + "BFD_RELOC_MIPS_TLS_DTPREL64", mgl@1371: + "BFD_RELOC_MIPS_TLS_GD", mgl@1371: + "BFD_RELOC_MIPS_TLS_LDM", mgl@1371: + "BFD_RELOC_MIPS_TLS_DTPREL_HI16", mgl@1371: + "BFD_RELOC_MIPS_TLS_DTPREL_LO16", mgl@1371: + "BFD_RELOC_MIPS_TLS_GOTTPREL", mgl@1371: + "BFD_RELOC_MIPS_TLS_TPREL32", mgl@1371: + "BFD_RELOC_MIPS_TLS_TPREL64", mgl@1371: + "BFD_RELOC_MIPS_TLS_TPREL_HI16", mgl@1371: + "BFD_RELOC_MIPS_TLS_TPREL_LO16", mgl@1371: + mgl@1371: + "BFD_RELOC_MIPS_COPY", mgl@1371: + "BFD_RELOC_MIPS_JUMP_SLOT", mgl@1371: + mgl@1371: + "BFD_RELOC_FRV_LABEL16", mgl@1371: + "BFD_RELOC_FRV_LABEL24", mgl@1371: + "BFD_RELOC_FRV_LO16", mgl@1371: + "BFD_RELOC_FRV_HI16", mgl@1371: + "BFD_RELOC_FRV_GPREL12", mgl@1371: + "BFD_RELOC_FRV_GPRELU12", mgl@1371: + "BFD_RELOC_FRV_GPREL32", mgl@1371: + "BFD_RELOC_FRV_GPRELHI", mgl@1371: + "BFD_RELOC_FRV_GPRELLO", mgl@1371: + "BFD_RELOC_FRV_GOT12", mgl@1371: + "BFD_RELOC_FRV_GOTHI", mgl@1371: + "BFD_RELOC_FRV_GOTLO", mgl@1371: + "BFD_RELOC_FRV_FUNCDESC", mgl@1371: + "BFD_RELOC_FRV_FUNCDESC_GOT12", mgl@1371: + "BFD_RELOC_FRV_FUNCDESC_GOTHI", mgl@1371: + "BFD_RELOC_FRV_FUNCDESC_GOTLO", mgl@1371: + "BFD_RELOC_FRV_FUNCDESC_VALUE", mgl@1371: + "BFD_RELOC_FRV_FUNCDESC_GOTOFF12", mgl@1371: + "BFD_RELOC_FRV_FUNCDESC_GOTOFFHI", mgl@1371: + "BFD_RELOC_FRV_FUNCDESC_GOTOFFLO", mgl@1371: + "BFD_RELOC_FRV_GOTOFF12", mgl@1371: + "BFD_RELOC_FRV_GOTOFFHI", mgl@1371: + "BFD_RELOC_FRV_GOTOFFLO", mgl@1371: + "BFD_RELOC_FRV_GETTLSOFF", mgl@1371: + "BFD_RELOC_FRV_TLSDESC_VALUE", mgl@1371: + "BFD_RELOC_FRV_GOTTLSDESC12", mgl@1371: + "BFD_RELOC_FRV_GOTTLSDESCHI", mgl@1371: + "BFD_RELOC_FRV_GOTTLSDESCLO", mgl@1371: + "BFD_RELOC_FRV_TLSMOFF12", mgl@1371: + "BFD_RELOC_FRV_TLSMOFFHI", mgl@1371: + "BFD_RELOC_FRV_TLSMOFFLO", mgl@1371: + "BFD_RELOC_FRV_GOTTLSOFF12", mgl@1371: + "BFD_RELOC_FRV_GOTTLSOFFHI", mgl@1371: + "BFD_RELOC_FRV_GOTTLSOFFLO", mgl@1371: + "BFD_RELOC_FRV_TLSOFF", mgl@1371: + "BFD_RELOC_FRV_TLSDESC_RELAX", mgl@1371: + "BFD_RELOC_FRV_GETTLSOFF_RELAX", mgl@1371: + "BFD_RELOC_FRV_TLSOFF_RELAX", mgl@1371: + "BFD_RELOC_FRV_TLSMOFF", mgl@1371: + mgl@1371: + "BFD_RELOC_MN10300_GOTOFF24", mgl@1371: + "BFD_RELOC_MN10300_GOT32", mgl@1371: + "BFD_RELOC_MN10300_GOT24", mgl@1371: + "BFD_RELOC_MN10300_GOT16", mgl@1371: + "BFD_RELOC_MN10300_COPY", mgl@1371: + "BFD_RELOC_MN10300_GLOB_DAT", mgl@1371: + "BFD_RELOC_MN10300_JMP_SLOT", mgl@1371: + "BFD_RELOC_MN10300_RELATIVE", mgl@1371: + mgl@1371: + "BFD_RELOC_386_GOT32", mgl@1371: + "BFD_RELOC_386_PLT32", mgl@1371: + "BFD_RELOC_386_COPY", mgl@1371: + "BFD_RELOC_386_GLOB_DAT", mgl@1371: + "BFD_RELOC_386_JUMP_SLOT", mgl@1371: + "BFD_RELOC_386_RELATIVE", mgl@1371: + "BFD_RELOC_386_GOTOFF", mgl@1371: + "BFD_RELOC_386_GOTPC", mgl@1371: + "BFD_RELOC_386_TLS_TPOFF", mgl@1371: + "BFD_RELOC_386_TLS_IE", mgl@1371: + "BFD_RELOC_386_TLS_GOTIE", mgl@1371: + "BFD_RELOC_386_TLS_LE", mgl@1371: + "BFD_RELOC_386_TLS_GD", mgl@1371: + "BFD_RELOC_386_TLS_LDM", mgl@1371: + "BFD_RELOC_386_TLS_LDO_32", mgl@1371: + "BFD_RELOC_386_TLS_IE_32", mgl@1371: + "BFD_RELOC_386_TLS_LE_32", mgl@1371: + "BFD_RELOC_386_TLS_DTPMOD32", mgl@1371: + "BFD_RELOC_386_TLS_DTPOFF32", mgl@1371: + "BFD_RELOC_386_TLS_TPOFF32", mgl@1371: + "BFD_RELOC_386_TLS_GOTDESC", mgl@1371: + "BFD_RELOC_386_TLS_DESC_CALL", mgl@1371: + "BFD_RELOC_386_TLS_DESC", mgl@1371: + "BFD_RELOC_X86_64_GOT32", mgl@1371: + "BFD_RELOC_X86_64_PLT32", mgl@1371: + "BFD_RELOC_X86_64_COPY", mgl@1371: + "BFD_RELOC_X86_64_GLOB_DAT", mgl@1371: + "BFD_RELOC_X86_64_JUMP_SLOT", mgl@1371: + "BFD_RELOC_X86_64_RELATIVE", mgl@1371: + "BFD_RELOC_X86_64_GOTPCREL", mgl@1371: + "BFD_RELOC_X86_64_32S", mgl@1371: + "BFD_RELOC_X86_64_DTPMOD64", mgl@1371: + "BFD_RELOC_X86_64_DTPOFF64", mgl@1371: + "BFD_RELOC_X86_64_TPOFF64", mgl@1371: + "BFD_RELOC_X86_64_TLSGD", mgl@1371: + "BFD_RELOC_X86_64_TLSLD", mgl@1371: + "BFD_RELOC_X86_64_DTPOFF32", mgl@1371: + "BFD_RELOC_X86_64_GOTTPOFF", mgl@1371: + "BFD_RELOC_X86_64_TPOFF32", mgl@1371: + "BFD_RELOC_X86_64_GOTOFF64", mgl@1371: + "BFD_RELOC_X86_64_GOTPC32", mgl@1371: + "BFD_RELOC_X86_64_GOT64", mgl@1371: + "BFD_RELOC_X86_64_GOTPCREL64", mgl@1371: + "BFD_RELOC_X86_64_GOTPC64", mgl@1371: + "BFD_RELOC_X86_64_GOTPLT64", mgl@1371: + "BFD_RELOC_X86_64_PLTOFF64", mgl@1371: + "BFD_RELOC_X86_64_GOTPC32_TLSDESC", mgl@1371: + "BFD_RELOC_X86_64_TLSDESC_CALL", mgl@1371: + "BFD_RELOC_X86_64_TLSDESC", mgl@1371: + "BFD_RELOC_NS32K_IMM_8", mgl@1371: + "BFD_RELOC_NS32K_IMM_16", mgl@1371: + "BFD_RELOC_NS32K_IMM_32", mgl@1371: + "BFD_RELOC_NS32K_IMM_8_PCREL", mgl@1371: + "BFD_RELOC_NS32K_IMM_16_PCREL", mgl@1371: + "BFD_RELOC_NS32K_IMM_32_PCREL", mgl@1371: + "BFD_RELOC_NS32K_DISP_8", mgl@1371: + "BFD_RELOC_NS32K_DISP_16", mgl@1371: + "BFD_RELOC_NS32K_DISP_32", mgl@1371: + "BFD_RELOC_NS32K_DISP_8_PCREL", mgl@1371: + "BFD_RELOC_NS32K_DISP_16_PCREL", mgl@1371: + "BFD_RELOC_NS32K_DISP_32_PCREL", mgl@1371: + "BFD_RELOC_PDP11_DISP_8_PCREL", mgl@1371: + "BFD_RELOC_PDP11_DISP_6_PCREL", mgl@1371: + "BFD_RELOC_PJ_CODE_HI16", mgl@1371: + "BFD_RELOC_PJ_CODE_LO16", mgl@1371: + "BFD_RELOC_PJ_CODE_DIR16", mgl@1371: + "BFD_RELOC_PJ_CODE_DIR32", mgl@1371: + "BFD_RELOC_PJ_CODE_REL16", mgl@1371: + "BFD_RELOC_PJ_CODE_REL32", mgl@1371: + "BFD_RELOC_PPC_B26", mgl@1371: + "BFD_RELOC_PPC_BA26", mgl@1371: + "BFD_RELOC_PPC_TOC16", mgl@1371: + "BFD_RELOC_PPC_B16", mgl@1371: + "BFD_RELOC_PPC_B16_BRTAKEN", mgl@1371: + "BFD_RELOC_PPC_B16_BRNTAKEN", mgl@1371: + "BFD_RELOC_PPC_BA16", mgl@1371: + "BFD_RELOC_PPC_BA16_BRTAKEN", mgl@1371: + "BFD_RELOC_PPC_BA16_BRNTAKEN", mgl@1371: + "BFD_RELOC_PPC_COPY", mgl@1371: + "BFD_RELOC_PPC_GLOB_DAT", mgl@1371: + "BFD_RELOC_PPC_JMP_SLOT", mgl@1371: + "BFD_RELOC_PPC_RELATIVE", mgl@1371: + "BFD_RELOC_PPC_LOCAL24PC", mgl@1371: + "BFD_RELOC_PPC_EMB_NADDR32", mgl@1371: + "BFD_RELOC_PPC_EMB_NADDR16", mgl@1371: + "BFD_RELOC_PPC_EMB_NADDR16_LO", mgl@1371: + "BFD_RELOC_PPC_EMB_NADDR16_HI", mgl@1371: + "BFD_RELOC_PPC_EMB_NADDR16_HA", mgl@1371: + "BFD_RELOC_PPC_EMB_SDAI16", mgl@1371: + "BFD_RELOC_PPC_EMB_SDA2I16", mgl@1371: + "BFD_RELOC_PPC_EMB_SDA2REL", mgl@1371: + "BFD_RELOC_PPC_EMB_SDA21", mgl@1371: + "BFD_RELOC_PPC_EMB_MRKREF", mgl@1371: + "BFD_RELOC_PPC_EMB_RELSEC16", mgl@1371: + "BFD_RELOC_PPC_EMB_RELST_LO", mgl@1371: + "BFD_RELOC_PPC_EMB_RELST_HI", mgl@1371: + "BFD_RELOC_PPC_EMB_RELST_HA", mgl@1371: + "BFD_RELOC_PPC_EMB_BIT_FLD", mgl@1371: + "BFD_RELOC_PPC_EMB_RELSDA", mgl@1371: + "BFD_RELOC_PPC64_HIGHER", mgl@1371: + "BFD_RELOC_PPC64_HIGHER_S", mgl@1371: + "BFD_RELOC_PPC64_HIGHEST", mgl@1371: + "BFD_RELOC_PPC64_HIGHEST_S", mgl@1371: + "BFD_RELOC_PPC64_TOC16_LO", mgl@1371: + "BFD_RELOC_PPC64_TOC16_HI", mgl@1371: + "BFD_RELOC_PPC64_TOC16_HA", mgl@1371: + "BFD_RELOC_PPC64_TOC", mgl@1371: + "BFD_RELOC_PPC64_PLTGOT16", mgl@1371: + "BFD_RELOC_PPC64_PLTGOT16_LO", mgl@1371: + "BFD_RELOC_PPC64_PLTGOT16_HI", mgl@1371: + "BFD_RELOC_PPC64_PLTGOT16_HA", mgl@1371: + "BFD_RELOC_PPC64_ADDR16_DS", mgl@1371: + "BFD_RELOC_PPC64_ADDR16_LO_DS", mgl@1371: + "BFD_RELOC_PPC64_GOT16_DS", mgl@1371: + "BFD_RELOC_PPC64_GOT16_LO_DS", mgl@1371: + "BFD_RELOC_PPC64_PLT16_LO_DS", mgl@1371: + "BFD_RELOC_PPC64_SECTOFF_DS", mgl@1371: + "BFD_RELOC_PPC64_SECTOFF_LO_DS", mgl@1371: + "BFD_RELOC_PPC64_TOC16_DS", mgl@1371: + "BFD_RELOC_PPC64_TOC16_LO_DS", mgl@1371: + "BFD_RELOC_PPC64_PLTGOT16_DS", mgl@1371: + "BFD_RELOC_PPC64_PLTGOT16_LO_DS", mgl@1371: + "BFD_RELOC_PPC_TLS", mgl@1371: + "BFD_RELOC_PPC_DTPMOD", mgl@1371: + "BFD_RELOC_PPC_TPREL16", mgl@1371: + "BFD_RELOC_PPC_TPREL16_LO", mgl@1371: + "BFD_RELOC_PPC_TPREL16_HI", mgl@1371: + "BFD_RELOC_PPC_TPREL16_HA", mgl@1371: + "BFD_RELOC_PPC_TPREL", mgl@1371: + "BFD_RELOC_PPC_DTPREL16", mgl@1371: + "BFD_RELOC_PPC_DTPREL16_LO", mgl@1371: + "BFD_RELOC_PPC_DTPREL16_HI", mgl@1371: + "BFD_RELOC_PPC_DTPREL16_HA", mgl@1371: + "BFD_RELOC_PPC_DTPREL", mgl@1371: + "BFD_RELOC_PPC_GOT_TLSGD16", mgl@1371: + "BFD_RELOC_PPC_GOT_TLSGD16_LO", mgl@1371: + "BFD_RELOC_PPC_GOT_TLSGD16_HI", mgl@1371: + "BFD_RELOC_PPC_GOT_TLSGD16_HA", mgl@1371: + "BFD_RELOC_PPC_GOT_TLSLD16", mgl@1371: + "BFD_RELOC_PPC_GOT_TLSLD16_LO", mgl@1371: + "BFD_RELOC_PPC_GOT_TLSLD16_HI", mgl@1371: + "BFD_RELOC_PPC_GOT_TLSLD16_HA", mgl@1371: + "BFD_RELOC_PPC_GOT_TPREL16", mgl@1371: + "BFD_RELOC_PPC_GOT_TPREL16_LO", mgl@1371: + "BFD_RELOC_PPC_GOT_TPREL16_HI", mgl@1371: + "BFD_RELOC_PPC_GOT_TPREL16_HA", mgl@1371: + "BFD_RELOC_PPC_GOT_DTPREL16", mgl@1371: + "BFD_RELOC_PPC_GOT_DTPREL16_LO", mgl@1371: + "BFD_RELOC_PPC_GOT_DTPREL16_HI", mgl@1371: + "BFD_RELOC_PPC_GOT_DTPREL16_HA", mgl@1371: + "BFD_RELOC_PPC64_TPREL16_DS", mgl@1371: + "BFD_RELOC_PPC64_TPREL16_LO_DS", mgl@1371: + "BFD_RELOC_PPC64_TPREL16_HIGHER", mgl@1371: + "BFD_RELOC_PPC64_TPREL16_HIGHERA", mgl@1371: + "BFD_RELOC_PPC64_TPREL16_HIGHEST", mgl@1371: + "BFD_RELOC_PPC64_TPREL16_HIGHESTA", mgl@1371: + "BFD_RELOC_PPC64_DTPREL16_DS", mgl@1371: + "BFD_RELOC_PPC64_DTPREL16_LO_DS", mgl@1371: + "BFD_RELOC_PPC64_DTPREL16_HIGHER", mgl@1371: + "BFD_RELOC_PPC64_DTPREL16_HIGHERA", mgl@1371: + "BFD_RELOC_PPC64_DTPREL16_HIGHEST", mgl@1371: + "BFD_RELOC_PPC64_DTPREL16_HIGHESTA", mgl@1371: + "BFD_RELOC_I370_D12", mgl@1371: + "BFD_RELOC_CTOR", mgl@1371: + "BFD_RELOC_ARM_PCREL_BRANCH", mgl@1371: + "BFD_RELOC_ARM_PCREL_BLX", mgl@1371: + "BFD_RELOC_THUMB_PCREL_BLX", mgl@1371: + "BFD_RELOC_ARM_PCREL_CALL", mgl@1371: + "BFD_RELOC_ARM_PCREL_JUMP", mgl@1371: + "BFD_RELOC_THUMB_PCREL_BRANCH7", mgl@1371: + "BFD_RELOC_THUMB_PCREL_BRANCH9", mgl@1371: + "BFD_RELOC_THUMB_PCREL_BRANCH12", mgl@1371: + "BFD_RELOC_THUMB_PCREL_BRANCH20", mgl@1371: + "BFD_RELOC_THUMB_PCREL_BRANCH23", mgl@1371: + "BFD_RELOC_THUMB_PCREL_BRANCH25", mgl@1371: + "BFD_RELOC_ARM_OFFSET_IMM", mgl@1371: + "BFD_RELOC_ARM_THUMB_OFFSET", mgl@1371: + "BFD_RELOC_ARM_TARGET1", mgl@1371: + "BFD_RELOC_ARM_ROSEGREL32", mgl@1371: + "BFD_RELOC_ARM_SBREL32", mgl@1371: + "BFD_RELOC_ARM_TARGET2", mgl@1371: + "BFD_RELOC_ARM_PREL31", mgl@1371: + "BFD_RELOC_ARM_MOVW", mgl@1371: + "BFD_RELOC_ARM_MOVT", mgl@1371: + "BFD_RELOC_ARM_MOVW_PCREL", mgl@1371: + "BFD_RELOC_ARM_MOVT_PCREL", mgl@1371: + "BFD_RELOC_ARM_THUMB_MOVW", mgl@1371: + "BFD_RELOC_ARM_THUMB_MOVT", mgl@1371: + "BFD_RELOC_ARM_THUMB_MOVW_PCREL", mgl@1371: + "BFD_RELOC_ARM_THUMB_MOVT_PCREL", mgl@1371: + "BFD_RELOC_ARM_JUMP_SLOT", mgl@1371: + "BFD_RELOC_ARM_GLOB_DAT", mgl@1371: + "BFD_RELOC_ARM_GOT32", mgl@1371: + "BFD_RELOC_ARM_PLT32", mgl@1371: + "BFD_RELOC_ARM_RELATIVE", mgl@1371: + "BFD_RELOC_ARM_GOTOFF", mgl@1371: + "BFD_RELOC_ARM_GOTPC", mgl@1371: + "BFD_RELOC_ARM_TLS_GD32", mgl@1371: + "BFD_RELOC_ARM_TLS_LDO32", mgl@1371: + "BFD_RELOC_ARM_TLS_LDM32", mgl@1371: + "BFD_RELOC_ARM_TLS_DTPOFF32", mgl@1371: + "BFD_RELOC_ARM_TLS_DTPMOD32", mgl@1371: + "BFD_RELOC_ARM_TLS_TPOFF32", mgl@1371: + "BFD_RELOC_ARM_TLS_IE32", mgl@1371: + "BFD_RELOC_ARM_TLS_LE32", mgl@1371: + "BFD_RELOC_ARM_ALU_PC_G0_NC", mgl@1371: + "BFD_RELOC_ARM_ALU_PC_G0", mgl@1371: + "BFD_RELOC_ARM_ALU_PC_G1_NC", mgl@1371: + "BFD_RELOC_ARM_ALU_PC_G1", mgl@1371: + "BFD_RELOC_ARM_ALU_PC_G2", mgl@1371: + "BFD_RELOC_ARM_LDR_PC_G0", mgl@1371: + "BFD_RELOC_ARM_LDR_PC_G1", mgl@1371: + "BFD_RELOC_ARM_LDR_PC_G2", mgl@1371: + "BFD_RELOC_ARM_LDRS_PC_G0", mgl@1371: + "BFD_RELOC_ARM_LDRS_PC_G1", mgl@1371: + "BFD_RELOC_ARM_LDRS_PC_G2", mgl@1371: + "BFD_RELOC_ARM_LDC_PC_G0", mgl@1371: + "BFD_RELOC_ARM_LDC_PC_G1", mgl@1371: + "BFD_RELOC_ARM_LDC_PC_G2", mgl@1371: + "BFD_RELOC_ARM_ALU_SB_G0_NC", mgl@1371: + "BFD_RELOC_ARM_ALU_SB_G0", mgl@1371: + "BFD_RELOC_ARM_ALU_SB_G1_NC", mgl@1371: + "BFD_RELOC_ARM_ALU_SB_G1", mgl@1371: + "BFD_RELOC_ARM_ALU_SB_G2", mgl@1371: + "BFD_RELOC_ARM_LDR_SB_G0", mgl@1371: + "BFD_RELOC_ARM_LDR_SB_G1", mgl@1371: + "BFD_RELOC_ARM_LDR_SB_G2", mgl@1371: + "BFD_RELOC_ARM_LDRS_SB_G0", mgl@1371: + "BFD_RELOC_ARM_LDRS_SB_G1", mgl@1371: + "BFD_RELOC_ARM_LDRS_SB_G2", mgl@1371: + "BFD_RELOC_ARM_LDC_SB_G0", mgl@1371: + "BFD_RELOC_ARM_LDC_SB_G1", mgl@1371: + "BFD_RELOC_ARM_LDC_SB_G2", mgl@1371: + "BFD_RELOC_ARM_IMMEDIATE", mgl@1371: + "BFD_RELOC_ARM_ADRL_IMMEDIATE", mgl@1371: + "BFD_RELOC_ARM_T32_IMMEDIATE", mgl@1371: + "BFD_RELOC_ARM_T32_ADD_IMM", mgl@1371: + "BFD_RELOC_ARM_T32_IMM12", mgl@1371: + "BFD_RELOC_ARM_T32_ADD_PC12", mgl@1371: + "BFD_RELOC_ARM_SHIFT_IMM", mgl@1371: + "BFD_RELOC_ARM_SMC", mgl@1371: + "BFD_RELOC_ARM_SWI", mgl@1371: + "BFD_RELOC_ARM_MULTI", mgl@1371: + "BFD_RELOC_ARM_CP_OFF_IMM", mgl@1371: + "BFD_RELOC_ARM_CP_OFF_IMM_S2", mgl@1371: + "BFD_RELOC_ARM_T32_CP_OFF_IMM", mgl@1371: + "BFD_RELOC_ARM_T32_CP_OFF_IMM_S2", mgl@1371: + "BFD_RELOC_ARM_ADR_IMM", mgl@1371: + "BFD_RELOC_ARM_LDR_IMM", mgl@1371: + "BFD_RELOC_ARM_LITERAL", mgl@1371: + "BFD_RELOC_ARM_IN_POOL", mgl@1371: + "BFD_RELOC_ARM_OFFSET_IMM8", mgl@1371: + "BFD_RELOC_ARM_T32_OFFSET_U8", mgl@1371: + "BFD_RELOC_ARM_T32_OFFSET_IMM", mgl@1371: + "BFD_RELOC_ARM_HWLITERAL", mgl@1371: + "BFD_RELOC_ARM_THUMB_ADD", mgl@1371: + "BFD_RELOC_ARM_THUMB_IMM", mgl@1371: + "BFD_RELOC_ARM_THUMB_SHIFT", mgl@1371: + "BFD_RELOC_SH_PCDISP8BY2", mgl@1371: + "BFD_RELOC_SH_PCDISP12BY2", mgl@1371: + "BFD_RELOC_SH_IMM3", mgl@1371: + "BFD_RELOC_SH_IMM3U", mgl@1371: + "BFD_RELOC_SH_DISP12", mgl@1371: + "BFD_RELOC_SH_DISP12BY2", mgl@1371: + "BFD_RELOC_SH_DISP12BY4", mgl@1371: + "BFD_RELOC_SH_DISP12BY8", mgl@1371: + "BFD_RELOC_SH_DISP20", mgl@1371: + "BFD_RELOC_SH_DISP20BY8", mgl@1371: + "BFD_RELOC_SH_IMM4", mgl@1371: + "BFD_RELOC_SH_IMM4BY2", mgl@1371: + "BFD_RELOC_SH_IMM4BY4", mgl@1371: + "BFD_RELOC_SH_IMM8", mgl@1371: + "BFD_RELOC_SH_IMM8BY2", mgl@1371: + "BFD_RELOC_SH_IMM8BY4", mgl@1371: + "BFD_RELOC_SH_PCRELIMM8BY2", mgl@1371: + "BFD_RELOC_SH_PCRELIMM8BY4", mgl@1371: + "BFD_RELOC_SH_SWITCH16", mgl@1371: + "BFD_RELOC_SH_SWITCH32", mgl@1371: + "BFD_RELOC_SH_USES", mgl@1371: + "BFD_RELOC_SH_COUNT", mgl@1371: + "BFD_RELOC_SH_ALIGN", mgl@1371: + "BFD_RELOC_SH_CODE", mgl@1371: + "BFD_RELOC_SH_DATA", mgl@1371: + "BFD_RELOC_SH_LABEL", mgl@1371: + "BFD_RELOC_SH_LOOP_START", mgl@1371: + "BFD_RELOC_SH_LOOP_END", mgl@1371: + "BFD_RELOC_SH_COPY", mgl@1371: + "BFD_RELOC_SH_GLOB_DAT", mgl@1371: + "BFD_RELOC_SH_JMP_SLOT", mgl@1371: + "BFD_RELOC_SH_RELATIVE", mgl@1371: + "BFD_RELOC_SH_GOTPC", mgl@1371: + "BFD_RELOC_SH_GOT_LOW16", mgl@1371: + "BFD_RELOC_SH_GOT_MEDLOW16", mgl@1371: + "BFD_RELOC_SH_GOT_MEDHI16", mgl@1371: + "BFD_RELOC_SH_GOT_HI16", mgl@1371: + "BFD_RELOC_SH_GOTPLT_LOW16", mgl@1371: + "BFD_RELOC_SH_GOTPLT_MEDLOW16", mgl@1371: + "BFD_RELOC_SH_GOTPLT_MEDHI16", mgl@1371: + "BFD_RELOC_SH_GOTPLT_HI16", mgl@1371: + "BFD_RELOC_SH_PLT_LOW16", mgl@1371: + "BFD_RELOC_SH_PLT_MEDLOW16", mgl@1371: + "BFD_RELOC_SH_PLT_MEDHI16", mgl@1371: + "BFD_RELOC_SH_PLT_HI16", mgl@1371: + "BFD_RELOC_SH_GOTOFF_LOW16", mgl@1371: + "BFD_RELOC_SH_GOTOFF_MEDLOW16", mgl@1371: + "BFD_RELOC_SH_GOTOFF_MEDHI16", mgl@1371: + "BFD_RELOC_SH_GOTOFF_HI16", mgl@1371: + "BFD_RELOC_SH_GOTPC_LOW16", mgl@1371: + "BFD_RELOC_SH_GOTPC_MEDLOW16", mgl@1371: + "BFD_RELOC_SH_GOTPC_MEDHI16", mgl@1371: + "BFD_RELOC_SH_GOTPC_HI16", mgl@1371: + "BFD_RELOC_SH_COPY64", mgl@1371: + "BFD_RELOC_SH_GLOB_DAT64", mgl@1371: + "BFD_RELOC_SH_JMP_SLOT64", mgl@1371: + "BFD_RELOC_SH_RELATIVE64", mgl@1371: + "BFD_RELOC_SH_GOT10BY4", mgl@1371: + "BFD_RELOC_SH_GOT10BY8", mgl@1371: + "BFD_RELOC_SH_GOTPLT10BY4", mgl@1371: + "BFD_RELOC_SH_GOTPLT10BY8", mgl@1371: + "BFD_RELOC_SH_GOTPLT32", mgl@1371: + "BFD_RELOC_SH_SHMEDIA_CODE", mgl@1371: + "BFD_RELOC_SH_IMMU5", mgl@1371: + "BFD_RELOC_SH_IMMS6", mgl@1371: + "BFD_RELOC_SH_IMMS6BY32", mgl@1371: + "BFD_RELOC_SH_IMMU6", mgl@1371: + "BFD_RELOC_SH_IMMS10", mgl@1371: + "BFD_RELOC_SH_IMMS10BY2", mgl@1371: + "BFD_RELOC_SH_IMMS10BY4", mgl@1371: + "BFD_RELOC_SH_IMMS10BY8", mgl@1371: + "BFD_RELOC_SH_IMMS16", mgl@1371: + "BFD_RELOC_SH_IMMU16", mgl@1371: + "BFD_RELOC_SH_IMM_LOW16", mgl@1371: + "BFD_RELOC_SH_IMM_LOW16_PCREL", mgl@1371: + "BFD_RELOC_SH_IMM_MEDLOW16", mgl@1371: + "BFD_RELOC_SH_IMM_MEDLOW16_PCREL", mgl@1371: + "BFD_RELOC_SH_IMM_MEDHI16", mgl@1371: + "BFD_RELOC_SH_IMM_MEDHI16_PCREL", mgl@1371: + "BFD_RELOC_SH_IMM_HI16", mgl@1371: + "BFD_RELOC_SH_IMM_HI16_PCREL", mgl@1371: + "BFD_RELOC_SH_PT_16", mgl@1371: + "BFD_RELOC_SH_TLS_GD_32", mgl@1371: + "BFD_RELOC_SH_TLS_LD_32", mgl@1371: + "BFD_RELOC_SH_TLS_LDO_32", mgl@1371: + "BFD_RELOC_SH_TLS_IE_32", mgl@1371: + "BFD_RELOC_SH_TLS_LE_32", mgl@1371: + "BFD_RELOC_SH_TLS_DTPMOD32", mgl@1371: + "BFD_RELOC_SH_TLS_DTPOFF32", mgl@1371: + "BFD_RELOC_SH_TLS_TPOFF32", mgl@1371: + "BFD_RELOC_ARC_B22_PCREL", mgl@1371: + "BFD_RELOC_ARC_B26", mgl@1371: + "BFD_RELOC_BFIN_16_IMM", mgl@1371: + "BFD_RELOC_BFIN_16_HIGH", mgl@1371: + "BFD_RELOC_BFIN_4_PCREL", mgl@1371: + "BFD_RELOC_BFIN_5_PCREL", mgl@1371: + "BFD_RELOC_BFIN_16_LOW", mgl@1371: + "BFD_RELOC_BFIN_10_PCREL", mgl@1371: + "BFD_RELOC_BFIN_11_PCREL", mgl@1371: + "BFD_RELOC_BFIN_12_PCREL_JUMP", mgl@1371: + "BFD_RELOC_BFIN_12_PCREL_JUMP_S", mgl@1371: + "BFD_RELOC_BFIN_24_PCREL_CALL_X", mgl@1371: + "BFD_RELOC_BFIN_24_PCREL_JUMP_L", mgl@1371: + "BFD_RELOC_BFIN_GOT17M4", mgl@1371: + "BFD_RELOC_BFIN_GOTHI", mgl@1371: + "BFD_RELOC_BFIN_GOTLO", mgl@1371: + "BFD_RELOC_BFIN_FUNCDESC", mgl@1371: + "BFD_RELOC_BFIN_FUNCDESC_GOT17M4", mgl@1371: + "BFD_RELOC_BFIN_FUNCDESC_GOTHI", mgl@1371: + "BFD_RELOC_BFIN_FUNCDESC_GOTLO", mgl@1371: + "BFD_RELOC_BFIN_FUNCDESC_VALUE", mgl@1371: + "BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4", mgl@1371: + "BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI", mgl@1371: + "BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO", mgl@1371: + "BFD_RELOC_BFIN_GOTOFF17M4", mgl@1371: + "BFD_RELOC_BFIN_GOTOFFHI", mgl@1371: + "BFD_RELOC_BFIN_GOTOFFLO", mgl@1371: + "BFD_RELOC_BFIN_GOT", mgl@1371: + "BFD_RELOC_BFIN_PLTPC", mgl@1371: + "BFD_ARELOC_BFIN_PUSH", mgl@1371: + "BFD_ARELOC_BFIN_CONST", mgl@1371: + "BFD_ARELOC_BFIN_ADD", mgl@1371: + "BFD_ARELOC_BFIN_SUB", mgl@1371: + "BFD_ARELOC_BFIN_MULT", mgl@1371: + "BFD_ARELOC_BFIN_DIV", mgl@1371: + "BFD_ARELOC_BFIN_MOD", mgl@1371: + "BFD_ARELOC_BFIN_LSHIFT", mgl@1371: + "BFD_ARELOC_BFIN_RSHIFT", mgl@1371: + "BFD_ARELOC_BFIN_AND", mgl@1371: + "BFD_ARELOC_BFIN_OR", mgl@1371: + "BFD_ARELOC_BFIN_XOR", mgl@1371: + "BFD_ARELOC_BFIN_LAND", mgl@1371: + "BFD_ARELOC_BFIN_LOR", mgl@1371: + "BFD_ARELOC_BFIN_LEN", mgl@1371: + "BFD_ARELOC_BFIN_NEG", mgl@1371: + "BFD_ARELOC_BFIN_COMP", mgl@1371: + "BFD_ARELOC_BFIN_PAGE", mgl@1371: + "BFD_ARELOC_BFIN_HWPAGE", mgl@1371: + "BFD_ARELOC_BFIN_ADDR", mgl@1371: + "BFD_RELOC_D10V_10_PCREL_R", mgl@1371: + "BFD_RELOC_D10V_10_PCREL_L", mgl@1371: + "BFD_RELOC_D10V_18", mgl@1371: + "BFD_RELOC_D10V_18_PCREL", mgl@1371: + "BFD_RELOC_D30V_6", mgl@1371: + "BFD_RELOC_D30V_9_PCREL", mgl@1371: + "BFD_RELOC_D30V_9_PCREL_R", mgl@1371: + "BFD_RELOC_D30V_15", mgl@1371: + "BFD_RELOC_D30V_15_PCREL", mgl@1371: + "BFD_RELOC_D30V_15_PCREL_R", mgl@1371: + "BFD_RELOC_D30V_21", mgl@1371: + "BFD_RELOC_D30V_21_PCREL", mgl@1371: + "BFD_RELOC_D30V_21_PCREL_R", mgl@1371: + "BFD_RELOC_D30V_32", mgl@1371: + "BFD_RELOC_D30V_32_PCREL", mgl@1371: + "BFD_RELOC_DLX_HI16_S", mgl@1371: + "BFD_RELOC_DLX_LO16", mgl@1371: + "BFD_RELOC_DLX_JMP26", mgl@1371: + "BFD_RELOC_M32C_HI8", mgl@1371: + "BFD_RELOC_M32C_RL_JUMP", mgl@1371: + "BFD_RELOC_M32C_RL_1ADDR", mgl@1371: + "BFD_RELOC_M32C_RL_2ADDR", mgl@1371: + "BFD_RELOC_M32R_24", mgl@1371: + "BFD_RELOC_M32R_10_PCREL", mgl@1371: + "BFD_RELOC_M32R_18_PCREL", mgl@1371: + "BFD_RELOC_M32R_26_PCREL", mgl@1371: + "BFD_RELOC_M32R_HI16_ULO", mgl@1371: + "BFD_RELOC_M32R_HI16_SLO", mgl@1371: + "BFD_RELOC_M32R_LO16", mgl@1371: + "BFD_RELOC_M32R_SDA16", mgl@1371: + "BFD_RELOC_M32R_GOT24", mgl@1371: + "BFD_RELOC_M32R_26_PLTREL", mgl@1371: + "BFD_RELOC_M32R_COPY", mgl@1371: + "BFD_RELOC_M32R_GLOB_DAT", mgl@1371: + "BFD_RELOC_M32R_JMP_SLOT", mgl@1371: + "BFD_RELOC_M32R_RELATIVE", mgl@1371: + "BFD_RELOC_M32R_GOTOFF", mgl@1371: + "BFD_RELOC_M32R_GOTOFF_HI_ULO", mgl@1371: + "BFD_RELOC_M32R_GOTOFF_HI_SLO", mgl@1371: + "BFD_RELOC_M32R_GOTOFF_LO", mgl@1371: + "BFD_RELOC_M32R_GOTPC24", mgl@1371: + "BFD_RELOC_M32R_GOT16_HI_ULO", mgl@1371: + "BFD_RELOC_M32R_GOT16_HI_SLO", mgl@1371: + "BFD_RELOC_M32R_GOT16_LO", mgl@1371: + "BFD_RELOC_M32R_GOTPC_HI_ULO", mgl@1371: + "BFD_RELOC_M32R_GOTPC_HI_SLO", mgl@1371: + "BFD_RELOC_M32R_GOTPC_LO", mgl@1371: + "BFD_RELOC_V850_9_PCREL", mgl@1371: + "BFD_RELOC_V850_22_PCREL", mgl@1371: + "BFD_RELOC_V850_SDA_16_16_OFFSET", mgl@1371: + "BFD_RELOC_V850_SDA_15_16_OFFSET", mgl@1371: + "BFD_RELOC_V850_ZDA_16_16_OFFSET", mgl@1371: + "BFD_RELOC_V850_ZDA_15_16_OFFSET", mgl@1371: + "BFD_RELOC_V850_TDA_6_8_OFFSET", mgl@1371: + "BFD_RELOC_V850_TDA_7_8_OFFSET", mgl@1371: + "BFD_RELOC_V850_TDA_7_7_OFFSET", mgl@1371: + "BFD_RELOC_V850_TDA_16_16_OFFSET", mgl@1371: + "BFD_RELOC_V850_TDA_4_5_OFFSET", mgl@1371: + "BFD_RELOC_V850_TDA_4_4_OFFSET", mgl@1371: + "BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET", mgl@1371: + "BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET", mgl@1371: + "BFD_RELOC_V850_CALLT_6_7_OFFSET", mgl@1371: + "BFD_RELOC_V850_CALLT_16_16_OFFSET", mgl@1371: + "BFD_RELOC_V850_LONGCALL", mgl@1371: + "BFD_RELOC_V850_LONGJUMP", mgl@1371: + "BFD_RELOC_V850_ALIGN", mgl@1371: + "BFD_RELOC_V850_LO16_SPLIT_OFFSET", mgl@1371: + "BFD_RELOC_MN10300_32_PCREL", mgl@1371: + "BFD_RELOC_MN10300_16_PCREL", mgl@1371: + "BFD_RELOC_TIC30_LDP", mgl@1371: + "BFD_RELOC_TIC54X_PARTLS7", mgl@1371: + "BFD_RELOC_TIC54X_PARTMS9", mgl@1371: + "BFD_RELOC_TIC54X_23", mgl@1371: + "BFD_RELOC_TIC54X_16_OF_23", mgl@1371: + "BFD_RELOC_TIC54X_MS7_OF_23", mgl@1371: + "BFD_RELOC_FR30_48", mgl@1371: + "BFD_RELOC_FR30_20", mgl@1371: + "BFD_RELOC_FR30_6_IN_4", mgl@1371: + "BFD_RELOC_FR30_8_IN_8", mgl@1371: + "BFD_RELOC_FR30_9_IN_8", mgl@1371: + "BFD_RELOC_FR30_10_IN_8", mgl@1371: + "BFD_RELOC_FR30_9_PCREL", mgl@1371: + "BFD_RELOC_FR30_12_PCREL", mgl@1371: + "BFD_RELOC_MCORE_PCREL_IMM8BY4", mgl@1371: + "BFD_RELOC_MCORE_PCREL_IMM11BY2", mgl@1371: + "BFD_RELOC_MCORE_PCREL_IMM4BY2", mgl@1371: + "BFD_RELOC_MCORE_PCREL_32", mgl@1371: + "BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2", mgl@1371: + "BFD_RELOC_MCORE_RVA", mgl@1371: + "BFD_RELOC_MEP_8", mgl@1371: + "BFD_RELOC_MEP_16", mgl@1371: + "BFD_RELOC_MEP_32", mgl@1371: + "BFD_RELOC_MEP_PCREL8A2", mgl@1371: + "BFD_RELOC_MEP_PCREL12A2", mgl@1371: + "BFD_RELOC_MEP_PCREL17A2", mgl@1371: + "BFD_RELOC_MEP_PCREL24A2", mgl@1371: + "BFD_RELOC_MEP_PCABS24A2", mgl@1371: + "BFD_RELOC_MEP_LOW16", mgl@1371: + "BFD_RELOC_MEP_HI16U", mgl@1371: + "BFD_RELOC_MEP_HI16S", mgl@1371: + "BFD_RELOC_MEP_GPREL", mgl@1371: + "BFD_RELOC_MEP_TPREL", mgl@1371: + "BFD_RELOC_MEP_TPREL7", mgl@1371: + "BFD_RELOC_MEP_TPREL7A2", mgl@1371: + "BFD_RELOC_MEP_TPREL7A4", mgl@1371: + "BFD_RELOC_MEP_UIMM24", mgl@1371: + "BFD_RELOC_MEP_ADDR24A4", mgl@1371: + "BFD_RELOC_MEP_GNU_VTINHERIT", mgl@1371: + "BFD_RELOC_MEP_GNU_VTENTRY", mgl@1371: + mgl@1371: + "BFD_RELOC_MMIX_GETA", mgl@1371: + "BFD_RELOC_MMIX_GETA_1", mgl@1371: + "BFD_RELOC_MMIX_GETA_2", mgl@1371: + "BFD_RELOC_MMIX_GETA_3", mgl@1371: + "BFD_RELOC_MMIX_CBRANCH", mgl@1371: + "BFD_RELOC_MMIX_CBRANCH_J", mgl@1371: + "BFD_RELOC_MMIX_CBRANCH_1", mgl@1371: + "BFD_RELOC_MMIX_CBRANCH_2", mgl@1371: + "BFD_RELOC_MMIX_CBRANCH_3", mgl@1371: + "BFD_RELOC_MMIX_PUSHJ", mgl@1371: + "BFD_RELOC_MMIX_PUSHJ_1", mgl@1371: + "BFD_RELOC_MMIX_PUSHJ_2", mgl@1371: + "BFD_RELOC_MMIX_PUSHJ_3", mgl@1371: + "BFD_RELOC_MMIX_PUSHJ_STUBBABLE", mgl@1371: + "BFD_RELOC_MMIX_JMP", mgl@1371: + "BFD_RELOC_MMIX_JMP_1", mgl@1371: + "BFD_RELOC_MMIX_JMP_2", mgl@1371: + "BFD_RELOC_MMIX_JMP_3", mgl@1371: + "BFD_RELOC_MMIX_ADDR19", mgl@1371: + "BFD_RELOC_MMIX_ADDR27", mgl@1371: + "BFD_RELOC_MMIX_REG_OR_BYTE", mgl@1371: + "BFD_RELOC_MMIX_REG", mgl@1371: + "BFD_RELOC_MMIX_BASE_PLUS_OFFSET", mgl@1371: + "BFD_RELOC_MMIX_LOCAL", mgl@1371: + "BFD_RELOC_AVR_7_PCREL", mgl@1371: + "BFD_RELOC_AVR_13_PCREL", mgl@1371: + "BFD_RELOC_AVR_16_PM", mgl@1371: + "BFD_RELOC_AVR_LO8_LDI", mgl@1371: + "BFD_RELOC_AVR_HI8_LDI", mgl@1371: + "BFD_RELOC_AVR_HH8_LDI", mgl@1371: + "BFD_RELOC_AVR_MS8_LDI", mgl@1371: + "BFD_RELOC_AVR_LO8_LDI_NEG", mgl@1371: + "BFD_RELOC_AVR_HI8_LDI_NEG", mgl@1371: + "BFD_RELOC_AVR_HH8_LDI_NEG", mgl@1371: + "BFD_RELOC_AVR_MS8_LDI_NEG", mgl@1371: + "BFD_RELOC_AVR_LO8_LDI_PM", mgl@1371: + "BFD_RELOC_AVR_LO8_LDI_GS", mgl@1371: + "BFD_RELOC_AVR_HI8_LDI_PM", mgl@1371: + "BFD_RELOC_AVR_HI8_LDI_GS", mgl@1371: + "BFD_RELOC_AVR_HH8_LDI_PM", mgl@1371: + "BFD_RELOC_AVR_LO8_LDI_PM_NEG", mgl@1371: + "BFD_RELOC_AVR_HI8_LDI_PM_NEG", mgl@1371: + "BFD_RELOC_AVR_HH8_LDI_PM_NEG", mgl@1371: + "BFD_RELOC_AVR_CALL", mgl@1371: + "BFD_RELOC_AVR_LDI", mgl@1371: + "BFD_RELOC_AVR_6", mgl@1371: + "BFD_RELOC_AVR_6_ADIW", mgl@1371: + "BFD_RELOC_AVR32_DIFF32", mgl@1371: + "BFD_RELOC_AVR32_DIFF16", mgl@1371: + "BFD_RELOC_AVR32_DIFF8", mgl@1371: + "BFD_RELOC_AVR32_GOT32", mgl@1371: + "BFD_RELOC_AVR32_GOT16", mgl@1371: + "BFD_RELOC_AVR32_GOT8", mgl@1371: + "BFD_RELOC_AVR32_21S", mgl@1371: + "BFD_RELOC_AVR32_16U", mgl@1371: + "BFD_RELOC_AVR32_16S", mgl@1371: + "BFD_RELOC_AVR32_SUB5", mgl@1371: + "BFD_RELOC_AVR32_8S_EXT", mgl@1371: + "BFD_RELOC_AVR32_8S", mgl@1371: + "BFD_RELOC_AVR32_15S", mgl@1371: + "BFD_RELOC_AVR32_22H_PCREL", mgl@1371: + "BFD_RELOC_AVR32_18W_PCREL", mgl@1371: + "BFD_RELOC_AVR32_16B_PCREL", mgl@1371: + "BFD_RELOC_AVR32_16N_PCREL", mgl@1371: + "BFD_RELOC_AVR32_14UW_PCREL", mgl@1371: + "BFD_RELOC_AVR32_11H_PCREL", mgl@1371: + "BFD_RELOC_AVR32_10UW_PCREL", mgl@1371: + "BFD_RELOC_AVR32_9H_PCREL", mgl@1371: + "BFD_RELOC_AVR32_9UW_PCREL", mgl@1371: + "BFD_RELOC_AVR32_GOTPC", mgl@1371: + "BFD_RELOC_AVR32_GOTCALL", mgl@1371: + "BFD_RELOC_AVR32_LDA_GOT", mgl@1371: + "BFD_RELOC_AVR32_GOT21S", mgl@1371: + "BFD_RELOC_AVR32_GOT18SW", mgl@1371: + "BFD_RELOC_AVR32_GOT16S", mgl@1371: + "BFD_RELOC_AVR32_32_CPENT", mgl@1371: + "BFD_RELOC_AVR32_CPCALL", mgl@1371: + "BFD_RELOC_AVR32_16_CP", mgl@1371: + "BFD_RELOC_AVR32_9W_CP", mgl@1371: + "BFD_RELOC_AVR32_ALIGN", mgl@1371: + "BFD_RELOC_AVR32_14UW", mgl@1371: + "BFD_RELOC_AVR32_10UW", mgl@1371: + "BFD_RELOC_AVR32_10SW", mgl@1371: + "BFD_RELOC_AVR32_STHH_W", mgl@1371: + "BFD_RELOC_AVR32_7UW", mgl@1371: + "BFD_RELOC_AVR32_6S", mgl@1371: + "BFD_RELOC_AVR32_6UW", mgl@1371: + "BFD_RELOC_AVR32_4UH", mgl@1371: + "BFD_RELOC_AVR32_3U", mgl@1371: + "BFD_RELOC_390_12", mgl@1371: + "BFD_RELOC_390_GOT12", mgl@1371: + "BFD_RELOC_390_PLT32", mgl@1371: + "BFD_RELOC_390_COPY", mgl@1371: + "BFD_RELOC_390_GLOB_DAT", mgl@1371: + "BFD_RELOC_390_JMP_SLOT", mgl@1371: + "BFD_RELOC_390_RELATIVE", mgl@1371: + "BFD_RELOC_390_GOTPC", mgl@1371: + "BFD_RELOC_390_GOT16", mgl@1371: + "BFD_RELOC_390_PC16DBL", mgl@1371: + "BFD_RELOC_390_PLT16DBL", mgl@1371: + "BFD_RELOC_390_PC32DBL", mgl@1371: + "BFD_RELOC_390_PLT32DBL", mgl@1371: + "BFD_RELOC_390_GOTPCDBL", mgl@1371: + "BFD_RELOC_390_GOT64", mgl@1371: + "BFD_RELOC_390_PLT64", mgl@1371: + "BFD_RELOC_390_GOTENT", mgl@1371: + "BFD_RELOC_390_GOTOFF64", mgl@1371: + "BFD_RELOC_390_GOTPLT12", mgl@1371: + "BFD_RELOC_390_GOTPLT16", mgl@1371: + "BFD_RELOC_390_GOTPLT32", mgl@1371: + "BFD_RELOC_390_GOTPLT64", mgl@1371: + "BFD_RELOC_390_GOTPLTENT", mgl@1371: + "BFD_RELOC_390_PLTOFF16", mgl@1371: + "BFD_RELOC_390_PLTOFF32", mgl@1371: + "BFD_RELOC_390_PLTOFF64", mgl@1371: + "BFD_RELOC_390_TLS_LOAD", mgl@1371: + "BFD_RELOC_390_TLS_GDCALL", mgl@1371: + "BFD_RELOC_390_TLS_LDCALL", mgl@1371: + "BFD_RELOC_390_TLS_GD32", mgl@1371: + "BFD_RELOC_390_TLS_GD64", mgl@1371: + "BFD_RELOC_390_TLS_GOTIE12", mgl@1371: + "BFD_RELOC_390_TLS_GOTIE32", mgl@1371: + "BFD_RELOC_390_TLS_GOTIE64", mgl@1371: + "BFD_RELOC_390_TLS_LDM32", mgl@1371: + "BFD_RELOC_390_TLS_LDM64", mgl@1371: + "BFD_RELOC_390_TLS_IE32", mgl@1371: + "BFD_RELOC_390_TLS_IE64", mgl@1371: + "BFD_RELOC_390_TLS_IEENT", mgl@1371: + "BFD_RELOC_390_TLS_LE32", mgl@1371: + "BFD_RELOC_390_TLS_LE64", mgl@1371: + "BFD_RELOC_390_TLS_LDO32", mgl@1371: + "BFD_RELOC_390_TLS_LDO64", mgl@1371: + "BFD_RELOC_390_TLS_DTPMOD", mgl@1371: + "BFD_RELOC_390_TLS_DTPOFF", mgl@1371: + "BFD_RELOC_390_TLS_TPOFF", mgl@1371: + "BFD_RELOC_390_20", mgl@1371: + "BFD_RELOC_390_GOT20", mgl@1371: + "BFD_RELOC_390_GOTPLT20", mgl@1371: + "BFD_RELOC_390_TLS_GOTIE20", mgl@1371: + "BFD_RELOC_SCORE_DUMMY1", mgl@1371: + "BFD_RELOC_SCORE_GPREL15", mgl@1371: + "BFD_RELOC_SCORE_DUMMY2", mgl@1371: + "BFD_RELOC_SCORE_JMP", mgl@1371: + "BFD_RELOC_SCORE_BRANCH", mgl@1371: + "BFD_RELOC_SCORE16_JMP", mgl@1371: + "BFD_RELOC_SCORE16_BRANCH", mgl@1371: + "BFD_RELOC_SCORE_GOT15", mgl@1371: + "BFD_RELOC_SCORE_GOT_LO16", mgl@1371: + "BFD_RELOC_SCORE_CALL15", mgl@1371: + "BFD_RELOC_SCORE_DUMMY_HI16", mgl@1371: + "BFD_RELOC_IP2K_FR9", mgl@1371: + "BFD_RELOC_IP2K_BANK", mgl@1371: + "BFD_RELOC_IP2K_ADDR16CJP", mgl@1371: + "BFD_RELOC_IP2K_PAGE3", mgl@1371: + "BFD_RELOC_IP2K_LO8DATA", mgl@1371: + "BFD_RELOC_IP2K_HI8DATA", mgl@1371: + "BFD_RELOC_IP2K_EX8DATA", mgl@1371: + "BFD_RELOC_IP2K_LO8INSN", mgl@1371: + "BFD_RELOC_IP2K_HI8INSN", mgl@1371: + "BFD_RELOC_IP2K_PC_SKIP", mgl@1371: + "BFD_RELOC_IP2K_TEXT", mgl@1371: + "BFD_RELOC_IP2K_FR_OFFSET", mgl@1371: + "BFD_RELOC_VPE4KMATH_DATA", mgl@1371: + "BFD_RELOC_VPE4KMATH_INSN", mgl@1371: + "BFD_RELOC_VTABLE_INHERIT", mgl@1371: + "BFD_RELOC_VTABLE_ENTRY", mgl@1371: + "BFD_RELOC_IA64_IMM14", mgl@1371: + "BFD_RELOC_IA64_IMM22", mgl@1371: + "BFD_RELOC_IA64_IMM64", mgl@1371: + "BFD_RELOC_IA64_DIR32MSB", mgl@1371: + "BFD_RELOC_IA64_DIR32LSB", mgl@1371: + "BFD_RELOC_IA64_DIR64MSB", mgl@1371: + "BFD_RELOC_IA64_DIR64LSB", mgl@1371: + "BFD_RELOC_IA64_GPREL22", mgl@1371: + "BFD_RELOC_IA64_GPREL64I", mgl@1371: + "BFD_RELOC_IA64_GPREL32MSB", mgl@1371: + "BFD_RELOC_IA64_GPREL32LSB", mgl@1371: + "BFD_RELOC_IA64_GPREL64MSB", mgl@1371: + "BFD_RELOC_IA64_GPREL64LSB", mgl@1371: + "BFD_RELOC_IA64_LTOFF22", mgl@1371: + "BFD_RELOC_IA64_LTOFF64I", mgl@1371: + "BFD_RELOC_IA64_PLTOFF22", mgl@1371: + "BFD_RELOC_IA64_PLTOFF64I", mgl@1371: + "BFD_RELOC_IA64_PLTOFF64MSB", mgl@1371: + "BFD_RELOC_IA64_PLTOFF64LSB", mgl@1371: + "BFD_RELOC_IA64_FPTR64I", mgl@1371: + "BFD_RELOC_IA64_FPTR32MSB", mgl@1371: + "BFD_RELOC_IA64_FPTR32LSB", mgl@1371: + "BFD_RELOC_IA64_FPTR64MSB", mgl@1371: + "BFD_RELOC_IA64_FPTR64LSB", mgl@1371: + "BFD_RELOC_IA64_PCREL21B", mgl@1371: + "BFD_RELOC_IA64_PCREL21BI", mgl@1371: + "BFD_RELOC_IA64_PCREL21M", mgl@1371: + "BFD_RELOC_IA64_PCREL21F", mgl@1371: + "BFD_RELOC_IA64_PCREL22", mgl@1371: + "BFD_RELOC_IA64_PCREL60B", mgl@1371: + "BFD_RELOC_IA64_PCREL64I", mgl@1371: + "BFD_RELOC_IA64_PCREL32MSB", mgl@1371: + "BFD_RELOC_IA64_PCREL32LSB", mgl@1371: + "BFD_RELOC_IA64_PCREL64MSB", mgl@1371: + "BFD_RELOC_IA64_PCREL64LSB", mgl@1371: + "BFD_RELOC_IA64_LTOFF_FPTR22", mgl@1371: + "BFD_RELOC_IA64_LTOFF_FPTR64I", mgl@1371: + "BFD_RELOC_IA64_LTOFF_FPTR32MSB", mgl@1371: + "BFD_RELOC_IA64_LTOFF_FPTR32LSB", mgl@1371: + "BFD_RELOC_IA64_LTOFF_FPTR64MSB", mgl@1371: + "BFD_RELOC_IA64_LTOFF_FPTR64LSB", mgl@1371: + "BFD_RELOC_IA64_SEGREL32MSB", mgl@1371: + "BFD_RELOC_IA64_SEGREL32LSB", mgl@1371: + "BFD_RELOC_IA64_SEGREL64MSB", mgl@1371: + "BFD_RELOC_IA64_SEGREL64LSB", mgl@1371: + "BFD_RELOC_IA64_SECREL32MSB", mgl@1371: + "BFD_RELOC_IA64_SECREL32LSB", mgl@1371: + "BFD_RELOC_IA64_SECREL64MSB", mgl@1371: + "BFD_RELOC_IA64_SECREL64LSB", mgl@1371: + "BFD_RELOC_IA64_REL32MSB", mgl@1371: + "BFD_RELOC_IA64_REL32LSB", mgl@1371: + "BFD_RELOC_IA64_REL64MSB", mgl@1371: + "BFD_RELOC_IA64_REL64LSB", mgl@1371: + "BFD_RELOC_IA64_LTV32MSB", mgl@1371: + "BFD_RELOC_IA64_LTV32LSB", mgl@1371: + "BFD_RELOC_IA64_LTV64MSB", mgl@1371: + "BFD_RELOC_IA64_LTV64LSB", mgl@1371: + "BFD_RELOC_IA64_IPLTMSB", mgl@1371: + "BFD_RELOC_IA64_IPLTLSB", mgl@1371: + "BFD_RELOC_IA64_COPY", mgl@1371: + "BFD_RELOC_IA64_LTOFF22X", mgl@1371: + "BFD_RELOC_IA64_LDXMOV", mgl@1371: + "BFD_RELOC_IA64_TPREL14", mgl@1371: + "BFD_RELOC_IA64_TPREL22", mgl@1371: + "BFD_RELOC_IA64_TPREL64I", mgl@1371: + "BFD_RELOC_IA64_TPREL64MSB", mgl@1371: + "BFD_RELOC_IA64_TPREL64LSB", mgl@1371: + "BFD_RELOC_IA64_LTOFF_TPREL22", mgl@1371: + "BFD_RELOC_IA64_DTPMOD64MSB", mgl@1371: + "BFD_RELOC_IA64_DTPMOD64LSB", mgl@1371: + "BFD_RELOC_IA64_LTOFF_DTPMOD22", mgl@1371: + "BFD_RELOC_IA64_DTPREL14", mgl@1371: + "BFD_RELOC_IA64_DTPREL22", mgl@1371: + "BFD_RELOC_IA64_DTPREL64I", mgl@1371: + "BFD_RELOC_IA64_DTPREL32MSB", mgl@1371: + "BFD_RELOC_IA64_DTPREL32LSB", mgl@1371: + "BFD_RELOC_IA64_DTPREL64MSB", mgl@1371: + "BFD_RELOC_IA64_DTPREL64LSB", mgl@1371: + "BFD_RELOC_IA64_LTOFF_DTPREL22", mgl@1371: + "BFD_RELOC_M68HC11_HI8", mgl@1371: + "BFD_RELOC_M68HC11_LO8", mgl@1371: + "BFD_RELOC_M68HC11_3B", mgl@1371: + "BFD_RELOC_M68HC11_RL_JUMP", mgl@1371: + "BFD_RELOC_M68HC11_RL_GROUP", mgl@1371: + "BFD_RELOC_M68HC11_LO16", mgl@1371: + "BFD_RELOC_M68HC11_PAGE", mgl@1371: + "BFD_RELOC_M68HC11_24", mgl@1371: + "BFD_RELOC_M68HC12_5B", mgl@1371: + "BFD_RELOC_16C_NUM08", mgl@1371: + "BFD_RELOC_16C_NUM08_C", mgl@1371: + "BFD_RELOC_16C_NUM16", mgl@1371: + "BFD_RELOC_16C_NUM16_C", mgl@1371: + "BFD_RELOC_16C_NUM32", mgl@1371: + "BFD_RELOC_16C_NUM32_C", mgl@1371: + "BFD_RELOC_16C_DISP04", mgl@1371: + "BFD_RELOC_16C_DISP04_C", mgl@1371: + "BFD_RELOC_16C_DISP08", mgl@1371: + "BFD_RELOC_16C_DISP08_C", mgl@1371: + "BFD_RELOC_16C_DISP16", mgl@1371: + "BFD_RELOC_16C_DISP16_C", mgl@1371: + "BFD_RELOC_16C_DISP24", mgl@1371: + "BFD_RELOC_16C_DISP24_C", mgl@1371: + "BFD_RELOC_16C_DISP24a", mgl@1371: + "BFD_RELOC_16C_DISP24a_C", mgl@1371: + "BFD_RELOC_16C_REG04", mgl@1371: + "BFD_RELOC_16C_REG04_C", mgl@1371: + "BFD_RELOC_16C_REG04a", mgl@1371: + "BFD_RELOC_16C_REG04a_C", mgl@1371: + "BFD_RELOC_16C_REG14", mgl@1371: + "BFD_RELOC_16C_REG14_C", mgl@1371: + "BFD_RELOC_16C_REG16", mgl@1371: + "BFD_RELOC_16C_REG16_C", mgl@1371: + "BFD_RELOC_16C_REG20", mgl@1371: + "BFD_RELOC_16C_REG20_C", mgl@1371: + "BFD_RELOC_16C_ABS20", mgl@1371: + "BFD_RELOC_16C_ABS20_C", mgl@1371: + "BFD_RELOC_16C_ABS24", mgl@1371: + "BFD_RELOC_16C_ABS24_C", mgl@1371: + "BFD_RELOC_16C_IMM04", mgl@1371: + "BFD_RELOC_16C_IMM04_C", mgl@1371: + "BFD_RELOC_16C_IMM16", mgl@1371: + "BFD_RELOC_16C_IMM16_C", mgl@1371: + "BFD_RELOC_16C_IMM20", mgl@1371: + "BFD_RELOC_16C_IMM20_C", mgl@1371: + "BFD_RELOC_16C_IMM24", mgl@1371: + "BFD_RELOC_16C_IMM24_C", mgl@1371: + "BFD_RELOC_16C_IMM32", mgl@1371: + "BFD_RELOC_16C_IMM32_C", mgl@1371: + "BFD_RELOC_CR16_NUM8", mgl@1371: + "BFD_RELOC_CR16_NUM16", mgl@1371: + "BFD_RELOC_CR16_NUM32", mgl@1371: + "BFD_RELOC_CR16_NUM32a", mgl@1371: + "BFD_RELOC_CR16_REGREL0", mgl@1371: + "BFD_RELOC_CR16_REGREL4", mgl@1371: + "BFD_RELOC_CR16_REGREL4a", mgl@1371: + "BFD_RELOC_CR16_REGREL14", mgl@1371: + "BFD_RELOC_CR16_REGREL14a", mgl@1371: + "BFD_RELOC_CR16_REGREL16", mgl@1371: + "BFD_RELOC_CR16_REGREL20", mgl@1371: + "BFD_RELOC_CR16_REGREL20a", mgl@1371: + "BFD_RELOC_CR16_ABS20", mgl@1371: + "BFD_RELOC_CR16_ABS24", mgl@1371: + "BFD_RELOC_CR16_IMM4", mgl@1371: + "BFD_RELOC_CR16_IMM8", mgl@1371: + "BFD_RELOC_CR16_IMM16", mgl@1371: + "BFD_RELOC_CR16_IMM20", mgl@1371: + "BFD_RELOC_CR16_IMM24", mgl@1371: + "BFD_RELOC_CR16_IMM32", mgl@1371: + "BFD_RELOC_CR16_IMM32a", mgl@1371: + "BFD_RELOC_CR16_DISP4", mgl@1371: + "BFD_RELOC_CR16_DISP8", mgl@1371: + "BFD_RELOC_CR16_DISP16", mgl@1371: + "BFD_RELOC_CR16_DISP20", mgl@1371: + "BFD_RELOC_CR16_DISP24", mgl@1371: + "BFD_RELOC_CR16_DISP24a", mgl@1371: + "BFD_RELOC_CRX_REL4", mgl@1371: + "BFD_RELOC_CRX_REL8", mgl@1371: + "BFD_RELOC_CRX_REL8_CMP", mgl@1371: + "BFD_RELOC_CRX_REL16", mgl@1371: + "BFD_RELOC_CRX_REL24", mgl@1371: + "BFD_RELOC_CRX_REL32", mgl@1371: + "BFD_RELOC_CRX_REGREL12", mgl@1371: + "BFD_RELOC_CRX_REGREL22", mgl@1371: + "BFD_RELOC_CRX_REGREL28", mgl@1371: + "BFD_RELOC_CRX_REGREL32", mgl@1371: + "BFD_RELOC_CRX_ABS16", mgl@1371: + "BFD_RELOC_CRX_ABS32", mgl@1371: + "BFD_RELOC_CRX_NUM8", mgl@1371: + "BFD_RELOC_CRX_NUM16", mgl@1371: + "BFD_RELOC_CRX_NUM32", mgl@1371: + "BFD_RELOC_CRX_IMM16", mgl@1371: + "BFD_RELOC_CRX_IMM32", mgl@1371: + "BFD_RELOC_CRX_SWITCH8", mgl@1371: + "BFD_RELOC_CRX_SWITCH16", mgl@1371: + "BFD_RELOC_CRX_SWITCH32", mgl@1371: + "BFD_RELOC_CRIS_BDISP8", mgl@1371: + "BFD_RELOC_CRIS_UNSIGNED_5", mgl@1371: + "BFD_RELOC_CRIS_SIGNED_6", mgl@1371: + "BFD_RELOC_CRIS_UNSIGNED_6", mgl@1371: + "BFD_RELOC_CRIS_SIGNED_8", mgl@1371: + "BFD_RELOC_CRIS_UNSIGNED_8", mgl@1371: + "BFD_RELOC_CRIS_SIGNED_16", mgl@1371: + "BFD_RELOC_CRIS_UNSIGNED_16", mgl@1371: + "BFD_RELOC_CRIS_LAPCQ_OFFSET", mgl@1371: + "BFD_RELOC_CRIS_UNSIGNED_4", mgl@1371: + "BFD_RELOC_CRIS_COPY", mgl@1371: + "BFD_RELOC_CRIS_GLOB_DAT", mgl@1371: + "BFD_RELOC_CRIS_JUMP_SLOT", mgl@1371: + "BFD_RELOC_CRIS_RELATIVE", mgl@1371: + "BFD_RELOC_CRIS_32_GOT", mgl@1371: + "BFD_RELOC_CRIS_16_GOT", mgl@1371: + "BFD_RELOC_CRIS_32_GOTPLT", mgl@1371: + "BFD_RELOC_CRIS_16_GOTPLT", mgl@1371: + "BFD_RELOC_CRIS_32_GOTREL", mgl@1371: + "BFD_RELOC_CRIS_32_PLT_GOTREL", mgl@1371: + "BFD_RELOC_CRIS_32_PLT_PCREL", mgl@1371: + "BFD_RELOC_860_COPY", mgl@1371: + "BFD_RELOC_860_GLOB_DAT", mgl@1371: + "BFD_RELOC_860_JUMP_SLOT", mgl@1371: + "BFD_RELOC_860_RELATIVE", mgl@1371: + "BFD_RELOC_860_PC26", mgl@1371: + "BFD_RELOC_860_PLT26", mgl@1371: + "BFD_RELOC_860_PC16", mgl@1371: + "BFD_RELOC_860_LOW0", mgl@1371: + "BFD_RELOC_860_SPLIT0", mgl@1371: + "BFD_RELOC_860_LOW1", mgl@1371: + "BFD_RELOC_860_SPLIT1", mgl@1371: + "BFD_RELOC_860_LOW2", mgl@1371: + "BFD_RELOC_860_SPLIT2", mgl@1371: + "BFD_RELOC_860_LOW3", mgl@1371: + "BFD_RELOC_860_LOGOT0", mgl@1371: + "BFD_RELOC_860_SPGOT0", mgl@1371: + "BFD_RELOC_860_LOGOT1", mgl@1371: + "BFD_RELOC_860_SPGOT1", mgl@1371: + "BFD_RELOC_860_LOGOTOFF0", mgl@1371: + "BFD_RELOC_860_SPGOTOFF0", mgl@1371: + "BFD_RELOC_860_LOGOTOFF1", mgl@1371: + "BFD_RELOC_860_SPGOTOFF1", mgl@1371: + "BFD_RELOC_860_LOGOTOFF2", mgl@1371: + "BFD_RELOC_860_LOGOTOFF3", mgl@1371: + "BFD_RELOC_860_LOPC", mgl@1371: + "BFD_RELOC_860_HIGHADJ", mgl@1371: + "BFD_RELOC_860_HAGOT", mgl@1371: + "BFD_RELOC_860_HAGOTOFF", mgl@1371: + "BFD_RELOC_860_HAPC", mgl@1371: + "BFD_RELOC_860_HIGH", mgl@1371: + "BFD_RELOC_860_HIGOT", mgl@1371: + "BFD_RELOC_860_HIGOTOFF", mgl@1371: + "BFD_RELOC_OPENRISC_ABS_26", mgl@1371: + "BFD_RELOC_OPENRISC_REL_26", mgl@1371: + "BFD_RELOC_H8_DIR16A8", mgl@1371: + "BFD_RELOC_H8_DIR16R8", mgl@1371: + "BFD_RELOC_H8_DIR24A8", mgl@1371: + "BFD_RELOC_H8_DIR24R8", mgl@1371: + "BFD_RELOC_H8_DIR32A16", mgl@1371: + "BFD_RELOC_XSTORMY16_REL_12", mgl@1371: + "BFD_RELOC_XSTORMY16_12", mgl@1371: + "BFD_RELOC_XSTORMY16_24", mgl@1371: + "BFD_RELOC_XSTORMY16_FPTR16", mgl@1371: + "BFD_RELOC_RELC", mgl@1371: + mgl@1371: + "BFD_RELOC_XC16X_PAG", mgl@1371: + "BFD_RELOC_XC16X_POF", mgl@1371: + "BFD_RELOC_XC16X_SEG", mgl@1371: + "BFD_RELOC_XC16X_SOF", mgl@1371: + "BFD_RELOC_VAX_GLOB_DAT", mgl@1371: + "BFD_RELOC_VAX_JMP_SLOT", mgl@1371: + "BFD_RELOC_VAX_RELATIVE", mgl@1371: + "BFD_RELOC_MT_PC16", mgl@1371: + "BFD_RELOC_MT_HI16", mgl@1371: + "BFD_RELOC_MT_LO16", mgl@1371: + "BFD_RELOC_MT_GNU_VTINHERIT", mgl@1371: + "BFD_RELOC_MT_GNU_VTENTRY", mgl@1371: + "BFD_RELOC_MT_PCINSN8", mgl@1371: + "BFD_RELOC_MSP430_10_PCREL", mgl@1371: + "BFD_RELOC_MSP430_16_PCREL", mgl@1371: + "BFD_RELOC_MSP430_16", mgl@1371: + "BFD_RELOC_MSP430_16_PCREL_BYTE", mgl@1371: + "BFD_RELOC_MSP430_16_BYTE", mgl@1371: + "BFD_RELOC_MSP430_2X_PCREL", mgl@1371: + "BFD_RELOC_MSP430_RL_PCREL", mgl@1371: + "BFD_RELOC_IQ2000_OFFSET_16", mgl@1371: + "BFD_RELOC_IQ2000_OFFSET_21", mgl@1371: + "BFD_RELOC_IQ2000_UHI16", mgl@1371: + "BFD_RELOC_XTENSA_RTLD", mgl@1371: + "BFD_RELOC_XTENSA_GLOB_DAT", mgl@1371: + "BFD_RELOC_XTENSA_JMP_SLOT", mgl@1371: + "BFD_RELOC_XTENSA_RELATIVE", mgl@1371: + "BFD_RELOC_XTENSA_PLT", mgl@1371: + "BFD_RELOC_XTENSA_DIFF8", mgl@1371: + "BFD_RELOC_XTENSA_DIFF16", mgl@1371: + "BFD_RELOC_XTENSA_DIFF32", mgl@1371: + "BFD_RELOC_XTENSA_SLOT0_OP", mgl@1371: + "BFD_RELOC_XTENSA_SLOT1_OP", mgl@1371: + "BFD_RELOC_XTENSA_SLOT2_OP", mgl@1371: + "BFD_RELOC_XTENSA_SLOT3_OP", mgl@1371: + "BFD_RELOC_XTENSA_SLOT4_OP", mgl@1371: + "BFD_RELOC_XTENSA_SLOT5_OP", mgl@1371: + "BFD_RELOC_XTENSA_SLOT6_OP", mgl@1371: + "BFD_RELOC_XTENSA_SLOT7_OP", mgl@1371: + "BFD_RELOC_XTENSA_SLOT8_OP", mgl@1371: + "BFD_RELOC_XTENSA_SLOT9_OP", mgl@1371: + "BFD_RELOC_XTENSA_SLOT10_OP", mgl@1371: + "BFD_RELOC_XTENSA_SLOT11_OP", mgl@1371: + "BFD_RELOC_XTENSA_SLOT12_OP", mgl@1371: + "BFD_RELOC_XTENSA_SLOT13_OP", mgl@1371: + "BFD_RELOC_XTENSA_SLOT14_OP", mgl@1371: + "BFD_RELOC_XTENSA_SLOT0_ALT", mgl@1371: + "BFD_RELOC_XTENSA_SLOT1_ALT", mgl@1371: + "BFD_RELOC_XTENSA_SLOT2_ALT", mgl@1371: + "BFD_RELOC_XTENSA_SLOT3_ALT", mgl@1371: + "BFD_RELOC_XTENSA_SLOT4_ALT", mgl@1371: + "BFD_RELOC_XTENSA_SLOT5_ALT", mgl@1371: + "BFD_RELOC_XTENSA_SLOT6_ALT", mgl@1371: + "BFD_RELOC_XTENSA_SLOT7_ALT", mgl@1371: + "BFD_RELOC_XTENSA_SLOT8_ALT", mgl@1371: + "BFD_RELOC_XTENSA_SLOT9_ALT", mgl@1371: + "BFD_RELOC_XTENSA_SLOT10_ALT", mgl@1371: + "BFD_RELOC_XTENSA_SLOT11_ALT", mgl@1371: + "BFD_RELOC_XTENSA_SLOT12_ALT", mgl@1371: + "BFD_RELOC_XTENSA_SLOT13_ALT", mgl@1371: + "BFD_RELOC_XTENSA_SLOT14_ALT", mgl@1371: + "BFD_RELOC_XTENSA_OP0", mgl@1371: + "BFD_RELOC_XTENSA_OP1", mgl@1371: + "BFD_RELOC_XTENSA_OP2", mgl@1371: + "BFD_RELOC_XTENSA_ASM_EXPAND", mgl@1371: + "BFD_RELOC_XTENSA_ASM_SIMPLIFY", mgl@1371: + "BFD_RELOC_Z80_DISP8", mgl@1371: + "BFD_RELOC_Z8K_DISP7", mgl@1371: + "BFD_RELOC_Z8K_CALLR", mgl@1371: + "BFD_RELOC_Z8K_IMM4L", mgl@1371: + "@@overflow: BFD_RELOC_UNUSED@@", mgl@1371: +}; mgl@1371: +#endif mgl@1371: + mgl@1371: +reloc_howto_type *bfd_default_reloc_type_lookup mgl@1371: + (bfd *abfd, bfd_reloc_code_real_type code); mgl@1371: + mgl@1371: +bfd_boolean bfd_generic_relax_section mgl@1371: + (bfd *abfd, mgl@1371: + asection *section, mgl@1371: + struct bfd_link_info *, mgl@1371: + bfd_boolean *); mgl@1371: + mgl@1371: +bfd_boolean bfd_generic_gc_sections mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +bfd_boolean bfd_generic_merge_sections mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +bfd_byte *bfd_generic_get_relocated_section_contents mgl@1371: + (bfd *abfd, mgl@1371: + struct bfd_link_info *link_info, mgl@1371: + struct bfd_link_order *link_order, mgl@1371: + bfd_byte *data, mgl@1371: + bfd_boolean relocatable, mgl@1371: + asymbol **symbols); mgl@1371: + mgl@1371: +/* Extracted from archures.c. */ mgl@1371: +extern const bfd_arch_info_type bfd_default_arch_struct; mgl@1371: +bfd_boolean bfd_default_set_arch_mach mgl@1371: + (bfd *abfd, enum bfd_architecture arch, unsigned long mach); mgl@1371: + mgl@1371: +const bfd_arch_info_type *bfd_default_compatible mgl@1371: + (const bfd_arch_info_type *a, const bfd_arch_info_type *b); mgl@1371: + mgl@1371: +bfd_boolean bfd_default_scan mgl@1371: + (const struct bfd_arch_info *info, const char *string); mgl@1371: + mgl@1371: +/* Extracted from elf.c. */ mgl@1371: +struct elf_internal_shdr *bfd_elf_find_section (bfd *abfd, char *name); mgl@1371: + mgl@1371: --- /dev/null mgl@1371: +++ b/bfd/doc/libcoff.h mgl@1371: @@ -0,0 +1,936 @@ mgl@1371: +/* DO NOT EDIT! -*- buffer-read-only: t -*- This file is automatically mgl@1371: + generated from "libcoff-in.h" and "coffcode.h". mgl@1371: + Run "make headers" in your build bfd/ to regenerate. */ mgl@1371: + mgl@1371: +/* BFD COFF object file private structure. mgl@1371: + Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, mgl@1371: + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 mgl@1371: + Free Software Foundation, Inc. mgl@1371: + Written by Cygnus Support. mgl@1371: + mgl@1371: + This file is part of BFD, the Binary File Descriptor library. mgl@1371: + mgl@1371: + This program is free software; you can redistribute it and/or modify mgl@1371: + it under the terms of the GNU General Public License as published by mgl@1371: + the Free Software Foundation; either version 3 of the License, or mgl@1371: + (at your option) any later version. mgl@1371: + mgl@1371: + This program is distributed in the hope that it will be useful, mgl@1371: + but WITHOUT ANY WARRANTY; without even the implied warranty of mgl@1371: + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the mgl@1371: + GNU General Public License for more details. mgl@1371: + mgl@1371: + You should have received a copy of the GNU General Public License mgl@1371: + along with this program; if not, write to the Free Software mgl@1371: + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, mgl@1371: + MA 02110-1301, USA. */ mgl@1371: + mgl@1371: +#include "bfdlink.h" mgl@1371: + mgl@1371: +/* Object file tdata; access macros. */ mgl@1371: + mgl@1371: +#define coff_data(bfd) ((bfd)->tdata.coff_obj_data) mgl@1371: +#define exec_hdr(bfd) (coff_data (bfd)->hdr) mgl@1371: +#define obj_pe(bfd) (coff_data (bfd)->pe) mgl@1371: +#define obj_symbols(bfd) (coff_data (bfd)->symbols) mgl@1371: +#define obj_sym_filepos(bfd) (coff_data (bfd)->sym_filepos) mgl@1371: +#define obj_relocbase(bfd) (coff_data (bfd)->relocbase) mgl@1371: +#define obj_raw_syments(bfd) (coff_data (bfd)->raw_syments) mgl@1371: +#define obj_raw_syment_count(bfd) (coff_data (bfd)->raw_syment_count) mgl@1371: +#define obj_convert(bfd) (coff_data (bfd)->conversion_table) mgl@1371: +#define obj_conv_table_size(bfd) (coff_data (bfd)->conv_table_size) mgl@1371: +#define obj_coff_external_syms(bfd) (coff_data (bfd)->external_syms) mgl@1371: +#define obj_coff_keep_syms(bfd) (coff_data (bfd)->keep_syms) mgl@1371: +#define obj_coff_strings(bfd) (coff_data (bfd)->strings) mgl@1371: +#define obj_coff_keep_strings(bfd) (coff_data (bfd)->keep_strings) mgl@1371: +#define obj_coff_sym_hashes(bfd) (coff_data (bfd)->sym_hashes) mgl@1371: +#define obj_coff_strings_written(bfd) (coff_data (bfd)->strings_written) mgl@1371: +#define obj_coff_local_toc_table(bfd) (coff_data (bfd)->local_toc_sym_map) mgl@1371: + mgl@1371: +/* `Tdata' information kept for COFF files. */ mgl@1371: + mgl@1371: +typedef struct coff_tdata mgl@1371: +{ mgl@1371: + struct coff_symbol_struct *symbols; /* Symtab for input bfd. */ mgl@1371: + unsigned int *conversion_table; mgl@1371: + int conv_table_size; mgl@1371: + file_ptr sym_filepos; mgl@1371: + mgl@1371: + struct coff_ptr_struct *raw_syments; mgl@1371: + unsigned long raw_syment_count; mgl@1371: + mgl@1371: + /* These are only valid once writing has begun. */ mgl@1371: + long int relocbase; mgl@1371: + mgl@1371: + /* These members communicate important constants about the symbol table mgl@1371: + to GDB's symbol-reading code. These `constants' unfortunately vary mgl@1371: + from coff implementation to implementation... */ mgl@1371: + unsigned local_n_btmask; mgl@1371: + unsigned local_n_btshft; mgl@1371: + unsigned local_n_tmask; mgl@1371: + unsigned local_n_tshift; mgl@1371: + unsigned local_symesz; mgl@1371: + unsigned local_auxesz; mgl@1371: + unsigned local_linesz; mgl@1371: + mgl@1371: + /* The unswapped external symbols. May be NULL. Read by mgl@1371: + _bfd_coff_get_external_symbols. */ mgl@1371: + void * external_syms; mgl@1371: + /* If this is TRUE, the external_syms may not be freed. */ mgl@1371: + bfd_boolean keep_syms; mgl@1371: + mgl@1371: + /* The string table. May be NULL. Read by mgl@1371: + _bfd_coff_read_string_table. */ mgl@1371: + char *strings; mgl@1371: + /* If this is TRUE, the strings may not be freed. */ mgl@1371: + bfd_boolean keep_strings; mgl@1371: + /* If this is TRUE, the strings have been written out already. */ mgl@1371: + bfd_boolean strings_written; mgl@1371: + mgl@1371: + /* Is this a PE format coff file? */ mgl@1371: + int pe; mgl@1371: + /* Used by the COFF backend linker. */ mgl@1371: + struct coff_link_hash_entry **sym_hashes; mgl@1371: + mgl@1371: + /* Used by the pe linker for PowerPC. */ mgl@1371: + int *local_toc_sym_map; mgl@1371: + mgl@1371: + struct bfd_link_info *link_info; mgl@1371: + mgl@1371: + /* Used by coff_find_nearest_line. */ mgl@1371: + void * line_info; mgl@1371: + mgl@1371: + /* A place to stash dwarf2 info for this bfd. */ mgl@1371: + void * dwarf2_find_line_info; mgl@1371: + mgl@1371: + /* The timestamp from the COFF file header. */ mgl@1371: + long timestamp; mgl@1371: + mgl@1371: + /* Copy of some of the f_flags bits in the COFF filehdr structure, mgl@1371: + used by ARM code. */ mgl@1371: + flagword flags; mgl@1371: + mgl@1371: +} coff_data_type; mgl@1371: + mgl@1371: +/* Tdata for pe image files. */ mgl@1371: +typedef struct pe_tdata mgl@1371: +{ mgl@1371: + coff_data_type coff; mgl@1371: + struct internal_extra_pe_aouthdr pe_opthdr; mgl@1371: + int dll; mgl@1371: + int has_reloc_section; mgl@1371: + bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *); mgl@1371: + flagword real_flags; mgl@1371: + int target_subsystem; mgl@1371: + bfd_boolean force_minimum_alignment; mgl@1371: +} pe_data_type; mgl@1371: + mgl@1371: +#define pe_data(bfd) ((bfd)->tdata.pe_obj_data) mgl@1371: + mgl@1371: +/* Tdata for XCOFF files. */ mgl@1371: + mgl@1371: +struct xcoff_tdata mgl@1371: +{ mgl@1371: + /* Basic COFF information. */ mgl@1371: + coff_data_type coff; mgl@1371: + mgl@1371: + /* TRUE if this is an XCOFF64 file. */ mgl@1371: + bfd_boolean xcoff64; mgl@1371: + mgl@1371: + /* TRUE if a large a.out header should be generated. */ mgl@1371: + bfd_boolean full_aouthdr; mgl@1371: + mgl@1371: + /* TOC value. */ mgl@1371: + bfd_vma toc; mgl@1371: + mgl@1371: + /* Index of section holding TOC. */ mgl@1371: + int sntoc; mgl@1371: + mgl@1371: + /* Index of section holding entry point. */ mgl@1371: + int snentry; mgl@1371: + mgl@1371: + /* .text alignment from optional header. */ mgl@1371: + int text_align_power; mgl@1371: + mgl@1371: + /* .data alignment from optional header. */ mgl@1371: + int data_align_power; mgl@1371: + mgl@1371: + /* modtype from optional header. */ mgl@1371: + short modtype; mgl@1371: + mgl@1371: + /* cputype from optional header. */ mgl@1371: + short cputype; mgl@1371: + mgl@1371: + /* maxdata from optional header. */ mgl@1371: + bfd_vma maxdata; mgl@1371: + mgl@1371: + /* maxstack from optional header. */ mgl@1371: + bfd_vma maxstack; mgl@1371: + mgl@1371: + /* Used by the XCOFF backend linker. */ mgl@1371: + asection **csects; mgl@1371: + unsigned long *debug_indices; mgl@1371: + unsigned int import_file_id; mgl@1371: +}; mgl@1371: + mgl@1371: +#define xcoff_data(abfd) ((abfd)->tdata.xcoff_obj_data) mgl@1371: + mgl@1371: +/* We take the address of the first element of an asymbol to ensure that the mgl@1371: + macro is only ever applied to an asymbol. */ mgl@1371: +#define coffsymbol(asymbol) ((coff_symbol_type *)(&((asymbol)->the_bfd))) mgl@1371: + mgl@1371: +/* The used_by_bfd field of a section may be set to a pointer to this mgl@1371: + structure. */ mgl@1371: + mgl@1371: +struct coff_section_tdata mgl@1371: +{ mgl@1371: + /* The relocs, swapped into COFF internal form. This may be NULL. */ mgl@1371: + struct internal_reloc *relocs; mgl@1371: + /* If this is TRUE, the relocs entry may not be freed. */ mgl@1371: + bfd_boolean keep_relocs; mgl@1371: + /* The section contents. This may be NULL. */ mgl@1371: + bfd_byte *contents; mgl@1371: + /* If this is TRUE, the contents entry may not be freed. */ mgl@1371: + bfd_boolean keep_contents; mgl@1371: + /* Information cached by coff_find_nearest_line. */ mgl@1371: + bfd_vma offset; mgl@1371: + unsigned int i; mgl@1371: + const char *function; mgl@1371: + /* Optional information about a COMDAT entry; NULL if not COMDAT. */ mgl@1371: + struct coff_comdat_info *comdat; mgl@1371: + int line_base; mgl@1371: + /* A pointer used for .stab linking optimizations. */ mgl@1371: + void * stab_info; mgl@1371: + /* Available for individual backends. */ mgl@1371: + void * tdata; mgl@1371: +}; mgl@1371: + mgl@1371: +/* An accessor macro for the coff_section_tdata structure. */ mgl@1371: +#define coff_section_data(abfd, sec) \ mgl@1371: + ((struct coff_section_tdata *) (sec)->used_by_bfd) mgl@1371: + mgl@1371: +/* Tdata for sections in XCOFF files. This is used by the linker. */ mgl@1371: + mgl@1371: +struct xcoff_section_tdata mgl@1371: +{ mgl@1371: + /* Used for XCOFF csects created by the linker; points to the real mgl@1371: + XCOFF section which contains this csect. */ mgl@1371: + asection *enclosing; mgl@1371: + /* The lineno_count field for the enclosing section, because we are mgl@1371: + going to clobber it there. */ mgl@1371: + unsigned int lineno_count; mgl@1371: + /* The first and one past the last symbol indices for symbols used mgl@1371: + by this csect. */ mgl@1371: + unsigned long first_symndx; mgl@1371: + unsigned long last_symndx; mgl@1371: +}; mgl@1371: + mgl@1371: +/* An accessor macro the xcoff_section_tdata structure. */ mgl@1371: +#define xcoff_section_data(abfd, sec) \ mgl@1371: + ((struct xcoff_section_tdata *) coff_section_data ((abfd), (sec))->tdata) mgl@1371: + mgl@1371: +/* Tdata for sections in PE files. */ mgl@1371: + mgl@1371: +struct pei_section_tdata mgl@1371: +{ mgl@1371: + /* The virtual size of the section. */ mgl@1371: + bfd_size_type virt_size; mgl@1371: + /* The PE section flags. */ mgl@1371: + long pe_flags; mgl@1371: +}; mgl@1371: + mgl@1371: +/* An accessor macro for the pei_section_tdata structure. */ mgl@1371: +#define pei_section_data(abfd, sec) \ mgl@1371: + ((struct pei_section_tdata *) coff_section_data ((abfd), (sec))->tdata) mgl@1371: + mgl@1371: +/* COFF linker hash table entries. */ mgl@1371: + mgl@1371: +struct coff_link_hash_entry mgl@1371: +{ mgl@1371: + struct bfd_link_hash_entry root; mgl@1371: + mgl@1371: + /* Symbol index in output file. Set to -1 initially. Set to -2 if mgl@1371: + there is a reloc against this symbol. */ mgl@1371: + long indx; mgl@1371: + mgl@1371: + /* Symbol type. */ mgl@1371: + unsigned short type; mgl@1371: + mgl@1371: + /* Symbol class. */ mgl@1371: + unsigned char class; mgl@1371: + mgl@1371: + /* Number of auxiliary entries. */ mgl@1371: + char numaux; mgl@1371: + mgl@1371: + /* BFD to take auxiliary entries from. */ mgl@1371: + bfd *auxbfd; mgl@1371: + mgl@1371: + /* Pointer to array of auxiliary entries, if any. */ mgl@1371: + union internal_auxent *aux; mgl@1371: + mgl@1371: + /* Flag word; legal values follow. */ mgl@1371: + unsigned short coff_link_hash_flags; mgl@1371: + /* Symbol is a PE section symbol. */ mgl@1371: +#define COFF_LINK_HASH_PE_SECTION_SYMBOL (01) mgl@1371: +}; mgl@1371: + mgl@1371: +/* COFF linker hash table. */ mgl@1371: + mgl@1371: +struct coff_link_hash_table mgl@1371: +{ mgl@1371: + struct bfd_link_hash_table root; mgl@1371: + /* A pointer to information used to link stabs in sections. */ mgl@1371: + struct stab_info stab_info; mgl@1371: +}; mgl@1371: + mgl@1371: +/* Look up an entry in a COFF linker hash table. */ mgl@1371: + mgl@1371: +#define coff_link_hash_lookup(table, string, create, copy, follow) \ mgl@1371: + ((struct coff_link_hash_entry *) \ mgl@1371: + bfd_link_hash_lookup (&(table)->root, (string), (create), \ mgl@1371: + (copy), (follow))) mgl@1371: + mgl@1371: +/* Traverse a COFF linker hash table. */ mgl@1371: + mgl@1371: +#define coff_link_hash_traverse(table, func, info) \ mgl@1371: + (bfd_link_hash_traverse \ mgl@1371: + (&(table)->root, \ mgl@1371: + (bfd_boolean (*) (struct bfd_link_hash_entry *, void *)) (func), \ mgl@1371: + (info))) mgl@1371: + mgl@1371: +/* Get the COFF linker hash table from a link_info structure. */ mgl@1371: + mgl@1371: +#define coff_hash_table(p) ((struct coff_link_hash_table *) ((p)->hash)) mgl@1371: + mgl@1371: +/* Functions in coffgen.c. */ mgl@1371: +extern const bfd_target *coff_object_p mgl@1371: + (bfd *); mgl@1371: +extern struct bfd_section *coff_section_from_bfd_index mgl@1371: + (bfd *, int); mgl@1371: +extern long coff_get_symtab_upper_bound mgl@1371: + (bfd *); mgl@1371: +extern long coff_canonicalize_symtab mgl@1371: + (bfd *, asymbol **); mgl@1371: +extern int coff_count_linenumbers mgl@1371: + (bfd *); mgl@1371: +extern struct coff_symbol_struct *coff_symbol_from mgl@1371: + (bfd *, asymbol *); mgl@1371: +extern bfd_boolean coff_renumber_symbols mgl@1371: + (bfd *, int *); mgl@1371: +extern void coff_mangle_symbols mgl@1371: + (bfd *); mgl@1371: +extern bfd_boolean coff_write_symbols mgl@1371: + (bfd *); mgl@1371: +extern bfd_boolean coff_write_linenumbers mgl@1371: + (bfd *); mgl@1371: +extern alent *coff_get_lineno mgl@1371: + (bfd *, asymbol *); mgl@1371: +extern asymbol *coff_section_symbol mgl@1371: + (bfd *, char *); mgl@1371: +extern bfd_boolean _bfd_coff_get_external_symbols mgl@1371: + (bfd *); mgl@1371: +extern const char *_bfd_coff_read_string_table mgl@1371: + (bfd *); mgl@1371: +extern bfd_boolean _bfd_coff_free_symbols mgl@1371: + (bfd *); mgl@1371: +extern struct coff_ptr_struct *coff_get_normalized_symtab mgl@1371: + (bfd *); mgl@1371: +extern long coff_get_reloc_upper_bound mgl@1371: + (bfd *, sec_ptr); mgl@1371: +extern asymbol *coff_make_empty_symbol mgl@1371: + (bfd *); mgl@1371: +extern void coff_print_symbol mgl@1371: + (bfd *, void * filep, asymbol *, bfd_print_symbol_type); mgl@1371: +extern void coff_get_symbol_info mgl@1371: + (bfd *, asymbol *, symbol_info *ret); mgl@1371: +extern bfd_boolean _bfd_coff_is_local_label_name mgl@1371: + (bfd *, const char *); mgl@1371: +extern asymbol *coff_bfd_make_debug_symbol mgl@1371: + (bfd *, void *, unsigned long); mgl@1371: +extern bfd_boolean coff_find_nearest_line mgl@1371: + (bfd *, asection *, asymbol **, bfd_vma, const char **, mgl@1371: + const char **, unsigned int *); mgl@1371: +extern bfd_boolean coff_find_inliner_info mgl@1371: + (bfd *, const char **, const char **, unsigned int *); mgl@1371: +extern int coff_sizeof_headers mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern bfd_boolean bfd_coff_reloc16_relax_section mgl@1371: + (bfd *, asection *, struct bfd_link_info *, bfd_boolean *); mgl@1371: +extern bfd_byte *bfd_coff_reloc16_get_relocated_section_contents mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_link_order *, mgl@1371: + bfd_byte *, bfd_boolean, asymbol **); mgl@1371: +extern bfd_vma bfd_coff_reloc16_get_value mgl@1371: + (arelent *, struct bfd_link_info *, asection *); mgl@1371: +extern void bfd_perform_slip mgl@1371: + (bfd *, unsigned int, asection *, bfd_vma); mgl@1371: + mgl@1371: +/* Functions and types in cofflink.c. */ mgl@1371: + mgl@1371: +#define STRING_SIZE_SIZE 4 mgl@1371: + mgl@1371: +/* We use a hash table to merge identical enum, struct, and union mgl@1371: + definitions in the linker. */ mgl@1371: + mgl@1371: +/* Information we keep for a single element (an enum value, a mgl@1371: + structure or union field) in the debug merge hash table. */ mgl@1371: + mgl@1371: +struct coff_debug_merge_element mgl@1371: +{ mgl@1371: + /* Next element. */ mgl@1371: + struct coff_debug_merge_element *next; mgl@1371: + mgl@1371: + /* Name. */ mgl@1371: + const char *name; mgl@1371: + mgl@1371: + /* Type. */ mgl@1371: + unsigned int type; mgl@1371: + mgl@1371: + /* Symbol index for complex type. */ mgl@1371: + long tagndx; mgl@1371: +}; mgl@1371: + mgl@1371: +/* A linked list of debug merge entries for a given name. */ mgl@1371: + mgl@1371: +struct coff_debug_merge_type mgl@1371: +{ mgl@1371: + /* Next type with the same name. */ mgl@1371: + struct coff_debug_merge_type *next; mgl@1371: + mgl@1371: + /* Class of type. */ mgl@1371: + int class; mgl@1371: + mgl@1371: + /* Symbol index where this type is defined. */ mgl@1371: + long indx; mgl@1371: + mgl@1371: + /* List of elements. */ mgl@1371: + struct coff_debug_merge_element *elements; mgl@1371: +}; mgl@1371: + mgl@1371: +/* Information we store in the debug merge hash table. */ mgl@1371: + mgl@1371: +struct coff_debug_merge_hash_entry mgl@1371: +{ mgl@1371: + struct bfd_hash_entry root; mgl@1371: + mgl@1371: + /* A list of types with this name. */ mgl@1371: + struct coff_debug_merge_type *types; mgl@1371: +}; mgl@1371: + mgl@1371: +/* The debug merge hash table. */ mgl@1371: + mgl@1371: +struct coff_debug_merge_hash_table mgl@1371: +{ mgl@1371: + struct bfd_hash_table root; mgl@1371: +}; mgl@1371: + mgl@1371: +/* Initialize a COFF debug merge hash table. */ mgl@1371: + mgl@1371: +#define coff_debug_merge_hash_table_init(table) \ mgl@1371: + (bfd_hash_table_init (&(table)->root, _bfd_coff_debug_merge_hash_newfunc, \ mgl@1371: + sizeof (struct coff_debug_merge_hash_entry))) mgl@1371: + mgl@1371: +/* Free a COFF debug merge hash table. */ mgl@1371: + mgl@1371: +#define coff_debug_merge_hash_table_free(table) \ mgl@1371: + (bfd_hash_table_free (&(table)->root)) mgl@1371: + mgl@1371: +/* Look up an entry in a COFF debug merge hash table. */ mgl@1371: + mgl@1371: +#define coff_debug_merge_hash_lookup(table, string, create, copy) \ mgl@1371: + ((struct coff_debug_merge_hash_entry *) \ mgl@1371: + bfd_hash_lookup (&(table)->root, (string), (create), (copy))) mgl@1371: + mgl@1371: +/* Information we keep for each section in the output file when doing mgl@1371: + a relocatable link. */ mgl@1371: + mgl@1371: +struct coff_link_section_info mgl@1371: +{ mgl@1371: + /* The relocs to be output. */ mgl@1371: + struct internal_reloc *relocs; mgl@1371: + /* For each reloc against a global symbol whose index was not known mgl@1371: + when the reloc was handled, the global hash table entry. */ mgl@1371: + struct coff_link_hash_entry **rel_hashes; mgl@1371: +}; mgl@1371: + mgl@1371: +/* Information that we pass around while doing the final link step. */ mgl@1371: + mgl@1371: +struct coff_final_link_info mgl@1371: +{ mgl@1371: + /* General link information. */ mgl@1371: + struct bfd_link_info *info; mgl@1371: + /* Output BFD. */ mgl@1371: + bfd *output_bfd; mgl@1371: + /* Used to indicate failure in traversal routine. */ mgl@1371: + bfd_boolean failed; mgl@1371: + /* If doing "task linking" set only during the time when we want the mgl@1371: + global symbol writer to convert the storage class of defined global mgl@1371: + symbols from global to static. */ mgl@1371: + bfd_boolean global_to_static; mgl@1371: + /* Hash table for long symbol names. */ mgl@1371: + struct bfd_strtab_hash *strtab; mgl@1371: + /* When doing a relocatable link, an array of information kept for mgl@1371: + each output section, indexed by the target_index field. */ mgl@1371: + struct coff_link_section_info *section_info; mgl@1371: + /* Symbol index of last C_FILE symbol (-1 if none). */ mgl@1371: + long last_file_index; mgl@1371: + /* Contents of last C_FILE symbol. */ mgl@1371: + struct internal_syment last_file; mgl@1371: + /* Symbol index of first aux entry of last .bf symbol with an empty mgl@1371: + endndx field (-1 if none). */ mgl@1371: + long last_bf_index; mgl@1371: + /* Contents of last_bf_index aux entry. */ mgl@1371: + union internal_auxent last_bf; mgl@1371: + /* Hash table used to merge debug information. */ mgl@1371: + struct coff_debug_merge_hash_table debug_merge; mgl@1371: + /* Buffer large enough to hold swapped symbols of any input file. */ mgl@1371: + struct internal_syment *internal_syms; mgl@1371: + /* Buffer large enough to hold sections of symbols of any input file. */ mgl@1371: + asection **sec_ptrs; mgl@1371: + /* Buffer large enough to hold output indices of symbols of any mgl@1371: + input file. */ mgl@1371: + long *sym_indices; mgl@1371: + /* Buffer large enough to hold output symbols for any input file. */ mgl@1371: + bfd_byte *outsyms; mgl@1371: + /* Buffer large enough to hold external line numbers for any input mgl@1371: + section. */ mgl@1371: + bfd_byte *linenos; mgl@1371: + /* Buffer large enough to hold any input section. */ mgl@1371: + bfd_byte *contents; mgl@1371: + /* Buffer large enough to hold external relocs of any input section. */ mgl@1371: + bfd_byte *external_relocs; mgl@1371: + /* Buffer large enough to hold swapped relocs of any input section. */ mgl@1371: + struct internal_reloc *internal_relocs; mgl@1371: +}; mgl@1371: + mgl@1371: +/* Most COFF variants have no way to record the alignment of a mgl@1371: + section. This struct is used to set a specific alignment based on mgl@1371: + the name of the section. */ mgl@1371: + mgl@1371: +struct coff_section_alignment_entry mgl@1371: +{ mgl@1371: + /* The section name. */ mgl@1371: + const char *name; mgl@1371: + mgl@1371: + /* This is either (unsigned int) -1, indicating that the section mgl@1371: + name must match exactly, or it is the number of letters which mgl@1371: + must match at the start of the name. */ mgl@1371: + unsigned int comparison_length; mgl@1371: + mgl@1371: + /* These macros may be used to fill in the first two fields in a mgl@1371: + structure initialization. */ mgl@1371: +#define COFF_SECTION_NAME_EXACT_MATCH(name) (name), ((unsigned int) -1) mgl@1371: +#define COFF_SECTION_NAME_PARTIAL_MATCH(name) (name), (sizeof (name) - 1) mgl@1371: + mgl@1371: + /* Only use this entry if the default section alignment for this mgl@1371: + target is at least that much (as a power of two). If this field mgl@1371: + is COFF_ALIGNMENT_FIELD_EMPTY, it should be ignored. */ mgl@1371: + unsigned int default_alignment_min; mgl@1371: + mgl@1371: + /* Only use this entry if the default section alignment for this mgl@1371: + target is no greater than this (as a power of two). If this mgl@1371: + field is COFF_ALIGNMENT_FIELD_EMPTY, it should be ignored. */ mgl@1371: + unsigned int default_alignment_max; mgl@1371: + mgl@1371: +#define COFF_ALIGNMENT_FIELD_EMPTY ((unsigned int) -1) mgl@1371: + mgl@1371: + /* The desired alignment for this section (as a power of two). */ mgl@1371: + unsigned int alignment_power; mgl@1371: +}; mgl@1371: + mgl@1371: +extern struct bfd_hash_entry *_bfd_coff_link_hash_newfunc mgl@1371: + (struct bfd_hash_entry *, struct bfd_hash_table *, const char *); mgl@1371: +extern bfd_boolean _bfd_coff_link_hash_table_init mgl@1371: + (struct coff_link_hash_table *, bfd *, mgl@1371: + struct bfd_hash_entry *(*) (struct bfd_hash_entry *, mgl@1371: + struct bfd_hash_table *, mgl@1371: + const char *), mgl@1371: + unsigned int); mgl@1371: +extern struct bfd_link_hash_table *_bfd_coff_link_hash_table_create mgl@1371: + (bfd *); mgl@1371: +extern const char *_bfd_coff_internal_syment_name mgl@1371: + (bfd *, const struct internal_syment *, char *); mgl@1371: +extern bfd_boolean _bfd_coff_link_add_symbols mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern bfd_boolean _bfd_coff_final_link mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern struct internal_reloc *_bfd_coff_read_internal_relocs mgl@1371: + (bfd *, asection *, bfd_boolean, bfd_byte *, bfd_boolean, mgl@1371: + struct internal_reloc *); mgl@1371: +extern bfd_boolean _bfd_coff_generic_relocate_section mgl@1371: + (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, mgl@1371: + struct internal_reloc *, struct internal_syment *, asection **); mgl@1371: +extern struct bfd_hash_entry *_bfd_coff_debug_merge_hash_newfunc mgl@1371: + (struct bfd_hash_entry *, struct bfd_hash_table *, const char *); mgl@1371: +extern bfd_boolean _bfd_coff_write_global_sym mgl@1371: + (struct coff_link_hash_entry *, void *); mgl@1371: +extern bfd_boolean _bfd_coff_write_task_globals mgl@1371: + (struct coff_link_hash_entry *, void *); mgl@1371: +extern bfd_boolean _bfd_coff_link_input_bfd mgl@1371: + (struct coff_final_link_info *, bfd *); mgl@1371: +extern bfd_boolean _bfd_coff_reloc_link_order mgl@1371: + (bfd *, struct coff_final_link_info *, asection *, mgl@1371: + struct bfd_link_order *); mgl@1371: + mgl@1371: + mgl@1371: +#define coff_get_section_contents_in_window \ mgl@1371: + _bfd_generic_get_section_contents_in_window mgl@1371: + mgl@1371: +/* Functions in xcofflink.c. */ mgl@1371: + mgl@1371: +extern long _bfd_xcoff_get_dynamic_symtab_upper_bound mgl@1371: + (bfd *); mgl@1371: +extern long _bfd_xcoff_canonicalize_dynamic_symtab mgl@1371: + (bfd *, asymbol **); mgl@1371: +extern long _bfd_xcoff_get_dynamic_reloc_upper_bound mgl@1371: + (bfd *); mgl@1371: +extern long _bfd_xcoff_canonicalize_dynamic_reloc mgl@1371: + (bfd *, arelent **, asymbol **); mgl@1371: +extern struct bfd_link_hash_table *_bfd_xcoff_bfd_link_hash_table_create mgl@1371: + (bfd *); mgl@1371: +extern void _bfd_xcoff_bfd_link_hash_table_free mgl@1371: + (struct bfd_link_hash_table *); mgl@1371: +extern bfd_boolean _bfd_xcoff_bfd_link_add_symbols mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern bfd_boolean _bfd_xcoff_bfd_final_link mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: +extern bfd_boolean _bfd_ppc_xcoff_relocate_section mgl@1371: + (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, mgl@1371: + struct internal_reloc *, struct internal_syment *, asection **); mgl@1371: + mgl@1371: +/* Functions in coff-ppc.c. FIXME: These are called be pe.em in the mgl@1371: + linker, and so should start with bfd and be declared in bfd.h. */ mgl@1371: + mgl@1371: +extern bfd_boolean ppc_allocate_toc_section mgl@1371: + (struct bfd_link_info *); mgl@1371: +extern bfd_boolean ppc_process_before_allocation mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: +/* Extracted from coffcode.h. */ mgl@1371: +typedef struct coff_ptr_struct mgl@1371: +{ mgl@1371: + /* Remembers the offset from the first symbol in the file for mgl@1371: + this symbol. Generated by coff_renumber_symbols. */ mgl@1371: + unsigned int offset; mgl@1371: + mgl@1371: + /* Should the value of this symbol be renumbered. Used for mgl@1371: + XCOFF C_BSTAT symbols. Set by coff_slurp_symbol_table. */ mgl@1371: + unsigned int fix_value : 1; mgl@1371: + mgl@1371: + /* Should the tag field of this symbol be renumbered. mgl@1371: + Created by coff_pointerize_aux. */ mgl@1371: + unsigned int fix_tag : 1; mgl@1371: + mgl@1371: + /* Should the endidx field of this symbol be renumbered. mgl@1371: + Created by coff_pointerize_aux. */ mgl@1371: + unsigned int fix_end : 1; mgl@1371: + mgl@1371: + /* Should the x_csect.x_scnlen field be renumbered. mgl@1371: + Created by coff_pointerize_aux. */ mgl@1371: + unsigned int fix_scnlen : 1; mgl@1371: + mgl@1371: + /* Fix up an XCOFF C_BINCL/C_EINCL symbol. The value is the mgl@1371: + index into the line number entries. Set by coff_slurp_symbol_table. */ mgl@1371: + unsigned int fix_line : 1; mgl@1371: + mgl@1371: + /* The container for the symbol structure as read and translated mgl@1371: + from the file. */ mgl@1371: + union mgl@1371: + { mgl@1371: + union internal_auxent auxent; mgl@1371: + struct internal_syment syment; mgl@1371: + } u; mgl@1371: +} combined_entry_type; mgl@1371: + mgl@1371: + mgl@1371: +/* Each canonical asymbol really looks like this: */ mgl@1371: + mgl@1371: +typedef struct coff_symbol_struct mgl@1371: +{ mgl@1371: + /* The actual symbol which the rest of BFD works with */ mgl@1371: + asymbol symbol; mgl@1371: + mgl@1371: + /* A pointer to the hidden information for this symbol */ mgl@1371: + combined_entry_type *native; mgl@1371: + mgl@1371: + /* A pointer to the linenumber information for this symbol */ mgl@1371: + struct lineno_cache_entry *lineno; mgl@1371: + mgl@1371: + /* Have the line numbers been relocated yet ? */ mgl@1371: + bfd_boolean done_lineno; mgl@1371: +} coff_symbol_type; mgl@1371: +/* COFF symbol classifications. */ mgl@1371: + mgl@1371: +enum coff_symbol_classification mgl@1371: +{ mgl@1371: + /* Global symbol. */ mgl@1371: + COFF_SYMBOL_GLOBAL, mgl@1371: + /* Common symbol. */ mgl@1371: + COFF_SYMBOL_COMMON, mgl@1371: + /* Undefined symbol. */ mgl@1371: + COFF_SYMBOL_UNDEFINED, mgl@1371: + /* Local symbol. */ mgl@1371: + COFF_SYMBOL_LOCAL, mgl@1371: + /* PE section symbol. */ mgl@1371: + COFF_SYMBOL_PE_SECTION mgl@1371: +}; mgl@1371: + mgl@1371: +typedef struct mgl@1371: +{ mgl@1371: + void (*_bfd_coff_swap_aux_in) mgl@1371: + (bfd *, void *, int, int, int, int, void *); mgl@1371: + mgl@1371: + void (*_bfd_coff_swap_sym_in) mgl@1371: + (bfd *, void *, void *); mgl@1371: + mgl@1371: + void (*_bfd_coff_swap_lineno_in) mgl@1371: + (bfd *, void *, void *); mgl@1371: + mgl@1371: + unsigned int (*_bfd_coff_swap_aux_out) mgl@1371: + (bfd *, void *, int, int, int, int, void *); mgl@1371: + mgl@1371: + unsigned int (*_bfd_coff_swap_sym_out) mgl@1371: + (bfd *, void *, void *); mgl@1371: + mgl@1371: + unsigned int (*_bfd_coff_swap_lineno_out) mgl@1371: + (bfd *, void *, void *); mgl@1371: + mgl@1371: + unsigned int (*_bfd_coff_swap_reloc_out) mgl@1371: + (bfd *, void *, void *); mgl@1371: + mgl@1371: + unsigned int (*_bfd_coff_swap_filehdr_out) mgl@1371: + (bfd *, void *, void *); mgl@1371: + mgl@1371: + unsigned int (*_bfd_coff_swap_aouthdr_out) mgl@1371: + (bfd *, void *, void *); mgl@1371: + mgl@1371: + unsigned int (*_bfd_coff_swap_scnhdr_out) mgl@1371: + (bfd *, void *, void *); mgl@1371: + mgl@1371: + unsigned int _bfd_filhsz; mgl@1371: + unsigned int _bfd_aoutsz; mgl@1371: + unsigned int _bfd_scnhsz; mgl@1371: + unsigned int _bfd_symesz; mgl@1371: + unsigned int _bfd_auxesz; mgl@1371: + unsigned int _bfd_relsz; mgl@1371: + unsigned int _bfd_linesz; mgl@1371: + unsigned int _bfd_filnmlen; mgl@1371: + bfd_boolean _bfd_coff_long_filenames; mgl@1371: + bfd_boolean _bfd_coff_long_section_names; mgl@1371: + unsigned int _bfd_coff_default_section_alignment_power; mgl@1371: + bfd_boolean _bfd_coff_force_symnames_in_strings; mgl@1371: + unsigned int _bfd_coff_debug_string_prefix_length; mgl@1371: + mgl@1371: + void (*_bfd_coff_swap_filehdr_in) mgl@1371: + (bfd *, void *, void *); mgl@1371: + mgl@1371: + void (*_bfd_coff_swap_aouthdr_in) mgl@1371: + (bfd *, void *, void *); mgl@1371: + mgl@1371: + void (*_bfd_coff_swap_scnhdr_in) mgl@1371: + (bfd *, void *, void *); mgl@1371: + mgl@1371: + void (*_bfd_coff_swap_reloc_in) mgl@1371: + (bfd *abfd, void *, void *); mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_coff_bad_format_hook) mgl@1371: + (bfd *, void *); mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_coff_set_arch_mach_hook) mgl@1371: + (bfd *, void *); mgl@1371: + mgl@1371: + void * (*_bfd_coff_mkobject_hook) mgl@1371: + (bfd *, void *, void *); mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_styp_to_sec_flags_hook) mgl@1371: + (bfd *, void *, const char *, asection *, flagword *); mgl@1371: + mgl@1371: + void (*_bfd_set_alignment_hook) mgl@1371: + (bfd *, asection *, void *); mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_coff_slurp_symbol_table) mgl@1371: + (bfd *); mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_coff_symname_in_debug) mgl@1371: + (bfd *, struct internal_syment *); mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_coff_pointerize_aux_hook) mgl@1371: + (bfd *, combined_entry_type *, combined_entry_type *, mgl@1371: + unsigned int, combined_entry_type *); mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_coff_print_aux) mgl@1371: + (bfd *, FILE *, combined_entry_type *, combined_entry_type *, mgl@1371: + combined_entry_type *, unsigned int); mgl@1371: + mgl@1371: + void (*_bfd_coff_reloc16_extra_cases) mgl@1371: + (bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *, mgl@1371: + bfd_byte *, unsigned int *, unsigned int *); mgl@1371: + mgl@1371: + int (*_bfd_coff_reloc16_estimate) mgl@1371: + (bfd *, asection *, arelent *, unsigned int, mgl@1371: + struct bfd_link_info *); mgl@1371: + mgl@1371: + enum coff_symbol_classification (*_bfd_coff_classify_symbol) mgl@1371: + (bfd *, struct internal_syment *); mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_coff_compute_section_file_positions) mgl@1371: + (bfd *); mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_coff_start_final_link) mgl@1371: + (bfd *, struct bfd_link_info *); mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_coff_relocate_section) mgl@1371: + (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, mgl@1371: + struct internal_reloc *, struct internal_syment *, asection **); mgl@1371: + mgl@1371: + reloc_howto_type *(*_bfd_coff_rtype_to_howto) mgl@1371: + (bfd *, asection *, struct internal_reloc *, mgl@1371: + struct coff_link_hash_entry *, struct internal_syment *, mgl@1371: + bfd_vma *); mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_coff_adjust_symndx) mgl@1371: + (bfd *, struct bfd_link_info *, bfd *, asection *, mgl@1371: + struct internal_reloc *, bfd_boolean *); mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_coff_link_add_one_symbol) mgl@1371: + (struct bfd_link_info *, bfd *, const char *, flagword, mgl@1371: + asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean, mgl@1371: + struct bfd_link_hash_entry **); mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_coff_link_output_has_begun) mgl@1371: + (bfd *, struct coff_final_link_info *); mgl@1371: + mgl@1371: + bfd_boolean (*_bfd_coff_final_link_postscript) mgl@1371: + (bfd *, struct coff_final_link_info *); mgl@1371: + mgl@1371: +} bfd_coff_backend_data; mgl@1371: + mgl@1371: +#define coff_backend_info(abfd) \ mgl@1371: + ((bfd_coff_backend_data *) (abfd)->xvec->backend_data) mgl@1371: + mgl@1371: +#define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \ mgl@1371: + ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i)) mgl@1371: + mgl@1371: +#define bfd_coff_swap_sym_in(a,e,i) \ mgl@1371: + ((coff_backend_info (a)->_bfd_coff_swap_sym_in) (a,e,i)) mgl@1371: + mgl@1371: +#define bfd_coff_swap_lineno_in(a,e,i) \ mgl@1371: + ((coff_backend_info ( a)->_bfd_coff_swap_lineno_in) (a,e,i)) mgl@1371: + mgl@1371: +#define bfd_coff_swap_reloc_out(abfd, i, o) \ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_out) (abfd, i, o)) mgl@1371: + mgl@1371: +#define bfd_coff_swap_lineno_out(abfd, i, o) \ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_swap_lineno_out) (abfd, i, o)) mgl@1371: + mgl@1371: +#define bfd_coff_swap_aux_out(a,i,t,c,ind,num,o) \ mgl@1371: + ((coff_backend_info (a)->_bfd_coff_swap_aux_out) (a,i,t,c,ind,num,o)) mgl@1371: + mgl@1371: +#define bfd_coff_swap_sym_out(abfd, i,o) \ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_swap_sym_out) (abfd, i, o)) mgl@1371: + mgl@1371: +#define bfd_coff_swap_scnhdr_out(abfd, i,o) \ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_out) (abfd, i, o)) mgl@1371: + mgl@1371: +#define bfd_coff_swap_filehdr_out(abfd, i,o) \ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_out) (abfd, i, o)) mgl@1371: + mgl@1371: +#define bfd_coff_swap_aouthdr_out(abfd, i,o) \ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_out) (abfd, i, o)) mgl@1371: + mgl@1371: +#define bfd_coff_filhsz(abfd) (coff_backend_info (abfd)->_bfd_filhsz) mgl@1371: +#define bfd_coff_aoutsz(abfd) (coff_backend_info (abfd)->_bfd_aoutsz) mgl@1371: +#define bfd_coff_scnhsz(abfd) (coff_backend_info (abfd)->_bfd_scnhsz) mgl@1371: +#define bfd_coff_symesz(abfd) (coff_backend_info (abfd)->_bfd_symesz) mgl@1371: +#define bfd_coff_auxesz(abfd) (coff_backend_info (abfd)->_bfd_auxesz) mgl@1371: +#define bfd_coff_relsz(abfd) (coff_backend_info (abfd)->_bfd_relsz) mgl@1371: +#define bfd_coff_linesz(abfd) (coff_backend_info (abfd)->_bfd_linesz) mgl@1371: +#define bfd_coff_filnmlen(abfd) (coff_backend_info (abfd)->_bfd_filnmlen) mgl@1371: +#define bfd_coff_long_filenames(abfd) \ mgl@1371: + (coff_backend_info (abfd)->_bfd_coff_long_filenames) mgl@1371: +#define bfd_coff_long_section_names(abfd) \ mgl@1371: + (coff_backend_info (abfd)->_bfd_coff_long_section_names) mgl@1371: +#define bfd_coff_default_section_alignment_power(abfd) \ mgl@1371: + (coff_backend_info (abfd)->_bfd_coff_default_section_alignment_power) mgl@1371: +#define bfd_coff_swap_filehdr_in(abfd, i,o) \ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_in) (abfd, i, o)) mgl@1371: + mgl@1371: +#define bfd_coff_swap_aouthdr_in(abfd, i,o) \ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_in) (abfd, i, o)) mgl@1371: + mgl@1371: +#define bfd_coff_swap_scnhdr_in(abfd, i,o) \ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_in) (abfd, i, o)) mgl@1371: + mgl@1371: +#define bfd_coff_swap_reloc_in(abfd, i, o) \ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_in) (abfd, i, o)) mgl@1371: + mgl@1371: +#define bfd_coff_bad_format_hook(abfd, filehdr) \ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_bad_format_hook) (abfd, filehdr)) mgl@1371: + mgl@1371: +#define bfd_coff_set_arch_mach_hook(abfd, filehdr)\ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_set_arch_mach_hook) (abfd, filehdr)) mgl@1371: +#define bfd_coff_mkobject_hook(abfd, filehdr, aouthdr)\ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_mkobject_hook)\ mgl@1371: + (abfd, filehdr, aouthdr)) mgl@1371: + mgl@1371: +#define bfd_coff_styp_to_sec_flags_hook(abfd, scnhdr, name, section, flags_ptr)\ mgl@1371: + ((coff_backend_info (abfd)->_bfd_styp_to_sec_flags_hook)\ mgl@1371: + (abfd, scnhdr, name, section, flags_ptr)) mgl@1371: + mgl@1371: +#define bfd_coff_set_alignment_hook(abfd, sec, scnhdr)\ mgl@1371: + ((coff_backend_info (abfd)->_bfd_set_alignment_hook) (abfd, sec, scnhdr)) mgl@1371: + mgl@1371: +#define bfd_coff_slurp_symbol_table(abfd)\ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_slurp_symbol_table) (abfd)) mgl@1371: + mgl@1371: +#define bfd_coff_symname_in_debug(abfd, sym)\ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_symname_in_debug) (abfd, sym)) mgl@1371: + mgl@1371: +#define bfd_coff_force_symnames_in_strings(abfd)\ mgl@1371: + (coff_backend_info (abfd)->_bfd_coff_force_symnames_in_strings) mgl@1371: + mgl@1371: +#define bfd_coff_debug_string_prefix_length(abfd)\ mgl@1371: + (coff_backend_info (abfd)->_bfd_coff_debug_string_prefix_length) mgl@1371: + mgl@1371: +#define bfd_coff_print_aux(abfd, file, base, symbol, aux, indaux)\ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_print_aux)\ mgl@1371: + (abfd, file, base, symbol, aux, indaux)) mgl@1371: + mgl@1371: +#define bfd_coff_reloc16_extra_cases(abfd, link_info, link_order,\ mgl@1371: + reloc, data, src_ptr, dst_ptr)\ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\ mgl@1371: + (abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr)) mgl@1371: + mgl@1371: +#define bfd_coff_reloc16_estimate(abfd, section, reloc, shrink, link_info)\ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_reloc16_estimate)\ mgl@1371: + (abfd, section, reloc, shrink, link_info)) mgl@1371: + mgl@1371: +#define bfd_coff_classify_symbol(abfd, sym)\ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_classify_symbol)\ mgl@1371: + (abfd, sym)) mgl@1371: + mgl@1371: +#define bfd_coff_compute_section_file_positions(abfd)\ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_compute_section_file_positions)\ mgl@1371: + (abfd)) mgl@1371: + mgl@1371: +#define bfd_coff_start_final_link(obfd, info)\ mgl@1371: + ((coff_backend_info (obfd)->_bfd_coff_start_final_link)\ mgl@1371: + (obfd, info)) mgl@1371: +#define bfd_coff_relocate_section(obfd,info,ibfd,o,con,rel,isyms,secs)\ mgl@1371: + ((coff_backend_info (ibfd)->_bfd_coff_relocate_section)\ mgl@1371: + (obfd, info, ibfd, o, con, rel, isyms, secs)) mgl@1371: +#define bfd_coff_rtype_to_howto(abfd, sec, rel, h, sym, addendp)\ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_rtype_to_howto)\ mgl@1371: + (abfd, sec, rel, h, sym, addendp)) mgl@1371: +#define bfd_coff_adjust_symndx(obfd, info, ibfd, sec, rel, adjustedp)\ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_adjust_symndx)\ mgl@1371: + (obfd, info, ibfd, sec, rel, adjustedp)) mgl@1371: +#define bfd_coff_link_add_one_symbol(info, abfd, name, flags, section,\ mgl@1371: + value, string, cp, coll, hashp)\ mgl@1371: + ((coff_backend_info (abfd)->_bfd_coff_link_add_one_symbol)\ mgl@1371: + (info, abfd, name, flags, section, value, string, cp, coll, hashp)) mgl@1371: + mgl@1371: +#define bfd_coff_link_output_has_begun(a,p) \ mgl@1371: + ((coff_backend_info (a)->_bfd_coff_link_output_has_begun) (a, p)) mgl@1371: +#define bfd_coff_final_link_postscript(a,p) \ mgl@1371: + ((coff_backend_info (a)->_bfd_coff_final_link_postscript) (a, p)) mgl@1371: + mgl@1371: --- a/bfd/libbfd.h mgl@1371: +++ b/bfd/libbfd.h mgl@1371: @@ -1601,6 +1601,48 @@ static const char *const bfd_reloc_code_ mgl@1371: "BFD_RELOC_AVR_LDI", mgl@1371: "BFD_RELOC_AVR_6", mgl@1371: "BFD_RELOC_AVR_6_ADIW", mgl@1371: + "BFD_RELOC_AVR32_DIFF32", mgl@1371: + "BFD_RELOC_AVR32_DIFF16", mgl@1371: + "BFD_RELOC_AVR32_DIFF8", mgl@1371: + "BFD_RELOC_AVR32_GOT32", mgl@1371: + "BFD_RELOC_AVR32_GOT16", mgl@1371: + "BFD_RELOC_AVR32_GOT8", mgl@1371: + "BFD_RELOC_AVR32_21S", mgl@1371: + "BFD_RELOC_AVR32_16U", mgl@1371: + "BFD_RELOC_AVR32_16S", mgl@1371: + "BFD_RELOC_AVR32_SUB5", mgl@1371: + "BFD_RELOC_AVR32_8S_EXT", mgl@1371: + "BFD_RELOC_AVR32_8S", mgl@1371: + "BFD_RELOC_AVR32_15S", mgl@1371: + "BFD_RELOC_AVR32_22H_PCREL", mgl@1371: + "BFD_RELOC_AVR32_18W_PCREL", mgl@1371: + "BFD_RELOC_AVR32_16B_PCREL", mgl@1371: + "BFD_RELOC_AVR32_16N_PCREL", mgl@1371: + "BFD_RELOC_AVR32_14UW_PCREL", mgl@1371: + "BFD_RELOC_AVR32_11H_PCREL", mgl@1371: + "BFD_RELOC_AVR32_10UW_PCREL", mgl@1371: + "BFD_RELOC_AVR32_9H_PCREL", mgl@1371: + "BFD_RELOC_AVR32_9UW_PCREL", mgl@1371: + "BFD_RELOC_AVR32_GOTPC", mgl@1371: + "BFD_RELOC_AVR32_GOTCALL", mgl@1371: + "BFD_RELOC_AVR32_LDA_GOT", mgl@1371: + "BFD_RELOC_AVR32_GOT21S", mgl@1371: + "BFD_RELOC_AVR32_GOT18SW", mgl@1371: + "BFD_RELOC_AVR32_GOT16S", mgl@1371: + "BFD_RELOC_AVR32_32_CPENT", mgl@1371: + "BFD_RELOC_AVR32_CPCALL", mgl@1371: + "BFD_RELOC_AVR32_16_CP", mgl@1371: + "BFD_RELOC_AVR32_9W_CP", mgl@1371: + "BFD_RELOC_AVR32_ALIGN", mgl@1371: + "BFD_RELOC_AVR32_14UW", mgl@1371: + "BFD_RELOC_AVR32_10UW", mgl@1371: + "BFD_RELOC_AVR32_10SW", mgl@1371: + "BFD_RELOC_AVR32_STHH_W", mgl@1371: + "BFD_RELOC_AVR32_7UW", mgl@1371: + "BFD_RELOC_AVR32_6S", mgl@1371: + "BFD_RELOC_AVR32_6UW", mgl@1371: + "BFD_RELOC_AVR32_4UH", mgl@1371: + "BFD_RELOC_AVR32_3U", mgl@1371: "BFD_RELOC_390_12", mgl@1371: "BFD_RELOC_390_GOT12", mgl@1371: "BFD_RELOC_390_PLT32", mgl@1371: --- /dev/null mgl@1371: +++ b/bfd/libtool mgl@1371: @@ -0,0 +1,7871 @@ mgl@1371: +#! /bin/bash mgl@1371: + mgl@1371: +# libtool - Provide generalized library-building support services. mgl@1371: +# Generated automatically by config.status (bfd) 2.18.atmel.1.0.1 mgl@1371: +# Libtool was configured on host hcegtvedt: mgl@1371: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. mgl@1371: +# mgl@1371: +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, mgl@1371: +# 2006, 2007, 2008 Free Software Foundation, Inc. mgl@1371: +# Written by Gordon Matzigkeit, 1996 mgl@1371: +# mgl@1371: +# This file is part of GNU Libtool. mgl@1371: +# mgl@1371: +# GNU Libtool is free software; you can redistribute it and/or mgl@1371: +# modify it under the terms of the GNU General Public License as mgl@1371: +# published by the Free Software Foundation; either version 2 of mgl@1371: +# the License, or (at your option) any later version. mgl@1371: +# mgl@1371: +# As a special exception to the GNU General Public License, mgl@1371: +# if you distribute this file as part of a program or library that mgl@1371: +# is built using GNU Libtool, you may include this file under the mgl@1371: +# same distribution terms that you use for the rest of that program. mgl@1371: +# mgl@1371: +# GNU Libtool is distributed in the hope that it will be useful, mgl@1371: +# but WITHOUT ANY WARRANTY; without even the implied warranty of mgl@1371: +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the mgl@1371: +# GNU General Public License for more details. mgl@1371: +# mgl@1371: +# You should have received a copy of the GNU General Public License mgl@1371: +# along with GNU Libtool; see the file COPYING. If not, a copy mgl@1371: +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or mgl@1371: +# obtained by writing to the Free Software Foundation, Inc., mgl@1371: +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. mgl@1371: + mgl@1371: + mgl@1371: +# The names of the tagged configurations supported by this script. mgl@1371: +available_tags="" mgl@1371: + mgl@1371: +# ### BEGIN LIBTOOL CONFIG mgl@1371: + mgl@1371: +# Whether or not to build shared libraries. mgl@1371: +build_libtool_libs=no mgl@1371: + mgl@1371: +# Which release of libtool.m4 was used? mgl@1371: +macro_version=2.2.4 mgl@1371: +macro_revision=1.2976 mgl@1371: + mgl@1371: +# Whether or not to build static libraries. mgl@1371: +build_old_libs=yes mgl@1371: + mgl@1371: +# What type of objects to build. mgl@1371: +pic_mode=default mgl@1371: + mgl@1371: +# Whether or not to optimize for fast installation. mgl@1371: +fast_install=needless mgl@1371: + mgl@1371: +# The host system. mgl@1371: +host_alias=i686-pc-linux-gnu mgl@1371: +host=i686-pc-linux-gnu mgl@1371: +host_os=linux-gnu mgl@1371: + mgl@1371: +# The build system. mgl@1371: +build_alias=i686-pc-linux-gnu mgl@1371: +build=i686-pc-linux-gnu mgl@1371: +build_os=linux-gnu mgl@1371: + mgl@1371: +# A sed program that does not truncate output. mgl@1371: +SED="/bin/sed" mgl@1371: + mgl@1371: +# Sed that helps us avoid accidentally triggering echo(1) options like -n. mgl@1371: +Xsed="$SED -e 1s/^X//" mgl@1371: + mgl@1371: +# A grep program that handles long lines. mgl@1371: +GREP="/bin/grep" mgl@1371: + mgl@1371: +# An ERE matcher. mgl@1371: +EGREP="/bin/grep -E" mgl@1371: + mgl@1371: +# A literal string matcher. mgl@1371: +FGREP="/bin/grep -F" mgl@1371: + mgl@1371: +# A BSD- or MS-compatible name lister. mgl@1371: +NM="nm" mgl@1371: + mgl@1371: +# Whether we need soft or hard links. mgl@1371: +LN_S="ln -s" mgl@1371: + mgl@1371: +# What is the maximum length of a command? mgl@1371: +max_cmd_len=805306365 mgl@1371: + mgl@1371: +# Object file suffix (normally "o"). mgl@1371: +objext=o mgl@1371: + mgl@1371: +# Executable file suffix (normally ""). mgl@1371: +exeext= mgl@1371: + mgl@1371: +# whether the shell understands "unset". mgl@1371: +lt_unset=unset mgl@1371: + mgl@1371: +# turn spaces into newlines. mgl@1371: +SP2NL="tr \\040 \\012" mgl@1371: + mgl@1371: +# turn newlines into spaces. mgl@1371: +NL2SP="tr \\015\\012 \\040\\040" mgl@1371: + mgl@1371: +# How to create reloadable object files. mgl@1371: +reload_flag=" -r" mgl@1371: +reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" mgl@1371: + mgl@1371: +# Method to check whether dependent libraries are shared objects. mgl@1371: +deplibs_check_method="pass_all" mgl@1371: + mgl@1371: +# Command to use when deplibs_check_method == "file_magic". mgl@1371: +file_magic_cmd="\$MAGIC_CMD" mgl@1371: + mgl@1371: +# The archiver. mgl@1371: +AR="ar" mgl@1371: +AR_FLAGS="cru" mgl@1371: + mgl@1371: +# A symbol stripping program. mgl@1371: +STRIP="strip" mgl@1371: + mgl@1371: +# Commands used to install an old-style archive. mgl@1371: +RANLIB="ranlib" mgl@1371: +old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$oldlib" mgl@1371: +old_postuninstall_cmds="" mgl@1371: + mgl@1371: +# A C compiler. mgl@1371: +LTCC="gcc" mgl@1371: + mgl@1371: +# LTCC compiler flags. mgl@1371: +LTCFLAGS="-g -O2" mgl@1371: + mgl@1371: +# Take the output of nm and produce a listing of raw symbols and C names. mgl@1371: +global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGIRSTW][ABCDGIRSTW]*\\)[ ][ ]*\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2 \\2/p'" mgl@1371: + mgl@1371: +# Transform the output of nm in a proper C declaration. mgl@1371: +global_symbol_to_cdecl="sed -n -e 's/^T .* \\(.*\\)\$/extern int \\1();/p' -e 's/^[ABCDGIRSTW]* .* \\(.*\\)\$/extern char \\1;/p'" mgl@1371: + mgl@1371: +# Transform the output of nm in a C name address pair. mgl@1371: +global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (void *) 0},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (void *) \\&\\2},/p'" mgl@1371: + mgl@1371: +# Transform the output of nm in a C name address pair when lib prefix is needed. mgl@1371: +global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (void *) 0},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\(lib[^ ]*\\)\$/ {\"\\2\", (void *) \\&\\2},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\([^ ]*\\)\$/ {\"lib\\2\", (void *) \\&\\2},/p'" mgl@1371: + mgl@1371: +# The name of the directory that contains temporary libtool files. mgl@1371: +objdir=.libs mgl@1371: + mgl@1371: +# Shell to use when invoking shell scripts. mgl@1371: +SHELL="/bin/bash" mgl@1371: + mgl@1371: +# An echo program that does not interpret backslashes. mgl@1371: +ECHO="echo" mgl@1371: + mgl@1371: +# Used to examine libraries when file_magic_cmd begins with "file". mgl@1371: +MAGIC_CMD=file mgl@1371: + mgl@1371: +# Must we lock files when doing compilation? mgl@1371: +need_locks="no" mgl@1371: + mgl@1371: +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. mgl@1371: +DSYMUTIL="" mgl@1371: + mgl@1371: +# Tool to change global to local symbols on Mac OS X. mgl@1371: +NMEDIT="" mgl@1371: + mgl@1371: +# Tool to manipulate fat objects and archives on Mac OS X. mgl@1371: +LIPO="" mgl@1371: + mgl@1371: +# ldd/readelf like tool for Mach-O binaries on Mac OS X. mgl@1371: +OTOOL="" mgl@1371: + mgl@1371: +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. mgl@1371: +OTOOL64="" mgl@1371: + mgl@1371: +# Old archive suffix (normally "a"). mgl@1371: +libext=a mgl@1371: + mgl@1371: +# Shared library suffix (normally ".so"). mgl@1371: +shrext_cmds=".so" mgl@1371: + mgl@1371: +# The commands to extract the exported symbol list from a shared archive. mgl@1371: +extract_expsyms_cmds="" mgl@1371: + mgl@1371: +# Variables whose values should be saved in libtool wrapper scripts and mgl@1371: +# restored at link time. mgl@1371: +variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" mgl@1371: + mgl@1371: +# Do we need the "lib" prefix for modules? mgl@1371: +need_lib_prefix=no mgl@1371: + mgl@1371: +# Do we need a version for libraries? mgl@1371: +need_version=no mgl@1371: + mgl@1371: +# Library versioning type. mgl@1371: +version_type=linux mgl@1371: + mgl@1371: +# Shared library runtime path variable. mgl@1371: +runpath_var=LD_RUN_PATH mgl@1371: + mgl@1371: +# Shared library path variable. mgl@1371: +shlibpath_var=LD_LIBRARY_PATH mgl@1371: + mgl@1371: +# Is shlibpath searched before the hard-coded library search path? mgl@1371: +shlibpath_overrides_runpath=no mgl@1371: + mgl@1371: +# Format of library name prefix. mgl@1371: +libname_spec="lib\$name" mgl@1371: + mgl@1371: +# List of archive names. First name is the real one, the rest are links. mgl@1371: +# The last name is the one that the linker finds with -lNAME mgl@1371: +library_names_spec="\${libname}\${release}\${shared_ext}\$versuffix \${libname}\${release}\${shared_ext}\$major \$libname\${shared_ext}" mgl@1371: + mgl@1371: +# The coded name of the library, if different from the real name. mgl@1371: +soname_spec="\${libname}\${release}\${shared_ext}\$major" mgl@1371: + mgl@1371: +# Command to use after installation of a shared archive. mgl@1371: +postinstall_cmds="" mgl@1371: + mgl@1371: +# Command to use after uninstallation of a shared archive. mgl@1371: +postuninstall_cmds="" mgl@1371: + mgl@1371: +# Commands used to finish a libtool library installation in a directory. mgl@1371: +finish_cmds="PATH=\\\"\\\$PATH:/sbin\\\" ldconfig -n \$libdir" mgl@1371: + mgl@1371: +# As "finish_cmds", except a single script fragment to be evaled but mgl@1371: +# not shown. mgl@1371: +finish_eval="" mgl@1371: + mgl@1371: +# Whether we should hardcode library paths into libraries. mgl@1371: +hardcode_into_libs=yes mgl@1371: + mgl@1371: +# Compile-time system search path for libraries. mgl@1371: +sys_lib_search_path_spec="/usr/lib/gcc/i486-linux-gnu/4.2.4 /usr/lib /lib" mgl@1371: + mgl@1371: +# Run-time system search path for libraries. mgl@1371: +sys_lib_dlsearch_path_spec="/lib /usr/lib /lib/i486-linux-gnu /usr/lib/i486-linux-gnu /usr/lib/alsa-lib /usr/local/lib " mgl@1371: + mgl@1371: +# Whether dlopen is supported. mgl@1371: +dlopen_support=unknown mgl@1371: + mgl@1371: +# Whether dlopen of programs is supported. mgl@1371: +dlopen_self=unknown mgl@1371: + mgl@1371: +# Whether dlopen of statically linked programs is supported. mgl@1371: +dlopen_self_static=unknown mgl@1371: + mgl@1371: +# Commands to strip libraries. mgl@1371: +old_striplib="strip --strip-debug" mgl@1371: +striplib="strip --strip-unneeded" mgl@1371: + mgl@1371: + mgl@1371: +# The linker used to build libraries. mgl@1371: +LD="ld" mgl@1371: + mgl@1371: +# Commands used to build an old-style archive. mgl@1371: +old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib" mgl@1371: + mgl@1371: +# A language specific compiler. mgl@1371: +CC="gcc" mgl@1371: + mgl@1371: +# Is the compiler the GNU compiler? mgl@1371: +with_gcc=yes mgl@1371: + mgl@1371: +# Compiler flag to turn off builtin functions. mgl@1371: +no_builtin_flag=" -fno-builtin" mgl@1371: + mgl@1371: +# How to pass a linker flag through the compiler. mgl@1371: +wl="-Wl," mgl@1371: + mgl@1371: +# Additional compiler flags for building library objects. mgl@1371: +pic_flag=" -fPIC -DPIC" mgl@1371: + mgl@1371: +# Compiler flag to prevent dynamic linking. mgl@1371: +link_static_flag="-static" mgl@1371: + mgl@1371: +# Does compiler simultaneously support -c and -o options? mgl@1371: +compiler_c_o="yes" mgl@1371: + mgl@1371: +# Whether or not to add -lc for building shared libraries. mgl@1371: +build_libtool_need_lc=yes mgl@1371: + mgl@1371: +# Whether or not to disallow shared libs when runtime libs are static. mgl@1371: +allow_libtool_libs_with_static_runtimes=no mgl@1371: + mgl@1371: +# Compiler flag to allow reflexive dlopens. mgl@1371: +export_dynamic_flag_spec="\${wl}--export-dynamic" mgl@1371: + mgl@1371: +# Compiler flag to generate shared objects directly from archives. mgl@1371: +whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive" mgl@1371: + mgl@1371: +# Whether the compiler copes with passing no objects directly. mgl@1371: +compiler_needs_object="no" mgl@1371: + mgl@1371: +# Create an old-style archive from a shared archive. mgl@1371: +old_archive_from_new_cmds="" mgl@1371: + mgl@1371: +# Create a temporary old-style archive to link instead of a shared archive. mgl@1371: +old_archive_from_expsyms_cmds="" mgl@1371: + mgl@1371: +# Commands used to build a shared archive. mgl@1371: +archive_cmds="\$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname -o \$lib" mgl@1371: +archive_expsym_cmds="echo \\\"{ global:\\\" > \$output_objdir/\$libname.ver~ mgl@1371: + cat \$export_symbols | sed -e \\\"s/\\\\(.*\\\\)/\\\\1;/\\\" >> \$output_objdir/\$libname.ver~ mgl@1371: + echo \\\"local: *; };\\\" >> \$output_objdir/\$libname.ver~ mgl@1371: + \$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-version-script \${wl}\$output_objdir/\$libname.ver -o \$lib" mgl@1371: + mgl@1371: +# Commands used to build a loadable module if different from building mgl@1371: +# a shared archive. mgl@1371: +module_cmds="" mgl@1371: +module_expsym_cmds="" mgl@1371: + mgl@1371: +# Whether we are building with GNU ld or not. mgl@1371: +with_gnu_ld="yes" mgl@1371: + mgl@1371: +# Flag that allows shared libraries with undefined symbols to be built. mgl@1371: +allow_undefined_flag="" mgl@1371: + mgl@1371: +# Flag that enforces no undefined symbols. mgl@1371: +no_undefined_flag="" mgl@1371: + mgl@1371: +# Flag to hardcode $libdir into a binary during linking. mgl@1371: +# This must work even if $libdir does not exist mgl@1371: +hardcode_libdir_flag_spec="\${wl}-rpath \${wl}\$libdir" mgl@1371: + mgl@1371: +# If ld is used when linking, flag to hardcode $libdir into a binary mgl@1371: +# during linking. This must work even if $libdir does not exist. mgl@1371: +hardcode_libdir_flag_spec_ld="" mgl@1371: + mgl@1371: +# Whether we need a single "-rpath" flag with a separated argument. mgl@1371: +hardcode_libdir_separator="" mgl@1371: + mgl@1371: +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes mgl@1371: +# DIR into the resulting binary. mgl@1371: +hardcode_direct=no mgl@1371: + mgl@1371: +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes mgl@1371: +# DIR into the resulting binary and the resulting library dependency is mgl@1371: +# "absolute",i.e impossible to change by setting ${shlibpath_var} if the mgl@1371: +# library is relocated. mgl@1371: +hardcode_direct_absolute=no mgl@1371: + mgl@1371: +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR mgl@1371: +# into the resulting binary. mgl@1371: +hardcode_minus_L=no mgl@1371: + mgl@1371: +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR mgl@1371: +# into the resulting binary. mgl@1371: +hardcode_shlibpath_var=unsupported mgl@1371: + mgl@1371: +# Set to "yes" if building a shared library automatically hardcodes DIR mgl@1371: +# into the library and all subsequent libraries and executables linked mgl@1371: +# against it. mgl@1371: +hardcode_automatic=no mgl@1371: + mgl@1371: +# Set to yes if linker adds runtime paths of dependent libraries mgl@1371: +# to runtime path list. mgl@1371: +inherit_rpath=no mgl@1371: + mgl@1371: +# Whether libtool must link a program against all its dependency libraries. mgl@1371: +link_all_deplibs=unknown mgl@1371: + mgl@1371: +# Fix the shell variable $srcfile for the compiler. mgl@1371: +fix_srcfile_path="" mgl@1371: + mgl@1371: +# Set to "yes" if exported symbols are required. mgl@1371: +always_export_symbols=no mgl@1371: + mgl@1371: +# The commands to list exported symbols. mgl@1371: +export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" mgl@1371: + mgl@1371: +# Symbols that should not be listed in the preloaded symbols. mgl@1371: +exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*" mgl@1371: + mgl@1371: +# Symbols that must always be exported. mgl@1371: +include_expsyms="" mgl@1371: + mgl@1371: +# Commands necessary for linking programs (against libraries) with templates. mgl@1371: +prelink_cmds="" mgl@1371: + mgl@1371: +# Specify filename containing input files. mgl@1371: +file_list_spec="" mgl@1371: + mgl@1371: +# How to hardcode a shared library path into an executable. mgl@1371: +hardcode_action=immediate mgl@1371: + mgl@1371: +# ### END LIBTOOL CONFIG mgl@1371: + mgl@1371: +# Generated from ltmain.m4sh; do not edit by hand mgl@1371: + mgl@1371: +# ltmain.sh (GNU libtool 1.2435 2007/03/18 18:44:42) 2.1a mgl@1371: +# Written by Gordon Matzigkeit , 1996 mgl@1371: + mgl@1371: +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. mgl@1371: +# This is free software; see the source for copying conditions. There is NO mgl@1371: +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. mgl@1371: + mgl@1371: +# This program is free software; you can redistribute it and/or modify mgl@1371: +# it under the terms of the GNU General Public License as published by mgl@1371: +# the Free Software Foundation; either version 2 of the License, or mgl@1371: +# (at your option) any later version. mgl@1371: +# mgl@1371: +# This program is distributed in the hope that it will be useful, but mgl@1371: +# WITHOUT ANY WARRANTY; without even the implied warranty of mgl@1371: +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU mgl@1371: +# General Public License for more details. mgl@1371: +# mgl@1371: +# You should have received a copy of the GNU General Public License mgl@1371: +# along with this program; if not, write to the Free Software mgl@1371: +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. mgl@1371: +# mgl@1371: +# As a special exception to the GNU General Public License, if you mgl@1371: +# distribute this file as part of a program that contains a mgl@1371: +# configuration script generated by Autoconf, you may include it under mgl@1371: +# the same distribution terms that you use for the rest of that program. mgl@1371: + mgl@1371: +# Usage: $progname [OPTION]... [MODE-ARG]... mgl@1371: +# mgl@1371: +# Provide generalized library-building support services. mgl@1371: +# mgl@1371: +# --config show all configuration variables mgl@1371: +# --debug enable verbose shell tracing mgl@1371: +# -n, --dry-run display commands without modifying any files mgl@1371: +# --features display basic configuration information and exit mgl@1371: +# --mode=MODE use operation mode MODE mgl@1371: +# --preserve-dup-deps don't remove duplicate dependency libraries mgl@1371: +# --quiet, --silent don't print informational messages mgl@1371: +# --tag=TAG use configuration variables from tag TAG mgl@1371: +# -v, --verbose print informational messages (default) mgl@1371: +# --version print version information mgl@1371: +# -h, --help print short or long help message mgl@1371: +# mgl@1371: +# MODE must be one of the following: mgl@1371: +# mgl@1371: +# clean remove files from the build directory mgl@1371: +# compile compile a source file into a libtool object mgl@1371: +# execute automatically set library path, then run a program mgl@1371: +# finish complete the installation of libtool libraries mgl@1371: +# install install libraries or executables mgl@1371: +# link create a library or an executable mgl@1371: +# uninstall remove libraries from an installed directory mgl@1371: +# mgl@1371: +# MODE-ARGS vary depending on the MODE. mgl@1371: +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. mgl@1371: +# mgl@1371: +# When reporting a bug, please describe a test case to reproduce it and mgl@1371: +# include the following information: mgl@1371: +# mgl@1371: +# host-triplet: $host mgl@1371: +# shell: $SHELL mgl@1371: +# compiler: $LTCC mgl@1371: +# compiler flags: $LTCFLAGS mgl@1371: +# linker: $LD (gnu? $with_gnu_ld) mgl@1371: +# $progname: (GNU libtool 1.2435 2007/03/18 18:44:42) 2.1a mgl@1371: +# automake: $automake_version mgl@1371: +# autoconf: $autoconf_version mgl@1371: +# mgl@1371: +# Report bugs to . mgl@1371: + mgl@1371: +PROGRAM=ltmain.sh mgl@1371: +PACKAGE=libtool mgl@1371: +VERSION=2.1a mgl@1371: +TIMESTAMP=" 1.2435 2007/03/18 18:44:42" mgl@1371: +package_revision=1.2435 mgl@1371: + mgl@1371: +# Be Bourne compatible mgl@1371: +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then mgl@1371: + emulate sh mgl@1371: + NULLCMD=: mgl@1371: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which mgl@1371: + # is contrary to our usage. Disable this feature. mgl@1371: + alias -g '${1+"$@"}'='"$@"' mgl@1371: + setopt NO_GLOB_SUBST mgl@1371: +else mgl@1371: + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac mgl@1371: +fi mgl@1371: +BIN_SH=xpg4; export BIN_SH # for Tru64 mgl@1371: +DUALCASE=1; export DUALCASE # for MKS sh mgl@1371: + mgl@1371: +# NLS nuisances: We save the old values to restore during execute mode. mgl@1371: +# Only set LANG and LC_ALL to C if already set. mgl@1371: +# These must not be set unconditionally because not all systems understand mgl@1371: +# e.g. LANG=C (notably SCO). mgl@1371: +for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES mgl@1371: +do mgl@1371: + eval "if test \"\${$lt_var+set}\" = set; then mgl@1371: + save_$lt_var=\$$lt_var mgl@1371: + $lt_var=C mgl@1371: + export $lt_var mgl@1371: + fi" mgl@1371: +done mgl@1371: + mgl@1371: +$lt_unset CDPATH mgl@1371: + mgl@1371: + mgl@1371: + mgl@1371: + mgl@1371: + mgl@1371: +: ${CP="cp -f"} mgl@1371: +: ${ECHO="echo"} mgl@1371: +: ${EGREP="/bin/grep -E"} mgl@1371: +: ${FGREP="/bin/grep -F"} mgl@1371: +: ${GREP="/bin/grep"} mgl@1371: +: ${LN_S="ln -s"} mgl@1371: +: ${MAKE="make"} mgl@1371: +: ${MKDIR="mkdir"} mgl@1371: +: ${MV="mv -f"} mgl@1371: +: ${RM="rm -f"} mgl@1371: +: ${SED="/bin/sed"} mgl@1371: +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} mgl@1371: +: ${Xsed="$SED -e 1s/^X//"} mgl@1371: + mgl@1371: +# Global variables: mgl@1371: +EXIT_SUCCESS=0 mgl@1371: +EXIT_FAILURE=1 mgl@1371: +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. mgl@1371: +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. mgl@1371: + mgl@1371: +exit_status=$EXIT_SUCCESS mgl@1371: + mgl@1371: +# Make sure IFS has a sensible default mgl@1371: +lt_nl=' mgl@1371: +' mgl@1371: +IFS=" $lt_nl" mgl@1371: + mgl@1371: +dirname="s,/[^/]*$,," mgl@1371: +basename="s,^.*/,," mgl@1371: + mgl@1371: +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh mgl@1371: +# is ksh but when the shell is invoked as "sh" and the current value of mgl@1371: +# the _XPG environment variable is not equal to 1 (one), the special mgl@1371: +# positional parameter $0, within a function call, is the name of the mgl@1371: +# function. mgl@1371: +progpath="$0" mgl@1371: + mgl@1371: +# The name of this program: mgl@1371: +# In the unlikely event $progname began with a '-', it would play havoc with mgl@1371: +# func_echo (imagine progname=-n), so we prepend ./ in that case: mgl@1371: +progname=`$ECHO "X$progpath" | $Xsed -e "$basename" -e 's,^-,./-,'` mgl@1371: + mgl@1371: +# Make sure we have an absolute path for reexecution: mgl@1371: +case $progpath in mgl@1371: + [\\/]*|[A-Za-z]:\\*) ;; mgl@1371: + *[\\/]*) mgl@1371: + progdir=`$ECHO "X$progpath" | $Xsed -e "$dirname"` mgl@1371: + progdir=`cd "$progdir" && pwd` mgl@1371: + progpath="$progdir/$progname" mgl@1371: + ;; mgl@1371: + *) mgl@1371: + save_IFS="$IFS" mgl@1371: + IFS=: mgl@1371: + for progdir in $PATH; do mgl@1371: + IFS="$save_IFS" mgl@1371: + test -x "$progdir/$progname" && break mgl@1371: + done mgl@1371: + IFS="$save_IFS" mgl@1371: + test -n "$progdir" || progdir=`pwd` mgl@1371: + progpath="$progdir/$progname" mgl@1371: + ;; mgl@1371: +esac mgl@1371: + mgl@1371: +# Sed substitution that helps us do robust quoting. It backslashifies mgl@1371: +# metacharacters that are still active within double-quoted strings. mgl@1371: +Xsed="${SED}"' -e 1s/^X//' mgl@1371: +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' mgl@1371: + mgl@1371: +# Same as above, but do not quote variable references. mgl@1371: +double_quote_subst='s/\(["`\\]\)/\\\1/g' mgl@1371: + mgl@1371: +# Re-`\' parameter expansions in output of double_quote_subst that were mgl@1371: +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' mgl@1371: +# in input to double_quote_subst, that '$' was protected from expansion. mgl@1371: +# Since each input `\' is now two `\'s, look for any number of runs of mgl@1371: +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. mgl@1371: +bs='\\' mgl@1371: +bs2='\\\\' mgl@1371: +bs4='\\\\\\\\' mgl@1371: +dollar='\$' mgl@1371: +sed_double_backslash="\ mgl@1371: + s/$bs4/&\\ mgl@1371: +/g mgl@1371: + s/^$bs2$dollar/$bs&/ mgl@1371: + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g mgl@1371: + s/\n//g" mgl@1371: + mgl@1371: +# Standard options: mgl@1371: +opt_dry_run=false mgl@1371: +opt_help=false mgl@1371: +opt_quiet=false mgl@1371: +opt_verbose=false mgl@1371: + mgl@1371: +# func_echo arg... mgl@1371: +# Echo program name prefixed message, along with the current mode mgl@1371: +# name if it has been set yet. mgl@1371: +func_echo () mgl@1371: +{ mgl@1371: + $ECHO "$progname${mode+: }$mode: "${1+"$@"} mgl@1371: +} mgl@1371: + mgl@1371: +# func_verbose arg... mgl@1371: +# Echo program name prefixed message in verbose mode only. mgl@1371: +func_verbose () mgl@1371: +{ mgl@1371: + $opt_verbose && func_echo ${1+"$@"} mgl@1371: + mgl@1371: + # A bug in bash halts the script if the last line of a function mgl@1371: + # fails when set -e is in force, so we need another command to mgl@1371: + # work around that: mgl@1371: + : mgl@1371: +} mgl@1371: + mgl@1371: +# func_error arg... mgl@1371: +# Echo program name prefixed message to standard error. mgl@1371: +func_error () mgl@1371: +{ mgl@1371: + $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 mgl@1371: +} mgl@1371: + mgl@1371: +# func_warning arg... mgl@1371: +# Echo program name prefixed warning message to standard error. mgl@1371: +func_warning () mgl@1371: +{ mgl@1371: + $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 mgl@1371: +} mgl@1371: + mgl@1371: +# func_fatal_error arg... mgl@1371: +# Echo program name prefixed message to standard error, and exit. mgl@1371: +func_fatal_error () mgl@1371: +{ mgl@1371: + func_error ${1+"$@"} mgl@1371: + exit $EXIT_FAILURE mgl@1371: +} mgl@1371: + mgl@1371: +# func_fatal_help arg... mgl@1371: +# Echo program name prefixed message to standard error, followed by mgl@1371: +# a help hint, and exit. mgl@1371: +func_fatal_help () mgl@1371: +{ mgl@1371: + func_error ${1+"$@"} mgl@1371: + func_fatal_error "$help" mgl@1371: +} mgl@1371: +help="Try \`$progname --help' for more information." ## default mgl@1371: + mgl@1371: + mgl@1371: +# func_grep expression filename mgl@1371: +# Check whether EXPRESSION matches any line of FILENAME, without output. mgl@1371: +func_grep () mgl@1371: +{ mgl@1371: + $GREP "$1" "$2" >/dev/null 2>&1 mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +# func_mkdir_p directory-path mgl@1371: +# Make sure the entire path to DIRECTORY-PATH is available. mgl@1371: +func_mkdir_p () mgl@1371: +{ mgl@1371: + my_directory_path="$1" mgl@1371: + my_dir_list= mgl@1371: + mgl@1371: + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then mgl@1371: + mgl@1371: + # Protect directory names starting with `-' mgl@1371: + case $my_directory_path in mgl@1371: + -*) my_directory_path="./$my_directory_path" ;; mgl@1371: + esac mgl@1371: + mgl@1371: + # While some portion of DIR does not yet exist... mgl@1371: + while test ! -d "$my_directory_path"; do mgl@1371: + # ...make a list in topmost first order. Use a colon delimited mgl@1371: + # list incase some portion of path contains whitespace. mgl@1371: + my_dir_list="$my_directory_path:$my_dir_list" mgl@1371: + mgl@1371: + # If the last portion added has no slash in it, the list is done mgl@1371: + case $my_directory_path in */*) ;; *) break ;; esac mgl@1371: + mgl@1371: + # ...otherwise throw away the child directory and loop mgl@1371: + my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` mgl@1371: + done mgl@1371: + my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` mgl@1371: + mgl@1371: + save_mkdir_p_IFS="$IFS"; IFS=':' mgl@1371: + for my_dir in $my_dir_list; do mgl@1371: + IFS="$save_mkdir_p_IFS" mgl@1371: + # mkdir can fail with a `File exist' error if two processes mgl@1371: + # try to create one of the directories concurrently. Don't mgl@1371: + # stop in that case! mgl@1371: + $MKDIR "$my_dir" 2>/dev/null || : mgl@1371: + done mgl@1371: + IFS="$save_mkdir_p_IFS" mgl@1371: + mgl@1371: + # Bail out if we (or some other process) failed to create a directory. mgl@1371: + test -d "$my_directory_path" || \ mgl@1371: + func_fatal_error "Failed to create \`$1'" mgl@1371: + fi mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +# func_mktempdir [string] mgl@1371: +# Make a temporary directory that won't clash with other running mgl@1371: +# libtool processes, and avoids race conditions if possible. If mgl@1371: +# given, STRING is the basename for that directory. mgl@1371: +func_mktempdir () mgl@1371: +{ mgl@1371: + my_template="${TMPDIR-/tmp}/${1-$progname}" mgl@1371: + mgl@1371: + if test "$opt_dry_run" = ":"; then mgl@1371: + # Return a directory name, but don't create it in dry-run mode mgl@1371: + my_tmpdir="${my_template}-$$" mgl@1371: + else mgl@1371: + mgl@1371: + # If mktemp works, use that first and foremost mgl@1371: + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` mgl@1371: + mgl@1371: + if test ! -d "$my_tmpdir"; then mgl@1371: + # Failing that, at least try and use $RANDOM to avoid a race mgl@1371: + my_tmpdir="${my_template}-${RANDOM-0}$$" mgl@1371: + mgl@1371: + save_mktempdir_umask=`umask` mgl@1371: + umask 0077 mgl@1371: + $MKDIR "$my_tmpdir" mgl@1371: + umask $save_mktempdir_umask mgl@1371: + fi mgl@1371: + mgl@1371: + # If we're not in dry-run mode, bomb out on failure mgl@1371: + test -d "$my_tmpdir" || \ mgl@1371: + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" mgl@1371: + fi mgl@1371: + mgl@1371: + $ECHO "X$my_tmpdir" | $Xsed mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +# func_quote_for_eval arg mgl@1371: +# Aesthetically quote ARG to be evaled later. mgl@1371: +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT mgl@1371: +# is double-quoted, suitable for a subsequent eval, whereas mgl@1371: +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters mgl@1371: +# which are still active within double quotes backslashified. mgl@1371: +func_quote_for_eval () mgl@1371: +{ mgl@1371: + case $1 in mgl@1371: + *[\\\`\"\$]*) mgl@1371: + func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; mgl@1371: + *) mgl@1371: + func_quote_for_eval_unquoted_result="$1" ;; mgl@1371: + esac mgl@1371: + mgl@1371: + case $func_quote_for_eval_unquoted_result in mgl@1371: + # Double-quote args containing shell metacharacters to delay mgl@1371: + # word splitting, command substitution and and variable mgl@1371: + # expansion for a subsequent eval. mgl@1371: + # Many Bourne shells cannot handle close brackets correctly mgl@1371: + # in scan sets, so we specify it separately. mgl@1371: + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") mgl@1371: + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" mgl@1371: + ;; mgl@1371: + *) mgl@1371: + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" mgl@1371: + esac mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +# func_quote_for_expand arg mgl@1371: +# Aesthetically quote ARG to be evaled later; same as above, mgl@1371: +# but do not quote variable references. mgl@1371: +func_quote_for_expand () mgl@1371: +{ mgl@1371: + case $1 in mgl@1371: + *[\\\`\"]*) mgl@1371: + my_arg=`$ECHO "X$1" | $Xsed \ mgl@1371: + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; mgl@1371: + *) mgl@1371: + my_arg="$1" ;; mgl@1371: + esac mgl@1371: + mgl@1371: + case $my_arg in mgl@1371: + # Double-quote args containing shell metacharacters to delay mgl@1371: + # word splitting and command substitution for a subsequent eval. mgl@1371: + # Many Bourne shells cannot handle close brackets correctly mgl@1371: + # in scan sets, so we specify it separately. mgl@1371: + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") mgl@1371: + my_arg="\"$my_arg\"" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + func_quote_for_expand_result="$my_arg" mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +# func_show_eval cmd [fail_exp] mgl@1371: +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is mgl@1371: +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP mgl@1371: +# is given, then evaluate it. mgl@1371: +func_show_eval () mgl@1371: +{ mgl@1371: + my_cmd="$1" mgl@1371: + my_fail_exp="${2-:}" mgl@1371: + mgl@1371: + ${opt_silent-false} || { mgl@1371: + func_quote_for_expand "$my_cmd" mgl@1371: + eval "func_echo $func_quote_for_expand_result" mgl@1371: + } mgl@1371: + mgl@1371: + if ${opt_dry_run-false}; then :; else mgl@1371: + eval "$my_cmd" mgl@1371: + my_status=$? mgl@1371: + if test "$my_status" -eq 0; then :; else mgl@1371: + eval "(exit $my_status); $my_fail_exp" mgl@1371: + fi mgl@1371: + fi mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: + mgl@1371: + mgl@1371: + mgl@1371: +# func_version mgl@1371: +# Echo version message to standard output and exit. mgl@1371: +func_version () mgl@1371: +{ mgl@1371: + $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { mgl@1371: + s/^# // mgl@1371: + s/^# *$// mgl@1371: + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ mgl@1371: + p mgl@1371: + }' < "$progpath" mgl@1371: + exit $? mgl@1371: +} mgl@1371: + mgl@1371: +# func_usage mgl@1371: +# Echo short help message to standard output and exit. mgl@1371: +func_usage () mgl@1371: +{ mgl@1371: + $SED -n '/^# Usage:/,/# -h/ { mgl@1371: + s/^# // mgl@1371: + s/^# *$// mgl@1371: + s/\$progname/'$progname'/ mgl@1371: + p mgl@1371: + }' < "$progpath" mgl@1371: + $ECHO mgl@1371: + $ECHO "run \`$progname --help | more' for full usage" mgl@1371: + exit $? mgl@1371: +} mgl@1371: + mgl@1371: +# func_help mgl@1371: +# Echo long help message to standard output and exit. mgl@1371: +func_help () mgl@1371: +{ mgl@1371: + $SED -n '/^# Usage:/,/# Report bugs to/ { mgl@1371: + s/^# // mgl@1371: + s/^# *$// mgl@1371: + s*\$progname*'$progname'* mgl@1371: + s*\$host*'"$host"'* mgl@1371: + s*\$SHELL*'"$SHELL"'* mgl@1371: + s*\$LTCC*'"$LTCC"'* mgl@1371: + s*\$LTCFLAGS*'"$LTCFLAGS"'* mgl@1371: + s*\$LD*'"$LD"'* mgl@1371: + s/\$with_gnu_ld/'"$with_gnu_ld"'/ mgl@1371: + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ mgl@1371: + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ mgl@1371: + p mgl@1371: + }' < "$progpath" mgl@1371: + exit $? mgl@1371: +} mgl@1371: + mgl@1371: +# func_missing_arg argname mgl@1371: +# Echo program name prefixed message to standard error and set global mgl@1371: +# exit_cmd. mgl@1371: +func_missing_arg () mgl@1371: +{ mgl@1371: + func_error "missing argument for $1" mgl@1371: + exit_cmd=exit mgl@1371: +} mgl@1371: + mgl@1371: +exit_cmd=: mgl@1371: + mgl@1371: + mgl@1371: + mgl@1371: + mgl@1371: + mgl@1371: +# Check that we have a working $ECHO. mgl@1371: +if test "X$1" = X--no-reexec; then mgl@1371: + # Discard the --no-reexec flag, and continue. mgl@1371: + shift mgl@1371: +elif test "X$1" = X--fallback-echo; then mgl@1371: + # Avoid inline document here, it may be left over mgl@1371: + : mgl@1371: +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then mgl@1371: + # Yippee, $ECHO works! mgl@1371: + : mgl@1371: +else mgl@1371: + # Restart under the correct shell, and then maybe $ECHO will work. mgl@1371: + exec $SHELL "$progpath" --no-reexec ${1+"$@"} mgl@1371: +fi mgl@1371: + mgl@1371: +if test "X$1" = X--fallback-echo; then mgl@1371: + # used as fallback echo mgl@1371: + shift mgl@1371: + cat </dev/null 2>&1; then mgl@1371: + taglist="$taglist $tagname" mgl@1371: + mgl@1371: + # Evaluate the configuration. Be careful to quote the path mgl@1371: + # and the sed script, to avoid splitting on whitespace, but mgl@1371: + # also don't use non-portable quotes within backquotes within mgl@1371: + # quotes we have to do it in 2 steps: mgl@1371: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` mgl@1371: + eval "$extractedcf" mgl@1371: + else mgl@1371: + func_error "ignoring unknown tag $tagname" mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +func_mode_help () mgl@1371: +{ mgl@1371: + # We need to display help for each of the modes. mgl@1371: + case $mode in mgl@1371: + "") mgl@1371: + # Generic help is extracted from the usage comments mgl@1371: + # at the start of this file. mgl@1371: + func_help mgl@1371: + ;; mgl@1371: + mgl@1371: + clean) mgl@1371: + $ECHO \ mgl@1371: +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... mgl@1371: + mgl@1371: +Remove files from the build directory. mgl@1371: + mgl@1371: +RM is the name of the program to use to delete files associated with each FILE mgl@1371: +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed mgl@1371: +to RM. mgl@1371: + mgl@1371: +If FILE is a libtool library, object or program, all the files associated mgl@1371: +with it are deleted. Otherwise, only FILE itself is deleted using RM." mgl@1371: + ;; mgl@1371: + mgl@1371: + compile) mgl@1371: + $ECHO \ mgl@1371: +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE mgl@1371: + mgl@1371: +Compile a source file into a libtool library object. mgl@1371: + mgl@1371: +This mode accepts the following additional options: mgl@1371: + mgl@1371: + -o OUTPUT-FILE set the output file name to OUTPUT-FILE mgl@1371: + -no-suppress do not suppress compiler output for multiple passes mgl@1371: + -prefer-pic try to building PIC objects only mgl@1371: + -prefer-non-pic try to building non-PIC objects only mgl@1371: + -shared do not build a \`.o' file suitable for static linking mgl@1371: + -static only build a \`.o' file suitable for static linking mgl@1371: + mgl@1371: +COMPILE-COMMAND is a command to be used in creating a \`standard' object file mgl@1371: +from the given SOURCEFILE. mgl@1371: + mgl@1371: +The output file name is determined by removing the directory component from mgl@1371: +SOURCEFILE, then substituting the C source code suffix \`.c' with the mgl@1371: +library object suffix, \`.lo'." mgl@1371: + ;; mgl@1371: + mgl@1371: + execute) mgl@1371: + $ECHO \ mgl@1371: +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... mgl@1371: + mgl@1371: +Automatically set library path, then run a program. mgl@1371: + mgl@1371: +This mode accepts the following additional options: mgl@1371: + mgl@1371: + -dlopen FILE add the directory containing FILE to the library path mgl@1371: + mgl@1371: +This mode sets the library path environment variable according to \`-dlopen' mgl@1371: +flags. mgl@1371: + mgl@1371: +If any of the ARGS are libtool executable wrappers, then they are translated mgl@1371: +into their corresponding uninstalled binary, and any of their required library mgl@1371: +directories are added to the library path. mgl@1371: + mgl@1371: +Then, COMMAND is executed, with ARGS as arguments." mgl@1371: + ;; mgl@1371: + mgl@1371: + finish) mgl@1371: + $ECHO \ mgl@1371: +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... mgl@1371: + mgl@1371: +Complete the installation of libtool libraries. mgl@1371: + mgl@1371: +Each LIBDIR is a directory that contains libtool libraries. mgl@1371: + mgl@1371: +The commands that this mode executes may require superuser privileges. Use mgl@1371: +the \`--dry-run' option if you just want to see what would be executed." mgl@1371: + ;; mgl@1371: + mgl@1371: + install) mgl@1371: + $ECHO \ mgl@1371: +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... mgl@1371: + mgl@1371: +Install executables or libraries. mgl@1371: + mgl@1371: +INSTALL-COMMAND is the installation command. The first component should be mgl@1371: +either the \`install' or \`cp' program. mgl@1371: + mgl@1371: +The following components of INSTALL-COMMAND are treated specially: mgl@1371: + mgl@1371: + -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation mgl@1371: + mgl@1371: +The rest of the components are interpreted as arguments to that command (only mgl@1371: +BSD-compatible install options are recognized)." mgl@1371: + ;; mgl@1371: + mgl@1371: + link) mgl@1371: + $ECHO \ mgl@1371: +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... mgl@1371: + mgl@1371: +Link object files or libraries together to form another library, or to mgl@1371: +create an executable program. mgl@1371: + mgl@1371: +LINK-COMMAND is a command using the C compiler that you would use to create mgl@1371: +a program from several object files. mgl@1371: + mgl@1371: +The following components of LINK-COMMAND are treated specially: mgl@1371: + mgl@1371: + -all-static do not do any dynamic linking at all mgl@1371: + -avoid-version do not add a version suffix if possible mgl@1371: + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime mgl@1371: + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols mgl@1371: + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) mgl@1371: + -export-symbols SYMFILE mgl@1371: + try to export only the symbols listed in SYMFILE mgl@1371: + -export-symbols-regex REGEX mgl@1371: + try to export only the symbols matching REGEX mgl@1371: + -LLIBDIR search LIBDIR for required installed libraries mgl@1371: + -lNAME OUTPUT-FILE requires the installed library libNAME mgl@1371: + -module build a library that can dlopened mgl@1371: + -no-fast-install disable the fast-install mode mgl@1371: + -no-install link a not-installable executable mgl@1371: + -no-undefined declare that a library does not refer to external symbols mgl@1371: + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects mgl@1371: + -objectlist FILE Use a list of object files found in FILE to specify objects mgl@1371: + -precious-files-regex REGEX mgl@1371: + don't remove output files matching REGEX mgl@1371: + -release RELEASE specify package release information mgl@1371: + -rpath LIBDIR the created library will eventually be installed in LIBDIR mgl@1371: + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries mgl@1371: + -shared only do dynamic linking of libtool libraries mgl@1371: + -shrext SUFFIX override the standard shared library file extension mgl@1371: + -static do not do any dynamic linking of uninstalled libtool libraries mgl@1371: + -static-libtool-libs mgl@1371: + do not do any dynamic linking of libtool libraries mgl@1371: + -version-info CURRENT[:REVISION[:AGE]] mgl@1371: + specify library version info [each variable defaults to 0] mgl@1371: + -weak LIBNAME declare that the target provides the LIBNAME interface mgl@1371: + mgl@1371: +All other options (arguments beginning with \`-') are ignored. mgl@1371: + mgl@1371: +Every other argument is treated as a filename. Files ending in \`.la' are mgl@1371: +treated as uninstalled libtool libraries, other files are standard or library mgl@1371: +object files. mgl@1371: + mgl@1371: +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, mgl@1371: +only library objects (\`.lo' files) may be specified, and \`-rpath' is mgl@1371: +required, except when creating a convenience library. mgl@1371: + mgl@1371: +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created mgl@1371: +using \`ar' and \`ranlib', or on Windows using \`lib'. mgl@1371: + mgl@1371: +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file mgl@1371: +is created, otherwise an executable program is created." mgl@1371: + ;; mgl@1371: + mgl@1371: + uninstall) mgl@1371: + $ECHO \ mgl@1371: +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... mgl@1371: + mgl@1371: +Remove libraries from an installation directory. mgl@1371: + mgl@1371: +RM is the name of the program to use to delete files associated with each FILE mgl@1371: +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed mgl@1371: +to RM. mgl@1371: + mgl@1371: +If FILE is a libtool library, all the files associated with it are deleted. mgl@1371: +Otherwise, only FILE itself is deleted using RM." mgl@1371: + ;; mgl@1371: + mgl@1371: + *) mgl@1371: + func_fatal_help "invalid operation mode \`$mode'" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + $ECHO mgl@1371: + $ECHO "Try \`$progname --help' for more information about other modes." mgl@1371: + mgl@1371: + exit $? mgl@1371: +} mgl@1371: + mgl@1371: +# Generated shell functions inserted here. mgl@1371: + mgl@1371: +# func_dirname file append nondir_replacement mgl@1371: +# Compute the dirname of FILE. If nonempty, add APPEND to the result, mgl@1371: +# otherwise set result to NONDIR_REPLACEMENT. mgl@1371: +func_dirname () mgl@1371: +{ mgl@1371: + case ${1} in mgl@1371: + */*) func_dirname_result="${1%/*}${2}" ;; mgl@1371: + * ) func_dirname_result="${3}" ;; mgl@1371: + esac mgl@1371: +} mgl@1371: + mgl@1371: +# func_basename file mgl@1371: +func_basename () mgl@1371: +{ mgl@1371: + func_basename_result="${1##*/}" mgl@1371: +} mgl@1371: + mgl@1371: +# func_dirname_and_basename file append nondir_replacement mgl@1371: +# perform func_basename and func_dirname in a single function mgl@1371: +# call: mgl@1371: +# dirname: Compute the dirname of FILE. If nonempty, mgl@1371: +# add APPEND to the result, otherwise set result mgl@1371: +# to NONDIR_REPLACEMENT. mgl@1371: +# value returned in "$func_dirname_result" mgl@1371: +# basename: Compute filename of FILE. mgl@1371: +# value retuned in "$func_basename_result" mgl@1371: +# Implementation must be kept synchronized with func_dirname mgl@1371: +# and func_basename. For efficiency, we do not delegate to mgl@1371: +# those functions but instead duplicate the functionality here. mgl@1371: +func_dirname_and_basename () mgl@1371: +{ mgl@1371: + case ${1} in mgl@1371: + */*) func_dirname_result="${1%/*}${2}" ;; mgl@1371: + * ) func_dirname_result="${3}" ;; mgl@1371: + esac mgl@1371: + func_basename_result="${1##*/}" mgl@1371: +} mgl@1371: + mgl@1371: +# func_stripname prefix suffix name mgl@1371: +# strip PREFIX and SUFFIX off of NAME. mgl@1371: +# PREFIX and SUFFIX must not contain globbing or regex special mgl@1371: +# characters, hashes, percent signs, but SUFFIX may contain a leading mgl@1371: +# dot (in which case that matches only a dot). mgl@1371: +func_stripname () mgl@1371: +{ mgl@1371: + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are mgl@1371: + # positional parameters, so assign one to ordinary parameter first. mgl@1371: + func_stripname_result=${3} mgl@1371: + func_stripname_result=${func_stripname_result#"${1}"} mgl@1371: + func_stripname_result=${func_stripname_result%"${2}"} mgl@1371: +} mgl@1371: + mgl@1371: +# func_opt_split mgl@1371: +func_opt_split () mgl@1371: +{ mgl@1371: + func_opt_split_opt=${1%%=*} mgl@1371: + func_opt_split_arg=${1#*=} mgl@1371: +} mgl@1371: + mgl@1371: +# func_lo2o object mgl@1371: +func_lo2o () mgl@1371: +{ mgl@1371: + case ${1} in mgl@1371: + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; mgl@1371: + *) func_lo2o_result=${1} ;; mgl@1371: + esac mgl@1371: +} mgl@1371: + mgl@1371: +# func_xform libobj-or-source mgl@1371: +func_xform () mgl@1371: +{ mgl@1371: + func_xform_result=${1%.*}.lo mgl@1371: +} mgl@1371: + mgl@1371: +# func_arith arithmetic-term... mgl@1371: +func_arith () mgl@1371: +{ mgl@1371: + func_arith_result=$(( $* )) mgl@1371: +} mgl@1371: + mgl@1371: +# func_len string mgl@1371: +# STRING may not start with a hyphen. mgl@1371: +func_len () mgl@1371: +{ mgl@1371: + func_len_result=${#1} mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +# func_append var value mgl@1371: +# Append VALUE to the end of shell variable VAR. mgl@1371: +func_append () mgl@1371: +{ mgl@1371: + eval "$1+=\$2" mgl@1371: +} mgl@1371: +# Generated shell functions inserted here. mgl@1371: + mgl@1371: + mgl@1371: +# Parse options once, thoroughly. This comes as soon as possible in mgl@1371: +# the script to make things like `libtool --version' happen quickly. mgl@1371: +{ mgl@1371: + mgl@1371: + # Shorthand for --mode=foo, only valid as the first argument mgl@1371: + case $1 in mgl@1371: + clean|clea|cle|cl) mgl@1371: + shift; set dummy --mode clean ${1+"$@"}; shift mgl@1371: + ;; mgl@1371: + compile|compil|compi|comp|com|co|c) mgl@1371: + shift; set dummy --mode compile ${1+"$@"}; shift mgl@1371: + ;; mgl@1371: + execute|execut|execu|exec|exe|ex|e) mgl@1371: + shift; set dummy --mode execute ${1+"$@"}; shift mgl@1371: + ;; mgl@1371: + finish|finis|fini|fin|fi|f) mgl@1371: + shift; set dummy --mode finish ${1+"$@"}; shift mgl@1371: + ;; mgl@1371: + install|instal|insta|inst|ins|in|i) mgl@1371: + shift; set dummy --mode install ${1+"$@"}; shift mgl@1371: + ;; mgl@1371: + link|lin|li|l) mgl@1371: + shift; set dummy --mode link ${1+"$@"}; shift mgl@1371: + ;; mgl@1371: + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) mgl@1371: + shift; set dummy --mode uninstall ${1+"$@"}; shift mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + # Parse non-mode specific arguments: mgl@1371: + while test "$#" -gt 0; do mgl@1371: + opt="$1" mgl@1371: + shift mgl@1371: + mgl@1371: + case $opt in mgl@1371: + --config) func_config ;; mgl@1371: + mgl@1371: + --debug) preserve_args="$preserve_args $opt" mgl@1371: + func_echo "enabling shell trace mode" mgl@1371: + opt_debug='set -x' mgl@1371: + $opt_debug mgl@1371: + ;; mgl@1371: + mgl@1371: + -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break mgl@1371: + execute_dlfiles="$execute_dlfiles $1" mgl@1371: + shift mgl@1371: + ;; mgl@1371: + mgl@1371: + --dry-run | -n) opt_dry_run=: ;; mgl@1371: + --features) func_features ;; mgl@1371: + --finish) mode="finish" ;; mgl@1371: + mgl@1371: + --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break mgl@1371: + case $1 in mgl@1371: + # Valid mode arguments: mgl@1371: + clean) ;; mgl@1371: + compile) ;; mgl@1371: + execute) ;; mgl@1371: + finish) ;; mgl@1371: + install) ;; mgl@1371: + link) ;; mgl@1371: + relink) ;; mgl@1371: + uninstall) ;; mgl@1371: + mgl@1371: + # Catch anything else as an error mgl@1371: + *) func_error "invalid argument for $opt" mgl@1371: + exit_cmd=exit mgl@1371: + break mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + mode="$1" mgl@1371: + shift mgl@1371: + ;; mgl@1371: + mgl@1371: + --preserve-dup-deps) mgl@1371: + opt_duplicate_deps=: ;; mgl@1371: + mgl@1371: + --quiet|--silent) preserve_args="$preserve_args $opt" mgl@1371: + opt_silent=: mgl@1371: + ;; mgl@1371: + mgl@1371: + --verbose| -v) preserve_args="$preserve_args $opt" mgl@1371: + opt_silent=false mgl@1371: + ;; mgl@1371: + mgl@1371: + --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break mgl@1371: + preserve_args="$preserve_args $opt $1" mgl@1371: + func_enable_tag "$1" # tagname is set here mgl@1371: + shift mgl@1371: + ;; mgl@1371: + mgl@1371: + # Separate optargs to long options: mgl@1371: + -dlopen=*|--mode=*|--tag=*) mgl@1371: + func_opt_split "$opt" mgl@1371: + set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} mgl@1371: + shift mgl@1371: + ;; mgl@1371: + mgl@1371: + -\?|-h) func_usage ;; mgl@1371: + --help) opt_help=: ;; mgl@1371: + --version) func_version ;; mgl@1371: + mgl@1371: + -*) func_fatal_help "unrecognized option \`$opt'" ;; mgl@1371: + mgl@1371: + *) nonopt="$opt" mgl@1371: + break mgl@1371: + ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + mgl@1371: + # Now that we've collected a possible --mode arg, show help if necessary mgl@1371: + $opt_help && func_mode_help mgl@1371: + mgl@1371: + case $host in mgl@1371: + *cygwin* | *mingw* | *pw32*) mgl@1371: + # don't eliminate duplications in $postdeps and $predeps mgl@1371: + opt_duplicate_compiler_generated_deps=: mgl@1371: + ;; mgl@1371: + *) mgl@1371: + opt_duplicate_compiler_generated_deps=$opt_duplicate_deps mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + # Having warned about all mis-specified options, bail out if mgl@1371: + # anything was wrong. mgl@1371: + $exit_cmd $EXIT_FAILURE mgl@1371: +} mgl@1371: + mgl@1371: +# func_check_version_match mgl@1371: +# Ensure that we are using m4 macros, and libtool script from the same mgl@1371: +# release of libtool. mgl@1371: +func_check_version_match () mgl@1371: +{ mgl@1371: + if test "$package_revision" != "$macro_revision"; then mgl@1371: + if test "$VERSION" != "$macro_version"; then mgl@1371: + if test -z "$macro_version"; then mgl@1371: + cat >&2 <<_LT_EOF mgl@1371: +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the mgl@1371: +$progname: definition of this LT_INIT comes from an older release. mgl@1371: +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION mgl@1371: +$progname: and run autoconf again. mgl@1371: +_LT_EOF mgl@1371: + else mgl@1371: + cat >&2 <<_LT_EOF mgl@1371: +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the mgl@1371: +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. mgl@1371: +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION mgl@1371: +$progname: and run autoconf again. mgl@1371: +_LT_EOF mgl@1371: + fi mgl@1371: + else mgl@1371: + cat >&2 <<_LT_EOF mgl@1371: +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, mgl@1371: +$progname: but the definition of this LT_INIT comes from revision $macro_revision. mgl@1371: +$progname: You should recreate aclocal.m4 with macros from revision $package_revision mgl@1371: +$progname: of $PACKAGE $VERSION and run autoconf again. mgl@1371: +_LT_EOF mgl@1371: + fi mgl@1371: + mgl@1371: + exit $EXIT_MISMATCH mgl@1371: + fi mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +## ----------- ## mgl@1371: +## Main. ## mgl@1371: +## ----------- ## mgl@1371: + mgl@1371: +{ mgl@1371: + # Sanity checks first: mgl@1371: + func_check_version_match mgl@1371: + mgl@1371: + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then mgl@1371: + func_fatal_configuration "not configured to build any kind of library" mgl@1371: + fi mgl@1371: + mgl@1371: + test -z "$mode" && func_fatal_error "error: you must specify a MODE." mgl@1371: + mgl@1371: + mgl@1371: + # Darwin sucks mgl@1371: + eval std_shrext=\"$shrext_cmds\" mgl@1371: + mgl@1371: + mgl@1371: + # Only execute mode is allowed to have -dlopen flags. mgl@1371: + if test -n "$execute_dlfiles" && test "$mode" != execute; then mgl@1371: + func_error "unrecognized option \`-dlopen'" mgl@1371: + $ECHO "$help" 1>&2 mgl@1371: + exit $EXIT_FAILURE mgl@1371: + fi mgl@1371: + mgl@1371: + # Change the help message to a mode-specific one. mgl@1371: + generic_help="$help" mgl@1371: + help="Try \`$progname --help --mode=$mode' for more information." mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +# func_lalib_p file mgl@1371: +# True iff FILE is a libtool `.la' library or `.lo' object file. mgl@1371: +# This function is only a basic sanity check; it will hardly flush out mgl@1371: +# determined imposters. mgl@1371: +func_lalib_p () mgl@1371: +{ mgl@1371: + $SED -e 4q "$1" 2>/dev/null \ mgl@1371: + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 mgl@1371: +} mgl@1371: + mgl@1371: +# func_lalib_unsafe_p file mgl@1371: +# True iff FILE is a libtool `.la' library or `.lo' object file. mgl@1371: +# This function implements the same check as func_lalib_p without mgl@1371: +# resorting to external programs. To this end, it redirects stdin and mgl@1371: +# closes it afterwards, without saving the original file descriptor. mgl@1371: +# As a safety measure, use it only where a negative result would be mgl@1371: +# fatal anyway. Works if `file' does not exist. mgl@1371: +func_lalib_unsafe_p () mgl@1371: +{ mgl@1371: + lalib_p=no mgl@1371: + if test -r "$1" && exec 5<&1 <"$1"; then mgl@1371: + for lalib_p_l in 1 2 3 4 mgl@1371: + do mgl@1371: + read lalib_p_line mgl@1371: + case "$lalib_p_line" in mgl@1371: + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; mgl@1371: + esac mgl@1371: + done mgl@1371: + exec 1<&5 5<&- mgl@1371: + fi mgl@1371: + test "$lalib_p" = yes mgl@1371: +} mgl@1371: + mgl@1371: +# func_ltwrapper_p file mgl@1371: +# True iff FILE is a libtool wrapper script. mgl@1371: +# This function is only a basic sanity check; it will hardly flush out mgl@1371: +# determined imposters. mgl@1371: +func_ltwrapper_p () mgl@1371: +{ mgl@1371: + func_lalib_p "$1" mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +# func_execute_cmds commands fail_cmd mgl@1371: +# Execute tilde-delimited COMMANDS. mgl@1371: +# If FAIL_CMD is given, eval that upon failure. mgl@1371: +# FAIL_CMD may read-access the current command in variable CMD! mgl@1371: +func_execute_cmds () mgl@1371: +{ mgl@1371: + $opt_debug mgl@1371: + save_ifs=$IFS; IFS='~' mgl@1371: + for cmd in $1; do mgl@1371: + IFS=$save_ifs mgl@1371: + eval cmd=\"$cmd\" mgl@1371: + func_show_eval "$cmd" "${2-:}" mgl@1371: + done mgl@1371: + IFS=$save_ifs mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +# func_source file mgl@1371: +# Source FILE, adding directory component if necessary. mgl@1371: +# Note that it is not necessary on cygwin/mingw to append a dot to mgl@1371: +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe mgl@1371: +# behavior happens only for exec(3), not for open(2)! Also, sourcing mgl@1371: +# `FILE.' does not work on cygwin managed mounts. mgl@1371: +func_source () mgl@1371: +{ mgl@1371: + $opt_debug mgl@1371: + case $1 in mgl@1371: + */* | *\\*) . "$1" ;; mgl@1371: + *) . "./$1" ;; mgl@1371: + esac mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +# func_win32_libid arg mgl@1371: +# return the library type of file 'arg' mgl@1371: +# mgl@1371: +# Need a lot of goo to handle *both* DLLs and import libs mgl@1371: +# Has to be a shell function in order to 'eat' the argument mgl@1371: +# that is supplied when $file_magic_command is called. mgl@1371: +func_win32_libid () mgl@1371: +{ mgl@1371: + $opt_debug mgl@1371: + win32_libid_type="unknown" mgl@1371: + win32_fileres=`file -L $1 2>/dev/null` mgl@1371: + case $win32_fileres in mgl@1371: + *ar\ archive\ import\ library*) # definitely import mgl@1371: + win32_libid_type="x86 archive import" mgl@1371: + ;; mgl@1371: + *ar\ archive*) # could be an import, or static mgl@1371: + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | mgl@1371: + $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then mgl@1371: + win32_nmres=`eval $NM -f posix -A $1 | mgl@1371: + $SED -n -e ' mgl@1371: + 1,100{ mgl@1371: + / I /{ mgl@1371: + s,.*,import, mgl@1371: + p mgl@1371: + q mgl@1371: + } mgl@1371: + }'` mgl@1371: + case $win32_nmres in mgl@1371: + import*) win32_libid_type="x86 archive import";; mgl@1371: + *) win32_libid_type="x86 archive static";; mgl@1371: + esac mgl@1371: + fi mgl@1371: + ;; mgl@1371: + *DLL*) mgl@1371: + win32_libid_type="x86 DLL" mgl@1371: + ;; mgl@1371: + *executable*) # but shell scripts are "executable" too... mgl@1371: + case $win32_fileres in mgl@1371: + *MS\ Windows\ PE\ Intel*) mgl@1371: + win32_libid_type="x86 DLL" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + esac mgl@1371: + $ECHO "$win32_libid_type" mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: + mgl@1371: +# func_infer_tag arg mgl@1371: +# Infer tagged configuration to use if any are available and mgl@1371: +# if one wasn't chosen via the "--tag" command line option. mgl@1371: +# Only attempt this if the compiler in the base compile mgl@1371: +# command doesn't match the default compiler. mgl@1371: +# arg is usually of the form 'gcc ...' mgl@1371: +func_infer_tag () mgl@1371: +{ mgl@1371: + $opt_debug mgl@1371: + if test -n "$available_tags" && test -z "$tagname"; then mgl@1371: + CC_quoted= mgl@1371: + for arg in $CC; do mgl@1371: + func_quote_for_eval "$arg" mgl@1371: + CC_quoted="$CC_quoted $func_quote_for_eval_result" mgl@1371: + done mgl@1371: + case $@ in mgl@1371: + # Blanks in the command may have been stripped by the calling shell, mgl@1371: + # but not from the CC environment variable when configure was run. mgl@1371: + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; mgl@1371: + # Blanks at the start of $base_compile will cause this to fail mgl@1371: + # if we don't check for them as well. mgl@1371: + *) mgl@1371: + for z in $available_tags; do mgl@1371: + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then mgl@1371: + # Evaluate the configuration. mgl@1371: + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" mgl@1371: + CC_quoted= mgl@1371: + for arg in $CC; do mgl@1371: + # Double-quote args containing other shell metacharacters. mgl@1371: + func_quote_for_eval "$arg" mgl@1371: + CC_quoted="$CC_quoted $func_quote_for_eval_result" mgl@1371: + done mgl@1371: + case "$@ " in mgl@1371: + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) mgl@1371: + # The compiler in the base compile command matches mgl@1371: + # the one in the tagged configuration. mgl@1371: + # Assume this is the tagged configuration we want. mgl@1371: + tagname=$z mgl@1371: + break mgl@1371: + ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + done mgl@1371: + # If $tagname still isn't set, then no tagged configuration mgl@1371: + # was found and let the user know that the "--tag" command mgl@1371: + # line option must be used. mgl@1371: + if test -z "$tagname"; then mgl@1371: + func_echo "unable to infer tagged configuration" mgl@1371: + func_fatal_error "specify a tag with \`--tag'" mgl@1371: +# else mgl@1371: +# func_verbose "using $tagname tagged configuration" mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: + mgl@1371: +# func_generate_dlsyms outputname originator pic_p mgl@1371: +# Extract symbols from dlprefiles and create ${outputname}S.o with mgl@1371: +# a dlpreopen symbol table. mgl@1371: +func_generate_dlsyms () mgl@1371: +{ mgl@1371: + $opt_debug mgl@1371: + my_outputname="$1" mgl@1371: + my_originator="$2" mgl@1371: + my_pic_p="${3-no}" mgl@1371: + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` mgl@1371: + my_dlsyms= mgl@1371: + mgl@1371: + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then mgl@1371: + if test -n "$NM" && test -n "$global_symbol_pipe"; then mgl@1371: + my_dlsyms="${my_outputname}S.c" mgl@1371: + else mgl@1371: + func_error "not configured to extract global symbols from dlpreopened files" mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + if test -n "$my_dlsyms"; then mgl@1371: + case $my_dlsyms in mgl@1371: + "") ;; mgl@1371: + *.c) mgl@1371: + # Discover the nlist of each of the dlfiles. mgl@1371: + nlist="$output_objdir/${my_outputname}.nm" mgl@1371: + mgl@1371: + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" mgl@1371: + mgl@1371: + # Parse the name list into a source file. mgl@1371: + func_echo "creating $output_objdir/$my_dlsyms" mgl@1371: + mgl@1371: + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ mgl@1371: +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ mgl@1371: +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ mgl@1371: + mgl@1371: +#ifdef __cplusplus mgl@1371: +extern \"C\" { mgl@1371: +#endif mgl@1371: + mgl@1371: +/* External symbol declarations for the compiler. */\ mgl@1371: +" mgl@1371: + mgl@1371: + if test "$dlself" = yes; then mgl@1371: + func_echo "generating symbol list for \`$output'" mgl@1371: + mgl@1371: + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" mgl@1371: + mgl@1371: + # Add our own program objects to the symbol list. mgl@1371: + progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` mgl@1371: + for progfile in $progfiles; do mgl@1371: + func_echo "extracting global C symbols from \`$progfile'" mgl@1371: + $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" mgl@1371: + done mgl@1371: + mgl@1371: + if test -n "$exclude_expsyms"; then mgl@1371: + $opt_dry_run || { mgl@1371: + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' mgl@1371: + eval '$MV "$nlist"T "$nlist"' mgl@1371: + } mgl@1371: + fi mgl@1371: + mgl@1371: + if test -n "$export_symbols_regex"; then mgl@1371: + $opt_dry_run || { mgl@1371: + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' mgl@1371: + eval '$MV "$nlist"T "$nlist"' mgl@1371: + } mgl@1371: + fi mgl@1371: + mgl@1371: + # Prepare the list of exported symbols mgl@1371: + if test -z "$export_symbols"; then mgl@1371: + export_symbols="$output_objdir/$outputname.exp" mgl@1371: + $opt_dry_run || { mgl@1371: + $RM $export_symbols mgl@1371: + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' mgl@1371: + case $host in mgl@1371: + *cygwin* | *mingw* ) mgl@1371: + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' mgl@1371: + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' mgl@1371: + ;; mgl@1371: + esac mgl@1371: + } mgl@1371: + else mgl@1371: + $opt_dry_run || { mgl@1371: + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' mgl@1371: + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' mgl@1371: + eval '$MV "$nlist"T "$nlist"' mgl@1371: + case $host in mgl@1371: + *cygwin | *mingw* ) mgl@1371: + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' mgl@1371: + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' mgl@1371: + ;; mgl@1371: + esac mgl@1371: + } mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + for dlprefile in $dlprefiles; do mgl@1371: + func_echo "extracting global C symbols from \`$dlprefile'" mgl@1371: + func_basename "$dlprefile" mgl@1371: + name="$func_basename_result" mgl@1371: + $opt_dry_run || { mgl@1371: + eval '$ECHO ": $name " >> "$nlist"' mgl@1371: + eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" mgl@1371: + } mgl@1371: + done mgl@1371: + mgl@1371: + $opt_dry_run || { mgl@1371: + # Make sure we have at least an empty file. mgl@1371: + test -f "$nlist" || : > "$nlist" mgl@1371: + mgl@1371: + if test -n "$exclude_expsyms"; then mgl@1371: + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T mgl@1371: + $MV "$nlist"T "$nlist" mgl@1371: + fi mgl@1371: + mgl@1371: + # Try sorting and uniquifying the output. mgl@1371: + if $GREP -v "^: " < "$nlist" | mgl@1371: + if sort -k 3 /dev/null 2>&1; then mgl@1371: + sort -k 3 mgl@1371: + else mgl@1371: + sort +2 mgl@1371: + fi | mgl@1371: + uniq > "$nlist"S; then mgl@1371: + : mgl@1371: + else mgl@1371: + $GREP -v "^: " < "$nlist" > "$nlist"S mgl@1371: + fi mgl@1371: + mgl@1371: + if test -f "$nlist"S; then mgl@1371: + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' mgl@1371: + else mgl@1371: + $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" mgl@1371: + fi mgl@1371: + mgl@1371: + $ECHO >> "$output_objdir/$my_dlsyms" "\ mgl@1371: + mgl@1371: +/* The mapping between symbol names and symbols. */ mgl@1371: +typedef struct { mgl@1371: + const char *name; mgl@1371: + void *address; mgl@1371: +} lt_dlsymlist; mgl@1371: +" mgl@1371: + case $host in mgl@1371: + *cygwin* | *mingw* ) mgl@1371: + $ECHO >> "$output_objdir/$my_dlsyms" "\ mgl@1371: +/* DATA imports from DLLs on WIN32 con't be const, because mgl@1371: + runtime relocations are performed -- see ld's documentation mgl@1371: + on pseudo-relocs. */" mgl@1371: + lt_dlsym_const= ;; mgl@1371: + *osf5*) mgl@1371: + echo >> "$output_objdir/$my_dlsyms" "\ mgl@1371: +/* This system does not cope well with relocations in const data */" mgl@1371: + lt_dlsym_const= ;; mgl@1371: + *) mgl@1371: + lt_dlsym_const=const ;; mgl@1371: + esac mgl@1371: + mgl@1371: + $ECHO >> "$output_objdir/$my_dlsyms" "\ mgl@1371: +extern $lt_dlsym_const lt_dlsymlist mgl@1371: +lt_${my_prefix}_LTX_preloaded_symbols[]; mgl@1371: +$lt_dlsym_const lt_dlsymlist mgl@1371: +lt_${my_prefix}_LTX_preloaded_symbols[] = mgl@1371: +{\ mgl@1371: + { \"$my_originator\", (void *) 0 }," mgl@1371: + mgl@1371: + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" mgl@1371: + mgl@1371: + $ECHO >> "$output_objdir/$my_dlsyms" "\ mgl@1371: + {0, (void *) 0} mgl@1371: +}; mgl@1371: + mgl@1371: +/* This works around a problem in FreeBSD linker */ mgl@1371: +#ifdef FREEBSD_WORKAROUND mgl@1371: +static const void *lt_preloaded_setup() { mgl@1371: + return lt_${my_prefix}_LTX_preloaded_symbols; mgl@1371: +} mgl@1371: +#endif mgl@1371: + mgl@1371: +#ifdef __cplusplus mgl@1371: +} mgl@1371: +#endif\ mgl@1371: +" mgl@1371: + } # !$opt_dry_run mgl@1371: + mgl@1371: + pic_flag_for_symtable= mgl@1371: + case "$compile_command " in mgl@1371: + *" -static "*) ;; mgl@1371: + *) mgl@1371: + case $host in mgl@1371: + # compiling the symbol table file with pic_flag works around mgl@1371: + # a FreeBSD bug that causes programs to crash when -lm is mgl@1371: + # linked before any other PIC object. But we must not use mgl@1371: + # pic_flag when linking with -static. The problem exists in mgl@1371: + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. mgl@1371: + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) mgl@1371: + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; mgl@1371: + *-*-hpux*) mgl@1371: + pic_flag_for_symtable=" $pic_flag" ;; mgl@1371: + *) mgl@1371: + if test "X$my_pic_p" != Xno; then mgl@1371: + pic_flag_for_symtable=" $pic_flag" mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + esac mgl@1371: + symtab_cflags= mgl@1371: + for arg in $LTCFLAGS; do mgl@1371: + case $arg in mgl@1371: + -pie | -fpie | -fPIE) ;; mgl@1371: + *) symtab_cflags="$symtab_cflags $arg" ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + mgl@1371: + # Now compile the dynamic symbol file. mgl@1371: + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' mgl@1371: + mgl@1371: + # Clean up the generated files. mgl@1371: + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' mgl@1371: + mgl@1371: + # Transform the symbol file into the correct name. mgl@1371: + symfileobj="$output_objdir/${my_outputname}S.$objext" mgl@1371: + case $host in mgl@1371: + *cygwin* | *mingw* ) mgl@1371: + if test -f "$output_objdir/$my_outputname.def"; then mgl@1371: + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` mgl@1371: + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` mgl@1371: + else mgl@1371: + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` mgl@1371: + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` mgl@1371: + fi mgl@1371: + ;; mgl@1371: + *) mgl@1371: + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` mgl@1371: + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` mgl@1371: + ;; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + *) mgl@1371: + func_fatal_error "unknown suffix for \`$my_dlsyms'" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + else mgl@1371: + # We keep going just in case the user didn't refer to mgl@1371: + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe mgl@1371: + # really was required. mgl@1371: + mgl@1371: + # Nullify the symbol file. mgl@1371: + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` mgl@1371: + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` mgl@1371: + fi mgl@1371: +} mgl@1371: + mgl@1371: +# func_extract_an_archive dir oldlib mgl@1371: +func_extract_an_archive () mgl@1371: +{ mgl@1371: + $opt_debug mgl@1371: + f_ex_an_ar_dir="$1"; shift mgl@1371: + f_ex_an_ar_oldlib="$1" mgl@1371: + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" 'exit $?' mgl@1371: + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then mgl@1371: + : mgl@1371: + else mgl@1371: + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" mgl@1371: + fi mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: +# func_extract_archives gentop oldlib ... mgl@1371: +func_extract_archives () mgl@1371: +{ mgl@1371: + $opt_debug mgl@1371: + my_gentop="$1"; shift mgl@1371: + my_oldlibs=${1+"$@"} mgl@1371: + my_oldobjs="" mgl@1371: + my_xlib="" mgl@1371: + my_xabs="" mgl@1371: + my_xdir="" mgl@1371: + mgl@1371: + for my_xlib in $my_oldlibs; do mgl@1371: + # Extract the objects. mgl@1371: + case $my_xlib in mgl@1371: + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; mgl@1371: + *) my_xabs=`pwd`"/$my_xlib" ;; mgl@1371: + esac mgl@1371: + func_basename "$my_xlib" mgl@1371: + my_xlib="$func_basename_result" mgl@1371: + my_xlib_u=$my_xlib mgl@1371: + while :; do mgl@1371: + case " $extracted_archives " in mgl@1371: + *" $my_xlib_u "*) mgl@1371: + extracted_serial=`expr $extracted_serial + 1` mgl@1371: + my_xlib_u=lt$extracted_serial-$my_xlib ;; mgl@1371: + *) break ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + extracted_archives="$extracted_archives $my_xlib_u" mgl@1371: + my_xdir="$my_gentop/$my_xlib_u" mgl@1371: + mgl@1371: + func_mkdir_p "$my_xdir" mgl@1371: + mgl@1371: + case $host in mgl@1371: + *-darwin*) mgl@1371: + func_echo "Extracting $my_xabs" mgl@1371: + # Do not bother doing anything if just a dry run mgl@1371: + $opt_dry_run || { mgl@1371: + darwin_orig_dir=`pwd` mgl@1371: + cd $my_xdir || exit $? mgl@1371: + darwin_archive=$my_xabs mgl@1371: + darwin_curdir=`pwd` mgl@1371: + darwin_base_archive=`basename $darwin_archive` mgl@1371: + darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` mgl@1371: + if test -n "$darwin_arches"; then mgl@1371: + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` mgl@1371: + darwin_arch= mgl@1371: + func_echo "$darwin_base_archive has multiple architectures $darwin_arches" mgl@1371: + for darwin_arch in $darwin_arches ; do mgl@1371: + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" mgl@1371: + lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" mgl@1371: + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" mgl@1371: + func_extract_an_archive "`pwd`" "${darwin_base_archive}" mgl@1371: + cd "$darwin_curdir" mgl@1371: + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" mgl@1371: + done # $darwin_arches mgl@1371: + ## Okay now we've a bunch of thin objects, gotta fatten them up :) mgl@1371: + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` mgl@1371: + darwin_file= mgl@1371: + darwin_files= mgl@1371: + for darwin_file in $darwin_filelist; do mgl@1371: + darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` mgl@1371: + lipo -create -output "$darwin_file" $darwin_files mgl@1371: + done # $darwin_filelist mgl@1371: + $RM -rf unfat-$$ mgl@1371: + cd "$darwin_orig_dir" mgl@1371: + else mgl@1371: + cd $darwin_orig_dir mgl@1371: + func_extract_an_archive "$my_xdir" "$my_xabs" mgl@1371: + fi # $darwin_arches mgl@1371: + } # !$opt_dry_run mgl@1371: + ;; mgl@1371: + *) mgl@1371: + func_extract_an_archive "$my_xdir" "$my_xabs" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` mgl@1371: + done mgl@1371: + mgl@1371: + func_extract_archives_result="$my_oldobjs" mgl@1371: +} mgl@1371: + mgl@1371: + mgl@1371: + mgl@1371: +# func_write_libtool_object output_name pic_name nonpic_name mgl@1371: +# Create a libtool object file (analogous to a ".la" file), mgl@1371: +# but don't create it if we're doing a dry run. mgl@1371: +func_write_libtool_object () mgl@1371: +{ mgl@1371: + write_libobj=${1} mgl@1371: + if test "$build_libtool_libs" = yes; then mgl@1371: + write_lobj=\'${2}\' mgl@1371: + else mgl@1371: + write_lobj=none mgl@1371: + fi mgl@1371: + mgl@1371: + if test "$build_old_libs" = yes; then mgl@1371: + write_oldobj=\'${3}\' mgl@1371: + else mgl@1371: + write_oldobj=none mgl@1371: + fi mgl@1371: + mgl@1371: + $opt_dry_run || { mgl@1371: + cat >${write_libobj}T <?"'"'"' &()|`$[]' \ mgl@1371: + && func_warning "libobj name \`$libobj' may not contain shell special characters." mgl@1371: + func_basename "$obj" mgl@1371: + objname="$func_basename_result" mgl@1371: + func_dirname "$obj" "/" "" mgl@1371: + xdir="$func_dirname_result" mgl@1371: + lobj=${xdir}$objdir/$objname mgl@1371: + mgl@1371: + test -z "$base_compile" && \ mgl@1371: + func_fatal_help "you must specify a compilation command" mgl@1371: + mgl@1371: + # Delete any leftover library objects. mgl@1371: + if test "$build_old_libs" = yes; then mgl@1371: + removelist="$obj $lobj $libobj ${libobj}T" mgl@1371: + else mgl@1371: + removelist="$lobj $libobj ${libobj}T" mgl@1371: + fi mgl@1371: + mgl@1371: + $opt_dry_run || $RM $removelist mgl@1371: + trap "$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE" 1 2 15 mgl@1371: + mgl@1371: + # On Cygwin there's no "real" PIC flag so we must build both object types mgl@1371: + case $host_os in mgl@1371: + cygwin* | mingw* | pw32* | os2*) mgl@1371: + pic_mode=default mgl@1371: + ;; mgl@1371: + esac mgl@1371: + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then mgl@1371: + # non-PIC code in shared libraries is not supported mgl@1371: + pic_mode=default mgl@1371: + fi mgl@1371: + mgl@1371: + # Calculate the filename of the output object if compiler does mgl@1371: + # not support -o with -c mgl@1371: + if test "$compiler_c_o" = no; then mgl@1371: + output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} mgl@1371: + lockfile="$output_obj.lock" mgl@1371: + removelist="$removelist $output_obj $lockfile" mgl@1371: + trap "$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE" 1 2 15 mgl@1371: + else mgl@1371: + output_obj= mgl@1371: + need_locks=no mgl@1371: + lockfile= mgl@1371: + fi mgl@1371: + mgl@1371: + # Lock this critical section if it is needed mgl@1371: + # We use this script file to make the link, it avoids creating a new file mgl@1371: + if test "$need_locks" = yes; then mgl@1371: + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do mgl@1371: + func_echo "Waiting for $lockfile to be removed" mgl@1371: + sleep 2 mgl@1371: + done mgl@1371: + elif test "$need_locks" = warn; then mgl@1371: + if test -f "$lockfile"; then mgl@1371: + $ECHO "\ mgl@1371: +*** ERROR, $lockfile exists and contains: mgl@1371: +`cat $lockfile 2>/dev/null` mgl@1371: + mgl@1371: +This indicates that another process is trying to use the same mgl@1371: +temporary object file, and libtool could not work around it because mgl@1371: +your compiler does not support \`-c' and \`-o' together. If you mgl@1371: +repeat this compilation, it may succeed, by chance, but you had better mgl@1371: +avoid parallel builds (make -j) in this platform, or get a better mgl@1371: +compiler." mgl@1371: + mgl@1371: + $opt_dry_run || $RM $removelist mgl@1371: + exit $EXIT_FAILURE mgl@1371: + fi mgl@1371: + $ECHO "$srcfile" > "$lockfile" mgl@1371: + fi mgl@1371: + mgl@1371: + if test -n "$fix_srcfile_path"; then mgl@1371: + eval srcfile=\"$fix_srcfile_path\" mgl@1371: + fi mgl@1371: + func_quote_for_eval "$srcfile" mgl@1371: + qsrcfile=$func_quote_for_eval_result mgl@1371: + mgl@1371: + $opt_dry_run || $RM "$libobj" "${libobj}T" mgl@1371: + mgl@1371: + # Only build a PIC object if we are building libtool libraries. mgl@1371: + if test "$build_libtool_libs" = yes; then mgl@1371: + # Without this assignment, base_compile gets emptied. mgl@1371: + fbsd_hideous_sh_bug=$base_compile mgl@1371: + mgl@1371: + if test "$pic_mode" != no; then mgl@1371: + command="$base_compile $qsrcfile $pic_flag" mgl@1371: + else mgl@1371: + # Don't build PIC code mgl@1371: + command="$base_compile $qsrcfile" mgl@1371: + fi mgl@1371: + mgl@1371: + func_mkdir_p "$xdir$objdir" mgl@1371: + mgl@1371: + if test -z "$output_obj"; then mgl@1371: + # Place PIC objects in $objdir mgl@1371: + command="$command -o $lobj" mgl@1371: + fi mgl@1371: + mgl@1371: + $opt_dry_run || $RM "$lobj" "$output_obj" mgl@1371: + mgl@1371: + func_show_eval "$command" \ mgl@1371: + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' mgl@1371: + mgl@1371: + if test "$need_locks" = warn && mgl@1371: + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then mgl@1371: + $ECHO "\ mgl@1371: +*** ERROR, $lockfile contains: mgl@1371: +`cat $lockfile 2>/dev/null` mgl@1371: + mgl@1371: +but it should contain: mgl@1371: +$srcfile mgl@1371: + mgl@1371: +This indicates that another process is trying to use the same mgl@1371: +temporary object file, and libtool could not work around it because mgl@1371: +your compiler does not support \`-c' and \`-o' together. If you mgl@1371: +repeat this compilation, it may succeed, by chance, but you had better mgl@1371: +avoid parallel builds (make -j) in this platform, or get a better mgl@1371: +compiler." mgl@1371: + mgl@1371: + $opt_dry_run || $RM $removelist mgl@1371: + exit $EXIT_FAILURE mgl@1371: + fi mgl@1371: + mgl@1371: + # Just move the object if needed, then go on to compile the next one mgl@1371: + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then mgl@1371: + func_show_eval '$MV "$output_obj" "$lobj"' \ mgl@1371: + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' mgl@1371: + fi mgl@1371: + mgl@1371: + # Allow error messages only from the first compilation. mgl@1371: + if test "$suppress_opt" = yes; then mgl@1371: + suppress_output=' >/dev/null 2>&1' mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + # Only build a position-dependent object if we build old libraries. mgl@1371: + if test "$build_old_libs" = yes; then mgl@1371: + if test "$pic_mode" != yes; then mgl@1371: + # Don't build PIC code mgl@1371: + command="$base_compile $qsrcfile$pie_flag" mgl@1371: + else mgl@1371: + command="$base_compile $qsrcfile $pic_flag" mgl@1371: + fi mgl@1371: + if test "$compiler_c_o" = yes; then mgl@1371: + command="$command -o $obj" mgl@1371: + fi mgl@1371: + mgl@1371: + # Suppress compiler output if we already did a PIC compilation. mgl@1371: + command="$command$suppress_output" mgl@1371: + $opt_dry_run || $RM "$obj" "$output_obj" mgl@1371: + func_show_eval "$command" \ mgl@1371: + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' mgl@1371: + mgl@1371: + if test "$need_locks" = warn && mgl@1371: + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then mgl@1371: + $ECHO "\ mgl@1371: +*** ERROR, $lockfile contains: mgl@1371: +`cat $lockfile 2>/dev/null` mgl@1371: + mgl@1371: +but it should contain: mgl@1371: +$srcfile mgl@1371: + mgl@1371: +This indicates that another process is trying to use the same mgl@1371: +temporary object file, and libtool could not work around it because mgl@1371: +your compiler does not support \`-c' and \`-o' together. If you mgl@1371: +repeat this compilation, it may succeed, by chance, but you had better mgl@1371: +avoid parallel builds (make -j) in this platform, or get a better mgl@1371: +compiler." mgl@1371: + mgl@1371: + $opt_dry_run || $RM $removelist mgl@1371: + exit $EXIT_FAILURE mgl@1371: + fi mgl@1371: + mgl@1371: + # Just move the object if needed mgl@1371: + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then mgl@1371: + func_show_eval '$MV "$output_obj" "$obj"' \ mgl@1371: + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + $opt_dry_run || { mgl@1371: + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" mgl@1371: + mgl@1371: + # Unlock the critical section if it was locked mgl@1371: + if test "$need_locks" != no; then mgl@1371: + $RM "$lockfile" mgl@1371: + fi mgl@1371: + } mgl@1371: + mgl@1371: + exit $EXIT_SUCCESS mgl@1371: +} mgl@1371: + mgl@1371: +test "$mode" = compile && func_mode_compile ${1+"$@"} mgl@1371: + mgl@1371: + mgl@1371: +# func_mode_execute arg... mgl@1371: +func_mode_execute () mgl@1371: +{ mgl@1371: + $opt_debug mgl@1371: + # The first argument is the command name. mgl@1371: + cmd="$nonopt" mgl@1371: + test -z "$cmd" && \ mgl@1371: + func_fatal_help "you must specify a COMMAND" mgl@1371: + mgl@1371: + # Handle -dlopen flags immediately. mgl@1371: + for file in $execute_dlfiles; do mgl@1371: + test -f "$file" \ mgl@1371: + || func_fatal_help "\`$file' is not a file" mgl@1371: + mgl@1371: + dir= mgl@1371: + case $file in mgl@1371: + *.la) mgl@1371: + # Check to see that this really is a libtool archive. mgl@1371: + func_lalib_unsafe_p "$file" \ mgl@1371: + || func_fatal_help "\`$lib' is not a valid libtool archive" mgl@1371: + mgl@1371: + # Read the libtool library. mgl@1371: + dlname= mgl@1371: + library_names= mgl@1371: + func_source "$file" mgl@1371: + mgl@1371: + # Skip this library if it cannot be dlopened. mgl@1371: + if test -z "$dlname"; then mgl@1371: + # Warn if it was a shared library. mgl@1371: + test -n "$library_names" && \ mgl@1371: + func_warning "\`$file' was not linked with \`-export-dynamic'" mgl@1371: + continue mgl@1371: + fi mgl@1371: + mgl@1371: + func_dirname "$file" "" "." mgl@1371: + dir="$func_dirname_result" mgl@1371: + mgl@1371: + if test -f "$dir/$objdir/$dlname"; then mgl@1371: + dir="$dir/$objdir" mgl@1371: + else mgl@1371: + if test ! -f "$dir/$dlname"; then mgl@1371: + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" mgl@1371: + fi mgl@1371: + fi mgl@1371: + ;; mgl@1371: + mgl@1371: + *.lo) mgl@1371: + # Just add the directory containing the .lo file. mgl@1371: + func_dirname "$file" "" "." mgl@1371: + dir="$func_dirname_result" mgl@1371: + ;; mgl@1371: + mgl@1371: + *) mgl@1371: + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" mgl@1371: + continue mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + # Get the absolute pathname. mgl@1371: + absdir=`cd "$dir" && pwd` mgl@1371: + test -n "$absdir" && dir="$absdir" mgl@1371: + mgl@1371: + # Now add the directory to shlibpath_var. mgl@1371: + if eval "test -z \"\$$shlibpath_var\""; then mgl@1371: + eval "$shlibpath_var=\"\$dir\"" mgl@1371: + else mgl@1371: + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" mgl@1371: + fi mgl@1371: + done mgl@1371: + mgl@1371: + # This variable tells wrapper scripts just to set shlibpath_var mgl@1371: + # rather than running their programs. mgl@1371: + libtool_execute_magic="$magic" mgl@1371: + mgl@1371: + # Check if any of the arguments is a wrapper script. mgl@1371: + args= mgl@1371: + for file mgl@1371: + do mgl@1371: + case $file in mgl@1371: + -*) ;; mgl@1371: + *) mgl@1371: + # Do a test to see if this is really a libtool program. mgl@1371: + if func_ltwrapper_p "$file"; then mgl@1371: + func_source "$file" mgl@1371: + mgl@1371: + # Transform arg to wrapped name. mgl@1371: + file="$progdir/$program" mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: + # Quote arguments (to preserve shell metacharacters). mgl@1371: + func_quote_for_eval "$file" mgl@1371: + args="$args $func_quote_for_eval_result" mgl@1371: + done mgl@1371: + mgl@1371: + if test "X$opt_dry_run" = Xfalse; then mgl@1371: + if test -n "$shlibpath_var"; then mgl@1371: + # Export the shlibpath_var. mgl@1371: + eval "export $shlibpath_var" mgl@1371: + fi mgl@1371: + mgl@1371: + # Restore saved environment variables mgl@1371: + for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES mgl@1371: + do mgl@1371: + eval "if test \"\${save_$lt_var+set}\" = set; then mgl@1371: + $lt_var=\$save_$lt_var; export $lt_var mgl@1371: + else mgl@1371: + $lt_unset $lt_var mgl@1371: + fi" mgl@1371: + done mgl@1371: + mgl@1371: + # Now prepare to actually exec the command. mgl@1371: + exec_cmd="\$cmd$args" mgl@1371: + else mgl@1371: + # Display what would be done. mgl@1371: + if test -n "$shlibpath_var"; then mgl@1371: + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" mgl@1371: + $ECHO "export $shlibpath_var" mgl@1371: + fi mgl@1371: + $ECHO "$cmd$args" mgl@1371: + exit $EXIT_SUCCESS mgl@1371: + fi mgl@1371: +} mgl@1371: + mgl@1371: +test "$mode" = execute && func_mode_execute ${1+"$@"} mgl@1371: + mgl@1371: + mgl@1371: +# func_mode_finish arg... mgl@1371: +func_mode_finish () mgl@1371: +{ mgl@1371: + $opt_debug mgl@1371: + libdirs="$nonopt" mgl@1371: + admincmds= mgl@1371: + mgl@1371: + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then mgl@1371: + for dir mgl@1371: + do mgl@1371: + libdirs="$libdirs $dir" mgl@1371: + done mgl@1371: + mgl@1371: + for libdir in $libdirs; do mgl@1371: + if test -n "$finish_cmds"; then mgl@1371: + # Do each command in the finish commands. mgl@1371: + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds mgl@1371: +'"$cmd"'"' mgl@1371: + fi mgl@1371: + if test -n "$finish_eval"; then mgl@1371: + # Do the single finish_eval. mgl@1371: + eval cmds=\"$finish_eval\" mgl@1371: + $opt_dry_run || eval "$cmds" || admincmds="$admincmds mgl@1371: + $cmds" mgl@1371: + fi mgl@1371: + done mgl@1371: + fi mgl@1371: + mgl@1371: + # Exit here if they wanted silent mode. mgl@1371: + $opt_silent && exit $EXIT_SUCCESS mgl@1371: + mgl@1371: + $ECHO "X----------------------------------------------------------------------" | $Xsed mgl@1371: + $ECHO "Libraries have been installed in:" mgl@1371: + for libdir in $libdirs; do mgl@1371: + $ECHO " $libdir" mgl@1371: + done mgl@1371: + $ECHO mgl@1371: + $ECHO "If you ever happen to want to link against installed libraries" mgl@1371: + $ECHO "in a given directory, LIBDIR, you must either use libtool, and" mgl@1371: + $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" mgl@1371: + $ECHO "flag during linking and do at least one of the following:" mgl@1371: + if test -n "$shlibpath_var"; then mgl@1371: + $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" mgl@1371: + $ECHO " during execution" mgl@1371: + fi mgl@1371: + if test -n "$runpath_var"; then mgl@1371: + $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" mgl@1371: + $ECHO " during linking" mgl@1371: + fi mgl@1371: + if test -n "$hardcode_libdir_flag_spec"; then mgl@1371: + libdir=LIBDIR mgl@1371: + eval flag=\"$hardcode_libdir_flag_spec\" mgl@1371: + mgl@1371: + $ECHO " - use the \`$flag' linker flag" mgl@1371: + fi mgl@1371: + if test -n "$admincmds"; then mgl@1371: + $ECHO " - have your system administrator run these commands:$admincmds" mgl@1371: + fi mgl@1371: + if test -f /etc/ld.so.conf; then mgl@1371: + $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" mgl@1371: + fi mgl@1371: + $ECHO mgl@1371: + mgl@1371: + $ECHO "See any operating system documentation about shared libraries for" mgl@1371: + case $host in mgl@1371: + solaris2.[6789]|solaris2.1[0-9]) mgl@1371: + $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" mgl@1371: + $ECHO "pages." mgl@1371: + ;; mgl@1371: + *) mgl@1371: + $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." mgl@1371: + ;; mgl@1371: + esac mgl@1371: + $ECHO "X----------------------------------------------------------------------" | $Xsed mgl@1371: + exit $EXIT_SUCCESS mgl@1371: +} mgl@1371: + mgl@1371: +test "$mode" = finish && func_mode_finish ${1+"$@"} mgl@1371: + mgl@1371: + mgl@1371: +# func_mode_install arg... mgl@1371: +func_mode_install () mgl@1371: +{ mgl@1371: + $opt_debug mgl@1371: + # There may be an optional sh(1) argument at the beginning of mgl@1371: + # install_prog (especially on Windows NT). mgl@1371: + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || mgl@1371: + # Allow the use of GNU shtool's install command. mgl@1371: + $ECHO "X$nonopt" | $GREP shtool >/dev/null; then mgl@1371: + # Aesthetically quote it. mgl@1371: + func_quote_for_eval "$nonopt" mgl@1371: + install_prog="$func_quote_for_eval_result " mgl@1371: + arg=$1 mgl@1371: + shift mgl@1371: + else mgl@1371: + install_prog= mgl@1371: + arg=$nonopt mgl@1371: + fi mgl@1371: + mgl@1371: + # The real first argument should be the name of the installation program. mgl@1371: + # Aesthetically quote it. mgl@1371: + func_quote_for_eval "$arg" mgl@1371: + install_prog="$install_prog$func_quote_for_eval_result" mgl@1371: + mgl@1371: + # We need to accept at least all the BSD install flags. mgl@1371: + dest= mgl@1371: + files= mgl@1371: + opts= mgl@1371: + prev= mgl@1371: + install_type= mgl@1371: + isdir=no mgl@1371: + stripme= mgl@1371: + for arg mgl@1371: + do mgl@1371: + if test -n "$dest"; then mgl@1371: + files="$files $dest" mgl@1371: + dest=$arg mgl@1371: + continue mgl@1371: + fi mgl@1371: + mgl@1371: + case $arg in mgl@1371: + -d) isdir=yes ;; mgl@1371: + -f) mgl@1371: + case " $install_prog " in mgl@1371: + *[\\\ /]cp\ *) ;; mgl@1371: + *) prev=$arg ;; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + -g | -m | -o) mgl@1371: + prev=$arg mgl@1371: + ;; mgl@1371: + -s) mgl@1371: + stripme=" -s" mgl@1371: + continue mgl@1371: + ;; mgl@1371: + -*) mgl@1371: + ;; mgl@1371: + *) mgl@1371: + # If the previous option needed an argument, then skip it. mgl@1371: + if test -n "$prev"; then mgl@1371: + prev= mgl@1371: + else mgl@1371: + dest=$arg mgl@1371: + continue mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + # Aesthetically quote the argument. mgl@1371: + func_quote_for_eval "$arg" mgl@1371: + install_prog="$install_prog $func_quote_for_eval_result" mgl@1371: + done mgl@1371: + mgl@1371: + test -z "$install_prog" && \ mgl@1371: + func_fatal_help "you must specify an install program" mgl@1371: + mgl@1371: + test -n "$prev" && \ mgl@1371: + func_fatal_help "the \`$prev' option requires an argument" mgl@1371: + mgl@1371: + if test -z "$files"; then mgl@1371: + if test -z "$dest"; then mgl@1371: + func_fatal_help "no file or destination specified" mgl@1371: + else mgl@1371: + func_fatal_help "you must specify a destination" mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + # Strip any trailing slash from the destination. mgl@1371: + func_stripname '' '/' "$dest" mgl@1371: + dest=$func_stripname_result mgl@1371: + mgl@1371: + # Check to see that the destination is a directory. mgl@1371: + test -d "$dest" && isdir=yes mgl@1371: + if test "$isdir" = yes; then mgl@1371: + destdir="$dest" mgl@1371: + destname= mgl@1371: + else mgl@1371: + func_dirname "$dest" "" "." mgl@1371: + destdir="$func_dirname_result" mgl@1371: + func_basename "$dest" mgl@1371: + destname="$func_basename_result" mgl@1371: + mgl@1371: + # Not a directory, so check to see that there is only one file specified. mgl@1371: + set dummy $files; shift mgl@1371: + test "$#" -gt 1 && \ mgl@1371: + func_fatal_help "\`$dest' is not a directory" mgl@1371: + fi mgl@1371: + case $destdir in mgl@1371: + [\\/]* | [A-Za-z]:[\\/]*) ;; mgl@1371: + *) mgl@1371: + for file in $files; do mgl@1371: + case $file in mgl@1371: + *.lo) ;; mgl@1371: + *) mgl@1371: + func_fatal_help "\`$destdir' must be an absolute directory name" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + # This variable tells wrapper scripts just to set variables rather mgl@1371: + # than running their programs. mgl@1371: + libtool_install_magic="$magic" mgl@1371: + mgl@1371: + staticlibs= mgl@1371: + future_libdirs= mgl@1371: + current_libdirs= mgl@1371: + for file in $files; do mgl@1371: + mgl@1371: + # Do each installation. mgl@1371: + case $file in mgl@1371: + *.$libext) mgl@1371: + # Do the static libraries later. mgl@1371: + staticlibs="$staticlibs $file" mgl@1371: + ;; mgl@1371: + mgl@1371: + *.la) mgl@1371: + # Check to see that this really is a libtool archive. mgl@1371: + func_lalib_unsafe_p "$file" \ mgl@1371: + || func_fatal_help "\`$file' is not a valid libtool archive" mgl@1371: + mgl@1371: + library_names= mgl@1371: + old_library= mgl@1371: + relink_command= mgl@1371: + func_source "$file" mgl@1371: + mgl@1371: + # Add the libdir to current_libdirs if it is the destination. mgl@1371: + if test "X$destdir" = "X$libdir"; then mgl@1371: + case "$current_libdirs " in mgl@1371: + *" $libdir "*) ;; mgl@1371: + *) current_libdirs="$current_libdirs $libdir" ;; mgl@1371: + esac mgl@1371: + else mgl@1371: + # Note the libdir as a future libdir. mgl@1371: + case "$future_libdirs " in mgl@1371: + *" $libdir "*) ;; mgl@1371: + *) future_libdirs="$future_libdirs $libdir" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + mgl@1371: + func_dirname "$file" "/" "" mgl@1371: + dir="$func_dirname_result" mgl@1371: + dir="$dir$objdir" mgl@1371: + mgl@1371: + if test -n "$relink_command"; then mgl@1371: + # Determine the prefix the user has applied to our future dir. mgl@1371: + inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` mgl@1371: + mgl@1371: + # Don't allow the user to place us outside of our expected mgl@1371: + # location b/c this prevents finding dependent libraries that mgl@1371: + # are installed to the same prefix. mgl@1371: + # At present, this check doesn't affect windows .dll's that mgl@1371: + # are installed into $libdir/../bin (currently, that works fine) mgl@1371: + # but it's something to keep an eye on. mgl@1371: + test "$inst_prefix_dir" = "$destdir" && \ mgl@1371: + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" mgl@1371: + mgl@1371: + if test -n "$inst_prefix_dir"; then mgl@1371: + # Stick the inst_prefix_dir data into the link command. mgl@1371: + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` mgl@1371: + else mgl@1371: + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` mgl@1371: + fi mgl@1371: + mgl@1371: + func_warning "relinking \`$file'" mgl@1371: + func_show_eval "$relink_command" \ mgl@1371: + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' mgl@1371: + fi mgl@1371: + mgl@1371: + # See the names of the shared library. mgl@1371: + set dummy $library_names; shift mgl@1371: + if test -n "$1"; then mgl@1371: + realname="$1" mgl@1371: + shift mgl@1371: + mgl@1371: + srcname="$realname" mgl@1371: + test -n "$relink_command" && srcname="$realname"T mgl@1371: + mgl@1371: + # Install the shared library and build the symlinks. mgl@1371: + func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ mgl@1371: + 'exit $?' mgl@1371: + tstripme="$stripme" mgl@1371: + case $host_os in mgl@1371: + cygwin* | mingw* | pw32*) mgl@1371: + case $realname in mgl@1371: + *.dll.a) mgl@1371: + tstripme="" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + esac mgl@1371: + if test -n "$tstripme" && test -n "$striplib"; then mgl@1371: + func_show_eval "$striplib $destdir/$realname" 'exit $?' mgl@1371: + fi mgl@1371: + mgl@1371: + if test "$#" -gt 0; then mgl@1371: + # Delete the old symlinks, and create new ones. mgl@1371: + # Try `ln -sf' first, because the `ln' binary might depend on mgl@1371: + # the symlink we replace! Solaris /bin/ln does not understand -f, mgl@1371: + # so we also need to try rm && ln -s. mgl@1371: + for linkname mgl@1371: + do mgl@1371: + test "$linkname" != "$realname" \ mgl@1371: + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" mgl@1371: + done mgl@1371: + fi mgl@1371: + mgl@1371: + # Do each command in the postinstall commands. mgl@1371: + lib="$destdir/$realname" mgl@1371: + func_execute_cmds "$postinstall_cmds" 'exit $?' mgl@1371: + fi mgl@1371: + mgl@1371: + # Install the pseudo-library for information purposes. mgl@1371: + func_basename "$file" mgl@1371: + name="$func_basename_result" mgl@1371: + instname="$dir/$name"i mgl@1371: + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' mgl@1371: + mgl@1371: + # Maybe install the static library, too. mgl@1371: + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" mgl@1371: + ;; mgl@1371: + mgl@1371: + *.lo) mgl@1371: + # Install (i.e. copy) a libtool object. mgl@1371: + mgl@1371: + # Figure out destination file name, if it wasn't already specified. mgl@1371: + if test -n "$destname"; then mgl@1371: + destfile="$destdir/$destname" mgl@1371: + else mgl@1371: + func_basename "$file" mgl@1371: + destfile="$func_basename_result" mgl@1371: + destfile="$destdir/$destfile" mgl@1371: + fi mgl@1371: + mgl@1371: + # Deduce the name of the destination old-style object file. mgl@1371: + case $destfile in mgl@1371: + *.lo) mgl@1371: + func_lo2o "$destfile" mgl@1371: + staticdest=$func_lo2o_result mgl@1371: + ;; mgl@1371: + *.$objext) mgl@1371: + staticdest="$destfile" mgl@1371: + destfile= mgl@1371: + ;; mgl@1371: + *) mgl@1371: + func_fatal_help "cannot copy a libtool object to \`$destfile'" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + # Install the libtool object if requested. mgl@1371: + test -n "$destfile" && \ mgl@1371: + func_show_eval "$install_prog $file $destfile" 'exit $?' mgl@1371: + mgl@1371: + # Install the old object if enabled. mgl@1371: + if test "$build_old_libs" = yes; then mgl@1371: + # Deduce the name of the old-style object file. mgl@1371: + func_lo2o "$file" mgl@1371: + staticobj=$func_lo2o_result mgl@1371: + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' mgl@1371: + fi mgl@1371: + exit $EXIT_SUCCESS mgl@1371: + ;; mgl@1371: + mgl@1371: + *) mgl@1371: + # Figure out destination file name, if it wasn't already specified. mgl@1371: + if test -n "$destname"; then mgl@1371: + destfile="$destdir/$destname" mgl@1371: + else mgl@1371: + func_basename "$file" mgl@1371: + destfile="$func_basename_result" mgl@1371: + destfile="$destdir/$destfile" mgl@1371: + fi mgl@1371: + mgl@1371: + # If the file is missing, and there is a .exe on the end, strip it mgl@1371: + # because it is most likely a libtool script we actually want to mgl@1371: + # install mgl@1371: + stripped_ext="" mgl@1371: + case $file in mgl@1371: + *.exe) mgl@1371: + if test ! -f "$file"; then mgl@1371: + func_stripname '' '.exe' "$file" mgl@1371: + file=$func_stripname_result mgl@1371: + stripped_ext=".exe" mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + # Do a test to see if this is really a libtool program. mgl@1371: + case $host in mgl@1371: + *cygwin*|*mingw*) mgl@1371: + func_stripname '' '.exe' "$file" mgl@1371: + wrapper=$func_stripname_result mgl@1371: + ;; mgl@1371: + *) mgl@1371: + wrapper=$file mgl@1371: + ;; mgl@1371: + esac mgl@1371: + if func_ltwrapper_p "$wrapper"; then mgl@1371: + notinst_deplibs= mgl@1371: + relink_command= mgl@1371: + mgl@1371: + func_source "$wrapper" mgl@1371: + mgl@1371: + # Check the variables that should have been set. mgl@1371: + test -z "$generated_by_libtool_version" && \ mgl@1371: + func_fatal_error "invalid libtool wrapper script \`$wrapper'" mgl@1371: + mgl@1371: + finalize=yes mgl@1371: + for lib in $notinst_deplibs; do mgl@1371: + # Check to see that each library is installed. mgl@1371: + libdir= mgl@1371: + if test -f "$lib"; then mgl@1371: + func_source "$lib" mgl@1371: + fi mgl@1371: + libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test mgl@1371: + if test -n "$libdir" && test ! -f "$libfile"; then mgl@1371: + func_warning "\`$lib' has not been installed in \`$libdir'" mgl@1371: + finalize=no mgl@1371: + fi mgl@1371: + done mgl@1371: + mgl@1371: + relink_command= mgl@1371: + func_source "$wrapper" mgl@1371: + mgl@1371: + outputname= mgl@1371: + if test "$fast_install" = no && test -n "$relink_command"; then mgl@1371: + $opt_dry_run || { mgl@1371: + if test "$finalize" = yes; then mgl@1371: + tmpdir=`func_mktempdir` mgl@1371: + func_basename "$file$stripped_ext" mgl@1371: + file="$func_basename_result" mgl@1371: + outputname="$tmpdir/$file" mgl@1371: + # Replace the output file specification. mgl@1371: + relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` mgl@1371: + mgl@1371: + $opt_silent || { mgl@1371: + func_quote_for_expand "$relink_command" mgl@1371: + eval "func_echo $func_quote_for_expand_result" mgl@1371: + } mgl@1371: + if eval "$relink_command"; then : mgl@1371: + else mgl@1371: + func_error "error: relink \`$file' with the above command before installing it" mgl@1371: + $opt_dry_run || ${RM}r "$tmpdir" mgl@1371: + continue mgl@1371: + fi mgl@1371: + file="$outputname" mgl@1371: + else mgl@1371: + func_warning "cannot relink \`$file'" mgl@1371: + fi mgl@1371: + } mgl@1371: + else mgl@1371: + # Install the binary that we compiled earlier. mgl@1371: + file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + # remove .exe since cygwin /usr/bin/install will append another mgl@1371: + # one anyway mgl@1371: + case $install_prog,$host in mgl@1371: + */usr/bin/install*,*cygwin*) mgl@1371: + case $file:$destfile in mgl@1371: + *.exe:*.exe) mgl@1371: + # this is ok mgl@1371: + ;; mgl@1371: + *.exe:*) mgl@1371: + destfile=$destfile.exe mgl@1371: + ;; mgl@1371: + *:*.exe) mgl@1371: + func_stripname '' '.exe' "$destfile" mgl@1371: + destfile=$func_stripname_result mgl@1371: + ;; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + esac mgl@1371: + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' mgl@1371: + $opt_dry_run || if test -n "$outputname"; then mgl@1371: + ${RM}r "$tmpdir" mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + mgl@1371: + for file in $staticlibs; do mgl@1371: + func_basename "$file" mgl@1371: + name="$func_basename_result" mgl@1371: + mgl@1371: + # Set up the ranlib parameters. mgl@1371: + oldlib="$destdir/$name" mgl@1371: + mgl@1371: + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' mgl@1371: + mgl@1371: + if test -n "$stripme" && test -n "$old_striplib"; then mgl@1371: + func_show_eval "$old_striplib $oldlib" 'exit $?' mgl@1371: + fi mgl@1371: + mgl@1371: + # Do each command in the postinstall commands. mgl@1371: + func_execute_cmds "$old_postinstall_cmds" 'exit $?' mgl@1371: + done mgl@1371: + mgl@1371: + test -n "$future_libdirs" && \ mgl@1371: + func_warning "remember to run \`$progname --finish$future_libdirs'" mgl@1371: + mgl@1371: + if test -n "$current_libdirs"; then mgl@1371: + # Maybe just do a dry run. mgl@1371: + $opt_dry_run && current_libdirs=" -n$current_libdirs" mgl@1371: + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' mgl@1371: + else mgl@1371: + exit $EXIT_SUCCESS mgl@1371: + fi mgl@1371: +} mgl@1371: + mgl@1371: +test "$mode" = install && func_mode_install ${1+"$@"} mgl@1371: + mgl@1371: + mgl@1371: +# func_mode_link arg... mgl@1371: +func_mode_link () mgl@1371: +{ mgl@1371: + $opt_debug mgl@1371: + case $host in mgl@1371: + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) mgl@1371: + # It is impossible to link a dll without this setting, and mgl@1371: + # we shouldn't force the makefile maintainer to figure out mgl@1371: + # which system we are compiling for in order to pass an extra mgl@1371: + # flag for every libtool invocation. mgl@1371: + # allow_undefined=no mgl@1371: + mgl@1371: + # FIXME: Unfortunately, there are problems with the above when trying mgl@1371: + # to make a dll which has undefined symbols, in which case not mgl@1371: + # even a static library is built. For now, we need to specify mgl@1371: + # -no-undefined on the libtool link line when we can be certain mgl@1371: + # that all symbols are satisfied, otherwise we get a static library. mgl@1371: + allow_undefined=yes mgl@1371: + ;; mgl@1371: + *) mgl@1371: + allow_undefined=yes mgl@1371: + ;; mgl@1371: + esac mgl@1371: + libtool_args=$nonopt mgl@1371: + base_compile="$nonopt $@" mgl@1371: + compile_command=$nonopt mgl@1371: + finalize_command=$nonopt mgl@1371: + mgl@1371: + compile_rpath= mgl@1371: + finalize_rpath= mgl@1371: + compile_shlibpath= mgl@1371: + finalize_shlibpath= mgl@1371: + convenience= mgl@1371: + old_convenience= mgl@1371: + deplibs= mgl@1371: + old_deplibs= mgl@1371: + compiler_flags= mgl@1371: + linker_flags= mgl@1371: + dllsearchpath= mgl@1371: + lib_search_path=`pwd` mgl@1371: + inst_prefix_dir= mgl@1371: + new_inherited_linker_flags= mgl@1371: + mgl@1371: + avoid_version=no mgl@1371: + dlfiles= mgl@1371: + dlprefiles= mgl@1371: + dlself=no mgl@1371: + export_dynamic=no mgl@1371: + export_symbols= mgl@1371: + export_symbols_regex= mgl@1371: + generated= mgl@1371: + libobjs= mgl@1371: + ltlibs= mgl@1371: + module=no mgl@1371: + no_install=no mgl@1371: + objs= mgl@1371: + non_pic_objects= mgl@1371: + precious_files_regex= mgl@1371: + prefer_static_libs=no mgl@1371: + preload=no mgl@1371: + prev= mgl@1371: + prevarg= mgl@1371: + release= mgl@1371: + rpath= mgl@1371: + xrpath= mgl@1371: + perm_rpath= mgl@1371: + temp_rpath= mgl@1371: + thread_safe=no mgl@1371: + vinfo= mgl@1371: + vinfo_number=no mgl@1371: + weak_libs= mgl@1371: + single_module="${wl}-single_module" mgl@1371: + func_infer_tag $base_compile mgl@1371: + mgl@1371: + # We need to know -static, to get the right output filenames. mgl@1371: + for arg mgl@1371: + do mgl@1371: + case $arg in mgl@1371: + -shared) mgl@1371: + test "$build_libtool_libs" != yes && \ mgl@1371: + func_fatal_configuration "can not build a shared library" mgl@1371: + build_old_libs=no mgl@1371: + break mgl@1371: + ;; mgl@1371: + -all-static | -static | -static-libtool-libs) mgl@1371: + case $arg in mgl@1371: + -all-static) mgl@1371: + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then mgl@1371: + func_warning "complete static linking is impossible in this configuration" mgl@1371: + fi mgl@1371: + if test -n "$link_static_flag"; then mgl@1371: + dlopen_self=$dlopen_self_static mgl@1371: + # See comment for -static flag below, for more details. mgl@1371: + func_append compile_command " $link_static_flag" mgl@1371: + func_append finalize_command " $link_static_flag" mgl@1371: + fi mgl@1371: + prefer_static_libs=yes mgl@1371: + ;; mgl@1371: + -static) mgl@1371: + if test -z "$pic_flag" && test -n "$link_static_flag"; then mgl@1371: + dlopen_self=$dlopen_self_static mgl@1371: + fi mgl@1371: + prefer_static_libs=built mgl@1371: + ;; mgl@1371: + -static-libtool-libs) mgl@1371: + if test -z "$pic_flag" && test -n "$link_static_flag"; then mgl@1371: + dlopen_self=$dlopen_self_static mgl@1371: + fi mgl@1371: + prefer_static_libs=yes mgl@1371: + ;; mgl@1371: + esac mgl@1371: + build_libtool_libs=no mgl@1371: + build_old_libs=yes mgl@1371: + break mgl@1371: + ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + mgl@1371: + # See if our shared archives depend on static archives. mgl@1371: + test -n "$old_archive_from_new_cmds" && build_old_libs=yes mgl@1371: + mgl@1371: + # Go through the arguments, transforming them on the way. mgl@1371: + while test "$#" -gt 0; do mgl@1371: + arg="$1" mgl@1371: + shift mgl@1371: + func_quote_for_eval "$arg" mgl@1371: + qarg=$func_quote_for_eval_unquoted_result mgl@1371: + func_append libtool_args " $func_quote_for_eval_result" mgl@1371: + mgl@1371: + # If the previous option needs an argument, assign it. mgl@1371: + if test -n "$prev"; then mgl@1371: + case $prev in mgl@1371: + output) mgl@1371: + func_append compile_command " @OUTPUT@" mgl@1371: + func_append finalize_command " @OUTPUT@" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + case $prev in mgl@1371: + dlfiles|dlprefiles) mgl@1371: + if test "$preload" = no; then mgl@1371: + # Add the symbol object into the linking commands. mgl@1371: + func_append compile_command " @SYMFILE@" mgl@1371: + func_append finalize_command " @SYMFILE@" mgl@1371: + preload=yes mgl@1371: + fi mgl@1371: + case $arg in mgl@1371: + *.la | *.lo) ;; # We handle these cases below. mgl@1371: + force) mgl@1371: + if test "$dlself" = no; then mgl@1371: + dlself=needless mgl@1371: + export_dynamic=yes mgl@1371: + fi mgl@1371: + prev= mgl@1371: + continue mgl@1371: + ;; mgl@1371: + self) mgl@1371: + if test "$prev" = dlprefiles; then mgl@1371: + dlself=yes mgl@1371: + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then mgl@1371: + dlself=yes mgl@1371: + else mgl@1371: + dlself=needless mgl@1371: + export_dynamic=yes mgl@1371: + fi mgl@1371: + prev= mgl@1371: + continue mgl@1371: + ;; mgl@1371: + *) mgl@1371: + if test "$prev" = dlfiles; then mgl@1371: + dlfiles="$dlfiles $arg" mgl@1371: + else mgl@1371: + dlprefiles="$dlprefiles $arg" mgl@1371: + fi mgl@1371: + prev= mgl@1371: + continue mgl@1371: + ;; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + expsyms) mgl@1371: + export_symbols="$arg" mgl@1371: + test -f "$arg" \ mgl@1371: + || func_fatal_error "symbol file \`$arg' does not exist" mgl@1371: + prev= mgl@1371: + continue mgl@1371: + ;; mgl@1371: + expsyms_regex) mgl@1371: + export_symbols_regex="$arg" mgl@1371: + prev= mgl@1371: + continue mgl@1371: + ;; mgl@1371: + framework) mgl@1371: + case $host in mgl@1371: + *-*-darwin*) mgl@1371: + case "$deplibs " in mgl@1371: + *" $qarg.ltframework "*) ;; mgl@1371: + *) deplibs="$deplibs $qarg.ltframework" # this is fixed later mgl@1371: + ;; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + esac mgl@1371: + prev= mgl@1371: + continue mgl@1371: + ;; mgl@1371: + inst_prefix) mgl@1371: + inst_prefix_dir="$arg" mgl@1371: + prev= mgl@1371: + continue mgl@1371: + ;; mgl@1371: + objectlist) mgl@1371: + if test -f "$arg"; then mgl@1371: + save_arg=$arg mgl@1371: + moreargs= mgl@1371: + for fil in `cat "$save_arg"` mgl@1371: + do mgl@1371: +# moreargs="$moreargs $fil" mgl@1371: + arg=$fil mgl@1371: + # A libtool-controlled object. mgl@1371: + mgl@1371: + # Check to see that this really is a libtool object. mgl@1371: + if func_lalib_unsafe_p "$arg"; then mgl@1371: + pic_object= mgl@1371: + non_pic_object= mgl@1371: + mgl@1371: + # Read the .lo file mgl@1371: + func_source "$arg" mgl@1371: + mgl@1371: + if test -z "$pic_object" || mgl@1371: + test -z "$non_pic_object" || mgl@1371: + test "$pic_object" = none && mgl@1371: + test "$non_pic_object" = none; then mgl@1371: + func_fatal_error "cannot find name of object for \`$arg'" mgl@1371: + fi mgl@1371: + mgl@1371: + # Extract subdirectory from the argument. mgl@1371: + func_dirname "$arg" "/" "" mgl@1371: + xdir="$func_dirname_result" mgl@1371: + mgl@1371: + if test "$pic_object" != none; then mgl@1371: + # Prepend the subdirectory the object is found in. mgl@1371: + pic_object="$xdir$pic_object" mgl@1371: + mgl@1371: + if test "$prev" = dlfiles; then mgl@1371: + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then mgl@1371: + dlfiles="$dlfiles $pic_object" mgl@1371: + prev= mgl@1371: + continue mgl@1371: + else mgl@1371: + # If libtool objects are unsupported, then we need to preload. mgl@1371: + prev=dlprefiles mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + # CHECK ME: I think I busted this. -Ossama mgl@1371: + if test "$prev" = dlprefiles; then mgl@1371: + # Preload the old-style object. mgl@1371: + dlprefiles="$dlprefiles $pic_object" mgl@1371: + prev= mgl@1371: + fi mgl@1371: + mgl@1371: + # A PIC object. mgl@1371: + func_append libobjs " $pic_object" mgl@1371: + arg="$pic_object" mgl@1371: + fi mgl@1371: + mgl@1371: + # Non-PIC object. mgl@1371: + if test "$non_pic_object" != none; then mgl@1371: + # Prepend the subdirectory the object is found in. mgl@1371: + non_pic_object="$xdir$non_pic_object" mgl@1371: + mgl@1371: + # A standard non-PIC object mgl@1371: + func_append non_pic_objects " $non_pic_object" mgl@1371: + if test -z "$pic_object" || test "$pic_object" = none ; then mgl@1371: + arg="$non_pic_object" mgl@1371: + fi mgl@1371: + else mgl@1371: + # If the PIC object exists, use it instead. mgl@1371: + # $xdir was prepended to $pic_object above. mgl@1371: + non_pic_object="$pic_object" mgl@1371: + func_append non_pic_objects " $non_pic_object" mgl@1371: + fi mgl@1371: + else mgl@1371: + # Only an error if not doing a dry-run. mgl@1371: + if $opt_dry_run; then mgl@1371: + # Extract subdirectory from the argument. mgl@1371: + func_dirname "$arg" "/" "" mgl@1371: + xdir="$func_dirname_result" mgl@1371: + mgl@1371: + func_lo2o "$arg" mgl@1371: + pic_object=$xdir$objdir/$func_lo2o_result mgl@1371: + non_pic_object=$xdir$func_lo2o_result mgl@1371: + func_append libobjs " $pic_object" mgl@1371: + func_append non_pic_objects " $non_pic_object" mgl@1371: + else mgl@1371: + func_fatal_error "\`$arg' is not a valid libtool object" mgl@1371: + fi mgl@1371: + fi mgl@1371: + done mgl@1371: + else mgl@1371: + func_fatal_error "link input file \`$arg' does not exist" mgl@1371: + fi mgl@1371: + arg=$save_arg mgl@1371: + prev= mgl@1371: + continue mgl@1371: + ;; mgl@1371: + precious_regex) mgl@1371: + precious_files_regex="$arg" mgl@1371: + prev= mgl@1371: + continue mgl@1371: + ;; mgl@1371: + release) mgl@1371: + release="-$arg" mgl@1371: + prev= mgl@1371: + continue mgl@1371: + ;; mgl@1371: + rpath | xrpath) mgl@1371: + # We need an absolute path. mgl@1371: + case $arg in mgl@1371: + [\\/]* | [A-Za-z]:[\\/]*) ;; mgl@1371: + *) mgl@1371: + func_fatal_error "only absolute run-paths are allowed" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + if test "$prev" = rpath; then mgl@1371: + case "$rpath " in mgl@1371: + *" $arg "*) ;; mgl@1371: + *) rpath="$rpath $arg" ;; mgl@1371: + esac mgl@1371: + else mgl@1371: + case "$xrpath " in mgl@1371: + *" $arg "*) ;; mgl@1371: + *) xrpath="$xrpath $arg" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + prev= mgl@1371: + continue mgl@1371: + ;; mgl@1371: + shrext) mgl@1371: + shrext_cmds="$arg" mgl@1371: + prev= mgl@1371: + continue mgl@1371: + ;; mgl@1371: + weak) mgl@1371: + weak_libs="$weak_libs $arg" mgl@1371: + prev= mgl@1371: + continue mgl@1371: + ;; mgl@1371: + xcclinker) mgl@1371: + linker_flags="$linker_flags $qarg" mgl@1371: + compiler_flags="$compiler_flags $qarg" mgl@1371: + prev= mgl@1371: + func_append compile_command " $qarg" mgl@1371: + func_append finalize_command " $qarg" mgl@1371: + continue mgl@1371: + ;; mgl@1371: + xcompiler) mgl@1371: + compiler_flags="$compiler_flags $qarg" mgl@1371: + prev= mgl@1371: + func_append compile_command " $qarg" mgl@1371: + func_append finalize_command " $qarg" mgl@1371: + continue mgl@1371: + ;; mgl@1371: + xlinker) mgl@1371: + linker_flags="$linker_flags $qarg" mgl@1371: + compiler_flags="$compiler_flags $wl$qarg" mgl@1371: + prev= mgl@1371: + func_append compile_command " $wl$qarg" mgl@1371: + func_append finalize_command " $wl$qarg" mgl@1371: + continue mgl@1371: + ;; mgl@1371: + *) mgl@1371: + eval "$prev=\"\$arg\"" mgl@1371: + prev= mgl@1371: + continue mgl@1371: + ;; mgl@1371: + esac mgl@1371: + fi # test -n "$prev" mgl@1371: + mgl@1371: + prevarg="$arg" mgl@1371: + mgl@1371: + case $arg in mgl@1371: + -all-static) mgl@1371: + # The effects of -all-static are defined in a previous loop. mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -allow-undefined) mgl@1371: + # FIXME: remove this flag sometime in the future. mgl@1371: + func_fatal_error "\`-allow-undefined' must not be used because it is the default" mgl@1371: + ;; mgl@1371: + mgl@1371: + -avoid-version) mgl@1371: + avoid_version=yes mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -dlopen) mgl@1371: + prev=dlfiles mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -dlpreopen) mgl@1371: + prev=dlprefiles mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -export-dynamic) mgl@1371: + export_dynamic=yes mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -export-symbols | -export-symbols-regex) mgl@1371: + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then mgl@1371: + func_fatal_error "more than one -exported-symbols argument is not allowed" mgl@1371: + fi mgl@1371: + if test "X$arg" = "X-export-symbols"; then mgl@1371: + prev=expsyms mgl@1371: + else mgl@1371: + prev=expsyms_regex mgl@1371: + fi mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -framework) mgl@1371: + prev=framework mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -inst-prefix-dir) mgl@1371: + prev=inst_prefix mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* mgl@1371: + # so, if we see these flags be careful not to treat them like -L mgl@1371: + -L[A-Z][A-Z]*:*) mgl@1371: + case $with_gcc/$host in mgl@1371: + no/*-*-irix* | /*-*-irix*) mgl@1371: + func_append compile_command " $arg" mgl@1371: + func_append finalize_command " $arg" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -L*) mgl@1371: + func_stripname '-L' '' "$arg" mgl@1371: + dir=$func_stripname_result mgl@1371: + # We need an absolute path. mgl@1371: + case $dir in mgl@1371: + [\\/]* | [A-Za-z]:[\\/]*) ;; mgl@1371: + *) mgl@1371: + absdir=`cd "$dir" && pwd` mgl@1371: + test -z "$absdir" && \ mgl@1371: + func_fatal_error "cannot determine absolute directory name of \`$dir'" mgl@1371: + dir="$absdir" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + case "$deplibs " in mgl@1371: + *" -L$dir "*) ;; mgl@1371: + *) mgl@1371: + deplibs="$deplibs -L$dir" mgl@1371: + lib_search_path="$lib_search_path $dir" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + case $host in mgl@1371: + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) mgl@1371: + testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` mgl@1371: + case :$dllsearchpath: in mgl@1371: + *":$dir:"*) ;; mgl@1371: + *) dllsearchpath="$dllsearchpath:$dir";; mgl@1371: + esac mgl@1371: + case :$dllsearchpath: in mgl@1371: + *":$testbindir:"*) ;; mgl@1371: + *) dllsearchpath="$dllsearchpath:$testbindir";; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + esac mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -l*) mgl@1371: + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then mgl@1371: + case $host in mgl@1371: + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) mgl@1371: + # These systems don't actually have a C or math library (as such) mgl@1371: + continue mgl@1371: + ;; mgl@1371: + *-*-os2*) mgl@1371: + # These systems don't actually have a C library (as such) mgl@1371: + test "X$arg" = "X-lc" && continue mgl@1371: + ;; mgl@1371: + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) mgl@1371: + # Do not include libc due to us having libc/libc_r. mgl@1371: + test "X$arg" = "X-lc" && continue mgl@1371: + ;; mgl@1371: + *-*-rhapsody* | *-*-darwin1.[012]) mgl@1371: + # Rhapsody C and math libraries are in the System framework mgl@1371: + deplibs="$deplibs System.ltframework" mgl@1371: + continue mgl@1371: + ;; mgl@1371: + *-*-sco3.2v5* | *-*-sco5v6*) mgl@1371: + # Causes problems with __ctype mgl@1371: + test "X$arg" = "X-lc" && continue mgl@1371: + ;; mgl@1371: + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) mgl@1371: + # Compiler inserts libc in the correct place for threads to work mgl@1371: + test "X$arg" = "X-lc" && continue mgl@1371: + ;; mgl@1371: + esac mgl@1371: + elif test "X$arg" = "X-lc_r"; then mgl@1371: + case $host in mgl@1371: + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) mgl@1371: + # Do not include libc_r directly, use -pthread flag. mgl@1371: + continue mgl@1371: + ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + deplibs="$deplibs $arg" mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -module) mgl@1371: + module=yes mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + # Tru64 UNIX uses -model [arg] to determine the layout of C++ mgl@1371: + # classes, name mangling, and exception handling. mgl@1371: + # Darwin uses the -arch flag to determine output architecture. mgl@1371: + -model|-arch|-isysroot) mgl@1371: + compiler_flags="$compiler_flags $arg" mgl@1371: + func_append compile_command " $arg" mgl@1371: + func_append finalize_command " $arg" mgl@1371: + prev=xcompiler mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) mgl@1371: + compiler_flags="$compiler_flags $arg" mgl@1371: + func_append compile_command " $arg" mgl@1371: + func_append finalize_command " $arg" mgl@1371: + case "$new_inherited_linker_flags " in mgl@1371: + *" $arg "*) ;; mgl@1371: + * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; mgl@1371: + esac mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -multi_module) mgl@1371: + single_module="${wl}-multi_module" mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -no-fast-install) mgl@1371: + fast_install=no mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -no-install) mgl@1371: + case $host in mgl@1371: + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) mgl@1371: + # The PATH hackery in wrapper scripts is required on Windows mgl@1371: + # in order for the loader to find any dlls it needs. mgl@1371: + func_warning "\`-no-install' is ignored for $host" mgl@1371: + func_warning "assuming \`-no-fast-install' instead" mgl@1371: + fast_install=no mgl@1371: + ;; mgl@1371: + *) no_install=yes ;; mgl@1371: + esac mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -no-undefined) mgl@1371: + allow_undefined=no mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -objectlist) mgl@1371: + prev=objectlist mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -o) prev=output ;; mgl@1371: + mgl@1371: + -precious-files-regex) mgl@1371: + prev=precious_regex mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -release) mgl@1371: + prev=release mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -rpath) mgl@1371: + prev=rpath mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -R) mgl@1371: + prev=xrpath mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -R*) mgl@1371: + func_stripname '-R' '' "$arg" mgl@1371: + dir=$func_stripname_result mgl@1371: + # We need an absolute path. mgl@1371: + case $dir in mgl@1371: + [\\/]* | [A-Za-z]:[\\/]*) ;; mgl@1371: + *) mgl@1371: + func_fatal_error "only absolute run-paths are allowed" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + case "$xrpath " in mgl@1371: + *" $dir "*) ;; mgl@1371: + *) xrpath="$xrpath $dir" ;; mgl@1371: + esac mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -shared) mgl@1371: + # The effects of -shared are defined in a previous loop. mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -shrext) mgl@1371: + prev=shrext mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -static | -static-libtool-libs) mgl@1371: + # The effects of -static are defined in a previous loop. mgl@1371: + # We used to do the same as -all-static on platforms that mgl@1371: + # didn't have a PIC flag, but the assumption that the effects mgl@1371: + # would be equivalent was wrong. It would break on at least mgl@1371: + # Digital Unix and AIX. mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -thread-safe) mgl@1371: + thread_safe=yes mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -version-info) mgl@1371: + prev=vinfo mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -version-number) mgl@1371: + prev=vinfo mgl@1371: + vinfo_number=yes mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -weak) mgl@1371: + prev=weak mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -Wc,*) mgl@1371: + func_stripname '-Wc,' '' "$arg" mgl@1371: + args=$func_stripname_result mgl@1371: + arg= mgl@1371: + save_ifs="$IFS"; IFS=',' mgl@1371: + for flag in $args; do mgl@1371: + IFS="$save_ifs" mgl@1371: + func_quote_for_eval "$flag" mgl@1371: + arg="$arg $wl$func_quote_for_eval_result" mgl@1371: + compiler_flags="$compiler_flags $func_quote_for_eval_result" mgl@1371: + done mgl@1371: + IFS="$save_ifs" mgl@1371: + func_stripname ' ' '' "$arg" mgl@1371: + arg=$func_stripname_result mgl@1371: + ;; mgl@1371: + mgl@1371: + -Wl,*) mgl@1371: + func_stripname '-Wl,' '' "$arg" mgl@1371: + args=$func_stripname_result mgl@1371: + arg= mgl@1371: + save_ifs="$IFS"; IFS=',' mgl@1371: + for flag in $args; do mgl@1371: + IFS="$save_ifs" mgl@1371: + func_quote_for_eval "$flag" mgl@1371: + arg="$arg $wl$func_quote_for_eval_result" mgl@1371: + compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" mgl@1371: + linker_flags="$linker_flags $func_quote_for_eval_result" mgl@1371: + done mgl@1371: + IFS="$save_ifs" mgl@1371: + func_stripname ' ' '' "$arg" mgl@1371: + arg=$func_stripname_result mgl@1371: + ;; mgl@1371: + mgl@1371: + -Xcompiler) mgl@1371: + prev=xcompiler mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -Xlinker) mgl@1371: + prev=xlinker mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + -XCClinker) mgl@1371: + prev=xcclinker mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + # -64, -mips[0-9] enable 64-bit mode on the SGI compiler mgl@1371: + # -r[0-9][0-9]* specifies the processor on the SGI compiler mgl@1371: + # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler mgl@1371: + # +DA*, +DD* enable 64-bit mode on the HP compiler mgl@1371: + # -q* pass through compiler args for the IBM compiler mgl@1371: + # -m*, -t[45]*, -txscale* pass through architecture-specific mgl@1371: + # compiler args for GCC mgl@1371: + # -F/path gives path to uninstalled frameworks, gcc on darwin mgl@1371: + # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC mgl@1371: + # @file GCC response files mgl@1371: + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ mgl@1371: + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) mgl@1371: + func_quote_for_eval "$arg" mgl@1371: + arg="$func_quote_for_eval_result" mgl@1371: + func_append compile_command " $arg" mgl@1371: + func_append finalize_command " $arg" mgl@1371: + compiler_flags="$compiler_flags $arg" mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + # Some other compiler flag. mgl@1371: + -* | +*) mgl@1371: + func_quote_for_eval "$arg" mgl@1371: + arg="$func_quote_for_eval_result" mgl@1371: + ;; mgl@1371: + mgl@1371: + *.$objext) mgl@1371: + # A standard object. mgl@1371: + objs="$objs $arg" mgl@1371: + ;; mgl@1371: + mgl@1371: + *.lo) mgl@1371: + # A libtool-controlled object. mgl@1371: + mgl@1371: + # Check to see that this really is a libtool object. mgl@1371: + if func_lalib_unsafe_p "$arg"; then mgl@1371: + pic_object= mgl@1371: + non_pic_object= mgl@1371: + mgl@1371: + # Read the .lo file mgl@1371: + func_source "$arg" mgl@1371: + mgl@1371: + if test -z "$pic_object" || mgl@1371: + test -z "$non_pic_object" || mgl@1371: + test "$pic_object" = none && mgl@1371: + test "$non_pic_object" = none; then mgl@1371: + func_fatal_error "cannot find name of object for \`$arg'" mgl@1371: + fi mgl@1371: + mgl@1371: + # Extract subdirectory from the argument. mgl@1371: + func_dirname "$arg" "/" "" mgl@1371: + xdir="$func_dirname_result" mgl@1371: + mgl@1371: + if test "$pic_object" != none; then mgl@1371: + # Prepend the subdirectory the object is found in. mgl@1371: + pic_object="$xdir$pic_object" mgl@1371: + mgl@1371: + if test "$prev" = dlfiles; then mgl@1371: + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then mgl@1371: + dlfiles="$dlfiles $pic_object" mgl@1371: + prev= mgl@1371: + continue mgl@1371: + else mgl@1371: + # If libtool objects are unsupported, then we need to preload. mgl@1371: + prev=dlprefiles mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + # CHECK ME: I think I busted this. -Ossama mgl@1371: + if test "$prev" = dlprefiles; then mgl@1371: + # Preload the old-style object. mgl@1371: + dlprefiles="$dlprefiles $pic_object" mgl@1371: + prev= mgl@1371: + fi mgl@1371: + mgl@1371: + # A PIC object. mgl@1371: + func_append libobjs " $pic_object" mgl@1371: + arg="$pic_object" mgl@1371: + fi mgl@1371: + mgl@1371: + # Non-PIC object. mgl@1371: + if test "$non_pic_object" != none; then mgl@1371: + # Prepend the subdirectory the object is found in. mgl@1371: + non_pic_object="$xdir$non_pic_object" mgl@1371: + mgl@1371: + # A standard non-PIC object mgl@1371: + func_append non_pic_objects " $non_pic_object" mgl@1371: + if test -z "$pic_object" || test "$pic_object" = none ; then mgl@1371: + arg="$non_pic_object" mgl@1371: + fi mgl@1371: + else mgl@1371: + # If the PIC object exists, use it instead. mgl@1371: + # $xdir was prepended to $pic_object above. mgl@1371: + non_pic_object="$pic_object" mgl@1371: + func_append non_pic_objects " $non_pic_object" mgl@1371: + fi mgl@1371: + else mgl@1371: + # Only an error if not doing a dry-run. mgl@1371: + if $opt_dry_run; then mgl@1371: + # Extract subdirectory from the argument. mgl@1371: + func_dirname "$arg" "/" "" mgl@1371: + xdir="$func_dirname_result" mgl@1371: + mgl@1371: + func_lo2o "$arg" mgl@1371: + pic_object=$xdir$objdir/$func_lo2o_result mgl@1371: + non_pic_object=$xdir$func_lo2o_result mgl@1371: + func_append libobjs " $pic_object" mgl@1371: + func_append non_pic_objects " $non_pic_object" mgl@1371: + else mgl@1371: + func_fatal_error "\`$arg' is not a valid libtool object" mgl@1371: + fi mgl@1371: + fi mgl@1371: + ;; mgl@1371: + mgl@1371: + *.$libext) mgl@1371: + # An archive. mgl@1371: + deplibs="$deplibs $arg" mgl@1371: + old_deplibs="$old_deplibs $arg" mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + *.la) mgl@1371: + # A libtool-controlled library. mgl@1371: + mgl@1371: + if test "$prev" = dlfiles; then mgl@1371: + # This library was specified with -dlopen. mgl@1371: + dlfiles="$dlfiles $arg" mgl@1371: + prev= mgl@1371: + elif test "$prev" = dlprefiles; then mgl@1371: + # The library was specified with -dlpreopen. mgl@1371: + dlprefiles="$dlprefiles $arg" mgl@1371: + prev= mgl@1371: + else mgl@1371: + deplibs="$deplibs $arg" mgl@1371: + fi mgl@1371: + continue mgl@1371: + ;; mgl@1371: + mgl@1371: + # Some other compiler argument. mgl@1371: + *) mgl@1371: + # Unknown arguments in both finalize_command and compile_command need mgl@1371: + # to be aesthetically quoted because they are evaled later. mgl@1371: + func_quote_for_eval "$arg" mgl@1371: + arg="$func_quote_for_eval_result" mgl@1371: + ;; mgl@1371: + esac # arg mgl@1371: + mgl@1371: + # Now actually substitute the argument into the commands. mgl@1371: + if test -n "$arg"; then mgl@1371: + func_append compile_command " $arg" mgl@1371: + func_append finalize_command " $arg" mgl@1371: + fi mgl@1371: + done # argument parsing loop mgl@1371: + mgl@1371: + test -n "$prev" && \ mgl@1371: + func_fatal_help "the \`$prevarg' option requires an argument" mgl@1371: + mgl@1371: + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then mgl@1371: + eval arg=\"$export_dynamic_flag_spec\" mgl@1371: + func_append compile_command " $arg" mgl@1371: + func_append finalize_command " $arg" mgl@1371: + fi mgl@1371: + mgl@1371: + oldlibs= mgl@1371: + # calculate the name of the file, without its directory mgl@1371: + func_basename "$output" mgl@1371: + outputname="$func_basename_result" mgl@1371: + libobjs_save="$libobjs" mgl@1371: + mgl@1371: + if test -n "$shlibpath_var"; then mgl@1371: + # get the directories listed in $shlibpath_var mgl@1371: + eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` mgl@1371: + else mgl@1371: + shlib_search_path= mgl@1371: + fi mgl@1371: + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" mgl@1371: + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" mgl@1371: + mgl@1371: + func_dirname "$output" "/" "" mgl@1371: + output_objdir="$func_dirname_result$objdir" mgl@1371: + # Create the object directory. mgl@1371: + func_mkdir_p "$output_objdir" mgl@1371: + mgl@1371: + # Determine the type of output mgl@1371: + case $output in mgl@1371: + "") mgl@1371: + func_fatal_help "you must specify an output file" mgl@1371: + ;; mgl@1371: + *.$libext) linkmode=oldlib ;; mgl@1371: + *.lo | *.$objext) linkmode=obj ;; mgl@1371: + *.la) linkmode=lib ;; mgl@1371: + *) linkmode=prog ;; # Anything else should be a program. mgl@1371: + esac mgl@1371: + mgl@1371: + specialdeplibs= mgl@1371: + mgl@1371: + libs= mgl@1371: + # Find all interdependent deplibs by searching for libraries mgl@1371: + # that are linked more than once (e.g. -la -lb -la) mgl@1371: + for deplib in $deplibs; do mgl@1371: + if $opt_duplicate_deps ; then mgl@1371: + case "$libs " in mgl@1371: + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + libs="$libs $deplib" mgl@1371: + done mgl@1371: + mgl@1371: + if test "$linkmode" = lib; then mgl@1371: + libs="$predeps $libs $compiler_lib_search_path $postdeps" mgl@1371: + mgl@1371: + # Compute libraries that are listed more than once in $predeps mgl@1371: + # $postdeps and mark them as special (i.e., whose duplicates are mgl@1371: + # not to be eliminated). mgl@1371: + pre_post_deps= mgl@1371: + if $opt_duplicate_compiler_generated_deps; then mgl@1371: + for pre_post_dep in $predeps $postdeps; do mgl@1371: + case "$pre_post_deps " in mgl@1371: + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; mgl@1371: + esac mgl@1371: + pre_post_deps="$pre_post_deps $pre_post_dep" mgl@1371: + done mgl@1371: + fi mgl@1371: + pre_post_deps= mgl@1371: + fi mgl@1371: + mgl@1371: + deplibs= mgl@1371: + newdependency_libs= mgl@1371: + newlib_search_path= mgl@1371: + need_relink=no # whether we're linking any uninstalled libtool libraries mgl@1371: + notinst_deplibs= # not-installed libtool libraries mgl@1371: + notinst_path= # paths that contain not-installed libtool libraries mgl@1371: + mgl@1371: + case $linkmode in mgl@1371: + lib) mgl@1371: + passes="conv dlpreopen link" mgl@1371: + for file in $dlfiles $dlprefiles; do mgl@1371: + case $file in mgl@1371: + *.la) ;; mgl@1371: + *) mgl@1371: + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + ;; mgl@1371: + prog) mgl@1371: + compile_deplibs= mgl@1371: + finalize_deplibs= mgl@1371: + alldeplibs=no mgl@1371: + newdlfiles= mgl@1371: + newdlprefiles= mgl@1371: + passes="conv scan dlopen dlpreopen link" mgl@1371: + ;; mgl@1371: + *) passes="conv" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + for pass in $passes; do mgl@1371: + # The preopen pass in lib mode reverses $deplibs; put it back here mgl@1371: + # so that -L comes before libs that need it for instance... mgl@1371: + if test "$linkmode,$pass" = "lib,link"; then mgl@1371: + ## FIXME: Find the place where the list is rebuilt in the wrong mgl@1371: + ## order, and fix it there properly mgl@1371: + tmp_deplibs= mgl@1371: + for deplib in $deplibs; do mgl@1371: + tmp_deplibs="$deplib $tmp_deplibs" mgl@1371: + done mgl@1371: + deplibs="$tmp_deplibs" mgl@1371: + fi mgl@1371: + mgl@1371: + if test "$linkmode,$pass" = "lib,link" || mgl@1371: + test "$linkmode,$pass" = "prog,scan"; then mgl@1371: + libs="$deplibs" mgl@1371: + deplibs= mgl@1371: + fi mgl@1371: + if test "$linkmode" = prog; then mgl@1371: + case $pass in mgl@1371: + dlopen) libs="$dlfiles" ;; mgl@1371: + dlpreopen) libs="$dlprefiles" ;; mgl@1371: + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + if test "$linkmode,$pass" = "lib,dlpreopen"; then mgl@1371: + # Collect and forward deplibs of preopened libtool libs mgl@1371: + for lib in $dlprefiles; do mgl@1371: + # Ignore non-libtool-libs mgl@1371: + dependency_libs= mgl@1371: + case $lib in mgl@1371: + *.la) func_source "$lib" ;; mgl@1371: + esac mgl@1371: + mgl@1371: + # Collect preopened libtool deplibs, except any this library mgl@1371: + # has declared as weak libs mgl@1371: + for deplib in $dependency_libs; do mgl@1371: + deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` mgl@1371: + case " $weak_libs " in mgl@1371: + *" $deplib_base "*) ;; mgl@1371: + *) deplibs="$deplibs $deplib" ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + done mgl@1371: + libs="$dlprefiles" mgl@1371: + fi mgl@1371: + if test "$pass" = dlopen; then mgl@1371: + # Collect dlpreopened libraries mgl@1371: + save_deplibs="$deplibs" mgl@1371: + deplibs= mgl@1371: + fi mgl@1371: + mgl@1371: + for deplib in $libs; do mgl@1371: + lib= mgl@1371: + found=no mgl@1371: + case $deplib in mgl@1371: + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) mgl@1371: + if test "$linkmode,$pass" = "prog,link"; then mgl@1371: + compile_deplibs="$deplib $compile_deplibs" mgl@1371: + finalize_deplibs="$deplib $finalize_deplibs" mgl@1371: + else mgl@1371: + compiler_flags="$compiler_flags $deplib" mgl@1371: + if test "$linkmode" = lib ; then mgl@1371: + case "$new_inherited_linker_flags " in mgl@1371: + *" $deplib "*) ;; mgl@1371: + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + fi mgl@1371: + continue mgl@1371: + ;; mgl@1371: + -l*) mgl@1371: + if test "$linkmode" != lib && test "$linkmode" != prog; then mgl@1371: + func_warning "\`-l' is ignored for archives/objects" mgl@1371: + continue mgl@1371: + fi mgl@1371: + func_stripname '-l' '' "$deplib" mgl@1371: + name=$func_stripname_result mgl@1371: + for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do mgl@1371: + for search_ext in .la $std_shrext .so .a; do mgl@1371: + # Search the libtool library mgl@1371: + lib="$searchdir/lib${name}${search_ext}" mgl@1371: + if test -f "$lib"; then mgl@1371: + if test "$search_ext" = ".la"; then mgl@1371: + found=yes mgl@1371: + else mgl@1371: + found=no mgl@1371: + fi mgl@1371: + break 2 mgl@1371: + fi mgl@1371: + done mgl@1371: + done mgl@1371: + if test "$found" != yes; then mgl@1371: + # deplib doesn't seem to be a libtool library mgl@1371: + if test "$linkmode,$pass" = "prog,link"; then mgl@1371: + compile_deplibs="$deplib $compile_deplibs" mgl@1371: + finalize_deplibs="$deplib $finalize_deplibs" mgl@1371: + else mgl@1371: + deplibs="$deplib $deplibs" mgl@1371: + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" mgl@1371: + fi mgl@1371: + continue mgl@1371: + else # deplib is a libtool library mgl@1371: + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, mgl@1371: + # We need to do some special things here, and not later. mgl@1371: + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then mgl@1371: + case " $predeps $postdeps " in mgl@1371: + *" $deplib "*) mgl@1371: + if func_lalib_p "$lib"; then mgl@1371: + library_names= mgl@1371: + old_library= mgl@1371: + func_source "$lib" mgl@1371: + for l in $old_library $library_names; do mgl@1371: + ll="$l" mgl@1371: + done mgl@1371: + if test "X$ll" = "X$old_library" ; then # only static version available mgl@1371: + found=no mgl@1371: + func_dirname "$lib" "" "." mgl@1371: + ladir="$func_dirname_result" mgl@1371: + lib=$ladir/$old_library mgl@1371: + if test "$linkmode,$pass" = "prog,link"; then mgl@1371: + compile_deplibs="$deplib $compile_deplibs" mgl@1371: + finalize_deplibs="$deplib $finalize_deplibs" mgl@1371: + else mgl@1371: + deplibs="$deplib $deplibs" mgl@1371: + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" mgl@1371: + fi mgl@1371: + continue mgl@1371: + fi mgl@1371: + fi mgl@1371: + ;; mgl@1371: + *) ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + fi mgl@1371: + ;; # -l mgl@1371: + *.ltframework) mgl@1371: + if test "$linkmode,$pass" = "prog,link"; then mgl@1371: + compile_deplibs="$deplib $compile_deplibs" mgl@1371: + finalize_deplibs="$deplib $finalize_deplibs" mgl@1371: + else mgl@1371: + deplibs="$deplib $deplibs" mgl@1371: + if test "$linkmode" = lib ; then mgl@1371: + case "$new_inherited_linker_flags " in mgl@1371: + *" $deplib "*) ;; mgl@1371: + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + fi mgl@1371: + continue mgl@1371: + ;; mgl@1371: + -L*) mgl@1371: + case $linkmode in mgl@1371: + lib) mgl@1371: + deplibs="$deplib $deplibs" mgl@1371: + test "$pass" = conv && continue mgl@1371: + newdependency_libs="$deplib $newdependency_libs" mgl@1371: + func_stripname '-L' '' "$deplib" mgl@1371: + newlib_search_path="$newlib_search_path $func_stripname_result" mgl@1371: + ;; mgl@1371: + prog) mgl@1371: + if test "$pass" = conv; then mgl@1371: + deplibs="$deplib $deplibs" mgl@1371: + continue mgl@1371: + fi mgl@1371: + if test "$pass" = scan; then mgl@1371: + deplibs="$deplib $deplibs" mgl@1371: + else mgl@1371: + compile_deplibs="$deplib $compile_deplibs" mgl@1371: + finalize_deplibs="$deplib $finalize_deplibs" mgl@1371: + fi mgl@1371: + func_stripname '-L' '' "$deplib" mgl@1371: + newlib_search_path="$newlib_search_path $func_stripname_result" mgl@1371: + ;; mgl@1371: + *) mgl@1371: + func_warning "\`-L' is ignored for archives/objects" mgl@1371: + ;; mgl@1371: + esac # linkmode mgl@1371: + continue mgl@1371: + ;; # -L mgl@1371: + -R*) mgl@1371: + if test "$pass" = link; then mgl@1371: + func_stripname '-R' '' "$deplib" mgl@1371: + dir=$func_stripname_result mgl@1371: + # Make sure the xrpath contains only unique directories. mgl@1371: + case "$xrpath " in mgl@1371: + *" $dir "*) ;; mgl@1371: + *) xrpath="$xrpath $dir" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + deplibs="$deplib $deplibs" mgl@1371: + continue mgl@1371: + ;; mgl@1371: + *.la) lib="$deplib" ;; mgl@1371: + *.$libext) mgl@1371: + if test "$pass" = conv; then mgl@1371: + deplibs="$deplib $deplibs" mgl@1371: + continue mgl@1371: + fi mgl@1371: + case $linkmode in mgl@1371: + lib) mgl@1371: + # Linking convenience modules into shared libraries is allowed, mgl@1371: + # but linking other static libraries is non-portable. mgl@1371: + case " $dlpreconveniencelibs " in mgl@1371: + *" $deplib "*) ;; mgl@1371: + *) mgl@1371: + valid_a_lib=no mgl@1371: + case $deplibs_check_method in mgl@1371: + match_pattern*) mgl@1371: + set dummy $deplibs_check_method; shift mgl@1371: + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` mgl@1371: + if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ mgl@1371: + | $EGREP "$match_pattern_regex" > /dev/null; then mgl@1371: + valid_a_lib=yes mgl@1371: + fi mgl@1371: + ;; mgl@1371: + pass_all) mgl@1371: + valid_a_lib=yes mgl@1371: + ;; mgl@1371: + esac mgl@1371: + if test "$valid_a_lib" != yes; then mgl@1371: + $ECHO mgl@1371: + $ECHO "*** Warning: Trying to link with static lib archive $deplib." mgl@1371: + $ECHO "*** I have the capability to make that library automatically link in when" mgl@1371: + $ECHO "*** you link to this library. But I can only do this if you have a" mgl@1371: + $ECHO "*** shared version of the library, which you do not appear to have" mgl@1371: + $ECHO "*** because the file extensions .$libext of this argument makes me believe" mgl@1371: + $ECHO "*** that it is just a static archive that I should not use here." mgl@1371: + else mgl@1371: + $ECHO mgl@1371: + $ECHO "*** Warning: Linking the shared library $output against the" mgl@1371: + $ECHO "*** static library $deplib is not portable!" mgl@1371: + deplibs="$deplib $deplibs" mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: + continue mgl@1371: + ;; mgl@1371: + prog) mgl@1371: + if test "$pass" != link; then mgl@1371: + deplibs="$deplib $deplibs" mgl@1371: + else mgl@1371: + compile_deplibs="$deplib $compile_deplibs" mgl@1371: + finalize_deplibs="$deplib $finalize_deplibs" mgl@1371: + fi mgl@1371: + continue mgl@1371: + ;; mgl@1371: + esac # linkmode mgl@1371: + ;; # *.$libext mgl@1371: + *.lo | *.$objext) mgl@1371: + if test "$pass" = conv; then mgl@1371: + deplibs="$deplib $deplibs" mgl@1371: + elif test "$linkmode" = prog; then mgl@1371: + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then mgl@1371: + # If there is no dlopen support or we're linking statically, mgl@1371: + # we need to preload. mgl@1371: + newdlprefiles="$newdlprefiles $deplib" mgl@1371: + compile_deplibs="$deplib $compile_deplibs" mgl@1371: + finalize_deplibs="$deplib $finalize_deplibs" mgl@1371: + else mgl@1371: + newdlfiles="$newdlfiles $deplib" mgl@1371: + fi mgl@1371: + fi mgl@1371: + continue mgl@1371: + ;; mgl@1371: + %DEPLIBS%) mgl@1371: + alldeplibs=yes mgl@1371: + continue mgl@1371: + ;; mgl@1371: + esac # case $deplib mgl@1371: + mgl@1371: + if test "$found" = yes || test -f "$lib"; then : mgl@1371: + else mgl@1371: + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" mgl@1371: + fi mgl@1371: + mgl@1371: + # Check to see that this really is a libtool archive. mgl@1371: + func_lalib_unsafe_p "$lib" \ mgl@1371: + || func_fatal_error "\`$lib' is not a valid libtool archive" mgl@1371: + mgl@1371: + func_dirname "$lib" "" "." mgl@1371: + ladir="$func_dirname_result" mgl@1371: + mgl@1371: + dlname= mgl@1371: + dlopen= mgl@1371: + dlpreopen= mgl@1371: + libdir= mgl@1371: + library_names= mgl@1371: + old_library= mgl@1371: + inherited_linker_flags= mgl@1371: + # If the library was installed with an old release of libtool, mgl@1371: + # it will not redefine variables installed, or shouldnotlink mgl@1371: + installed=yes mgl@1371: + shouldnotlink=no mgl@1371: + avoidtemprpath= mgl@1371: + mgl@1371: + mgl@1371: + # Read the .la file mgl@1371: + func_source "$lib" mgl@1371: + mgl@1371: + # Convert "-framework foo" to "foo.ltframework" mgl@1371: + if test -n "$inherited_linker_flags"; then mgl@1371: + tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` mgl@1371: + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do mgl@1371: + case " $new_inherited_linker_flags " in mgl@1371: + *" $tmp_inherited_linker_flag "*) ;; mgl@1371: + *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; mgl@1371: + esac mgl@1371: + done mgl@1371: + fi mgl@1371: + dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` mgl@1371: + if test "$linkmode,$pass" = "prog,link"; then mgl@1371: + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" mgl@1371: + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" mgl@1371: + else mgl@1371: + compiler_flags="$compiler_flags $inherited_linker_flags" mgl@1371: + fi mgl@1371: + if test "$linkmode,$pass" = "lib,link" || mgl@1371: + test "$linkmode,$pass" = "prog,scan" || mgl@1371: + { test "$linkmode" != prog && test "$linkmode" != lib; }; then mgl@1371: + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" mgl@1371: + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" mgl@1371: + fi mgl@1371: + mgl@1371: + if test "$pass" = conv; then mgl@1371: + # Only check for convenience libraries mgl@1371: + deplibs="$lib $deplibs" mgl@1371: + if test -z "$libdir"; then mgl@1371: + if test -z "$old_library"; then mgl@1371: + func_fatal_error "cannot find name of link library for \`$lib'" mgl@1371: + fi mgl@1371: + # It is a libtool convenience library, so add in its objects. mgl@1371: + convenience="$convenience $ladir/$objdir/$old_library" mgl@1371: + old_convenience="$old_convenience $ladir/$objdir/$old_library" mgl@1371: + elif test "$linkmode" != prog && test "$linkmode" != lib; then mgl@1371: + func_fatal_error "\`$lib' is not a convenience library" mgl@1371: + fi mgl@1371: + tmp_libs= mgl@1371: + for deplib in $dependency_libs; do mgl@1371: + deplibs="$deplib $deplibs" mgl@1371: + if $opt_duplicate_deps ; then mgl@1371: + case "$tmp_libs " in mgl@1371: + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + tmp_libs="$tmp_libs $deplib" mgl@1371: + done mgl@1371: + continue mgl@1371: + fi # $pass = conv mgl@1371: + mgl@1371: + mgl@1371: + # Get the name of the library we link against. mgl@1371: + linklib= mgl@1371: + for l in $old_library $library_names; do mgl@1371: + linklib="$l" mgl@1371: + done mgl@1371: + if test -z "$linklib"; then mgl@1371: + func_fatal_error "cannot find name of link library for \`$lib'" mgl@1371: + fi mgl@1371: + mgl@1371: + # This library was specified with -dlopen. mgl@1371: + if test "$pass" = dlopen; then mgl@1371: + if test -z "$libdir"; then mgl@1371: + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" mgl@1371: + fi mgl@1371: + if test -z "$dlname" || mgl@1371: + test "$dlopen_support" != yes || mgl@1371: + test "$build_libtool_libs" = no; then mgl@1371: + # If there is no dlname, no dlopen support or we're linking mgl@1371: + # statically, we need to preload. We also need to preload any mgl@1371: + # dependent libraries so libltdl's deplib preloader doesn't mgl@1371: + # bomb out in the load deplibs phase. mgl@1371: + dlprefiles="$dlprefiles $lib $dependency_libs" mgl@1371: + else mgl@1371: + newdlfiles="$newdlfiles $lib" mgl@1371: + fi mgl@1371: + continue mgl@1371: + fi # $pass = dlopen mgl@1371: + mgl@1371: + # We need an absolute path. mgl@1371: + case $ladir in mgl@1371: + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; mgl@1371: + *) mgl@1371: + abs_ladir=`cd "$ladir" && pwd` mgl@1371: + if test -z "$abs_ladir"; then mgl@1371: + func_warning "cannot determine absolute directory name of \`$ladir'" mgl@1371: + func_warning "passing it literally to the linker, although it might fail" mgl@1371: + abs_ladir="$ladir" mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: + func_basename "$lib" mgl@1371: + laname="$func_basename_result" mgl@1371: + mgl@1371: + # Find the relevant object directory and library name. mgl@1371: + if test "X$installed" = Xyes; then mgl@1371: + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then mgl@1371: + func_warning "library \`$lib' was moved." mgl@1371: + dir="$ladir" mgl@1371: + absdir="$abs_ladir" mgl@1371: + libdir="$abs_ladir" mgl@1371: + else mgl@1371: + dir="$libdir" mgl@1371: + absdir="$libdir" mgl@1371: + fi mgl@1371: + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes mgl@1371: + else mgl@1371: + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then mgl@1371: + dir="$ladir" mgl@1371: + absdir="$abs_ladir" mgl@1371: + # Remove this search path later mgl@1371: + notinst_path="$notinst_path $abs_ladir" mgl@1371: + else mgl@1371: + dir="$ladir/$objdir" mgl@1371: + absdir="$abs_ladir/$objdir" mgl@1371: + # Remove this search path later mgl@1371: + notinst_path="$notinst_path $abs_ladir" mgl@1371: + fi mgl@1371: + fi # $installed = yes mgl@1371: + func_stripname 'lib' '.la' "$laname" mgl@1371: + name=$func_stripname_result mgl@1371: + mgl@1371: + # This library was specified with -dlpreopen. mgl@1371: + if test "$pass" = dlpreopen; then mgl@1371: + if test -z "$libdir" && test "$linkmode" = prog; then mgl@1371: + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" mgl@1371: + fi mgl@1371: + # Prefer using a static library (so that no silly _DYNAMIC symbols mgl@1371: + # are required to link). mgl@1371: + if test -n "$old_library"; then mgl@1371: + newdlprefiles="$newdlprefiles $dir/$old_library" mgl@1371: + # Keep a list of preopened convenience libraries to check mgl@1371: + # that they are being used correctly in the link pass. mgl@1371: + test -z "$libdir" && \ mgl@1371: + dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" mgl@1371: + # Otherwise, use the dlname, so that lt_dlopen finds it. mgl@1371: + elif test -n "$dlname"; then mgl@1371: + newdlprefiles="$newdlprefiles $dir/$dlname" mgl@1371: + else mgl@1371: + newdlprefiles="$newdlprefiles $dir/$linklib" mgl@1371: + fi mgl@1371: + fi # $pass = dlpreopen mgl@1371: + mgl@1371: + if test -z "$libdir"; then mgl@1371: + # Link the convenience library mgl@1371: + if test "$linkmode" = lib; then mgl@1371: + deplibs="$dir/$old_library $deplibs" mgl@1371: + elif test "$linkmode,$pass" = "prog,link"; then mgl@1371: + compile_deplibs="$dir/$old_library $compile_deplibs" mgl@1371: + finalize_deplibs="$dir/$old_library $finalize_deplibs" mgl@1371: + else mgl@1371: + deplibs="$lib $deplibs" # used for prog,scan pass mgl@1371: + fi mgl@1371: + continue mgl@1371: + fi mgl@1371: + mgl@1371: + mgl@1371: + if test "$linkmode" = prog && test "$pass" != link; then mgl@1371: + newlib_search_path="$newlib_search_path $ladir" mgl@1371: + deplibs="$lib $deplibs" mgl@1371: + mgl@1371: + linkalldeplibs=no mgl@1371: + if test "$link_all_deplibs" != no || test -z "$library_names" || mgl@1371: + test "$build_libtool_libs" = no; then mgl@1371: + linkalldeplibs=yes mgl@1371: + fi mgl@1371: + mgl@1371: + tmp_libs= mgl@1371: + for deplib in $dependency_libs; do mgl@1371: + case $deplib in mgl@1371: + -L*) func_stripname '-L' '' "$deplib" mgl@1371: + newlib_search_path="$newlib_search_path $func_stripname_result" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + # Need to link against all dependency_libs? mgl@1371: + if test "$linkalldeplibs" = yes; then mgl@1371: + deplibs="$deplib $deplibs" mgl@1371: + else mgl@1371: + # Need to hardcode shared library paths mgl@1371: + # or/and link against static libraries mgl@1371: + newdependency_libs="$deplib $newdependency_libs" mgl@1371: + fi mgl@1371: + if $opt_duplicate_deps ; then mgl@1371: + case "$tmp_libs " in mgl@1371: + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + tmp_libs="$tmp_libs $deplib" mgl@1371: + done # for deplib mgl@1371: + continue mgl@1371: + fi # $linkmode = prog... mgl@1371: + mgl@1371: + if test "$linkmode,$pass" = "prog,link"; then mgl@1371: + if test -n "$library_names" && mgl@1371: + { { test "$prefer_static_libs" = no || mgl@1371: + test "$prefer_static_libs,$installed" = "built,yes"; } || mgl@1371: + test -z "$old_library"; }; then mgl@1371: + # We need to hardcode the library path mgl@1371: + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then mgl@1371: + # Make sure the rpath contains only unique directories. mgl@1371: + case "$temp_rpath:" in mgl@1371: + *"$absdir:"*) ;; mgl@1371: + *) temp_rpath="$temp_rpath$absdir:" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + mgl@1371: + # Hardcode the library path. mgl@1371: + # Skip directories that are in the system default run-time mgl@1371: + # search path. mgl@1371: + case " $sys_lib_dlsearch_path " in mgl@1371: + *" $absdir "*) ;; mgl@1371: + *) mgl@1371: + case "$compile_rpath " in mgl@1371: + *" $absdir "*) ;; mgl@1371: + *) compile_rpath="$compile_rpath $absdir" mgl@1371: + esac mgl@1371: + ;; mgl@1371: + esac mgl@1371: + case " $sys_lib_dlsearch_path " in mgl@1371: + *" $libdir "*) ;; mgl@1371: + *) mgl@1371: + case "$finalize_rpath " in mgl@1371: + *" $libdir "*) ;; mgl@1371: + *) finalize_rpath="$finalize_rpath $libdir" mgl@1371: + esac mgl@1371: + ;; mgl@1371: + esac mgl@1371: + fi # $linkmode,$pass = prog,link... mgl@1371: + mgl@1371: + if test "$alldeplibs" = yes && mgl@1371: + { test "$deplibs_check_method" = pass_all || mgl@1371: + { test "$build_libtool_libs" = yes && mgl@1371: + test -n "$library_names"; }; }; then mgl@1371: + # We only need to search for static libraries mgl@1371: + continue mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + link_static=no # Whether the deplib will be linked statically mgl@1371: + use_static_libs=$prefer_static_libs mgl@1371: + if test "$use_static_libs" = built && test "$installed" = yes; then mgl@1371: + use_static_libs=no mgl@1371: + fi mgl@1371: + if test -n "$library_names" && mgl@1371: + { test "$use_static_libs" = no || test -z "$old_library"; }; then mgl@1371: + case $host in mgl@1371: + *cygwin* | *mingw*) mgl@1371: + # No point in relinking DLLs because paths are not encoded mgl@1371: + notinst_deplibs="$notinst_deplibs $lib" mgl@1371: + need_relink=no mgl@1371: + ;; mgl@1371: + *) mgl@1371: + if test "$installed" = no; then mgl@1371: + notinst_deplibs="$notinst_deplibs $lib" mgl@1371: + need_relink=yes mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: + # This is a shared library mgl@1371: + mgl@1371: + # Warn about portability, can't link against -module's on some mgl@1371: + # systems (darwin). Don't bleat about dlopened modules though! mgl@1371: + dlopenmodule="" mgl@1371: + for dlpremoduletest in $dlprefiles; do mgl@1371: + if test "X$dlpremoduletest" = "X$lib"; then mgl@1371: + dlopenmodule="$dlpremoduletest" mgl@1371: + break mgl@1371: + fi mgl@1371: + done mgl@1371: + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then mgl@1371: + $ECHO mgl@1371: + if test "$linkmode" = prog; then mgl@1371: + $ECHO "*** Warning: Linking the executable $output against the loadable module" mgl@1371: + else mgl@1371: + $ECHO "*** Warning: Linking the shared library $output against the loadable module" mgl@1371: + fi mgl@1371: + $ECHO "*** $linklib is not portable!" mgl@1371: + fi mgl@1371: + if test "$linkmode" = lib && mgl@1371: + test "$hardcode_into_libs" = yes; then mgl@1371: + # Hardcode the library path. mgl@1371: + # Skip directories that are in the system default run-time mgl@1371: + # search path. mgl@1371: + case " $sys_lib_dlsearch_path " in mgl@1371: + *" $absdir "*) ;; mgl@1371: + *) mgl@1371: + case "$compile_rpath " in mgl@1371: + *" $absdir "*) ;; mgl@1371: + *) compile_rpath="$compile_rpath $absdir" mgl@1371: + esac mgl@1371: + ;; mgl@1371: + esac mgl@1371: + case " $sys_lib_dlsearch_path " in mgl@1371: + *" $libdir "*) ;; mgl@1371: + *) mgl@1371: + case "$finalize_rpath " in mgl@1371: + *" $libdir "*) ;; mgl@1371: + *) finalize_rpath="$finalize_rpath $libdir" mgl@1371: + esac mgl@1371: + ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + mgl@1371: + if test -n "$old_archive_from_expsyms_cmds"; then mgl@1371: + # figure out the soname mgl@1371: + set dummy $library_names mgl@1371: + shift mgl@1371: + realname="$1" mgl@1371: + shift mgl@1371: + libname=`eval "\\$ECHO \"$libname_spec\""` mgl@1371: + # use dlname if we got it. it's perfectly good, no? mgl@1371: + if test -n "$dlname"; then mgl@1371: + soname="$dlname" mgl@1371: + elif test -n "$soname_spec"; then mgl@1371: + # bleh windows mgl@1371: + case $host in mgl@1371: + *cygwin* | mingw*) mgl@1371: + major=`expr $current - $age` mgl@1371: + versuffix="-$major" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + eval soname=\"$soname_spec\" mgl@1371: + else mgl@1371: + soname="$realname" mgl@1371: + fi mgl@1371: + mgl@1371: + # Make a new name for the extract_expsyms_cmds to use mgl@1371: + soroot="$soname" mgl@1371: + func_basename "$soroot" mgl@1371: + soname="$func_basename_result" mgl@1371: + func_stripname 'lib' '.dll' "$soname" mgl@1371: + newlib=libimp-$func_stripname_result.a mgl@1371: + mgl@1371: + # If the library has no export list, then create one now mgl@1371: + if test -f "$output_objdir/$soname-def"; then : mgl@1371: + else mgl@1371: + func_echo "extracting exported symbol list from \`$soname'" mgl@1371: + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' mgl@1371: + fi mgl@1371: + mgl@1371: + # Create $newlib mgl@1371: + if test -f "$output_objdir/$newlib"; then :; else mgl@1371: + func_echo "generating import library for \`$soname'" mgl@1371: + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' mgl@1371: + fi mgl@1371: + # make sure the library variables are pointing to the new library mgl@1371: + dir=$output_objdir mgl@1371: + linklib=$newlib mgl@1371: + fi # test -n "$old_archive_from_expsyms_cmds" mgl@1371: + mgl@1371: + if test "$linkmode" = prog || test "$mode" != relink; then mgl@1371: + add_shlibpath= mgl@1371: + add_dir= mgl@1371: + add= mgl@1371: + lib_linked=yes mgl@1371: + case $hardcode_action in mgl@1371: + immediate | unsupported) mgl@1371: + if test "$hardcode_direct" = no; then mgl@1371: + add="$dir/$linklib" mgl@1371: + case $host in mgl@1371: + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; mgl@1371: + *-*-sysv4*uw2*) add_dir="-L$dir" ;; mgl@1371: + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ mgl@1371: + *-*-unixware7*) add_dir="-L$dir" ;; mgl@1371: + *-*-darwin* ) mgl@1371: + # if the lib is a (non-dlopened) module then we can not mgl@1371: + # link against it, someone is ignoring the earlier warnings mgl@1371: + if /usr/bin/file -L $add 2> /dev/null | mgl@1371: + $GREP ": [^:]* bundle" >/dev/null ; then mgl@1371: + if test "X$dlopenmodule" != "X$lib"; then mgl@1371: + $ECHO "*** Warning: lib $linklib is a module, not a shared library" mgl@1371: + if test -z "$old_library" ; then mgl@1371: + $ECHO mgl@1371: + $ECHO "*** And there doesn't seem to be a static archive available" mgl@1371: + $ECHO "*** The link will probably fail, sorry" mgl@1371: + else mgl@1371: + add="$dir/$old_library" mgl@1371: + fi mgl@1371: + elif test -n "$old_library"; then mgl@1371: + add="$dir/$old_library" mgl@1371: + fi mgl@1371: + fi mgl@1371: + esac mgl@1371: + elif test "$hardcode_minus_L" = no; then mgl@1371: + case $host in mgl@1371: + *-*-sunos*) add_shlibpath="$dir" ;; mgl@1371: + esac mgl@1371: + add_dir="-L$dir" mgl@1371: + add="-l$name" mgl@1371: + elif test "$hardcode_shlibpath_var" = no; then mgl@1371: + add_shlibpath="$dir" mgl@1371: + add="-l$name" mgl@1371: + else mgl@1371: + lib_linked=no mgl@1371: + fi mgl@1371: + ;; mgl@1371: + relink) mgl@1371: + if test "$hardcode_direct" = yes && mgl@1371: + test "$hardcode_direct_absolute" = no; then mgl@1371: + add="$dir/$linklib" mgl@1371: + elif test "$hardcode_minus_L" = yes; then mgl@1371: + add_dir="-L$dir" mgl@1371: + # Try looking first in the location we're being installed to. mgl@1371: + if test -n "$inst_prefix_dir"; then mgl@1371: + case $libdir in mgl@1371: + [\\/]*) mgl@1371: + add_dir="$add_dir -L$inst_prefix_dir$libdir" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + add="-l$name" mgl@1371: + elif test "$hardcode_shlibpath_var" = yes; then mgl@1371: + add_shlibpath="$dir" mgl@1371: + add="-l$name" mgl@1371: + else mgl@1371: + lib_linked=no mgl@1371: + fi mgl@1371: + ;; mgl@1371: + *) lib_linked=no ;; mgl@1371: + esac mgl@1371: + mgl@1371: + if test "$lib_linked" != yes; then mgl@1371: + func_fatal_configuration "unsupported hardcode properties" mgl@1371: + fi mgl@1371: + mgl@1371: + if test -n "$add_shlibpath"; then mgl@1371: + case :$compile_shlibpath: in mgl@1371: + *":$add_shlibpath:"*) ;; mgl@1371: + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + if test "$linkmode" = prog; then mgl@1371: + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" mgl@1371: + test -n "$add" && compile_deplibs="$add $compile_deplibs" mgl@1371: + else mgl@1371: + test -n "$add_dir" && deplibs="$add_dir $deplibs" mgl@1371: + test -n "$add" && deplibs="$add $deplibs" mgl@1371: + if test "$hardcode_direct" != yes && mgl@1371: + test "$hardcode_minus_L" != yes && mgl@1371: + test "$hardcode_shlibpath_var" = yes; then mgl@1371: + case :$finalize_shlibpath: in mgl@1371: + *":$libdir:"*) ;; mgl@1371: + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + if test "$linkmode" = prog || test "$mode" = relink; then mgl@1371: + add_shlibpath= mgl@1371: + add_dir= mgl@1371: + add= mgl@1371: + # Finalize command for both is simple: just hardcode it. mgl@1371: + if test "$hardcode_direct" = yes && mgl@1371: + test "$hardcode_direct_absolute" = no; then mgl@1371: + add="$libdir/$linklib" mgl@1371: + elif test "$hardcode_minus_L" = yes; then mgl@1371: + add_dir="-L$libdir" mgl@1371: + add="-l$name" mgl@1371: + elif test "$hardcode_shlibpath_var" = yes; then mgl@1371: + case :$finalize_shlibpath: in mgl@1371: + *":$libdir:"*) ;; mgl@1371: + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; mgl@1371: + esac mgl@1371: + add="-l$name" mgl@1371: + elif test "$hardcode_automatic" = yes; then mgl@1371: + if test -n "$inst_prefix_dir" && mgl@1371: + test -f "$inst_prefix_dir$libdir/$linklib" ; then mgl@1371: + add="$inst_prefix_dir$libdir/$linklib" mgl@1371: + else mgl@1371: + add="$libdir/$linklib" mgl@1371: + fi mgl@1371: + else mgl@1371: + # We cannot seem to hardcode it, guess we'll fake it. mgl@1371: + add_dir="-L$libdir" mgl@1371: + # Try looking first in the location we're being installed to. mgl@1371: + if test -n "$inst_prefix_dir"; then mgl@1371: + case $libdir in mgl@1371: + [\\/]*) mgl@1371: + add_dir="$add_dir -L$inst_prefix_dir$libdir" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + add="-l$name" mgl@1371: + fi mgl@1371: + mgl@1371: + if test "$linkmode" = prog; then mgl@1371: + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" mgl@1371: + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" mgl@1371: + else mgl@1371: + test -n "$add_dir" && deplibs="$add_dir $deplibs" mgl@1371: + test -n "$add" && deplibs="$add $deplibs" mgl@1371: + fi mgl@1371: + fi mgl@1371: + elif test "$linkmode" = prog; then mgl@1371: + # Here we assume that one of hardcode_direct or hardcode_minus_L mgl@1371: + # is not unsupported. This is valid on all known static and mgl@1371: + # shared platforms. mgl@1371: + if test "$hardcode_direct" != unsupported; then mgl@1371: + test -n "$old_library" && linklib="$old_library" mgl@1371: + compile_deplibs="$dir/$linklib $compile_deplibs" mgl@1371: + finalize_deplibs="$dir/$linklib $finalize_deplibs" mgl@1371: + else mgl@1371: + compile_deplibs="-l$name -L$dir $compile_deplibs" mgl@1371: + finalize_deplibs="-l$name -L$dir $finalize_deplibs" mgl@1371: + fi mgl@1371: + elif test "$build_libtool_libs" = yes; then mgl@1371: + # Not a shared library mgl@1371: + if test "$deplibs_check_method" != pass_all; then mgl@1371: + # We're trying link a shared library against a static one mgl@1371: + # but the system doesn't support it. mgl@1371: + mgl@1371: + # Just print a warning and add the library to dependency_libs so mgl@1371: + # that the program can be linked against the static library. mgl@1371: + $ECHO mgl@1371: + $ECHO "*** Warning: This system can not link to static lib archive $lib." mgl@1371: + $ECHO "*** I have the capability to make that library automatically link in when" mgl@1371: + $ECHO "*** you link to this library. But I can only do this if you have a" mgl@1371: + $ECHO "*** shared version of the library, which you do not appear to have." mgl@1371: + if test "$module" = yes; then mgl@1371: + $ECHO "*** But as you try to build a module library, libtool will still create " mgl@1371: + $ECHO "*** a static module, that should work as long as the dlopening application" mgl@1371: + $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." mgl@1371: + if test -z "$global_symbol_pipe"; then mgl@1371: + $ECHO mgl@1371: + $ECHO "*** However, this would only work if libtool was able to extract symbol" mgl@1371: + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" mgl@1371: + $ECHO "*** not find such a program. So, this module is probably useless." mgl@1371: + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." mgl@1371: + fi mgl@1371: + if test "$build_old_libs" = no; then mgl@1371: + build_libtool_libs=module mgl@1371: + build_old_libs=yes mgl@1371: + else mgl@1371: + build_libtool_libs=no mgl@1371: + fi mgl@1371: + fi mgl@1371: + else mgl@1371: + deplibs="$dir/$old_library $deplibs" mgl@1371: + link_static=yes mgl@1371: + fi mgl@1371: + fi # link shared/static library? mgl@1371: + mgl@1371: + if test "$linkmode" = lib; then mgl@1371: + if test -n "$dependency_libs" && mgl@1371: + { test "$hardcode_into_libs" != yes || mgl@1371: + test "$build_old_libs" = yes || mgl@1371: + test "$link_static" = yes; }; then mgl@1371: + # Extract -R from dependency_libs mgl@1371: + temp_deplibs= mgl@1371: + for libdir in $dependency_libs; do mgl@1371: + case $libdir in mgl@1371: + -R*) func_stripname '-R' '' "$libdir" mgl@1371: + temp_xrpath=$func_stripname_result mgl@1371: + case " $xrpath " in mgl@1371: + *" $temp_xrpath "*) ;; mgl@1371: + *) xrpath="$xrpath $temp_xrpath";; mgl@1371: + esac;; mgl@1371: + *) temp_deplibs="$temp_deplibs $libdir";; mgl@1371: + esac mgl@1371: + done mgl@1371: + dependency_libs="$temp_deplibs" mgl@1371: + fi mgl@1371: + mgl@1371: + newlib_search_path="$newlib_search_path $absdir" mgl@1371: + # Link against this library mgl@1371: + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" mgl@1371: + # ... and its dependency_libs mgl@1371: + tmp_libs= mgl@1371: + for deplib in $dependency_libs; do mgl@1371: + newdependency_libs="$deplib $newdependency_libs" mgl@1371: + if $opt_duplicate_deps ; then mgl@1371: + case "$tmp_libs " in mgl@1371: + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + tmp_libs="$tmp_libs $deplib" mgl@1371: + done mgl@1371: + mgl@1371: + if test "$link_all_deplibs" != no; then mgl@1371: + # Add the search paths of all dependency libraries mgl@1371: + for deplib in $dependency_libs; do mgl@1371: + case $deplib in mgl@1371: + -L*) path="$deplib" ;; mgl@1371: + *.la) mgl@1371: + func_dirname "$deplib" "" "." mgl@1371: + dir="$func_dirname_result" mgl@1371: + # We need an absolute path. mgl@1371: + case $dir in mgl@1371: + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; mgl@1371: + *) mgl@1371: + absdir=`cd "$dir" && pwd` mgl@1371: + if test -z "$absdir"; then mgl@1371: + func_warning "cannot determine absolute directory name of \`$dir'" mgl@1371: + absdir="$dir" mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: + if $GREP "^installed=no" $deplib > /dev/null; then mgl@1371: + case $host in mgl@1371: + *-*-darwin*) mgl@1371: + depdepl= mgl@1371: + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` mgl@1371: + if test -n "$deplibrary_names" ; then mgl@1371: + for tmp in $deplibrary_names ; do mgl@1371: + depdepl=$tmp mgl@1371: + done mgl@1371: + if test -f "$absdir/$objdir/$depdepl" ; then mgl@1371: + depdepl="$absdir/$objdir/$depdepl" mgl@1371: + darwin_install_name=`otool -L $depdepl | $SED -n -e '3q;2,2p' | $SED -e 's/(.*//'` mgl@1371: + darwin_install_name=`$ECHO $darwin_install_name` mgl@1371: + if test -z "$darwin_install_name"; then mgl@1371: + darwin_install_name=`otool64 -L $depdepl | $SED -n -e '3q;2,2p' | $SED -e 's/(.*//'` mgl@1371: + darwin_install_name=`$ECHO $darwin_install_name` mgl@1371: + fi mgl@1371: + compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" mgl@1371: + linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" mgl@1371: + path= mgl@1371: + fi mgl@1371: + fi mgl@1371: + ;; mgl@1371: + *) mgl@1371: + path="-L$absdir/$objdir" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + else mgl@1371: + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` mgl@1371: + test -z "$libdir" && \ mgl@1371: + func_fatal_error "\`$deplib' is not a valid libtool archive" mgl@1371: + test "$absdir" != "$libdir" && \ mgl@1371: + func_warning "\`$deplib' seems to be moved" mgl@1371: + mgl@1371: + path="-L$absdir" mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: + case " $deplibs " in mgl@1371: + *" $path "*) ;; mgl@1371: + *) deplibs="$path $deplibs" ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + fi # link_all_deplibs != no mgl@1371: + fi # linkmode = lib mgl@1371: + done # for deplib in $libs mgl@1371: + dependency_libs="$newdependency_libs" mgl@1371: + if test "$pass" = dlpreopen; then mgl@1371: + # Link the dlpreopened libraries before other libraries mgl@1371: + for deplib in $save_deplibs; do mgl@1371: + deplibs="$deplib $deplibs" mgl@1371: + done mgl@1371: + fi mgl@1371: + if test "$pass" != dlopen; then mgl@1371: + if test "$pass" != conv; then mgl@1371: + # Make sure lib_search_path contains only unique directories. mgl@1371: + lib_search_path= mgl@1371: + for dir in $newlib_search_path; do mgl@1371: + case "$lib_search_path " in mgl@1371: + *" $dir "*) ;; mgl@1371: + *) lib_search_path="$lib_search_path $dir" ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + newlib_search_path= mgl@1371: + fi mgl@1371: + mgl@1371: + if test "$linkmode,$pass" != "prog,link"; then mgl@1371: + vars="deplibs" mgl@1371: + else mgl@1371: + vars="compile_deplibs finalize_deplibs" mgl@1371: + fi mgl@1371: + for var in $vars dependency_libs; do mgl@1371: + # Add libraries to $var in reverse order mgl@1371: + eval tmp_libs=\"\$$var\" mgl@1371: + new_libs= mgl@1371: + for deplib in $tmp_libs; do mgl@1371: + # FIXME: Pedantically, this is the right thing to do, so mgl@1371: + # that some nasty dependency loop isn't accidentally mgl@1371: + # broken: mgl@1371: + #new_libs="$deplib $new_libs" mgl@1371: + # Pragmatically, this seems to cause very few problems in mgl@1371: + # practice: mgl@1371: + case $deplib in mgl@1371: + -L*) new_libs="$deplib $new_libs" ;; mgl@1371: + -R*) ;; mgl@1371: + *) mgl@1371: + # And here is the reason: when a library appears more mgl@1371: + # than once as an explicit dependence of a library, or mgl@1371: + # is implicitly linked in more than once by the mgl@1371: + # compiler, it is considered special, and multiple mgl@1371: + # occurrences thereof are not removed. Compare this mgl@1371: + # with having the same library being listed as a mgl@1371: + # dependency of multiple other libraries: in this case, mgl@1371: + # we know (pedantically, we assume) the library does not mgl@1371: + # need to be listed more than once, so we keep only the mgl@1371: + # last copy. This is not always right, but it is rare mgl@1371: + # enough that we require users that really mean to play mgl@1371: + # such unportable linking tricks to link the library mgl@1371: + # using -Wl,-lname, so that libtool does not consider it mgl@1371: + # for duplicate removal. mgl@1371: + case " $specialdeplibs " in mgl@1371: + *" $deplib "*) new_libs="$deplib $new_libs" ;; mgl@1371: + *) mgl@1371: + case " $new_libs " in mgl@1371: + *" $deplib "*) ;; mgl@1371: + *) new_libs="$deplib $new_libs" ;; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + tmp_libs= mgl@1371: + for deplib in $new_libs; do mgl@1371: + case $deplib in mgl@1371: + -L*) mgl@1371: + case " $tmp_libs " in mgl@1371: + *" $deplib "*) ;; mgl@1371: + *) tmp_libs="$tmp_libs $deplib" ;; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + *) tmp_libs="$tmp_libs $deplib" ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + eval $var=\"$tmp_libs\" mgl@1371: + done # for var mgl@1371: + fi mgl@1371: + # Last step: remove runtime libs from dependency_libs mgl@1371: + # (they stay in deplibs) mgl@1371: + tmp_libs= mgl@1371: + for i in $dependency_libs ; do mgl@1371: + case " $predeps $postdeps $compiler_lib_search_path " in mgl@1371: + *" $i "*) mgl@1371: + i="" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + if test -n "$i" ; then mgl@1371: + tmp_libs="$tmp_libs $i" mgl@1371: + fi mgl@1371: + done mgl@1371: + dependency_libs=$tmp_libs mgl@1371: + done # for pass mgl@1371: + if test "$linkmode" = prog; then mgl@1371: + dlfiles="$newdlfiles" mgl@1371: + fi mgl@1371: + if test "$linkmode" = prog || test "$linkmode" = lib; then mgl@1371: + dlprefiles="$newdlprefiles" mgl@1371: + fi mgl@1371: + mgl@1371: + case $linkmode in mgl@1371: + oldlib) mgl@1371: + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then mgl@1371: + func_warning "\`-dlopen' is ignored for archives" mgl@1371: + fi mgl@1371: + mgl@1371: + test -n "$deplibs" && \ mgl@1371: + func_warning "\`-l' and \`-L' are ignored for archives" mgl@1371: + mgl@1371: + mgl@1371: + test -n "$rpath" && \ mgl@1371: + func_warning "\`-rpath' is ignored for archives" mgl@1371: + mgl@1371: + test -n "$xrpath" && \ mgl@1371: + func_warning "\`-R' is ignored for archives" mgl@1371: + mgl@1371: + test -n "$vinfo" && \ mgl@1371: + func_warning "\`-version-info/-version-number' is ignored for archives" mgl@1371: + mgl@1371: + test -n "$release" && \ mgl@1371: + func_warning "\`-release' is ignored for archives" mgl@1371: + mgl@1371: + test -n "$export_symbols$export_symbols_regex" && \ mgl@1371: + func_warning "\`-export-symbols' is ignored for archives" mgl@1371: + mgl@1371: + # Now set the variables for building old libraries. mgl@1371: + build_libtool_libs=no mgl@1371: + oldlibs="$output" mgl@1371: + objs="$objs$old_deplibs" mgl@1371: + ;; mgl@1371: + mgl@1371: + lib) mgl@1371: + # Make sure we only generate libraries of the form `libNAME.la'. mgl@1371: + case $outputname in mgl@1371: + lib*) mgl@1371: + func_stripname 'lib' '.la' "$outputname" mgl@1371: + name=$func_stripname_result mgl@1371: + eval shared_ext=\"$shrext_cmds\" mgl@1371: + eval libname=\"$libname_spec\" mgl@1371: + ;; mgl@1371: + *) mgl@1371: + test "$module" = no && \ mgl@1371: + func_fatal_help "libtool library \`$output' must begin with \`lib'" mgl@1371: + mgl@1371: + if test "$need_lib_prefix" != no; then mgl@1371: + # Add the "lib" prefix for modules if required mgl@1371: + func_stripname '' '.la' "$outputname" mgl@1371: + name=$func_stripname_result mgl@1371: + eval shared_ext=\"$shrext_cmds\" mgl@1371: + eval libname=\"$libname_spec\" mgl@1371: + else mgl@1371: + func_stripname '' '.la' "$outputname" mgl@1371: + libname=$func_stripname_result mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + if test -n "$objs"; then mgl@1371: + if test "$deplibs_check_method" != pass_all; then mgl@1371: + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" mgl@1371: + else mgl@1371: + $ECHO mgl@1371: + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" mgl@1371: + $ECHO "*** objects $objs is not portable!" mgl@1371: + libobjs="$libobjs $objs" mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + test "$dlself" != no && \ mgl@1371: + func_warning "\`-dlopen self' is ignored for libtool libraries" mgl@1371: + mgl@1371: + set dummy $rpath mgl@1371: + shift mgl@1371: + test "$#" -gt 1 && \ mgl@1371: + func_warning "ignoring multiple \`-rpath's for a libtool library" mgl@1371: + mgl@1371: + install_libdir="$1" mgl@1371: + mgl@1371: + oldlibs= mgl@1371: + if test -z "$rpath"; then mgl@1371: + if test "$build_libtool_libs" = yes; then mgl@1371: + # Building a libtool convenience library. mgl@1371: + # Some compilers have problems with a `.al' extension so mgl@1371: + # convenience libraries should have the same extension an mgl@1371: + # archive normally would. mgl@1371: + oldlibs="$output_objdir/$libname.$libext $oldlibs" mgl@1371: + build_libtool_libs=convenience mgl@1371: + build_old_libs=yes mgl@1371: + fi mgl@1371: + mgl@1371: + test -n "$vinfo" && \ mgl@1371: + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" mgl@1371: + mgl@1371: + test -n "$release" && \ mgl@1371: + func_warning "\`-release' is ignored for convenience libraries" mgl@1371: + else mgl@1371: + mgl@1371: + # Parse the version information argument. mgl@1371: + save_ifs="$IFS"; IFS=':' mgl@1371: + set dummy $vinfo 0 0 0 mgl@1371: + shift mgl@1371: + IFS="$save_ifs" mgl@1371: + mgl@1371: + test -n "$7" && \ mgl@1371: + func_fatal_help "too many parameters to \`-version-info'" mgl@1371: + mgl@1371: + # convert absolute version numbers to libtool ages mgl@1371: + # this retains compatibility with .la files and attempts mgl@1371: + # to make the code below a bit more comprehensible mgl@1371: + mgl@1371: + case $vinfo_number in mgl@1371: + yes) mgl@1371: + number_major="$1" mgl@1371: + number_minor="$2" mgl@1371: + number_revision="$3" mgl@1371: + # mgl@1371: + # There are really only two kinds -- those that mgl@1371: + # use the current revision as the major version mgl@1371: + # and those that subtract age and use age as mgl@1371: + # a minor version. But, then there is irix mgl@1371: + # which has an extra 1 added just for fun mgl@1371: + # mgl@1371: + case $version_type in mgl@1371: + darwin|linux|osf|windows|none) mgl@1371: + current=`expr $number_major + $number_minor` mgl@1371: + age="$number_minor" mgl@1371: + revision="$number_revision" mgl@1371: + ;; mgl@1371: + freebsd-aout|freebsd-elf|sunos) mgl@1371: + current="$number_major" mgl@1371: + revision="$number_minor" mgl@1371: + age="0" mgl@1371: + ;; mgl@1371: + irix|nonstopux) mgl@1371: + current=`expr $number_major + $number_minor - 1` mgl@1371: + age="$number_minor" mgl@1371: + revision="$number_minor" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + no) mgl@1371: + current="$1" mgl@1371: + revision="$2" mgl@1371: + age="$3" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + # Check that each of the things are valid numbers. mgl@1371: + case $current in mgl@1371: + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; mgl@1371: + *) mgl@1371: + func_error "CURRENT \`$current' must be a nonnegative integer" mgl@1371: + func_fatal_error "\`$vinfo' is not valid version information" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + case $revision in mgl@1371: + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; mgl@1371: + *) mgl@1371: + func_error "REVISION \`$revision' must be a nonnegative integer" mgl@1371: + func_fatal_error "\`$vinfo' is not valid version information" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + case $age in mgl@1371: + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; mgl@1371: + *) mgl@1371: + func_error "AGE \`$age' must be a nonnegative integer" mgl@1371: + func_fatal_error "\`$vinfo' is not valid version information" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + if test "$age" -gt "$current"; then mgl@1371: + func_error "AGE \`$age' is greater than the current interface number \`$current'" mgl@1371: + func_fatal_error "\`$vinfo' is not valid version information" mgl@1371: + fi mgl@1371: + mgl@1371: + # Calculate the version variables. mgl@1371: + major= mgl@1371: + versuffix= mgl@1371: + verstring= mgl@1371: + case $version_type in mgl@1371: + none) ;; mgl@1371: + mgl@1371: + darwin) mgl@1371: + # Like Linux, but with the current version available in mgl@1371: + # verstring for coding it into the library header mgl@1371: + major=.`expr $current - $age` mgl@1371: + versuffix="$major.$age.$revision" mgl@1371: + # Darwin ld doesn't like 0 for these options... mgl@1371: + minor_current=`expr $current + 1` mgl@1371: + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" mgl@1371: + ;; mgl@1371: + mgl@1371: + freebsd-aout) mgl@1371: + major=".$current" mgl@1371: + versuffix=".$current.$revision"; mgl@1371: + ;; mgl@1371: + mgl@1371: + freebsd-elf) mgl@1371: + major=".$current" mgl@1371: + versuffix=".$current" mgl@1371: + ;; mgl@1371: + mgl@1371: + irix | nonstopux) mgl@1371: + major=`expr $current - $age + 1` mgl@1371: + mgl@1371: + case $version_type in mgl@1371: + nonstopux) verstring_prefix=nonstopux ;; mgl@1371: + *) verstring_prefix=sgi ;; mgl@1371: + esac mgl@1371: + verstring="$verstring_prefix$major.$revision" mgl@1371: + mgl@1371: + # Add in all the interfaces that we are compatible with. mgl@1371: + loop=$revision mgl@1371: + while test "$loop" -ne 0; do mgl@1371: + iface=`expr $revision - $loop` mgl@1371: + loop=`expr $loop - 1` mgl@1371: + verstring="$verstring_prefix$major.$iface:$verstring" mgl@1371: + done mgl@1371: + mgl@1371: + # Before this point, $major must not contain `.'. mgl@1371: + major=.$major mgl@1371: + versuffix="$major.$revision" mgl@1371: + ;; mgl@1371: + mgl@1371: + linux) mgl@1371: + major=.`expr $current - $age` mgl@1371: + versuffix="$major.$age.$revision" mgl@1371: + ;; mgl@1371: + mgl@1371: + osf) mgl@1371: + major=.`expr $current - $age` mgl@1371: + versuffix=".$current.$age.$revision" mgl@1371: + verstring="$current.$age.$revision" mgl@1371: + mgl@1371: + # Add in all the interfaces that we are compatible with. mgl@1371: + loop=$age mgl@1371: + while test "$loop" -ne 0; do mgl@1371: + iface=`expr $current - $loop` mgl@1371: + loop=`expr $loop - 1` mgl@1371: + verstring="$verstring:${iface}.0" mgl@1371: + done mgl@1371: + mgl@1371: + # Make executables depend on our current version. mgl@1371: + verstring="$verstring:${current}.0" mgl@1371: + ;; mgl@1371: + mgl@1371: + qnx) mgl@1371: + major=".$current" mgl@1371: + versuffix=".$current" mgl@1371: + ;; mgl@1371: + mgl@1371: + sunos) mgl@1371: + major=".$current" mgl@1371: + versuffix=".$current.$revision" mgl@1371: + ;; mgl@1371: + mgl@1371: + windows) mgl@1371: + # Use '-' rather than '.', since we only want one mgl@1371: + # extension on DOS 8.3 filesystems. mgl@1371: + major=`expr $current - $age` mgl@1371: + versuffix="-$major" mgl@1371: + ;; mgl@1371: + mgl@1371: + *) mgl@1371: + func_fatal_configuration "unknown library version type \`$version_type'" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + # Clear the version info if we defaulted, and they specified a release. mgl@1371: + if test -z "$vinfo" && test -n "$release"; then mgl@1371: + major= mgl@1371: + case $version_type in mgl@1371: + darwin) mgl@1371: + # we can't check for "0.0" in archive_cmds due to quoting mgl@1371: + # problems, so we reset it completely mgl@1371: + verstring= mgl@1371: + ;; mgl@1371: + *) mgl@1371: + verstring="0.0" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + if test "$need_version" = no; then mgl@1371: + versuffix= mgl@1371: + else mgl@1371: + versuffix=".0.0" mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + # Remove version info from name if versioning should be avoided mgl@1371: + if test "$avoid_version" = yes && test "$need_version" = no; then mgl@1371: + major= mgl@1371: + versuffix= mgl@1371: + verstring="" mgl@1371: + fi mgl@1371: + mgl@1371: + # Check to see if the archive will have undefined symbols. mgl@1371: + if test "$allow_undefined" = yes; then mgl@1371: + if test "$allow_undefined_flag" = unsupported; then mgl@1371: + func_warning "undefined symbols not allowed in $host shared libraries" mgl@1371: + build_libtool_libs=no mgl@1371: + build_old_libs=yes mgl@1371: + fi mgl@1371: + else mgl@1371: + # Don't allow undefined symbols. mgl@1371: + allow_undefined_flag="$no_undefined_flag" mgl@1371: + fi mgl@1371: + mgl@1371: + fi mgl@1371: + mgl@1371: + func_generate_dlsyms "$libname" "$libname" "yes" mgl@1371: + libobjs="$libobjs $symfileobj" mgl@1371: + test "X$libobjs" = "X " && libobjs= mgl@1371: + mgl@1371: + if test "$mode" != relink; then mgl@1371: + # Remove our outputs, but don't remove object files since they mgl@1371: + # may have been created when compiling PIC objects. mgl@1371: + removelist= mgl@1371: + tempremovelist=`$ECHO "$output_objdir/*"` mgl@1371: + for p in $tempremovelist; do mgl@1371: + case $p in mgl@1371: + *.$objext) mgl@1371: + ;; mgl@1371: + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) mgl@1371: + if test "X$precious_files_regex" != "X"; then mgl@1371: + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 mgl@1371: + then mgl@1371: + continue mgl@1371: + fi mgl@1371: + fi mgl@1371: + removelist="$removelist $p" mgl@1371: + ;; mgl@1371: + *) ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + test -n "$removelist" && \ mgl@1371: + func_show_eval "${RM}r \$removelist" mgl@1371: + fi mgl@1371: + mgl@1371: + # Now set the variables for building old libraries. mgl@1371: + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then mgl@1371: + oldlibs="$oldlibs $output_objdir/$libname.$libext" mgl@1371: + mgl@1371: + # Transform .lo files to .o files. mgl@1371: + oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` mgl@1371: + fi mgl@1371: + mgl@1371: + # Eliminate all temporary directories. mgl@1371: + #for path in $notinst_path; do mgl@1371: + # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` mgl@1371: + # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` mgl@1371: + # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` mgl@1371: + #done mgl@1371: + mgl@1371: + if test -n "$xrpath"; then mgl@1371: + # If the user specified any rpath flags, then add them. mgl@1371: + temp_xrpath= mgl@1371: + for libdir in $xrpath; do mgl@1371: + temp_xrpath="$temp_xrpath -R$libdir" mgl@1371: + case "$finalize_rpath " in mgl@1371: + *" $libdir "*) ;; mgl@1371: + *) finalize_rpath="$finalize_rpath $libdir" ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then mgl@1371: + dependency_libs="$temp_xrpath $dependency_libs" mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + # Make sure dlfiles contains only unique files that won't be dlpreopened mgl@1371: + old_dlfiles="$dlfiles" mgl@1371: + dlfiles= mgl@1371: + for lib in $old_dlfiles; do mgl@1371: + case " $dlprefiles $dlfiles " in mgl@1371: + *" $lib "*) ;; mgl@1371: + *) dlfiles="$dlfiles $lib" ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + mgl@1371: + # Make sure dlprefiles contains only unique files mgl@1371: + old_dlprefiles="$dlprefiles" mgl@1371: + dlprefiles= mgl@1371: + for lib in $old_dlprefiles; do mgl@1371: + case "$dlprefiles " in mgl@1371: + *" $lib "*) ;; mgl@1371: + *) dlprefiles="$dlprefiles $lib" ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + mgl@1371: + if test "$build_libtool_libs" = yes; then mgl@1371: + if test -n "$rpath"; then mgl@1371: + case $host in mgl@1371: + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) mgl@1371: + # these systems don't actually have a c library (as such)! mgl@1371: + ;; mgl@1371: + *-*-rhapsody* | *-*-darwin1.[012]) mgl@1371: + # Rhapsody C library is in the System framework mgl@1371: + deplibs="$deplibs System.ltframework" mgl@1371: + ;; mgl@1371: + *-*-netbsd*) mgl@1371: + # Don't link with libc until the a.out ld.so is fixed. mgl@1371: + ;; mgl@1371: + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) mgl@1371: + # Do not include libc due to us having libc/libc_r. mgl@1371: + ;; mgl@1371: + *-*-sco3.2v5* | *-*-sco5v6*) mgl@1371: + # Causes problems with __ctype mgl@1371: + ;; mgl@1371: + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) mgl@1371: + # Compiler inserts libc in the correct place for threads to work mgl@1371: + ;; mgl@1371: + *) mgl@1371: + # Add libc to deplibs on all other systems if necessary. mgl@1371: + if test "$build_libtool_need_lc" = "yes"; then mgl@1371: + deplibs="$deplibs -lc" mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + mgl@1371: + # Transform deplibs into only deplibs that can be linked in shared. mgl@1371: + name_save=$name mgl@1371: + libname_save=$libname mgl@1371: + release_save=$release mgl@1371: + versuffix_save=$versuffix mgl@1371: + major_save=$major mgl@1371: + # I'm not sure if I'm treating the release correctly. I think mgl@1371: + # release should show up in the -l (ie -lgmp5) so we don't want to mgl@1371: + # add it in twice. Is that correct? mgl@1371: + release="" mgl@1371: + versuffix="" mgl@1371: + major="" mgl@1371: + newdeplibs= mgl@1371: + droppeddeps=no mgl@1371: + case $deplibs_check_method in mgl@1371: + pass_all) mgl@1371: + # Don't check for shared/static. Everything works. mgl@1371: + # This might be a little naive. We might want to check mgl@1371: + # whether the library exists or not. But this is on mgl@1371: + # osf3 & osf4 and I'm not really sure... Just mgl@1371: + # implementing what was already the behavior. mgl@1371: + newdeplibs=$deplibs mgl@1371: + ;; mgl@1371: + test_compile) mgl@1371: + # This code stresses the "libraries are programs" paradigm to its mgl@1371: + # limits. Maybe even breaks it. We compile a program, linking it mgl@1371: + # against the deplibs as a proxy for the library. Then we can check mgl@1371: + # whether they linked in statically or dynamically with ldd. mgl@1371: + $opt_dry_run || $RM conftest.c mgl@1371: + cat > conftest.c </dev/null` mgl@1371: + for potent_lib in $potential_libs; do mgl@1371: + # Follow soft links. mgl@1371: + if ls -lLd "$potent_lib" 2>/dev/null | mgl@1371: + $GREP " -> " >/dev/null; then mgl@1371: + continue mgl@1371: + fi mgl@1371: + # The statement above tries to avoid entering an mgl@1371: + # endless loop below, in case of cyclic links. mgl@1371: + # We might still enter an endless loop, since a link mgl@1371: + # loop can be closed while we follow links, mgl@1371: + # but so what? mgl@1371: + potlib="$potent_lib" mgl@1371: + while test -h "$potlib" 2>/dev/null; do mgl@1371: + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` mgl@1371: + case $potliblink in mgl@1371: + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; mgl@1371: + *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; mgl@1371: + esac mgl@1371: + done mgl@1371: + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | mgl@1371: + $SED -e 10q | mgl@1371: + $EGREP "$file_magic_regex" > /dev/null; then mgl@1371: + newdeplibs="$newdeplibs $a_deplib" mgl@1371: + a_deplib="" mgl@1371: + break 2 mgl@1371: + fi mgl@1371: + done mgl@1371: + done mgl@1371: + fi mgl@1371: + if test -n "$a_deplib" ; then mgl@1371: + droppeddeps=yes mgl@1371: + $ECHO mgl@1371: + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." mgl@1371: + $ECHO "*** I have the capability to make that library automatically link in when" mgl@1371: + $ECHO "*** you link to this library. But I can only do this if you have a" mgl@1371: + $ECHO "*** shared version of the library, which you do not appear to have" mgl@1371: + $ECHO "*** because I did check the linker path looking for a file starting" mgl@1371: + if test -z "$potlib" ; then mgl@1371: + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" mgl@1371: + else mgl@1371: + $ECHO "*** with $libname and none of the candidates passed a file format test" mgl@1371: + $ECHO "*** using a file magic. Last file checked: $potlib" mgl@1371: + fi mgl@1371: + fi mgl@1371: + else mgl@1371: + # Add a -L argument. mgl@1371: + newdeplibs="$newdeplibs $a_deplib" mgl@1371: + fi mgl@1371: + done # Gone through all deplibs. mgl@1371: + ;; mgl@1371: + match_pattern*) mgl@1371: + set dummy $deplibs_check_method; shift mgl@1371: + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` mgl@1371: + for a_deplib in $deplibs; do mgl@1371: + name=`expr $a_deplib : '-l\(.*\)'` mgl@1371: + # If $name is empty we are operating on a -L argument. mgl@1371: + if test -n "$name" && test "$name" != "0"; then mgl@1371: + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then mgl@1371: + case " $predeps $postdeps " in mgl@1371: + *" $a_deplib "*) mgl@1371: + newdeplibs="$newdeplibs $a_deplib" mgl@1371: + a_deplib="" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + if test -n "$a_deplib" ; then mgl@1371: + libname=`eval "\\$ECHO \"$libname_spec\""` mgl@1371: + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do mgl@1371: + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` mgl@1371: + for potent_lib in $potential_libs; do mgl@1371: + potlib="$potent_lib" # see symlink-check above in file_magic test mgl@1371: + if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ mgl@1371: + $EGREP "$match_pattern_regex" > /dev/null; then mgl@1371: + newdeplibs="$newdeplibs $a_deplib" mgl@1371: + a_deplib="" mgl@1371: + break 2 mgl@1371: + fi mgl@1371: + done mgl@1371: + done mgl@1371: + fi mgl@1371: + if test -n "$a_deplib" ; then mgl@1371: + droppeddeps=yes mgl@1371: + $ECHO mgl@1371: + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." mgl@1371: + $ECHO "*** I have the capability to make that library automatically link in when" mgl@1371: + $ECHO "*** you link to this library. But I can only do this if you have a" mgl@1371: + $ECHO "*** shared version of the library, which you do not appear to have" mgl@1371: + $ECHO "*** because I did check the linker path looking for a file starting" mgl@1371: + if test -z "$potlib" ; then mgl@1371: + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" mgl@1371: + else mgl@1371: + $ECHO "*** with $libname and none of the candidates passed a file format test" mgl@1371: + $ECHO "*** using a regex pattern. Last file checked: $potlib" mgl@1371: + fi mgl@1371: + fi mgl@1371: + else mgl@1371: + # Add a -L argument. mgl@1371: + newdeplibs="$newdeplibs $a_deplib" mgl@1371: + fi mgl@1371: + done # Gone through all deplibs. mgl@1371: + ;; mgl@1371: + none | unknown | *) mgl@1371: + newdeplibs="" mgl@1371: + tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ mgl@1371: + -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` mgl@1371: + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then mgl@1371: + for i in $predeps $postdeps ; do mgl@1371: + # can't use Xsed below, because $i might contain '/' mgl@1371: + tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` mgl@1371: + done mgl@1371: + fi mgl@1371: + if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | mgl@1371: + $GREP . >/dev/null; then mgl@1371: + $ECHO mgl@1371: + if test "X$deplibs_check_method" = "Xnone"; then mgl@1371: + $ECHO "*** Warning: inter-library dependencies are not supported in this platform." mgl@1371: + else mgl@1371: + $ECHO "*** Warning: inter-library dependencies are not known to be supported." mgl@1371: + fi mgl@1371: + $ECHO "*** All declared inter-library dependencies are being dropped." mgl@1371: + droppeddeps=yes mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: + versuffix=$versuffix_save mgl@1371: + major=$major_save mgl@1371: + release=$release_save mgl@1371: + libname=$libname_save mgl@1371: + name=$name_save mgl@1371: + mgl@1371: + case $host in mgl@1371: + *-*-rhapsody* | *-*-darwin1.[012]) mgl@1371: + # On Rhapsody replace the C library with the System framework mgl@1371: + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + if test "$droppeddeps" = yes; then mgl@1371: + if test "$module" = yes; then mgl@1371: + $ECHO mgl@1371: + $ECHO "*** Warning: libtool could not satisfy all declared inter-library" mgl@1371: + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" mgl@1371: + $ECHO "*** a static module, that should work as long as the dlopening" mgl@1371: + $ECHO "*** application is linked with the -dlopen flag." mgl@1371: + if test -z "$global_symbol_pipe"; then mgl@1371: + $ECHO mgl@1371: + $ECHO "*** However, this would only work if libtool was able to extract symbol" mgl@1371: + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" mgl@1371: + $ECHO "*** not find such a program. So, this module is probably useless." mgl@1371: + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." mgl@1371: + fi mgl@1371: + if test "$build_old_libs" = no; then mgl@1371: + oldlibs="$output_objdir/$libname.$libext" mgl@1371: + build_libtool_libs=module mgl@1371: + build_old_libs=yes mgl@1371: + else mgl@1371: + build_libtool_libs=no mgl@1371: + fi mgl@1371: + else mgl@1371: + $ECHO "*** The inter-library dependencies that have been dropped here will be" mgl@1371: + $ECHO "*** automatically added whenever a program is linked with this library" mgl@1371: + $ECHO "*** or is declared to -dlopen it." mgl@1371: + mgl@1371: + if test "$allow_undefined" = no; then mgl@1371: + $ECHO mgl@1371: + $ECHO "*** Since this library must not contain undefined symbols," mgl@1371: + $ECHO "*** because either the platform does not support them or" mgl@1371: + $ECHO "*** it was explicitly requested with -no-undefined," mgl@1371: + $ECHO "*** libtool will only create a static version of it." mgl@1371: + if test "$build_old_libs" = no; then mgl@1371: + oldlibs="$output_objdir/$libname.$libext" mgl@1371: + build_libtool_libs=module mgl@1371: + build_old_libs=yes mgl@1371: + else mgl@1371: + build_libtool_libs=no mgl@1371: + fi mgl@1371: + fi mgl@1371: + fi mgl@1371: + fi mgl@1371: + # Done checking deplibs! mgl@1371: + deplibs=$newdeplibs mgl@1371: + fi mgl@1371: + # Time to change all our "foo.ltframework" stuff back to "-framework foo" mgl@1371: + case $host in mgl@1371: + *-*-darwin*) mgl@1371: + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` mgl@1371: + new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` mgl@1371: + deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + # move library search paths that coincide with paths to not yet mgl@1371: + # installed libraries to the beginning of the library search list mgl@1371: + new_libs= mgl@1371: + for path in $notinst_path; do mgl@1371: + case " $new_libs " in mgl@1371: + *" -L$path/$objdir "*) ;; mgl@1371: + *) mgl@1371: + case " $deplibs " in mgl@1371: + *" -L$path/$objdir "*) mgl@1371: + new_libs="$new_libs -L$path/$objdir" ;; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + for deplib in $deplibs; do mgl@1371: + case $deplib in mgl@1371: + -L*) mgl@1371: + case " $new_libs " in mgl@1371: + *" $deplib "*) ;; mgl@1371: + *) new_libs="$new_libs $deplib" ;; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + *) new_libs="$new_libs $deplib" ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + deplibs="$new_libs" mgl@1371: + mgl@1371: + # All the library-specific variables (install_libdir is set above). mgl@1371: + library_names= mgl@1371: + old_library= mgl@1371: + dlname= mgl@1371: + mgl@1371: + # Test again, we may have decided not to build it any more mgl@1371: + if test "$build_libtool_libs" = yes; then mgl@1371: + if test "$hardcode_into_libs" = yes; then mgl@1371: + # Hardcode the library paths mgl@1371: + hardcode_libdirs= mgl@1371: + dep_rpath= mgl@1371: + rpath="$finalize_rpath" mgl@1371: + test "$mode" != relink && rpath="$compile_rpath$rpath" mgl@1371: + for libdir in $rpath; do mgl@1371: + if test -n "$hardcode_libdir_flag_spec"; then mgl@1371: + if test -n "$hardcode_libdir_separator"; then mgl@1371: + if test -z "$hardcode_libdirs"; then mgl@1371: + hardcode_libdirs="$libdir" mgl@1371: + else mgl@1371: + # Just accumulate the unique libdirs. mgl@1371: + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in mgl@1371: + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) mgl@1371: + ;; mgl@1371: + *) mgl@1371: + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + else mgl@1371: + eval flag=\"$hardcode_libdir_flag_spec\" mgl@1371: + dep_rpath="$dep_rpath $flag" mgl@1371: + fi mgl@1371: + elif test -n "$runpath_var"; then mgl@1371: + case "$perm_rpath " in mgl@1371: + *" $libdir "*) ;; mgl@1371: + *) perm_rpath="$perm_rpath $libdir" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + done mgl@1371: + # Substitute the hardcoded libdirs into the rpath. mgl@1371: + if test -n "$hardcode_libdir_separator" && mgl@1371: + test -n "$hardcode_libdirs"; then mgl@1371: + libdir="$hardcode_libdirs" mgl@1371: + if test -n "$hardcode_libdir_flag_spec_ld"; then mgl@1371: + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" mgl@1371: + else mgl@1371: + eval dep_rpath=\"$hardcode_libdir_flag_spec\" mgl@1371: + fi mgl@1371: + fi mgl@1371: + if test -n "$runpath_var" && test -n "$perm_rpath"; then mgl@1371: + # We should set the runpath_var. mgl@1371: + rpath= mgl@1371: + for dir in $perm_rpath; do mgl@1371: + rpath="$rpath$dir:" mgl@1371: + done mgl@1371: + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" mgl@1371: + fi mgl@1371: + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" mgl@1371: + fi mgl@1371: + mgl@1371: + shlibpath="$finalize_shlibpath" mgl@1371: + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" mgl@1371: + if test -n "$shlibpath"; then mgl@1371: + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" mgl@1371: + fi mgl@1371: + mgl@1371: + # Get the real and link names of the library. mgl@1371: + eval shared_ext=\"$shrext_cmds\" mgl@1371: + eval library_names=\"$library_names_spec\" mgl@1371: + set dummy $library_names mgl@1371: + shift mgl@1371: + realname="$1" mgl@1371: + shift mgl@1371: + mgl@1371: + if test -n "$soname_spec"; then mgl@1371: + eval soname=\"$soname_spec\" mgl@1371: + else mgl@1371: + soname="$realname" mgl@1371: + fi mgl@1371: + if test -z "$dlname"; then mgl@1371: + dlname=$soname mgl@1371: + fi mgl@1371: + mgl@1371: + lib="$output_objdir/$realname" mgl@1371: + linknames= mgl@1371: + for link mgl@1371: + do mgl@1371: + linknames="$linknames $link" mgl@1371: + done mgl@1371: + mgl@1371: + # Use standard objects if they are pic mgl@1371: + test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` mgl@1371: + test "X$libobjs" = "X " && libobjs= mgl@1371: + mgl@1371: + delfiles= mgl@1371: + if test -n "$export_symbols" && test -n "$include_expsyms"; then mgl@1371: + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" mgl@1371: + export_symbols="$output_objdir/$libname.uexp" mgl@1371: + delfiles="$delfiles $export_symbols" mgl@1371: + fi mgl@1371: + mgl@1371: + orig_export_symbols= mgl@1371: + case $host_os in mgl@1371: + cygwin* | mingw*) mgl@1371: + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then mgl@1371: + # exporting using user supplied symfile mgl@1371: + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then mgl@1371: + # and it's NOT already a .def file. Must figure out mgl@1371: + # which of the given symbols are data symbols and tag mgl@1371: + # them as such. So, trigger use of export_symbols_cmds. mgl@1371: + # export_symbols gets reassigned inside the "prepare mgl@1371: + # the list of exported symbols" if statement, so the mgl@1371: + # include_expsyms logic still works. mgl@1371: + orig_export_symbols="$export_symbols" mgl@1371: + export_symbols= mgl@1371: + always_export_symbols=yes mgl@1371: + fi mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + # Prepare the list of exported symbols mgl@1371: + if test -z "$export_symbols"; then mgl@1371: + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then mgl@1371: + func_echo "generating symbol list for \`$libname.la'" mgl@1371: + export_symbols="$output_objdir/$libname.exp" mgl@1371: + $opt_dry_run || $RM $export_symbols mgl@1371: + cmds=$export_symbols_cmds mgl@1371: + save_ifs="$IFS"; IFS='~' mgl@1371: + for cmd in $cmds; do mgl@1371: + IFS="$save_ifs" mgl@1371: + eval cmd=\"$cmd\" mgl@1371: + if len=`expr "X$cmd" : ".*"` && mgl@1371: + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then mgl@1371: + func_show_eval "$cmd" 'exit $?' mgl@1371: + skipped_export=false mgl@1371: + else mgl@1371: + # The command line is too long to execute in one step. mgl@1371: + func_echo "using reloadable object file for export list..." mgl@1371: + skipped_export=: mgl@1371: + # Break out early, otherwise skipped_export may be mgl@1371: + # set to false by a later but shorter cmd. mgl@1371: + break mgl@1371: + fi mgl@1371: + done mgl@1371: + IFS="$save_ifs" mgl@1371: + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then mgl@1371: + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' mgl@1371: + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' mgl@1371: + fi mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + if test -n "$export_symbols" && test -n "$include_expsyms"; then mgl@1371: + tmp_export_symbols="$export_symbols" mgl@1371: + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" mgl@1371: + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' mgl@1371: + fi mgl@1371: + mgl@1371: + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then mgl@1371: + # The given exports_symbols file has to be filtered, so filter it. mgl@1371: + func_echo "filter symbol list for \`$libname.la' to tag DATA exports" mgl@1371: + # FIXME: $output_objdir/$libname.filter potentially contains lots of mgl@1371: + # 's' commands which not all seds can handle. GNU sed should be fine mgl@1371: + # though. Also, the filter scales superlinearly with the number of mgl@1371: + # global variables. join(1) would be nice here, but unfortunately mgl@1371: + # isn't a blessed tool. mgl@1371: + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter mgl@1371: + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" mgl@1371: + export_symbols=$output_objdir/$libname.def mgl@1371: + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols mgl@1371: + fi mgl@1371: + mgl@1371: + tmp_deplibs= mgl@1371: + for test_deplib in $deplibs; do mgl@1371: + case " $convenience " in mgl@1371: + *" $test_deplib "*) ;; mgl@1371: + *) mgl@1371: + tmp_deplibs="$tmp_deplibs $test_deplib" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + deplibs="$tmp_deplibs" mgl@1371: + mgl@1371: + if test -n "$convenience"; then mgl@1371: + if test -n "$whole_archive_flag_spec" && mgl@1371: + test "$compiler_needs_object" = yes && mgl@1371: + test -z "$libobjs"; then mgl@1371: + # extract the archives, so we have objects to list. mgl@1371: + # TODO: could optimize this to just extract one archive. mgl@1371: + whole_archive_flag_spec= mgl@1371: + fi mgl@1371: + if test -n "$whole_archive_flag_spec"; then mgl@1371: + save_libobjs=$libobjs mgl@1371: + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" mgl@1371: + test "X$libobjs" = "X " && libobjs= mgl@1371: + else mgl@1371: + gentop="$output_objdir/${outputname}x" mgl@1371: + generated="$generated $gentop" mgl@1371: + mgl@1371: + func_extract_archives $gentop $convenience mgl@1371: + libobjs="$libobjs $func_extract_archives_result" mgl@1371: + test "X$libobjs" = "X " && libobjs= mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then mgl@1371: + eval flag=\"$thread_safe_flag_spec\" mgl@1371: + linker_flags="$linker_flags $flag" mgl@1371: + fi mgl@1371: + mgl@1371: + # Make a backup of the uninstalled library when relinking mgl@1371: + if test "$mode" = relink; then mgl@1371: + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? mgl@1371: + fi mgl@1371: + mgl@1371: + # Do each of the archive commands. mgl@1371: + if test "$module" = yes && test -n "$module_cmds" ; then mgl@1371: + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then mgl@1371: + eval test_cmds=\"$module_expsym_cmds\" mgl@1371: + cmds=$module_expsym_cmds mgl@1371: + else mgl@1371: + eval test_cmds=\"$module_cmds\" mgl@1371: + cmds=$module_cmds mgl@1371: + fi mgl@1371: + else mgl@1371: + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then mgl@1371: + eval test_cmds=\"$archive_expsym_cmds\" mgl@1371: + cmds=$archive_expsym_cmds mgl@1371: + else mgl@1371: + eval test_cmds=\"$archive_cmds\" mgl@1371: + cmds=$archive_cmds mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + if test "X$skipped_export" != "X:" && mgl@1371: + len=`expr "X$test_cmds" : ".*" 2>/dev/null` && mgl@1371: + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then mgl@1371: + : mgl@1371: + else mgl@1371: + # The command line is too long to link in one step, link piecewise mgl@1371: + # or, if using GNU ld and skipped_export is not :, use a linker mgl@1371: + # script. mgl@1371: + mgl@1371: + # Save the value of $output and $libobjs because we want to mgl@1371: + # use them later. If we have whole_archive_flag_spec, we mgl@1371: + # want to use save_libobjs as it was before mgl@1371: + # whole_archive_flag_spec was expanded, because we can't mgl@1371: + # assume the linker understands whole_archive_flag_spec. mgl@1371: + # This may have to be revisited, in case too many mgl@1371: + # convenience libraries get linked in and end up exceeding mgl@1371: + # the spec. mgl@1371: + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then mgl@1371: + save_libobjs=$libobjs mgl@1371: + fi mgl@1371: + save_output=$output mgl@1371: + output_la=`$ECHO "X$output" | $Xsed -e "$basename"` mgl@1371: + mgl@1371: + # Clear the reloadable object creation command queue and mgl@1371: + # initialize k to one. mgl@1371: + test_cmds= mgl@1371: + concat_cmds= mgl@1371: + objlist= mgl@1371: + last_robj= mgl@1371: + k=1 mgl@1371: + mgl@1371: + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then mgl@1371: + output=${output_objdir}/${output_la}.lnkscript mgl@1371: + func_echo "creating GNU ld script: $output" mgl@1371: + $ECHO 'INPUT (' > $output mgl@1371: + for obj in $save_libobjs mgl@1371: + do mgl@1371: + $ECHO "$obj" >> $output mgl@1371: + done mgl@1371: + $ECHO ')' >> $output mgl@1371: + delfiles="$delfiles $output" mgl@1371: + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then mgl@1371: + output=${output_objdir}/${output_la}.lnk mgl@1371: + func_echo "creating linker input file list: $output" mgl@1371: + : > $output mgl@1371: + set x $save_libobjs mgl@1371: + shift mgl@1371: + firstobj= mgl@1371: + if test "$compiler_needs_object" = yes; then mgl@1371: + firstobj="$1 " mgl@1371: + shift mgl@1371: + fi mgl@1371: + for obj mgl@1371: + do mgl@1371: + $ECHO "$obj" >> $output mgl@1371: + done mgl@1371: + delfiles="$delfiles $output" mgl@1371: + output=$firstobj\"$file_list_spec$output\" mgl@1371: + else mgl@1371: + if test -n "$save_libobjs"; then mgl@1371: + func_echo "creating reloadable object files..." mgl@1371: + output=$output_objdir/$output_la-${k}.$objext mgl@1371: + # Loop over the list of objects to be linked. mgl@1371: + for obj in $save_libobjs mgl@1371: + do mgl@1371: + eval test_cmds=\"$reload_cmds $objlist $last_robj\" mgl@1371: + if test "X$objlist" = X || mgl@1371: + { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && mgl@1371: + test "$len" -le "$max_cmd_len"; }; then mgl@1371: + objlist="$objlist $obj" mgl@1371: + else mgl@1371: + # The command $test_cmds is almost too long, add a mgl@1371: + # command to the queue. mgl@1371: + if test "$k" -eq 1 ; then mgl@1371: + # The first file doesn't have a previous command to add. mgl@1371: + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" mgl@1371: + else mgl@1371: + # All subsequent reloadable object files will link in mgl@1371: + # the last one created. mgl@1371: + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" mgl@1371: + fi mgl@1371: + last_robj=$output_objdir/$output_la-${k}.$objext mgl@1371: + k=`expr $k + 1` mgl@1371: + output=$output_objdir/$output_la-${k}.$objext mgl@1371: + objlist=$obj mgl@1371: + len=1 mgl@1371: + fi mgl@1371: + done mgl@1371: + # Handle the remaining objects by creating one last mgl@1371: + # reloadable object file. All subsequent reloadable object mgl@1371: + # files will link in the last one created. mgl@1371: + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ mgl@1371: + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" mgl@1371: + mgl@1371: + # Set up a command to remove the reloadable object files mgl@1371: + # after they are used. mgl@1371: + i=0 mgl@1371: + while test "$i" -lt "$k" mgl@1371: + do mgl@1371: + i=`expr $i + 1` mgl@1371: + delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" mgl@1371: + done mgl@1371: + else mgl@1371: + output= mgl@1371: + fi mgl@1371: + mgl@1371: + if ${skipped_export-false}; then mgl@1371: + func_echo "generating symbol list for \`$libname.la'" mgl@1371: + export_symbols="$output_objdir/$libname.exp" mgl@1371: + $opt_dry_run || $RM $export_symbols mgl@1371: + libobjs=$output mgl@1371: + # Append the command to create the export file. mgl@1371: + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ mgl@1371: + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" mgl@1371: + fi mgl@1371: + mgl@1371: + test -n "$save_libobjs" && mgl@1371: + func_echo "creating a temporary reloadable object file: $output" mgl@1371: + mgl@1371: + # Loop through the commands generated above and execute them. mgl@1371: + save_ifs="$IFS"; IFS='~' mgl@1371: + for cmd in $concat_cmds; do mgl@1371: + IFS="$save_ifs" mgl@1371: + $opt_silent || { mgl@1371: + func_quote_for_expand "$cmd" mgl@1371: + eval "func_echo $func_quote_for_expand_result" mgl@1371: + } mgl@1371: + $opt_dry_run || eval "$cmd" || { mgl@1371: + lt_exit=$? mgl@1371: + mgl@1371: + # Restore the uninstalled library and exit mgl@1371: + if test "$mode" = relink; then mgl@1371: + ( cd "$output_objdir" && \ mgl@1371: + $RM "${realname}T" && \ mgl@1371: + $MV "${realname}U" "$realname" ) mgl@1371: + fi mgl@1371: + mgl@1371: + exit $lt_exit mgl@1371: + } mgl@1371: + done mgl@1371: + IFS="$save_ifs" mgl@1371: + mgl@1371: + if test -n "$export_symbols_regex" && ${skipped_export-false}; then mgl@1371: + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' mgl@1371: + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + if ${skipped_export-false}; then mgl@1371: + if test -n "$export_symbols" && test -n "$include_expsyms"; then mgl@1371: + tmp_export_symbols="$export_symbols" mgl@1371: + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" mgl@1371: + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' mgl@1371: + fi mgl@1371: + mgl@1371: + if test -n "$orig_export_symbols"; then mgl@1371: + # The given exports_symbols file has to be filtered, so filter it. mgl@1371: + func_echo "filter symbol list for \`$libname.la' to tag DATA exports" mgl@1371: + # FIXME: $output_objdir/$libname.filter potentially contains lots of mgl@1371: + # 's' commands which not all seds can handle. GNU sed should be fine mgl@1371: + # though. Also, the filter scales superlinearly with the number of mgl@1371: + # global variables. join(1) would be nice here, but unfortunately mgl@1371: + # isn't a blessed tool. mgl@1371: + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter mgl@1371: + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" mgl@1371: + export_symbols=$output_objdir/$libname.def mgl@1371: + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + libobjs=$output mgl@1371: + # Restore the value of output. mgl@1371: + output=$save_output mgl@1371: + mgl@1371: + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then mgl@1371: + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" mgl@1371: + test "X$libobjs" = "X " && libobjs= mgl@1371: + fi mgl@1371: + # Expand the library linking commands again to reset the mgl@1371: + # value of $libobjs for piecewise linking. mgl@1371: + mgl@1371: + # Do each of the archive commands. mgl@1371: + if test "$module" = yes && test -n "$module_cmds" ; then mgl@1371: + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then mgl@1371: + cmds=$module_expsym_cmds mgl@1371: + else mgl@1371: + cmds=$module_cmds mgl@1371: + fi mgl@1371: + else mgl@1371: + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then mgl@1371: + cmds=$archive_expsym_cmds mgl@1371: + else mgl@1371: + cmds=$archive_cmds mgl@1371: + fi mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + if test -n "$delfiles"; then mgl@1371: + # Append the command to remove temporary files to $cmds. mgl@1371: + eval cmds=\"\$cmds~\$RM $delfiles\" mgl@1371: + fi mgl@1371: + mgl@1371: + # Add any objects from preloaded convenience libraries mgl@1371: + if test -n "$dlprefiles"; then mgl@1371: + gentop="$output_objdir/${outputname}x" mgl@1371: + generated="$generated $gentop" mgl@1371: + mgl@1371: + func_extract_archives $gentop $dlprefiles mgl@1371: + libobjs="$libobjs $func_extract_archives_result" mgl@1371: + test "X$libobjs" = "X " && libobjs= mgl@1371: + fi mgl@1371: + mgl@1371: + save_ifs="$IFS"; IFS='~' mgl@1371: + for cmd in $cmds; do mgl@1371: + IFS="$save_ifs" mgl@1371: + eval cmd=\"$cmd\" mgl@1371: + $opt_silent || { mgl@1371: + func_quote_for_expand "$cmd" mgl@1371: + eval "func_echo $func_quote_for_expand_result" mgl@1371: + } mgl@1371: + $opt_dry_run || eval "$cmd" || { mgl@1371: + lt_exit=$? mgl@1371: + mgl@1371: + # Restore the uninstalled library and exit mgl@1371: + if test "$mode" = relink; then mgl@1371: + ( cd "$output_objdir" && \ mgl@1371: + $RM "${realname}T" && \ mgl@1371: + $MV "${realname}U" "$realname" ) mgl@1371: + fi mgl@1371: + mgl@1371: + exit $lt_exit mgl@1371: + } mgl@1371: + done mgl@1371: + IFS="$save_ifs" mgl@1371: + mgl@1371: + # Restore the uninstalled library and exit mgl@1371: + if test "$mode" = relink; then mgl@1371: + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? mgl@1371: + mgl@1371: + if test -n "$convenience"; then mgl@1371: + if test -z "$whole_archive_flag_spec"; then mgl@1371: + func_show_eval '${RM}r "$gentop"' mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + exit $EXIT_SUCCESS mgl@1371: + fi mgl@1371: + mgl@1371: + # Create links to the real library. mgl@1371: + for linkname in $linknames; do mgl@1371: + if test "$realname" != "$linkname"; then mgl@1371: + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' mgl@1371: + fi mgl@1371: + done mgl@1371: + mgl@1371: + # If -module or -export-dynamic was specified, set the dlname. mgl@1371: + if test "$module" = yes || test "$export_dynamic" = yes; then mgl@1371: + # On all known operating systems, these are identical. mgl@1371: + dlname="$soname" mgl@1371: + fi mgl@1371: + fi mgl@1371: + ;; mgl@1371: + mgl@1371: + obj) mgl@1371: + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then mgl@1371: + func_warning "\`-dlopen' is ignored for objects" mgl@1371: + fi mgl@1371: + mgl@1371: + test -n "$deplibs" && \ mgl@1371: + func_warning "\`-l' and \`-L' are ignored for objects" mgl@1371: + mgl@1371: + test -n "$rpath" && \ mgl@1371: + func_warning "\`-rpath' is ignored for objects" mgl@1371: + mgl@1371: + test -n "$xrpath" && \ mgl@1371: + func_warning "\`-R' is ignored for objects" mgl@1371: + mgl@1371: + test -n "$vinfo" && \ mgl@1371: + func_warning "\`-version-info' is ignored for objects" mgl@1371: + mgl@1371: + test -n "$release" && \ mgl@1371: + func_warning "\`-release' is ignored for objects" mgl@1371: + mgl@1371: + case $output in mgl@1371: + *.lo) mgl@1371: + test -n "$objs$old_deplibs" && \ mgl@1371: + func_fatal_error "cannot build library object \`$output' from non-libtool objects" mgl@1371: + mgl@1371: + libobj=$output mgl@1371: + func_lo2o "$libobj" mgl@1371: + obj=$func_lo2o_result mgl@1371: + ;; mgl@1371: + *) mgl@1371: + libobj= mgl@1371: + obj="$output" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + # Delete the old objects. mgl@1371: + $opt_dry_run || $RM $obj $libobj mgl@1371: + mgl@1371: + # Objects from convenience libraries. This assumes mgl@1371: + # single-version convenience libraries. Whenever we create mgl@1371: + # different ones for PIC/non-PIC, this we'll have to duplicate mgl@1371: + # the extraction. mgl@1371: + reload_conv_objs= mgl@1371: + gentop= mgl@1371: + # reload_cmds runs $LD directly, so let us get rid of mgl@1371: + # -Wl from whole_archive_flag_spec and hope we can get by with mgl@1371: + # turning comma into space.. mgl@1371: + wl= mgl@1371: + mgl@1371: + if test -n "$convenience"; then mgl@1371: + if test -n "$whole_archive_flag_spec"; then mgl@1371: + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" mgl@1371: + reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` mgl@1371: + else mgl@1371: + gentop="$output_objdir/${obj}x" mgl@1371: + generated="$generated $gentop" mgl@1371: + mgl@1371: + func_extract_archives $gentop $convenience mgl@1371: + reload_conv_objs="$reload_objs $func_extract_archives_result" mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + # Create the old-style object. mgl@1371: + reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test mgl@1371: + mgl@1371: + output="$obj" mgl@1371: + func_execute_cmds "$reload_cmds" 'exit $?' mgl@1371: + mgl@1371: + # Exit if we aren't doing a library object file. mgl@1371: + if test -z "$libobj"; then mgl@1371: + if test -n "$gentop"; then mgl@1371: + func_show_eval '${RM}r "$gentop"' mgl@1371: + fi mgl@1371: + mgl@1371: + exit $EXIT_SUCCESS mgl@1371: + fi mgl@1371: + mgl@1371: + if test "$build_libtool_libs" != yes; then mgl@1371: + if test -n "$gentop"; then mgl@1371: + func_show_eval '${RM}r "$gentop"' mgl@1371: + fi mgl@1371: + mgl@1371: + # Create an invalid libtool object if no PIC, so that we don't mgl@1371: + # accidentally link it into a program. mgl@1371: + # $show "echo timestamp > $libobj" mgl@1371: + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? mgl@1371: + exit $EXIT_SUCCESS mgl@1371: + fi mgl@1371: + mgl@1371: + if test -n "$pic_flag" || test "$pic_mode" != default; then mgl@1371: + # Only do commands if we really have different PIC objects. mgl@1371: + reload_objs="$libobjs $reload_conv_objs" mgl@1371: + output="$libobj" mgl@1371: + func_execute_cmds "$reload_cmds" 'exit $?' mgl@1371: + fi mgl@1371: + mgl@1371: + if test -n "$gentop"; then mgl@1371: + func_show_eval '${RM}r "$gentop"' mgl@1371: + fi mgl@1371: + mgl@1371: + exit $EXIT_SUCCESS mgl@1371: + ;; mgl@1371: + mgl@1371: + prog) mgl@1371: + case $host in mgl@1371: + *cygwin*) func_stripname '' '.exe' "$output" mgl@1371: + output=$func_stripname_result.exe;; mgl@1371: + esac mgl@1371: + test -n "$vinfo" && \ mgl@1371: + func_warning "\`-version-info' is ignored for programs" mgl@1371: + mgl@1371: + test -n "$release" && \ mgl@1371: + func_warning "\`-release' is ignored for programs" mgl@1371: + mgl@1371: + test "$preload" = yes \ mgl@1371: + && test "$dlopen_support" = unknown \ mgl@1371: + && test "$dlopen_self" = unknown \ mgl@1371: + && test "$dlopen_self_static" = unknown && \ mgl@1371: + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." mgl@1371: + mgl@1371: + case $host in mgl@1371: + *-*-rhapsody* | *-*-darwin1.[012]) mgl@1371: + # On Rhapsody replace the C library is the System framework mgl@1371: + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` mgl@1371: + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + case $host in mgl@1371: + *-*-darwin*) mgl@1371: + # Don't allow lazy linking, it breaks C++ global constructors mgl@1371: + # But is supposedly fixed on 10.4 or later (yay!). mgl@1371: + if test "$tagname" = CXX ; then mgl@1371: + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in mgl@1371: + 10.[0123]) mgl@1371: + compile_command="$compile_command ${wl}-bind_at_load" mgl@1371: + finalize_command="$finalize_command ${wl}-bind_at_load" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + # Time to change all our "foo.ltframework" stuff back to "-framework foo" mgl@1371: + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` mgl@1371: + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + mgl@1371: + # move library search paths that coincide with paths to not yet mgl@1371: + # installed libraries to the beginning of the library search list mgl@1371: + new_libs= mgl@1371: + for path in $notinst_path; do mgl@1371: + case " $new_libs " in mgl@1371: + *" -L$path/$objdir "*) ;; mgl@1371: + *) mgl@1371: + case " $compile_deplibs " in mgl@1371: + *" -L$path/$objdir "*) mgl@1371: + new_libs="$new_libs -L$path/$objdir" ;; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + for deplib in $compile_deplibs; do mgl@1371: + case $deplib in mgl@1371: + -L*) mgl@1371: + case " $new_libs " in mgl@1371: + *" $deplib "*) ;; mgl@1371: + *) new_libs="$new_libs $deplib" ;; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + *) new_libs="$new_libs $deplib" ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + compile_deplibs="$new_libs" mgl@1371: + mgl@1371: + mgl@1371: + compile_command="$compile_command $compile_deplibs" mgl@1371: + finalize_command="$finalize_command $finalize_deplibs" mgl@1371: + mgl@1371: + if test -n "$rpath$xrpath"; then mgl@1371: + # If the user specified any rpath flags, then add them. mgl@1371: + for libdir in $rpath $xrpath; do mgl@1371: + # This is the magic to use -rpath. mgl@1371: + case "$finalize_rpath " in mgl@1371: + *" $libdir "*) ;; mgl@1371: + *) finalize_rpath="$finalize_rpath $libdir" ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + fi mgl@1371: + mgl@1371: + # Now hardcode the library paths mgl@1371: + rpath= mgl@1371: + hardcode_libdirs= mgl@1371: + for libdir in $compile_rpath $finalize_rpath; do mgl@1371: + if test -n "$hardcode_libdir_flag_spec"; then mgl@1371: + if test -n "$hardcode_libdir_separator"; then mgl@1371: + if test -z "$hardcode_libdirs"; then mgl@1371: + hardcode_libdirs="$libdir" mgl@1371: + else mgl@1371: + # Just accumulate the unique libdirs. mgl@1371: + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in mgl@1371: + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) mgl@1371: + ;; mgl@1371: + *) mgl@1371: + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + else mgl@1371: + eval flag=\"$hardcode_libdir_flag_spec\" mgl@1371: + rpath="$rpath $flag" mgl@1371: + fi mgl@1371: + elif test -n "$runpath_var"; then mgl@1371: + case "$perm_rpath " in mgl@1371: + *" $libdir "*) ;; mgl@1371: + *) perm_rpath="$perm_rpath $libdir" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + case $host in mgl@1371: + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) mgl@1371: + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` mgl@1371: + case :$dllsearchpath: in mgl@1371: + *":$libdir:"*) ;; mgl@1371: + *) dllsearchpath="$dllsearchpath:$libdir";; mgl@1371: + esac mgl@1371: + case :$dllsearchpath: in mgl@1371: + *":$testbindir:"*) ;; mgl@1371: + *) dllsearchpath="$dllsearchpath:$testbindir";; mgl@1371: + esac mgl@1371: + ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + # Substitute the hardcoded libdirs into the rpath. mgl@1371: + if test -n "$hardcode_libdir_separator" && mgl@1371: + test -n "$hardcode_libdirs"; then mgl@1371: + libdir="$hardcode_libdirs" mgl@1371: + eval rpath=\" $hardcode_libdir_flag_spec\" mgl@1371: + fi mgl@1371: + compile_rpath="$rpath" mgl@1371: + mgl@1371: + rpath= mgl@1371: + hardcode_libdirs= mgl@1371: + for libdir in $finalize_rpath; do mgl@1371: + if test -n "$hardcode_libdir_flag_spec"; then mgl@1371: + if test -n "$hardcode_libdir_separator"; then mgl@1371: + if test -z "$hardcode_libdirs"; then mgl@1371: + hardcode_libdirs="$libdir" mgl@1371: + else mgl@1371: + # Just accumulate the unique libdirs. mgl@1371: + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in mgl@1371: + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) mgl@1371: + ;; mgl@1371: + *) mgl@1371: + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + else mgl@1371: + eval flag=\"$hardcode_libdir_flag_spec\" mgl@1371: + rpath="$rpath $flag" mgl@1371: + fi mgl@1371: + elif test -n "$runpath_var"; then mgl@1371: + case "$finalize_perm_rpath " in mgl@1371: + *" $libdir "*) ;; mgl@1371: + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + done mgl@1371: + # Substitute the hardcoded libdirs into the rpath. mgl@1371: + if test -n "$hardcode_libdir_separator" && mgl@1371: + test -n "$hardcode_libdirs"; then mgl@1371: + libdir="$hardcode_libdirs" mgl@1371: + eval rpath=\" $hardcode_libdir_flag_spec\" mgl@1371: + fi mgl@1371: + finalize_rpath="$rpath" mgl@1371: + mgl@1371: + if test -n "$libobjs" && test "$build_old_libs" = yes; then mgl@1371: + # Transform all the library objects into standard objects. mgl@1371: + compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` mgl@1371: + finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` mgl@1371: + fi mgl@1371: + mgl@1371: + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" mgl@1371: + mgl@1371: + # template prelinking step mgl@1371: + if test -n "$prelink_cmds"; then mgl@1371: + func_execute_cmds "$prelink_cmds" 'exit $?' mgl@1371: + fi mgl@1371: + mgl@1371: + wrappers_required=yes mgl@1371: + case $host in mgl@1371: + *cygwin* | *mingw* ) mgl@1371: + if test "$build_libtool_libs" != yes; then mgl@1371: + wrappers_required=no mgl@1371: + fi mgl@1371: + ;; mgl@1371: + *) mgl@1371: + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then mgl@1371: + wrappers_required=no mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: + if test "$wrappers_required" = no; then mgl@1371: + # Replace the output file specification. mgl@1371: + compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` mgl@1371: + link_command="$compile_command$compile_rpath" mgl@1371: + mgl@1371: + # We have no uninstalled library dependencies, so finalize right now. mgl@1371: + exit_status=0 mgl@1371: + func_show_eval "$link_command" 'exit_status=$?' mgl@1371: + mgl@1371: + # Delete the generated files. mgl@1371: + if test -f "$output_objdir/${outputname}S.${objext}"; then mgl@1371: + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' mgl@1371: + fi mgl@1371: + mgl@1371: + exit $exit_status mgl@1371: + fi mgl@1371: + mgl@1371: + if test -n "$compile_shlibpath$finalize_shlibpath"; then mgl@1371: + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" mgl@1371: + fi mgl@1371: + if test -n "$finalize_shlibpath"; then mgl@1371: + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" mgl@1371: + fi mgl@1371: + mgl@1371: + compile_var= mgl@1371: + finalize_var= mgl@1371: + if test -n "$runpath_var"; then mgl@1371: + if test -n "$perm_rpath"; then mgl@1371: + # We should set the runpath_var. mgl@1371: + rpath= mgl@1371: + for dir in $perm_rpath; do mgl@1371: + rpath="$rpath$dir:" mgl@1371: + done mgl@1371: + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " mgl@1371: + fi mgl@1371: + if test -n "$finalize_perm_rpath"; then mgl@1371: + # We should set the runpath_var. mgl@1371: + rpath= mgl@1371: + for dir in $finalize_perm_rpath; do mgl@1371: + rpath="$rpath$dir:" mgl@1371: + done mgl@1371: + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + if test "$no_install" = yes; then mgl@1371: + # We don't need to create a wrapper script. mgl@1371: + link_command="$compile_var$compile_command$compile_rpath" mgl@1371: + # Replace the output file specification. mgl@1371: + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` mgl@1371: + # Delete the old output file. mgl@1371: + $opt_dry_run || $RM $output mgl@1371: + # Link the executable and exit mgl@1371: + func_show_eval "$link_command" 'exit $?' mgl@1371: + exit $EXIT_SUCCESS mgl@1371: + fi mgl@1371: + mgl@1371: + if test "$hardcode_action" = relink; then mgl@1371: + # Fast installation is not supported mgl@1371: + link_command="$compile_var$compile_command$compile_rpath" mgl@1371: + relink_command="$finalize_var$finalize_command$finalize_rpath" mgl@1371: + mgl@1371: + func_warning "this platform does not like uninstalled shared libraries" mgl@1371: + func_warning "\`$output' will be relinked during installation" mgl@1371: + else mgl@1371: + if test "$fast_install" != no; then mgl@1371: + link_command="$finalize_var$compile_command$finalize_rpath" mgl@1371: + if test "$fast_install" = yes; then mgl@1371: + relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` mgl@1371: + else mgl@1371: + # fast_install is set to needless mgl@1371: + relink_command= mgl@1371: + fi mgl@1371: + else mgl@1371: + link_command="$compile_var$compile_command$compile_rpath" mgl@1371: + relink_command="$finalize_var$finalize_command$finalize_rpath" mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + # Replace the output file specification. mgl@1371: + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` mgl@1371: + mgl@1371: + # Delete the old output files. mgl@1371: + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname mgl@1371: + mgl@1371: + func_show_eval "$link_command" 'exit $?' mgl@1371: + mgl@1371: + # Now create the wrapper script. mgl@1371: + func_echo "creating $output" mgl@1371: + mgl@1371: + # Quote the relink command for shipping. mgl@1371: + if test -n "$relink_command"; then mgl@1371: + # Preserve any variables that may affect compiler behavior mgl@1371: + for var in $variables_saved_for_relink; do mgl@1371: + if eval test -z \"\${$var+set}\"; then mgl@1371: + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" mgl@1371: + elif eval var_value=\$$var; test -z "$var_value"; then mgl@1371: + relink_command="$var=; export $var; $relink_command" mgl@1371: + else mgl@1371: + func_quote_for_eval "$var_value" mgl@1371: + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" mgl@1371: + fi mgl@1371: + done mgl@1371: + relink_command="(cd `pwd`; $relink_command)" mgl@1371: + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` mgl@1371: + fi mgl@1371: + mgl@1371: + # Quote $ECHO for shipping. mgl@1371: + if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then mgl@1371: + case $progpath in mgl@1371: + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; mgl@1371: + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; mgl@1371: + esac mgl@1371: + qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` mgl@1371: + else mgl@1371: + qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` mgl@1371: + fi mgl@1371: + mgl@1371: + # Only actually do things if not in dry run mode. mgl@1371: + $opt_dry_run || { mgl@1371: + # win32 will think the script is a binary if it has mgl@1371: + # a .exe suffix, so we strip it off here. mgl@1371: + case $output in mgl@1371: + *.exe) func_stripname '' '.exe' "$output" mgl@1371: + output=$func_stripname_result ;; mgl@1371: + esac mgl@1371: + # test for cygwin because mv fails w/o .exe extensions mgl@1371: + case $host in mgl@1371: + *cygwin*) mgl@1371: + exeext=.exe mgl@1371: + func_stripname '' '.exe' "$outputname" mgl@1371: + outputname=$func_stripname_result ;; mgl@1371: + *) exeext= ;; mgl@1371: + esac mgl@1371: + case $host in mgl@1371: + *cygwin* | *mingw* ) mgl@1371: + output_name=`basename $output` mgl@1371: + output_path=`dirname $output` mgl@1371: + cwrappersource="$output_path/$objdir/lt-$output_name.c" mgl@1371: + cwrapper="$output_path/$output_name.exe" mgl@1371: + $RM $cwrappersource $cwrapper mgl@1371: + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 mgl@1371: + mgl@1371: + cat > $cwrappersource <> $cwrappersource<<"EOF" mgl@1371: +#include mgl@1371: +#include mgl@1371: +#include mgl@1371: +#include mgl@1371: +#include mgl@1371: +#include mgl@1371: +#include mgl@1371: +#include mgl@1371: +#include mgl@1371: + mgl@1371: +#if defined(PATH_MAX) mgl@1371: +# define LT_PATHMAX PATH_MAX mgl@1371: +#elif defined(MAXPATHLEN) mgl@1371: +# define LT_PATHMAX MAXPATHLEN mgl@1371: +#else mgl@1371: +# define LT_PATHMAX 1024 mgl@1371: +#endif mgl@1371: + mgl@1371: +#ifndef DIR_SEPARATOR mgl@1371: +# define DIR_SEPARATOR '/' mgl@1371: +# define PATH_SEPARATOR ':' mgl@1371: +#endif mgl@1371: + mgl@1371: +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ mgl@1371: + defined (__OS2__) mgl@1371: +# define HAVE_DOS_BASED_FILE_SYSTEM mgl@1371: +# ifndef DIR_SEPARATOR_2 mgl@1371: +# define DIR_SEPARATOR_2 '\\' mgl@1371: +# endif mgl@1371: +# ifndef PATH_SEPARATOR_2 mgl@1371: +# define PATH_SEPARATOR_2 ';' mgl@1371: +# endif mgl@1371: +#endif mgl@1371: + mgl@1371: +#ifndef DIR_SEPARATOR_2 mgl@1371: +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) mgl@1371: +#else /* DIR_SEPARATOR_2 */ mgl@1371: +# define IS_DIR_SEPARATOR(ch) \ mgl@1371: + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) mgl@1371: +#endif /* DIR_SEPARATOR_2 */ mgl@1371: + mgl@1371: +#ifndef PATH_SEPARATOR_2 mgl@1371: +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) mgl@1371: +#else /* PATH_SEPARATOR_2 */ mgl@1371: +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) mgl@1371: +#endif /* PATH_SEPARATOR_2 */ mgl@1371: + mgl@1371: +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) mgl@1371: +#define XFREE(stale) do { \ mgl@1371: + if (stale) { free ((void *) stale); stale = 0; } \ mgl@1371: +} while (0) mgl@1371: + mgl@1371: +/* -DDEBUG is fairly common in CFLAGS. */ mgl@1371: +#undef DEBUG mgl@1371: +#if defined DEBUGWRAPPER mgl@1371: +# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) mgl@1371: +#else mgl@1371: +# define DEBUG(format, ...) mgl@1371: +#endif mgl@1371: + mgl@1371: +const char *program_name = NULL; mgl@1371: + mgl@1371: +void * xmalloc (size_t num); mgl@1371: +char * xstrdup (const char *string); mgl@1371: +const char * base_name (const char *name); mgl@1371: +char * find_executable(const char *wrapper); mgl@1371: +int check_executable(const char *path); mgl@1371: +char * strendzap(char *str, const char *pat); mgl@1371: +void lt_fatal (const char *message, ...); mgl@1371: + mgl@1371: +int mgl@1371: +main (int argc, char *argv[]) mgl@1371: +{ mgl@1371: + char **newargz; mgl@1371: + int i; mgl@1371: + mgl@1371: + program_name = (char *) xstrdup (base_name (argv[0])); mgl@1371: + DEBUG("(main) argv[0] : %s\n",argv[0]); mgl@1371: + DEBUG("(main) program_name : %s\n",program_name); mgl@1371: + newargz = XMALLOC(char *, argc+2); mgl@1371: +EOF mgl@1371: + mgl@1371: + cat >> $cwrappersource <> $cwrappersource <<"EOF" mgl@1371: + newargz[1] = find_executable(argv[0]); mgl@1371: + if (newargz[1] == NULL) mgl@1371: + lt_fatal("Couldn't find %s", argv[0]); mgl@1371: + DEBUG("(main) found exe at : %s\n",newargz[1]); mgl@1371: + /* we know the script has the same name, without the .exe */ mgl@1371: + /* so make sure newargz[1] doesn't end in .exe */ mgl@1371: + strendzap(newargz[1],".exe"); mgl@1371: + for (i = 1; i < argc; i++) mgl@1371: + newargz[i+1] = xstrdup(argv[i]); mgl@1371: + newargz[argc+1] = NULL; mgl@1371: + mgl@1371: + for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" mgl@1371: + return 127; mgl@1371: +} mgl@1371: + mgl@1371: +void * mgl@1371: +xmalloc (size_t num) mgl@1371: +{ mgl@1371: + void * p = (void *) malloc (num); mgl@1371: + if (!p) mgl@1371: + lt_fatal ("Memory exhausted"); mgl@1371: + mgl@1371: + return p; mgl@1371: +} mgl@1371: + mgl@1371: +char * mgl@1371: +xstrdup (const char *string) mgl@1371: +{ mgl@1371: + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL mgl@1371: +; mgl@1371: +} mgl@1371: + mgl@1371: +const char * mgl@1371: +base_name (const char *name) mgl@1371: +{ mgl@1371: + const char *base; mgl@1371: + mgl@1371: +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) mgl@1371: + /* Skip over the disk name in MSDOS pathnames. */ mgl@1371: + if (isalpha ((unsigned char)name[0]) && name[1] == ':') mgl@1371: + name += 2; mgl@1371: +#endif mgl@1371: + mgl@1371: + for (base = name; *name; name++) mgl@1371: + if (IS_DIR_SEPARATOR (*name)) mgl@1371: + base = name + 1; mgl@1371: + return base; mgl@1371: +} mgl@1371: + mgl@1371: +int mgl@1371: +check_executable(const char * path) mgl@1371: +{ mgl@1371: + struct stat st; mgl@1371: + mgl@1371: + DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); mgl@1371: + if ((!path) || (!*path)) mgl@1371: + return 0; mgl@1371: + mgl@1371: + if ((stat (path, &st) >= 0) && mgl@1371: + ( mgl@1371: + /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ mgl@1371: +#if defined (S_IXOTH) mgl@1371: + ((st.st_mode & S_IXOTH) == S_IXOTH) || mgl@1371: +#endif mgl@1371: +#if defined (S_IXGRP) mgl@1371: + ((st.st_mode & S_IXGRP) == S_IXGRP) || mgl@1371: +#endif mgl@1371: + ((st.st_mode & S_IXUSR) == S_IXUSR)) mgl@1371: + ) mgl@1371: + return 1; mgl@1371: + else mgl@1371: + return 0; mgl@1371: +} mgl@1371: + mgl@1371: +/* Searches for the full path of the wrapper. Returns mgl@1371: + newly allocated full path name if found, NULL otherwise */ mgl@1371: +char * mgl@1371: +find_executable (const char* wrapper) mgl@1371: +{ mgl@1371: + int has_slash = 0; mgl@1371: + const char* p; mgl@1371: + const char* p_next; mgl@1371: + /* static buffer for getcwd */ mgl@1371: + char tmp[LT_PATHMAX + 1]; mgl@1371: + int tmp_len; mgl@1371: + char* concat_name; mgl@1371: + mgl@1371: + DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); mgl@1371: + mgl@1371: + if ((wrapper == NULL) || (*wrapper == '\0')) mgl@1371: + return NULL; mgl@1371: + mgl@1371: + /* Absolute path? */ mgl@1371: +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) mgl@1371: + if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') mgl@1371: + { mgl@1371: + concat_name = xstrdup (wrapper); mgl@1371: + if (check_executable(concat_name)) mgl@1371: + return concat_name; mgl@1371: + XFREE(concat_name); mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: +#endif mgl@1371: + if (IS_DIR_SEPARATOR (wrapper[0])) mgl@1371: + { mgl@1371: + concat_name = xstrdup (wrapper); mgl@1371: + if (check_executable(concat_name)) mgl@1371: + return concat_name; mgl@1371: + XFREE(concat_name); mgl@1371: + } mgl@1371: +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) mgl@1371: + } mgl@1371: +#endif mgl@1371: + mgl@1371: + for (p = wrapper; *p; p++) mgl@1371: + if (*p == '/') mgl@1371: + { mgl@1371: + has_slash = 1; mgl@1371: + break; mgl@1371: + } mgl@1371: + if (!has_slash) mgl@1371: + { mgl@1371: + /* no slashes; search PATH */ mgl@1371: + const char* path = getenv ("PATH"); mgl@1371: + if (path != NULL) mgl@1371: + { mgl@1371: + for (p = path; *p; p = p_next) mgl@1371: + { mgl@1371: + const char* q; mgl@1371: + size_t p_len; mgl@1371: + for (q = p; *q; q++) mgl@1371: + if (IS_PATH_SEPARATOR(*q)) mgl@1371: + break; mgl@1371: + p_len = q - p; mgl@1371: + p_next = (*q == '\0' ? q : q + 1); mgl@1371: + if (p_len == 0) mgl@1371: + { mgl@1371: + /* empty path: current directory */ mgl@1371: + if (getcwd (tmp, LT_PATHMAX) == NULL) mgl@1371: + lt_fatal ("getcwd failed"); mgl@1371: + tmp_len = strlen(tmp); mgl@1371: + concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); mgl@1371: + memcpy (concat_name, tmp, tmp_len); mgl@1371: + concat_name[tmp_len] = '/'; mgl@1371: + strcpy (concat_name + tmp_len + 1, wrapper); mgl@1371: + } mgl@1371: + else mgl@1371: + { mgl@1371: + concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); mgl@1371: + memcpy (concat_name, p, p_len); mgl@1371: + concat_name[p_len] = '/'; mgl@1371: + strcpy (concat_name + p_len + 1, wrapper); mgl@1371: + } mgl@1371: + if (check_executable(concat_name)) mgl@1371: + return concat_name; mgl@1371: + XFREE(concat_name); mgl@1371: + } mgl@1371: + } mgl@1371: + /* not found in PATH; assume curdir */ mgl@1371: + } mgl@1371: + /* Relative path | not found in path: prepend cwd */ mgl@1371: + if (getcwd (tmp, LT_PATHMAX) == NULL) mgl@1371: + lt_fatal ("getcwd failed"); mgl@1371: + tmp_len = strlen(tmp); mgl@1371: + concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); mgl@1371: + memcpy (concat_name, tmp, tmp_len); mgl@1371: + concat_name[tmp_len] = '/'; mgl@1371: + strcpy (concat_name + tmp_len + 1, wrapper); mgl@1371: + mgl@1371: + if (check_executable(concat_name)) mgl@1371: + return concat_name; mgl@1371: + XFREE(concat_name); mgl@1371: + return NULL; mgl@1371: +} mgl@1371: + mgl@1371: +char * mgl@1371: +strendzap(char *str, const char *pat) mgl@1371: +{ mgl@1371: + size_t len, patlen; mgl@1371: + mgl@1371: + assert(str != NULL); mgl@1371: + assert(pat != NULL); mgl@1371: + mgl@1371: + len = strlen(str); mgl@1371: + patlen = strlen(pat); mgl@1371: + mgl@1371: + if (patlen <= len) mgl@1371: + { mgl@1371: + str += len - patlen; mgl@1371: + if (strcmp(str, pat) == 0) mgl@1371: + *str = '\0'; mgl@1371: + } mgl@1371: + return str; mgl@1371: +} mgl@1371: + mgl@1371: +static void mgl@1371: +lt_error_core (int exit_status, const char * mode, mgl@1371: + const char * message, va_list ap) mgl@1371: +{ mgl@1371: + fprintf (stderr, "%s: %s: ", program_name, mode); mgl@1371: + vfprintf (stderr, message, ap); mgl@1371: + fprintf (stderr, ".\n"); mgl@1371: + mgl@1371: + if (exit_status >= 0) mgl@1371: + exit (exit_status); mgl@1371: +} mgl@1371: + mgl@1371: +void mgl@1371: +lt_fatal (const char *message, ...) mgl@1371: +{ mgl@1371: + va_list ap; mgl@1371: + va_start (ap, message); mgl@1371: + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); mgl@1371: + va_end (ap); mgl@1371: +} mgl@1371: +EOF mgl@1371: + # we should really use a build-platform specific compiler mgl@1371: + # here, but OTOH, the wrappers (shell script and this C one) mgl@1371: + # are only useful if you want to execute the "real" binary. mgl@1371: + # Since the "real" binary is built for $host, then this mgl@1371: + # wrapper might as well be built for $host, too. mgl@1371: + $opt_dry_run || $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource mgl@1371: + ;; mgl@1371: + esac mgl@1371: + $RM $output mgl@1371: + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 mgl@1371: + mgl@1371: + $ECHO > $output "\ mgl@1371: +#! $SHELL mgl@1371: + mgl@1371: +# $output - temporary wrapper script for $objdir/$outputname mgl@1371: +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION mgl@1371: +# mgl@1371: +# The $output program cannot be directly executed until all the libtool mgl@1371: +# libraries that it depends on are installed. mgl@1371: +# mgl@1371: +# This wrapper script should never be moved out of the build directory. mgl@1371: +# If it is, it will not operate correctly. mgl@1371: + mgl@1371: +# Sed substitution that helps us do robust quoting. It backslashifies mgl@1371: +# metacharacters that are still active within double-quoted strings. mgl@1371: +Xsed='${SED} -e 1s/^X//' mgl@1371: +sed_quote_subst='$sed_quote_subst' mgl@1371: + mgl@1371: +# Be Bourne compatible mgl@1371: +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then mgl@1371: + emulate sh mgl@1371: + NULLCMD=: mgl@1371: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which mgl@1371: + # is contrary to our usage. Disable this feature. mgl@1371: + alias -g '\${1+\"\$@\"}'='\"\$@\"' mgl@1371: + setopt NO_GLOB_SUBST mgl@1371: +else mgl@1371: + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac mgl@1371: +fi mgl@1371: +BIN_SH=xpg4; export BIN_SH # for Tru64 mgl@1371: +DUALCASE=1; export DUALCASE # for MKS sh mgl@1371: + mgl@1371: +# The HP-UX ksh and POSIX shell print the target directory to stdout mgl@1371: +# if CDPATH is set. mgl@1371: +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH mgl@1371: + mgl@1371: +relink_command=\"$relink_command\" mgl@1371: + mgl@1371: +# This environment variable determines our operation mode. mgl@1371: +if test \"\$libtool_install_magic\" = \"$magic\"; then mgl@1371: + # install mode needs the following variables: mgl@1371: + generated_by_libtool_version='$macro_version' mgl@1371: + notinst_deplibs='$notinst_deplibs' mgl@1371: +else mgl@1371: + # When we are sourced in execute mode, \$file and \$ECHO are already set. mgl@1371: + if test \"\$libtool_execute_magic\" != \"$magic\"; then mgl@1371: + ECHO=\"$qecho\" mgl@1371: + file=\"\$0\" mgl@1371: + # Make sure echo works. mgl@1371: + if test \"X\$1\" = X--no-reexec; then mgl@1371: + # Discard the --no-reexec flag, and continue. mgl@1371: + shift mgl@1371: + elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then mgl@1371: + # Yippee, \$ECHO works! mgl@1371: + : mgl@1371: + else mgl@1371: + # Restart under the correct shell, and then maybe \$ECHO will work. mgl@1371: + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} mgl@1371: + fi mgl@1371: + fi\ mgl@1371: +" mgl@1371: + $ECHO >> $output "\ mgl@1371: + mgl@1371: + # Find the directory that this script lives in. mgl@1371: + thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` mgl@1371: + test \"x\$thisdir\" = \"x\$file\" && thisdir=. mgl@1371: + mgl@1371: + # Follow symbolic links until we get to the real thisdir. mgl@1371: + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` mgl@1371: + while test -n \"\$file\"; do mgl@1371: + destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` mgl@1371: + mgl@1371: + # If there was a directory component, then change thisdir. mgl@1371: + if test \"x\$destdir\" != \"x\$file\"; then mgl@1371: + case \"\$destdir\" in mgl@1371: + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; mgl@1371: + *) thisdir=\"\$thisdir/\$destdir\" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + mgl@1371: + file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` mgl@1371: + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` mgl@1371: + done mgl@1371: + mgl@1371: + # Try to get the absolute directory name. mgl@1371: + absdir=\`cd \"\$thisdir\" && pwd\` mgl@1371: + test -n \"\$absdir\" && thisdir=\"\$absdir\" mgl@1371: +" mgl@1371: + mgl@1371: + if test "$fast_install" = yes; then mgl@1371: + $ECHO >> $output "\ mgl@1371: + program=lt-'$outputname'$exeext mgl@1371: + progdir=\"\$thisdir/$objdir\" mgl@1371: + mgl@1371: + if test ! -f \"\$progdir/\$program\" || mgl@1371: + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ mgl@1371: + test \"X\$file\" != \"X\$progdir/\$program\"; }; then mgl@1371: + mgl@1371: + file=\"\$\$-\$program\" mgl@1371: + mgl@1371: + if test ! -d \"\$progdir\"; then mgl@1371: + $MKDIR \"\$progdir\" mgl@1371: + else mgl@1371: + $RM \"\$progdir/\$file\" mgl@1371: + fi" mgl@1371: + mgl@1371: + $ECHO >> $output "\ mgl@1371: + mgl@1371: + # relink executable if necessary mgl@1371: + if test -n \"\$relink_command\"; then mgl@1371: + if relink_command_output=\`eval \$relink_command 2>&1\`; then : mgl@1371: + else mgl@1371: + $ECHO \"\$relink_command_output\" >&2 mgl@1371: + $RM \"\$progdir/\$file\" mgl@1371: + exit 1 mgl@1371: + fi mgl@1371: + fi mgl@1371: + mgl@1371: + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || mgl@1371: + { $RM \"\$progdir/\$program\"; mgl@1371: + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } mgl@1371: + $RM \"\$progdir/\$file\" mgl@1371: + fi" mgl@1371: + else mgl@1371: + $ECHO >> $output "\ mgl@1371: + program='$outputname' mgl@1371: + progdir=\"\$thisdir/$objdir\" mgl@1371: +" mgl@1371: + fi mgl@1371: + mgl@1371: + $ECHO >> $output "\ mgl@1371: + mgl@1371: + if test -f \"\$progdir/\$program\"; then" mgl@1371: + mgl@1371: + # Export our shlibpath_var if we have one. mgl@1371: + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then mgl@1371: + $ECHO >> $output "\ mgl@1371: + # Add our own library path to $shlibpath_var mgl@1371: + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" mgl@1371: + mgl@1371: + # Some systems cannot cope with colon-terminated $shlibpath_var mgl@1371: + # The second colon is a workaround for a bug in BeOS R4 sed mgl@1371: + $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` mgl@1371: + mgl@1371: + export $shlibpath_var mgl@1371: +" mgl@1371: + fi mgl@1371: + mgl@1371: + # fixup the dll searchpath if we need to. mgl@1371: + if test -n "$dllsearchpath"; then mgl@1371: + $ECHO >> $output "\ mgl@1371: + # Add the dll search path components to the executable PATH mgl@1371: + PATH=$dllsearchpath:\$PATH mgl@1371: +" mgl@1371: + fi mgl@1371: + mgl@1371: + $ECHO >> $output "\ mgl@1371: + if test \"\$libtool_execute_magic\" != \"$magic\"; then mgl@1371: + # Run the actual program with our arguments. mgl@1371: +" mgl@1371: + case $host in mgl@1371: + # Backslashes separate directories on plain windows mgl@1371: + *-*-mingw | *-*-os2*) mgl@1371: + $ECHO >> $output "\ mgl@1371: + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} mgl@1371: +" mgl@1371: + ;; mgl@1371: + mgl@1371: + *) mgl@1371: + $ECHO >> $output "\ mgl@1371: + exec \"\$progdir/\$program\" \${1+\"\$@\"} mgl@1371: +" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + $ECHO >> $output "\ mgl@1371: + \$ECHO \"\$0: cannot exec \$program \$*\" mgl@1371: + exit 1 mgl@1371: + fi mgl@1371: + else mgl@1371: + # The program doesn't exist. mgl@1371: + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 mgl@1371: + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 mgl@1371: + $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 mgl@1371: + exit 1 mgl@1371: + fi mgl@1371: +fi\ mgl@1371: +" mgl@1371: + chmod +x $output mgl@1371: + } mgl@1371: + exit $EXIT_SUCCESS mgl@1371: + ;; mgl@1371: + esac mgl@1371: + mgl@1371: + # See if we need to build an old-fashioned archive. mgl@1371: + for oldlib in $oldlibs; do mgl@1371: + mgl@1371: + if test "$build_libtool_libs" = convenience; then mgl@1371: + oldobjs="$libobjs_save $symfileobj" mgl@1371: + addlibs="$convenience" mgl@1371: + build_libtool_libs=no mgl@1371: + else mgl@1371: + if test "$build_libtool_libs" = module; then mgl@1371: + oldobjs="$libobjs_save" mgl@1371: + build_libtool_libs=no mgl@1371: + else mgl@1371: + oldobjs="$old_deplibs $non_pic_objects" mgl@1371: + if test "$preload" = yes && test -f "$symfileobj"; then mgl@1371: + oldobjs="$oldobjs $symfileobj" mgl@1371: + fi mgl@1371: + fi mgl@1371: + addlibs="$old_convenience" mgl@1371: + fi mgl@1371: + mgl@1371: + if test -n "$addlibs"; then mgl@1371: + gentop="$output_objdir/${outputname}x" mgl@1371: + generated="$generated $gentop" mgl@1371: + mgl@1371: + func_extract_archives $gentop $addlibs mgl@1371: + oldobjs="$oldobjs $func_extract_archives_result" mgl@1371: + fi mgl@1371: + mgl@1371: + # Do each command in the archive commands. mgl@1371: + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then mgl@1371: + cmds=$old_archive_from_new_cmds mgl@1371: + else mgl@1371: + mgl@1371: + # Add any objects from preloaded convenience libraries mgl@1371: + if test -n "$dlprefiles"; then mgl@1371: + gentop="$output_objdir/${outputname}x" mgl@1371: + generated="$generated $gentop" mgl@1371: + mgl@1371: + func_extract_archives $gentop $dlprefiles mgl@1371: + oldobjs="$oldobjs $func_extract_archives_result" mgl@1371: + fi mgl@1371: + mgl@1371: + # POSIX demands no paths to be encoded in archives. We have mgl@1371: + # to avoid creating archives with duplicate basenames if we mgl@1371: + # might have to extract them afterwards, e.g., when creating a mgl@1371: + # static archive out of a convenience library, or when linking mgl@1371: + # the entirety of a libtool archive into another (currently mgl@1371: + # not supported by libtool). mgl@1371: + if (for obj in $oldobjs mgl@1371: + do mgl@1371: + func_basename "$obj" mgl@1371: + $ECHO "$func_basename_result" mgl@1371: + done | sort | sort -uc >/dev/null 2>&1); then mgl@1371: + : mgl@1371: + else mgl@1371: + $ECHO "copying selected object files to avoid basename conflicts..." mgl@1371: + gentop="$output_objdir/${outputname}x" mgl@1371: + generated="$generated $gentop" mgl@1371: + func_mkdir_p "$gentop" mgl@1371: + save_oldobjs=$oldobjs mgl@1371: + oldobjs= mgl@1371: + counter=1 mgl@1371: + for obj in $save_oldobjs mgl@1371: + do mgl@1371: + func_basename "$obj" mgl@1371: + objbase="$func_basename_result" mgl@1371: + case " $oldobjs " in mgl@1371: + " ") oldobjs=$obj ;; mgl@1371: + *[\ /]"$objbase "*) mgl@1371: + while :; do mgl@1371: + # Make sure we don't pick an alternate name that also mgl@1371: + # overlaps. mgl@1371: + newobj=lt$counter-$objbase mgl@1371: + counter=`expr $counter + 1` mgl@1371: + case " $oldobjs " in mgl@1371: + *[\ /]"$newobj "*) ;; mgl@1371: + *) if test ! -f "$gentop/$newobj"; then break; fi ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" mgl@1371: + oldobjs="$oldobjs $gentop/$newobj" mgl@1371: + ;; mgl@1371: + *) oldobjs="$oldobjs $obj" ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + fi mgl@1371: + eval cmds=\"$old_archive_cmds\" mgl@1371: + mgl@1371: + if len=`expr "X$cmds" : ".*" 2>/dev/null` && mgl@1371: + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then mgl@1371: + cmds=$old_archive_cmds mgl@1371: + else mgl@1371: + # the command line is too long to link in one step, link in parts mgl@1371: + func_echo "using piecewise archive linking..." mgl@1371: + save_RANLIB=$RANLIB mgl@1371: + RANLIB=: mgl@1371: + objlist= mgl@1371: + concat_cmds= mgl@1371: + save_oldobjs=$oldobjs mgl@1371: + # Is there a better way of finding the last object in the list? mgl@1371: + for obj in $save_oldobjs mgl@1371: + do mgl@1371: + last_oldobj=$obj mgl@1371: + done mgl@1371: + for obj in $save_oldobjs mgl@1371: + do mgl@1371: + oldobjs="$objlist $obj" mgl@1371: + objlist="$objlist $obj" mgl@1371: + eval test_cmds=\"$old_archive_cmds\" mgl@1371: + if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && mgl@1371: + test "$len" -le "$max_cmd_len"; then mgl@1371: + : mgl@1371: + else mgl@1371: + # the above command should be used before it gets too long mgl@1371: + oldobjs=$objlist mgl@1371: + if test "$obj" = "$last_oldobj" ; then mgl@1371: + RANLIB=$save_RANLIB mgl@1371: + fi mgl@1371: + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ mgl@1371: + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" mgl@1371: + objlist= mgl@1371: + fi mgl@1371: + done mgl@1371: + RANLIB=$save_RANLIB mgl@1371: + oldobjs=$objlist mgl@1371: + if test "X$oldobjs" = "X" ; then mgl@1371: + eval cmds=\"\$concat_cmds\" mgl@1371: + else mgl@1371: + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" mgl@1371: + fi mgl@1371: + fi mgl@1371: + fi mgl@1371: + func_execute_cmds "$cmds" 'exit $?' mgl@1371: + done mgl@1371: + mgl@1371: + test -n "$generated" && \ mgl@1371: + func_show_eval "${RM}r$generated" mgl@1371: + mgl@1371: + # Now create the libtool archive. mgl@1371: + case $output in mgl@1371: + *.la) mgl@1371: + old_library= mgl@1371: + test "$build_old_libs" = yes && old_library="$libname.$libext" mgl@1371: + func_echo "creating $output" mgl@1371: + mgl@1371: + # Preserve any variables that may affect compiler behavior mgl@1371: + for var in $variables_saved_for_relink; do mgl@1371: + if eval test -z \"\${$var+set}\"; then mgl@1371: + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" mgl@1371: + elif eval var_value=\$$var; test -z "$var_value"; then mgl@1371: + relink_command="$var=; export $var; $relink_command" mgl@1371: + else mgl@1371: + func_quote_for_eval "$var_value" mgl@1371: + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" mgl@1371: + fi mgl@1371: + done mgl@1371: + # Quote the link command for shipping. mgl@1371: + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" mgl@1371: + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` mgl@1371: + if test "$hardcode_automatic" = yes ; then mgl@1371: + relink_command= mgl@1371: + fi mgl@1371: + mgl@1371: + # Only create the output if not a dry run. mgl@1371: + $opt_dry_run || { mgl@1371: + for installed in no yes; do mgl@1371: + if test "$installed" = yes; then mgl@1371: + if test -z "$install_libdir"; then mgl@1371: + break mgl@1371: + fi mgl@1371: + output="$output_objdir/$outputname"i mgl@1371: + # Replace all uninstalled libtool libraries with the installed ones mgl@1371: + newdependency_libs= mgl@1371: + for deplib in $dependency_libs; do mgl@1371: + case $deplib in mgl@1371: + *.la) mgl@1371: + func_basename "$deplib" mgl@1371: + name="$func_basename_result" mgl@1371: + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` mgl@1371: + test -z "$libdir" && \ mgl@1371: + func_fatal_error "\`$deplib' is not a valid libtool archive" mgl@1371: + newdependency_libs="$newdependency_libs $libdir/$name" mgl@1371: + ;; mgl@1371: + *) newdependency_libs="$newdependency_libs $deplib" ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + dependency_libs="$newdependency_libs" mgl@1371: + newdlfiles= mgl@1371: + mgl@1371: + for lib in $dlfiles; do mgl@1371: + case $lib in mgl@1371: + *.la) mgl@1371: + func_basename "$lib" mgl@1371: + name="$func_basename_result" mgl@1371: + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` mgl@1371: + test -z "$libdir" && \ mgl@1371: + func_fatal_error "\`$lib' is not a valid libtool archive" mgl@1371: + newdlfiles="$newdlfiles $libdir/$name" mgl@1371: + ;; mgl@1371: + *) newdlfiles="$newdlfiles $lib" ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + dlfiles="$newdlfiles" mgl@1371: + newdlprefiles= mgl@1371: + for lib in $dlprefiles; do mgl@1371: + case $lib in mgl@1371: + *.la) mgl@1371: + # Only pass preopened files to the pseudo-archive (for mgl@1371: + # eventual linking with the app. that links it) if we mgl@1371: + # didn't already link the preopened objects directly into mgl@1371: + # the library: mgl@1371: + func_basename "$lib" mgl@1371: + name="$func_basename_result" mgl@1371: + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` mgl@1371: + test -z "$libdir" && \ mgl@1371: + func_fatal_error "\`$lib' is not a valid libtool archive" mgl@1371: + newdlprefiles="$newdlprefiles $libdir/$name" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + dlprefiles="$newdlprefiles" mgl@1371: + else mgl@1371: + newdlfiles= mgl@1371: + for lib in $dlfiles; do mgl@1371: + case $lib in mgl@1371: + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; mgl@1371: + *) abs=`pwd`"/$lib" ;; mgl@1371: + esac mgl@1371: + newdlfiles="$newdlfiles $abs" mgl@1371: + done mgl@1371: + dlfiles="$newdlfiles" mgl@1371: + newdlprefiles= mgl@1371: + for lib in $dlprefiles; do mgl@1371: + case $lib in mgl@1371: + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; mgl@1371: + *) abs=`pwd`"/$lib" ;; mgl@1371: + esac mgl@1371: + newdlprefiles="$newdlprefiles $abs" mgl@1371: + done mgl@1371: + dlprefiles="$newdlprefiles" mgl@1371: + fi mgl@1371: + $RM $output mgl@1371: + # place dlname in correct position for cygwin mgl@1371: + tdlname=$dlname mgl@1371: + case $host,$output,$installed,$module,$dlname in mgl@1371: + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; mgl@1371: + esac mgl@1371: + $ECHO > $output "\ mgl@1371: +# $outputname - a libtool library file mgl@1371: +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION mgl@1371: +# mgl@1371: +# Please DO NOT delete this file! mgl@1371: +# It is necessary for linking the library. mgl@1371: + mgl@1371: +# The name that we can dlopen(3). mgl@1371: +dlname='$tdlname' mgl@1371: + mgl@1371: +# Names of this library. mgl@1371: +library_names='$library_names' mgl@1371: + mgl@1371: +# The name of the static archive. mgl@1371: +old_library='$old_library' mgl@1371: + mgl@1371: +# Linker flags that can not go in dependency_libs. mgl@1371: +inherited_linker_flags='$new_inherited_linker_flags' mgl@1371: + mgl@1371: +# Libraries that this one depends upon. mgl@1371: +dependency_libs='$dependency_libs' mgl@1371: + mgl@1371: +# Names of additional weak libraries provided by this library mgl@1371: +weak_library_names='$weak_libs' mgl@1371: + mgl@1371: +# Version information for $libname. mgl@1371: +current=$current mgl@1371: +age=$age mgl@1371: +revision=$revision mgl@1371: + mgl@1371: +# Is this an already installed library? mgl@1371: +installed=$installed mgl@1371: + mgl@1371: +# Should we warn about portability when linking against -modules? mgl@1371: +shouldnotlink=$module mgl@1371: + mgl@1371: +# Files to dlopen/dlpreopen mgl@1371: +dlopen='$dlfiles' mgl@1371: +dlpreopen='$dlprefiles' mgl@1371: + mgl@1371: +# Directory that this library needs to be installed in: mgl@1371: +libdir='$install_libdir'" mgl@1371: + if test "$installed" = no && test "$need_relink" = yes; then mgl@1371: + $ECHO >> $output "\ mgl@1371: +relink_command=\"$relink_command\"" mgl@1371: + fi mgl@1371: + done mgl@1371: + } mgl@1371: + mgl@1371: + # Do a symbolic link so that the libtool archive can be found in mgl@1371: + # LD_LIBRARY_PATH before the program is installed. mgl@1371: + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' mgl@1371: + ;; mgl@1371: + esac mgl@1371: + exit $EXIT_SUCCESS mgl@1371: +} mgl@1371: + mgl@1371: +{ test "$mode" = link || test "$mode" = relink; } && mgl@1371: + func_mode_link ${1+"$@"} mgl@1371: + mgl@1371: + mgl@1371: +# func_mode_uninstall arg... mgl@1371: +func_mode_uninstall () mgl@1371: +{ mgl@1371: + $opt_debug mgl@1371: + RM="$nonopt" mgl@1371: + files= mgl@1371: + rmforce= mgl@1371: + exit_status=0 mgl@1371: + mgl@1371: + # This variable tells wrapper scripts just to set variables rather mgl@1371: + # than running their programs. mgl@1371: + libtool_install_magic="$magic" mgl@1371: + mgl@1371: + for arg mgl@1371: + do mgl@1371: + case $arg in mgl@1371: + -f) RM="$RM $arg"; rmforce=yes ;; mgl@1371: + -*) RM="$RM $arg" ;; mgl@1371: + *) files="$files $arg" ;; mgl@1371: + esac mgl@1371: + done mgl@1371: + mgl@1371: + test -z "$RM" && \ mgl@1371: + func_fatal_help "you must specify an RM program" mgl@1371: + mgl@1371: + rmdirs= mgl@1371: + mgl@1371: + origobjdir="$objdir" mgl@1371: + for file in $files; do mgl@1371: + func_dirname "$file" "" "." mgl@1371: + dir="$func_dirname_result" mgl@1371: + if test "X$dir" = X.; then mgl@1371: + objdir="$origobjdir" mgl@1371: + else mgl@1371: + objdir="$dir/$origobjdir" mgl@1371: + fi mgl@1371: + func_basename "$file" mgl@1371: + name="$func_basename_result" mgl@1371: + test "$mode" = uninstall && objdir="$dir" mgl@1371: + mgl@1371: + # Remember objdir for removal later, being careful to avoid duplicates mgl@1371: + if test "$mode" = clean; then mgl@1371: + case " $rmdirs " in mgl@1371: + *" $objdir "*) ;; mgl@1371: + *) rmdirs="$rmdirs $objdir" ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + mgl@1371: + # Don't error if the file doesn't exist and rm -f was used. mgl@1371: + if { test -L "$file"; } >/dev/null 2>&1 || mgl@1371: + { test -h "$file"; } >/dev/null 2>&1 || mgl@1371: + test -f "$file"; then mgl@1371: + : mgl@1371: + elif test -d "$file"; then mgl@1371: + exit_status=1 mgl@1371: + continue mgl@1371: + elif test "$rmforce" = yes; then mgl@1371: + continue mgl@1371: + fi mgl@1371: + mgl@1371: + rmfiles="$file" mgl@1371: + mgl@1371: + case $name in mgl@1371: + *.la) mgl@1371: + # Possibly a libtool archive, so verify it. mgl@1371: + if func_lalib_p "$file"; then mgl@1371: + func_source $dir/$name mgl@1371: + mgl@1371: + # Delete the libtool libraries and symlinks. mgl@1371: + for n in $library_names; do mgl@1371: + rmfiles="$rmfiles $objdir/$n" mgl@1371: + done mgl@1371: + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" mgl@1371: + mgl@1371: + case "$mode" in mgl@1371: + clean) mgl@1371: + case " $library_names " in mgl@1371: + # " " in the beginning catches empty $dlname mgl@1371: + *" $dlname "*) ;; mgl@1371: + *) rmfiles="$rmfiles $objdir/$dlname" ;; mgl@1371: + esac mgl@1371: + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" mgl@1371: + ;; mgl@1371: + uninstall) mgl@1371: + if test -n "$library_names"; then mgl@1371: + # Do each command in the postuninstall commands. mgl@1371: + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' mgl@1371: + fi mgl@1371: + mgl@1371: + if test -n "$old_library"; then mgl@1371: + # Do each command in the old_postuninstall commands. mgl@1371: + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' mgl@1371: + fi mgl@1371: + # FIXME: should reinstall the best remaining shared library. mgl@1371: + ;; mgl@1371: + esac mgl@1371: + fi mgl@1371: + ;; mgl@1371: + mgl@1371: + *.lo) mgl@1371: + # Possibly a libtool object, so verify it. mgl@1371: + if func_lalib_p "$file"; then mgl@1371: + mgl@1371: + # Read the .lo file mgl@1371: + func_source $dir/$name mgl@1371: + mgl@1371: + # Add PIC object to the list of files to remove. mgl@1371: + if test -n "$pic_object" && mgl@1371: + test "$pic_object" != none; then mgl@1371: + rmfiles="$rmfiles $dir/$pic_object" mgl@1371: + fi mgl@1371: + mgl@1371: + # Add non-PIC object to the list of files to remove. mgl@1371: + if test -n "$non_pic_object" && mgl@1371: + test "$non_pic_object" != none; then mgl@1371: + rmfiles="$rmfiles $dir/$non_pic_object" mgl@1371: + fi mgl@1371: + fi mgl@1371: + ;; mgl@1371: + mgl@1371: + *) mgl@1371: + if test "$mode" = clean ; then mgl@1371: + noexename=$name mgl@1371: + case $file in mgl@1371: + *.exe) mgl@1371: + func_stripname '' '.exe' "$file" mgl@1371: + file=$func_stripname_result mgl@1371: + func_stripname '' '.exe' "$name" mgl@1371: + noexename=$func_stripname_result mgl@1371: + # $file with .exe has already been added to rmfiles, mgl@1371: + # add $file without .exe mgl@1371: + rmfiles="$rmfiles $file" mgl@1371: + ;; mgl@1371: + esac mgl@1371: + # Do a test to see if this is a libtool program. mgl@1371: + if func_ltwrapper_p "$file"; then mgl@1371: + relink_command= mgl@1371: + func_source $dir/$noexename mgl@1371: + mgl@1371: + # note $name still contains .exe if it was in $file originally mgl@1371: + # as does the version of $file that was added into $rmfiles mgl@1371: + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" mgl@1371: + if test "$fast_install" = yes && test -n "$relink_command"; then mgl@1371: + rmfiles="$rmfiles $objdir/lt-$name" mgl@1371: + fi mgl@1371: + if test "X$noexename" != "X$name" ; then mgl@1371: + rmfiles="$rmfiles $objdir/lt-${noexename}.c" mgl@1371: + fi mgl@1371: + fi mgl@1371: + fi mgl@1371: + ;; mgl@1371: + esac mgl@1371: + func_show_eval "$RM $rmfiles" 'exit_status=1' mgl@1371: + done mgl@1371: + objdir="$origobjdir" mgl@1371: + mgl@1371: + # Try to remove the ${objdir}s in the directories where we deleted files mgl@1371: + for dir in $rmdirs; do mgl@1371: + if test -d "$dir"; then mgl@1371: + func_show_eval "rmdir $dir >/dev/null 2>&1" mgl@1371: + fi mgl@1371: + done mgl@1371: + mgl@1371: + exit $exit_status mgl@1371: +} mgl@1371: + mgl@1371: +{ test "$mode" = uninstall || test "$mode" = clean; } && mgl@1371: + func_mode_uninstall ${1+"$@"} mgl@1371: + mgl@1371: +test -z "$mode" && { mgl@1371: + help="$generic_help" mgl@1371: + func_fatal_help "you must specify a MODE" mgl@1371: +} mgl@1371: + mgl@1371: +test -z "$exec_cmd" && \ mgl@1371: + func_fatal_help "invalid operation mode \`$mode'" mgl@1371: + mgl@1371: +if test -n "$exec_cmd"; then mgl@1371: + eval exec "$exec_cmd" mgl@1371: + exit $EXIT_FAILURE mgl@1371: +fi mgl@1371: + mgl@1371: +exit $exit_status mgl@1371: + mgl@1371: + mgl@1371: +# The TAGs below are defined such that we never get into a situation mgl@1371: +# in which we disable both kinds of libraries. Given conflicting mgl@1371: +# choices, we go for a static library, that is the most portable, mgl@1371: +# since we can't tell whether shared libraries were disabled because mgl@1371: +# the user asked for that or because the platform doesn't support mgl@1371: +# them. This is particularly important on AIX, because we don't mgl@1371: +# support having both static and shared libraries enabled at the same mgl@1371: +# time on that platform, so we default to a shared-only configuration. mgl@1371: +# If a disable-shared tag is given, we'll fallback to a static-only mgl@1371: +# configuration. But we'll never go from static-only to shared-only. mgl@1371: + mgl@1371: +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared mgl@1371: +build_libtool_libs=no mgl@1371: +build_old_libs=yes mgl@1371: +# ### END LIBTOOL TAG CONFIG: disable-shared mgl@1371: + mgl@1371: +# ### BEGIN LIBTOOL TAG CONFIG: disable-static mgl@1371: +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` mgl@1371: +# ### END LIBTOOL TAG CONFIG: disable-static mgl@1371: + mgl@1371: +# Local Variables: mgl@1371: +# mode:shell-script mgl@1371: +# sh-indentation:2 mgl@1371: +# End: mgl@1371: +# vi:sw=2 mgl@1371: --- a/bfd/Makefile.in mgl@1371: +++ b/bfd/Makefile.in mgl@1371: @@ -312,6 +312,7 @@ ALL_MACHINES = \ mgl@1371: cpu-arc.lo \ mgl@1371: cpu-arm.lo \ mgl@1371: cpu-avr.lo \ mgl@1371: + cpu-avr32.lo \ mgl@1371: cpu-bfin.lo \ mgl@1371: cpu-cr16.lo \ mgl@1371: cpu-cr16c.lo \ mgl@1371: @@ -493,6 +494,7 @@ BFD32_BACKENDS = \ mgl@1371: elf32-arc.lo \ mgl@1371: elf32-arm.lo \ mgl@1371: elf32-avr.lo \ mgl@1371: + elf32-avr32.lo \ mgl@1371: elf32-bfin.lo \ mgl@1371: elf32-cr16.lo \ mgl@1371: elf32-cr16c.lo \ mgl@1371: @@ -1908,6 +1910,10 @@ elf32-cr16.lo: elf32-cr16.c $(INCDIR)/fi mgl@1371: $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h elf-bfd.h \ mgl@1371: $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ mgl@1371: $(INCDIR)/elf/cr16.h $(INCDIR)/elf/reloc-macros.h elf32-target.h mgl@1371: +elf32-avr32.lo: elf32-avr32.c $(INCDIR)/filenames.h elf-bfd.h \ mgl@1371: + $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ mgl@1371: + $(INCDIR)/bfdlink.h $(INCDIR)/elf/avr32.h $(INCDIR)/elf/reloc-macros.h \ mgl@1371: + elf32-target.h mgl@1371: elf32-cr16c.lo: elf32-cr16c.c $(INCDIR)/filenames.h \ mgl@1371: $(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/cr16c.h \ mgl@1371: $(INCDIR)/elf/reloc-macros.h elf-bfd.h $(INCDIR)/elf/common.h \ mgl@1371: --- /dev/null mgl@1371: +++ b/bfd/po/Makefile.in mgl@1371: @@ -0,0 +1,297 @@ mgl@1371: +# Makefile for program source directory in GNU NLS utilities package. mgl@1371: +# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper mgl@1371: +# Copyright 2001, 2003, 2006 Free Software Foundation, Inc. mgl@1371: +# mgl@1371: +# This file may be copied and used freely without restrictions. It can mgl@1371: +# be used in projects which are not available under the GNU Public License mgl@1371: +# but which still want to provide support for the GNU gettext functionality. mgl@1371: +# Please note that the actual code is *not* freely available. mgl@1371: + mgl@1371: +PACKAGE = bfd mgl@1371: +VERSION = 2.18.atmel.1.0.1.avr32linux.1 mgl@1371: + mgl@1371: +SHELL = /bin/sh mgl@1371: + mgl@1371: + mgl@1371: +srcdir = . mgl@1371: +top_srcdir = .. mgl@1371: + mgl@1371: +top_builddir = .. mgl@1371: + mgl@1371: +prefix = /usr mgl@1371: +exec_prefix = ${prefix} mgl@1371: +datadir = $(prefix)/share mgl@1371: +localedir = $(datadir)/locale mgl@1371: +gnulocaledir = $(prefix)/share/locale mgl@1371: +gettextsrcdir = $(prefix)/share/gettext/po mgl@1371: +subdir = po mgl@1371: + mgl@1371: +DESTDIR = mgl@1371: + mgl@1371: +INSTALL = /usr/bin/install -c mgl@1371: +INSTALL_DATA = ${INSTALL} -m 644 mgl@1371: +MKINSTALLDIRS = $(top_builddir)/./../mkinstalldirs mgl@1371: + mgl@1371: +CC = gcc mgl@1371: +GENCAT = gencat mgl@1371: +GMSGFMT = PATH=../src:$$PATH /usr/bin/msgfmt mgl@1371: +MSGFMT = /usr/bin/msgfmt mgl@1371: +XGETTEXT = PATH=../src:$$PATH /usr/bin/xgettext mgl@1371: +MSGMERGE = PATH=../src:$$PATH msgmerge mgl@1371: + mgl@1371: +DEFS = -DHAVE_CONFIG_H mgl@1371: +CFLAGS = -g -O2 mgl@1371: +CPPFLAGS = mgl@1371: + mgl@1371: +INCLUDES = -I.. -I$(top_srcdir)/intl mgl@1371: + mgl@1371: +COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) mgl@1371: + mgl@1371: +SOURCES = cat-id-tbl.c mgl@1371: +POFILES = @POFILES@ mgl@1371: +GMOFILES = @GMOFILES@ mgl@1371: +DISTFILES = ChangeLog Makefile.in.in SRC-POTFILES.in BLD-POTFILES.in $(PACKAGE).pot \ mgl@1371: +stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES) mgl@1371: + mgl@1371: +# Note - the following line gets processed by bfd/configure and amended mgl@1371: +# to contain the full list of source dir POTFILES. mgl@1371: +SRC-POTFILES = \ mgl@1371: + mgl@1371: +# Note - the following line gets processed by bfd/configure and amended mgl@1371: +# to contain the full list of build dir POTFILES. mgl@1371: +BLD-POTFILES = \ mgl@1371: + mgl@1371: +CATALOGS = da.gmo es.gmo fr.gmo ja.gmo ro.gmo rw.gmo sv.gmo tr.gmo vi.gmo zh_CN.gmo da.gmo es.gmo fr.gmo ja.gmo ro.gmo rw.gmo sv.gmo tr.gmo vi.gmo zh_CN.gmo mgl@1371: +CATOBJEXT = .gmo mgl@1371: +INSTOBJEXT = .mo mgl@1371: + mgl@1371: +.SUFFIXES: mgl@1371: +.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat mgl@1371: + mgl@1371: +.c.o: mgl@1371: + $(COMPILE) $< mgl@1371: + mgl@1371: +.po.pox: mgl@1371: + $(MAKE) $(PACKAGE).pot mgl@1371: + $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox mgl@1371: + mgl@1371: +.po.mo: mgl@1371: + $(MSGFMT) -o $@ $< mgl@1371: + mgl@1371: +.po.gmo: mgl@1371: + file=`echo $* | sed 's,.*/,,'`.gmo \ mgl@1371: + && rm -f $$file && $(GMSGFMT) -o $$file $< mgl@1371: + mgl@1371: +.po.cat: mgl@1371: + sed -f ../intl/po2msg.sed < $< > $*.msg \ mgl@1371: + && rm -f $@ && $(GENCAT) $@ $*.msg mgl@1371: + mgl@1371: + mgl@1371: +all: all-yes mgl@1371: + mgl@1371: +all-yes: $(CATALOGS) # $(PACKAGE).pot mgl@1371: +all-no: mgl@1371: + mgl@1371: +$(srcdir)/$(PACKAGE).pot: $(SRC-POTFILES) $(BLD-POTFILES) mgl@1371: + $(XGETTEXT) --default-domain=$(PACKAGE) \ mgl@1371: + --directory=$(top_srcdir) \ mgl@1371: + --add-comments --keyword=_ --keyword=N_ \ mgl@1371: + --msgid-bugs-address=bug-binutils@gnu.org \ mgl@1371: + --files-from=$(srcdir)/SRC-POTFILES.in mgl@1371: + $(XGETTEXT) --default-domain=$(PACKAGE) \ mgl@1371: + --directory=.. \ mgl@1371: + --directory=. \ mgl@1371: + --add-comments --keyword=_ --keyword=N_ \ mgl@1371: + --join-existing \ mgl@1371: + --msgid-bugs-address=bug-binutils@gnu.org \ mgl@1371: + --files-from=$(srcdir)/BLD-POTFILES.in mgl@1371: + rm -f $(srcdir)/$(PACKAGE).pot mgl@1371: + mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot mgl@1371: + mgl@1371: +$(srcdir)/cat-id-tbl.c: stamp-cat-id; @: mgl@1371: +$(srcdir)/stamp-cat-id: $(PACKAGE).pot mgl@1371: + rm -f cat-id-tbl.tmp mgl@1371: + sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \ mgl@1371: + | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp mgl@1371: + if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \ mgl@1371: + rm cat-id-tbl.tmp; \ mgl@1371: + else \ mgl@1371: + echo cat-id-tbl.c changed; \ mgl@1371: + rm -f $(srcdir)/cat-id-tbl.c; \ mgl@1371: + mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \ mgl@1371: + fi mgl@1371: + cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id mgl@1371: + mgl@1371: + mgl@1371: +install: install-exec install-data mgl@1371: +install-exec: mgl@1371: +install-info: mgl@1371: +install-html: mgl@1371: +install-data: install-data-yes mgl@1371: +install-data-no: all mgl@1371: +install-data-yes: all mgl@1371: + if test -r $(MKINSTALLDIRS); then \ mgl@1371: + $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \ mgl@1371: + else \ mgl@1371: + $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir); \ mgl@1371: + fi mgl@1371: + @catalogs='$(CATALOGS)'; \ mgl@1371: + for cat in $$catalogs; do \ mgl@1371: + cat=`basename $$cat`; \ mgl@1371: + case "$$cat" in \ mgl@1371: + *.gmo) destdir=$(gnulocaledir);; \ mgl@1371: + *) destdir=$(localedir);; \ mgl@1371: + esac; \ mgl@1371: + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ mgl@1371: + dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \ mgl@1371: + if test -r $(MKINSTALLDIRS); then \ mgl@1371: + $(MKINSTALLDIRS) $$dir; \ mgl@1371: + else \ mgl@1371: + $(top_srcdir)/mkinstalldirs $$dir; \ mgl@1371: + fi; \ mgl@1371: + if test -r $$cat; then \ mgl@1371: + $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ mgl@1371: + echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \ mgl@1371: + else \ mgl@1371: + $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ mgl@1371: + echo "installing $(srcdir)/$$cat as" \ mgl@1371: + "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \ mgl@1371: + fi; \ mgl@1371: + if test -r $$cat.m; then \ mgl@1371: + $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ mgl@1371: + echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ mgl@1371: + else \ mgl@1371: + if test -r $(srcdir)/$$cat.m ; then \ mgl@1371: + $(INSTALL_DATA) $(srcdir)/$$cat.m \ mgl@1371: + $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ mgl@1371: + echo "installing $(srcdir)/$$cat as" \ mgl@1371: + "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ mgl@1371: + else \ mgl@1371: + true; \ mgl@1371: + fi; \ mgl@1371: + fi; \ mgl@1371: + done mgl@1371: + if test "$(PACKAGE)" = "gettext"; then \ mgl@1371: + if test -r $(MKINSTALLDIRS); then \ mgl@1371: + $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \ mgl@1371: + else \ mgl@1371: + $(top_srcdir)/mkinstalldirs $(DESTDIR)$(gettextsrcdir); \ mgl@1371: + fi; \ mgl@1371: + $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ mgl@1371: + $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ mgl@1371: + else \ mgl@1371: + : ; \ mgl@1371: + fi mgl@1371: + mgl@1371: +# Define this as empty until I found a useful application. mgl@1371: +installcheck: mgl@1371: + mgl@1371: +uninstall: mgl@1371: + catalogs='$(CATALOGS)'; \ mgl@1371: + for cat in $$catalogs; do \ mgl@1371: + cat=`basename $$cat`; \ mgl@1371: + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ mgl@1371: + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ mgl@1371: + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ mgl@1371: + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ mgl@1371: + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ mgl@1371: + done mgl@1371: + rm -f $(DESTDIR)$(gettextsrcdir)/po-Makefile.in.in mgl@1371: + mgl@1371: +check: all mgl@1371: + mgl@1371: +cat-id-tbl.o: ../intl/libgettext.h mgl@1371: + mgl@1371: +html dvi pdf ps info tags TAGS ID: mgl@1371: + mgl@1371: +mostlyclean: mgl@1371: + rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp mgl@1371: + rm -fr *.o mgl@1371: + mgl@1371: +clean: mostlyclean mgl@1371: + mgl@1371: +distclean: clean mgl@1371: + rm -f Makefile Makefile.in *.mo *.msg *.cat *.cat.m mgl@1371: + rm -f SRC-POTFILES BLD-POTFILES mgl@1371: + mgl@1371: +maintainer-clean: distclean mgl@1371: + @echo "This command is intended for maintainers to use;" mgl@1371: + @echo "it deletes files that may require special tools to rebuild." mgl@1371: + rm -f $(GMOFILES) SRC-POTFILES.in BLD-POTFILES.in mgl@1371: + mgl@1371: +distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) mgl@1371: +dist distdir: update-po $(DISTFILES) mgl@1371: + dists="$(DISTFILES)"; \ mgl@1371: + for file in $$dists; do \ mgl@1371: + ln $(srcdir)/$$file $(distdir) 2> /dev/null \ mgl@1371: + || cp -p $(srcdir)/$$file $(distdir); \ mgl@1371: + done mgl@1371: + mgl@1371: +update-po: Makefile mgl@1371: + $(MAKE) $(PACKAGE).pot mgl@1371: + PATH=`pwd`/../src:$$PATH; \ mgl@1371: + cd $(srcdir); \ mgl@1371: + catalogs='$(CATALOGS)'; \ mgl@1371: + for cat in $$catalogs; do \ mgl@1371: + cat=`basename $$cat`; \ mgl@1371: + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ mgl@1371: + mv $$lang.po $$lang.old.po; \ mgl@1371: + echo "$$lang:"; \ mgl@1371: + if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \ mgl@1371: + rm -f $$lang.old.po; \ mgl@1371: + else \ mgl@1371: + echo "msgmerge for $$cat failed!"; \ mgl@1371: + rm -f $$lang.po; \ mgl@1371: + mv $$lang.old.po $$lang.po; \ mgl@1371: + fi; \ mgl@1371: + done mgl@1371: + mgl@1371: +SRC-POTFILES: SRC-POTFILES.in mgl@1371: + ( if test 'x$(srcdir)' != 'x.'; then \ mgl@1371: + posrcprefix='$(top_srcdir)/'; \ mgl@1371: + else \ mgl@1371: + posrcprefix="../"; \ mgl@1371: + fi; \ mgl@1371: + rm -f $@-t $@ \ mgl@1371: + && (sed -e '/^#/d' \ mgl@1371: + -e '/^[ ]*$$/d' \ mgl@1371: + -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ mgl@1371: + | sed -e '$$s/\\$$//') > $@-t \ mgl@1371: + && chmod a-w $@-t \ mgl@1371: + && mv $@-t $@ ) mgl@1371: + mgl@1371: +BLD-POTFILES: BLD-POTFILES.in mgl@1371: + ( rm -f $@-t $@ \ mgl@1371: + && (sed -e '/^#/d' \ mgl@1371: + -e '/^[ ]*$$/d' \ mgl@1371: + -e "s@.*@ ../& \\\\@" < $(srcdir)/$@.in \ mgl@1371: + | sed -e '$$s/\\$$//') > $@-t \ mgl@1371: + && chmod a-w $@-t \ mgl@1371: + && mv $@-t $@ ) mgl@1371: + mgl@1371: +SRC-POTFILES.in: # ../Makefile mgl@1371: + cd .. && $(MAKE) po/SRC-POTFILES.in mgl@1371: + mgl@1371: +BLD-POTFILES.in: # ../Makefile mgl@1371: + cd .. && $(MAKE) po/BLD-POTFILES.in mgl@1371: + mgl@1371: +# Note - The presence of SRC-POTFILES and BLD-POTFILES as dependencies mgl@1371: +# here breaks the implementation of the 'distclean' rule for maintainers. mgl@1371: +# This is because if 'make distclean' is run in the BFD directory, the mgl@1371: +# Makefile there will be deleted before 'distclean' is made here, and so mgl@1371: +# the dependency SRC-POTFILES -> SRC-POTFILES.in -> ../Makefile cannot mgl@1371: +# be satisfied. mgl@1371: +# mgl@1371: +# The SRC-POTFILES and BLD-POTFILES dependencies cannot be removed, mgl@1371: +# however since it is necessary that these files be built during mgl@1371: +# *configure* time, so that configure can insert them into the mgl@1371: +# po/Makefile that it is creating, so that the Makefile will have mgl@1371: +# the correct dependencies. mgl@1371: +Makefile: Make-in ../config.status SRC-POTFILES BLD-POTFILES mgl@1371: + cd .. \ mgl@1371: + && CONFIG_FILES=$(subdir)/Makefile.in:$(subdir)/Make-in \ mgl@1371: + CONFIG_HEADERS= $(SHELL) ./config.status mgl@1371: + mgl@1371: +# Tell versions [3.59,3.63) of GNU make not to export all variables. mgl@1371: +# Otherwise a system limit (for SysV at least) may be exceeded. mgl@1371: +.NOEXPORT: mgl@1371: --- a/binutils/Makefile.in mgl@1371: +++ b/binutils/Makefile.in mgl@1371: @@ -1327,7 +1327,7 @@ readelf.o: readelf.c sysdep.h $(INCDIR)/ mgl@1371: $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h bucomm.h dwarf.h \ mgl@1371: $(INCDIR)/elf/common.h $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h \ mgl@1371: $(INCDIR)/elf/h8.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/elf/alpha.h \ mgl@1371: - $(INCDIR)/elf/arc.h $(INCDIR)/elf/arm.h $(INCDIR)/elf/avr.h \ mgl@1371: + $(INCDIR)/elf/arc.h $(INCDIR)/elf/arm.h $(INCDIR)/elf/avr.h $(INCDIR)/elf/avr32.h\ mgl@1371: $(INCDIR)/elf/bfin.h $(INCDIR)/elf/cris.h $(INCDIR)/elf/crx.h \ mgl@1371: $(INCDIR)/elf/d10v.h $(INCDIR)/elf/d30v.h $(INCDIR)/elf/dlx.h \ mgl@1371: $(INCDIR)/elf/fr30.h $(INCDIR)/elf/frv.h $(INCDIR)/elf/hppa.h \ mgl@1371: --- a/ld/Makefile.in mgl@1371: +++ b/ld/Makefile.in mgl@1371: @@ -384,7 +384,34 @@ ALL_EMULATIONS = \ mgl@1371: eavr3.o \ mgl@1371: eavr4.o \ mgl@1371: eavr5.o \ mgl@1371: - eavr6.o \ mgl@1371: + eavr6.o \ mgl@1371: + eavr32elf_ap7000.o \ mgl@1371: + eavr32elf_ap7001.o \ mgl@1371: + eavr32elf_ap7002.o \ mgl@1371: + eavr32elf_ap7200.o \ mgl@1371: + eavr32elf_uc3a0128.o \ mgl@1371: + eavr32elf_uc3a0256.o \ mgl@1371: + eavr32elf_uc3a0512.o \ mgl@1371: + eavr32elf_uc3a0512es.o \ mgl@1371: + eavr32elf_uc3a1128.o \ mgl@1371: + eavr32elf_uc3a1256.o \ mgl@1371: + eavr32elf_uc3a1512es.o \ mgl@1371: + eavr32elf_uc3a1512.o \ mgl@1371: + eavr32elf_uc3a364.o \ mgl@1371: + eavr32elf_uc3a364s.o \ mgl@1371: + eavr32elf_uc3a3128.o \ mgl@1371: + eavr32elf_uc3a3128s.o \ mgl@1371: + eavr32elf_uc3a3256.o \ mgl@1371: + eavr32elf_uc3a3256s.o \ mgl@1371: + eavr32elf_uc3b064.o \ mgl@1371: + eavr32elf_uc3b0128.o \ mgl@1371: + eavr32elf_uc3b0256es.o \ mgl@1371: + eavr32elf_uc3b0256.o \ mgl@1371: + eavr32elf_uc3b164.o \ mgl@1371: + eavr32elf_uc3b1128.o \ mgl@1371: + eavr32elf_uc3b1256es.o \ mgl@1371: + eavr32elf_uc3b1256.o \ mgl@1371: + eavr32linux.o \ mgl@1371: ecoff_i860.o \ mgl@1371: ecoff_sparc.o \ mgl@1371: eelf32_spu.o \ mgl@1371: @@ -1448,6 +1475,114 @@ eavr6.c: $(srcdir)/emulparams/avr6.sh $( mgl@1371: $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \ mgl@1371: ${GEN_DEPENDS} mgl@1371: ${GENSCRIPTS} avr6 "$(tdir_avr2)" mgl@1371: +eavr32elf_ap7000.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_ap7000 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_ap7001.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_ap7001 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_ap7002.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_ap7002 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_ap7200.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_ap7200 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a0128.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a0128 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a0256.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a0256 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a0512.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a0512 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a0512es.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a0512es "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a1128.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a1128 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a1256.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a1256 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a1512.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a1512 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a1512es.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a1512es "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a364.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a364 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a364s.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a364s "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a3128.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a3128 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a3128s.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a3128s "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a3256.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a3256 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3a3256s.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3a3256s "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3b064.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3b064 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3b0128.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3b0128 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3b0256.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3b0256 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3b0256es.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3b0256es "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3b164.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3b164 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3b1128.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3b1128 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3b1256.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3b1256 "$(tdir_avr32)" avr32elf mgl@1371: +eavr32elf_uc3b1256es.c: $(srcdir)/emulparams/avr32elf.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf_xip.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32elf_uc3b1256es "$(tdir_avr32)" avr32elf mgl@1371: +eavr32linux.c: $(srcdir)/emulparams/avr32linux.sh \ mgl@1371: + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ mgl@1371: + $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} mgl@1371: + ${GENSCRIPTS} avr32linux "$(tdir_avr32)" mgl@1371: ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \ mgl@1371: $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS} mgl@1371: ${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)" mgl@1371: @@ -2679,7 +2814,9 @@ install-exec-local: ld-new$(EXEEXT) mgl@1371: || $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT); \ mgl@1371: fi mgl@1371: mgl@1371: -install-data-local: mgl@1371: +# We want install to imply install-info as per GNU standards, despite the mgl@1371: +# cygnus option. mgl@1371: +install-data-local: install-info mgl@1371: $(mkinstalldirs) $(DESTDIR)$(scriptdir)/ldscripts mgl@1371: for f in ldscripts/*; do \ mgl@1371: $(INSTALL_DATA) $$f $(DESTDIR)$(scriptdir)/$$f ; \ mgl@1371: --- /dev/null mgl@1371: +++ b/libiberty/required-list mgl@1371: @@ -0,0 +1 @@ mgl@1371: +./regex.o ./cplus-dem.o ./cp-demangle.o ./md5.o ./alloca.o ./argv.o ./choose-temp.o ./concat.o ./cp-demint.o ./dyn-string.o ./fdmatch.o ./fibheap.o ./filename_cmp.o ./floatformat.o ./fnmatch.o ./fopen_unlocked.o ./getopt.o ./getopt1.o ./getpwd.o ./getruntime.o ./hashtab.o ./hex.o ./lbasename.o ./lrealpath.o ./make-relative-prefix.o ./make-temp-file.o ./objalloc.o ./obstack.o ./partition.o ./pexecute.o ./physmem.o ./pex-common.o ./pex-one.o ./pex-unix.o ./safe-ctype.o ./sort.o ./spaces.o ./splay-tree.o ./strerror.o ./strsignal.o ./unlink-if-ordinary.o ./xatexit.o ./xexit.o ./xmalloc.o ./xmemdup.o ./xstrdup.o ./xstrerror.o ./xstrndup.o mgl@1371: --- a/opcodes/configure mgl@1371: +++ b/opcodes/configure mgl@1371: @@ -11418,6 +11418,7 @@ if test x${all_targets} = xfalse ; then mgl@1371: bfd_arc_arch) ta="$ta arc-dis.lo arc-opc.lo arc-ext.lo" ;; mgl@1371: bfd_arm_arch) ta="$ta arm-dis.lo" ;; mgl@1371: bfd_avr_arch) ta="$ta avr-dis.lo" ;; mgl@1371: + bfd_avr32_arch) ta="$ta avr32-asm.lo avr32-dis.lo avr32-opc.lo" ;; mgl@1371: bfd_bfin_arch) ta="$ta bfin-dis.lo" ;; mgl@1371: bfd_cr16_arch) ta="$ta cr16-dis.lo cr16-opc.lo" ;; mgl@1371: bfd_cris_arch) ta="$ta cris-dis.lo cris-opc.lo cgen-bitset.lo" ;; mgl@1371: @@ -11476,7 +11477,7 @@ if test x${all_targets} = xfalse ; then mgl@1371: ta="$ta sh64-dis.lo sh64-opc.lo" mgl@1371: archdefs="$archdefs -DINCLUDE_SHMEDIA" mgl@1371: break;; mgl@1371: - esac; mgl@1371: + esac mgl@1371: done mgl@1371: ta="$ta sh-dis.lo cgen-bitset.lo" ;; mgl@1371: bfd_sparc_arch) ta="$ta sparc-dis.lo sparc-opc.lo" ;; mgl@1371: --- a/opcodes/Makefile.in mgl@1371: +++ b/opcodes/Makefile.in mgl@1371: @@ -257,6 +257,7 @@ LIBIBERTY = ../libiberty/libiberty.a mgl@1371: # Header files. mgl@1371: HFILES = \ mgl@1371: cgen-ops.h cgen-types.h \ mgl@1371: + avr32-asm.h avr32-opc.h \ mgl@1371: fr30-desc.h fr30-opc.h \ mgl@1371: frv-desc.h frv-opc.h \ mgl@1371: h8500-opc.h \ mgl@1371: @@ -291,6 +292,9 @@ CFILES = \ mgl@1371: arc-ext.c \ mgl@1371: arm-dis.c \ mgl@1371: avr-dis.c \ mgl@1371: + avr32-asm.c \ mgl@1371: + avr32-dis.c \ mgl@1371: + avr32-opc.c \ mgl@1371: bfin-dis.c \ mgl@1371: cgen-asm.c \ mgl@1371: cgen-bitset.c \ mgl@1371: @@ -445,6 +449,9 @@ ALL_MACHINES = \ mgl@1371: arc-ext.lo \ mgl@1371: arm-dis.lo \ mgl@1371: avr-dis.lo \ mgl@1371: + avr32-asm.lo \ mgl@1371: + avr32-dis.lo \ mgl@1371: + avr32-opc.lo \ mgl@1371: bfin-dis.lo \ mgl@1371: cgen-asm.lo \ mgl@1371: cgen-bitset.lo \ mgl@1371: @@ -1225,6 +1232,15 @@ avr-dis.lo: avr-dis.c sysdep.h config.h mgl@1371: $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \ mgl@1371: opintl.h $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \ mgl@1371: $(INCDIR)/opcode/avr.h mgl@1371: +avr32-asm.lo: avr32-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \ mgl@1371: + $(BFD_H) $(INCDIR)/symcat.h avr32-opc.h opintl.h \ mgl@1371: + $(INCDIR)/xregex.h $(INCDIR)/xregex2.h \ mgl@1371: + $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h mgl@1371: +avr32-dis.lo: avr32-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \ mgl@1371: + $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h $(INCDIR)/libiberty.h \ mgl@1371: + avr32-opc.h opintl.h mgl@1371: +avr32-opc.lo: avr32-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \ mgl@1371: + $(BFD_H) $(INCDIR)/symcat.h avr32-opc.h $(INCDIR)/libiberty.h mgl@1371: bfin-dis.lo: bfin-dis.c $(INCDIR)/opcode/bfin.h $(INCDIR)/dis-asm.h \ mgl@1371: $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h mgl@1371: cgen-asm.lo: cgen-asm.c sysdep.h config.h $(INCDIR)/ansidecl.h \