aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrans Meulenbroeks <fransmeulenbroeks@gmail.com>2010-07-09 18:23:22 +0200
committerFrans Meulenbroeks <fransmeulenbroeks@gmail.com>2010-07-09 18:23:54 +0200
commit97d368012fda0b1050a85e1d8d86b28430f34f23 (patch)
tree523af94e4be86c7f0c0a68bb307903be646d6c3e
parenteb751a519b4b888caff0dd1f2bd15557df6b4ec8 (diff)
downloadopenembedded-97d368012fda0b1050a85e1d8d86b28430f34f23.tar.gz
openembedded-97d368012fda0b1050a85e1d8d86b28430f34f23.tar.bz2
openembedded-97d368012fda0b1050a85e1d8d86b28430f34f23.zip
binutils 2.20.1: added patches to support nios2
Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
-rw-r--r--recipes/binutils/binutils-2.20.1/binutils-nios2-files.patch41026
-rw-r--r--recipes/binutils/binutils-2.20.1/binutils-nios2.patch650
-rw-r--r--recipes/binutils/binutils_2.20.1.bb5
3 files changed, 41681 insertions, 0 deletions
diff --git a/recipes/binutils/binutils-2.20.1/binutils-nios2-files.patch b/recipes/binutils/binutils-2.20.1/binutils-nios2-files.patch
new file mode 100644
index 0000000000..0601aebc3e
--- /dev/null
+++ b/recipes/binutils/binutils-2.20.1/binutils-nios2-files.patch
@@ -0,0 +1,41026 @@
+Index: binutils-2.20.1/bfd/cpu-nios2.c
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/bfd/cpu-nios2.c
+@@ -0,0 +1,71 @@
++/* NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. */
++/* bfd back-end for Altera Nios II support
++
++ Copyright (C) 2003
++ by Nigel Gray (ngray@altera.com).
++
++This file is part of BFD, the Binary File Descriptor library.
++
++This program is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2 of the License, or
++(at your option) any later version.
++
++This program is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with this program; if not, write to the Free Software
++Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++#include "bfd.h"
++#include "sysdep.h"
++#include "libbfd.h"
++
++static const bfd_arch_info_type *nios2_compatible
++ (const bfd_arch_info_type *, const bfd_arch_info_type *);
++
++/* The default routine tests bits_per_word, which is wrong on mips as
++ mips word size doesn't correlate with reloc size. */
++
++static const bfd_arch_info_type *
++nios2_compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b)
++{
++ if (a->arch != b->arch)
++ return NULL;
++
++ /* Machine compatibility is checked in
++ _bfd_mips_elf_merge_private_bfd_data. */
++
++ return a;
++}
++
++#define N(BITS_WORD, BITS_ADDR, NUMBER, PRINT, DEFAULT, NEXT) \
++ { \
++ BITS_WORD, /* bits in a word */ \
++ BITS_ADDR, /* bits in an address */ \
++ 8, /* 8 bits in a byte */ \
++ bfd_arch_nios2, \
++ NUMBER, \
++ "nios2", \
++ PRINT, \
++ 3, \
++ DEFAULT, \
++ nios2_compatible, \
++ bfd_default_scan, \
++ NEXT, \
++ }
++
++#define NN(index) (&arch_info_struct[(index) + 1])
++
++static const bfd_arch_info_type arch_info_struct[] =
++{
++ N (32, 32, bfd_mach_nios2, "nios2", FALSE, 0),
++};
++
++/* There is only one architecture - but we give the default a machine number of 0
++ so the linker can distinguish it */
++const bfd_arch_info_type bfd_nios2_arch =
++N (32, 32, 0, "nios2", TRUE, &arch_info_struct[0]);
+Index: binutils-2.20.1/bfd/elf32-nios2.c
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/bfd/elf32-nios2.c
+@@ -0,0 +1,5003 @@
++/* NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. */
++/* New Jersey-specific support for 32-bit ELF
++
++ Copyright (C) 2005
++ by Nigel Gray (ngray@altera.com).
++
++ Copyright (C) 2008, CodeSourcery Inc.
++
++
++This file is part of BFD, the Binary File Descriptor library.
++
++This program is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2 of the License, or
++(at your option) any later version.
++
++This program is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with this program; if not, write to the Free Software
++Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++/* This file handles Altera New Jersey ELF targets */
++
++#include "bfd.h"
++#include "sysdep.h"
++#include "libbfd.h"
++#include "bfdlink.h"
++#include "genlink.h"
++#include "elf-bfd.h"
++#include "elf/nios2.h"
++#include "opcode/nios2.h"
++
++/* Use RELA relocations. */
++#ifndef USE_RELA
++#define USE_RELA
++#endif
++
++#ifdef USE_REL
++#undef USE_REL
++#endif
++
++/* Function prototypes. */
++
++static reloc_howto_type *nios2_elf32_bfd_reloc_type_lookup
++ (bfd *, bfd_reloc_code_real_type);
++
++static bfd_boolean nios2_elf32_relax_section
++ (bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
++#if 0
++static bfd_boolean nios2_elf32_relax_delete_bytes
++ (bfd *, asection *, bfd_vma, int);
++#endif
++static reloc_howto_type *nios2_elf32_rtype_to_howto
++ (unsigned int r_type, bfd_boolean rela_p);
++
++static void nios2_elf32_info_to_howto
++ (bfd * abfd, arelent * cache_ptr, Elf_Internal_Rela * dst);
++
++static bfd_boolean nios2_elf32_relocate_section
++ (bfd * output_bfd, struct bfd_link_info * info, bfd * input_bfd,
++ asection * input_section, bfd_byte * contents,
++ Elf_Internal_Rela * relocs, Elf_Internal_Sym * local_syms,
++ asection ** local_sections);
++
++static reloc_howto_type *lookup_howto (unsigned int rtype);
++
++static bfd_reloc_status_type nios2_elf_final_gp
++ (bfd *, asymbol *, bfd_boolean, char **, bfd_vma *,
++ struct bfd_link_info *);
++
++static bfd_boolean nios2_elf_assign_gp
++ (bfd *, bfd_vma *, struct bfd_link_info *);
++
++static bfd_reloc_status_type nios2_elf32_ignore_reloc
++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
++
++static bfd_reloc_status_type nios2_elf32_hi16_relocate
++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
++
++static bfd_reloc_status_type nios2_elf32_lo16_relocate
++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
++
++static bfd_reloc_status_type nios2_elf32_hiadj16_relocate
++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
++
++static bfd_reloc_status_type nios2_elf32_pcrel_lo16_relocate
++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
++
++static bfd_reloc_status_type nios2_elf32_pcrel_hiadj16_relocate
++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
++
++static bfd_reloc_status_type nios2_elf32_pcrel16_relocate
++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
++
++static bfd_reloc_status_type nios2_elf32_call26_relocate
++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
++
++static bfd_reloc_status_type nios2_elf32_gprel_relocate
++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
++
++static bfd_reloc_status_type nios2_elf32_ujmp_relocate
++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
++
++static bfd_reloc_status_type nios2_elf32_cjmp_relocate
++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
++
++static bfd_reloc_status_type nios2_elf32_callr_relocate
++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
++
++static bfd_reloc_status_type nios2_elf32_do_hi16_relocate
++ (bfd *, reloc_howto_type *, asection *,
++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma);
++
++static bfd_reloc_status_type nios2_elf32_do_lo16_relocate
++ (bfd *, reloc_howto_type *, asection *,
++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma);
++
++static bfd_reloc_status_type nios2_elf32_do_hiadj16_relocate
++ (bfd *, reloc_howto_type *, asection *,
++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma);
++
++static bfd_reloc_status_type nios2_elf32_do_pcrel_lo16_relocate
++ (bfd *, reloc_howto_type *, asection *,
++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma);
++
++static bfd_reloc_status_type nios2_elf32_do_pcrel_hiadj16_relocate
++ (bfd *, reloc_howto_type *, asection *,
++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma);
++
++static bfd_reloc_status_type nios2_elf32_do_pcrel16_relocate
++ (bfd *, reloc_howto_type *, asection *,
++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma);
++
++static bfd_reloc_status_type nios2_elf32_do_call26_relocate
++ (bfd *, reloc_howto_type *, asection *,
++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma);
++
++static bfd_reloc_status_type nios2_elf32_do_gprel_relocate
++ (bfd *, reloc_howto_type *, asection *,
++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma);
++
++static bfd_reloc_status_type nios2_elf32_do_ujmp_relocate
++ (bfd *, reloc_howto_type *, asection *,
++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma);
++
++static bfd_reloc_status_type nios2_elf32_do_cjmp_relocate
++ (bfd *, reloc_howto_type *, asection *,
++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma);
++
++static bfd_reloc_status_type nios2_elf32_do_callr_relocate
++ (bfd *, reloc_howto_type *, asection *,
++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma);
++
++static bfd_boolean nios2_elf32_section_from_shdr
++ (bfd *, Elf_Internal_Shdr *, const char *name, int shindex);
++
++static bfd_boolean nios2_elf32_section_flags
++ (flagword *, const Elf_Internal_Shdr *);
++
++static bfd_boolean nios2_elf32_fake_sections
++ (bfd *, Elf_Internal_Shdr *, asection *);
++
++
++
++static bfd_boolean nios2_elf32_check_relocs
++ (bfd *, struct bfd_link_info *, asection *,
++ const Elf_Internal_Rela *);
++
++static asection *nios2_elf32_gc_mark_hook (asection * sec,
++ struct bfd_link_info *
++ info,
++ Elf_Internal_Rela * rel,
++ struct elf_link_hash_entry
++ * h,
++ Elf_Internal_Sym * sym);
++
++void
++_bfd_set_link_info (struct bfd_link_info *info);
++
++void
++_bfd_set_force_make_executable (bfd_boolean force);
++
++
++/* Target vector. */
++extern const bfd_target bfd_elf32_littlenios2_vec;
++extern const bfd_target bfd_elf32_bignios2_vec;
++
++/* Offset of tp and dtp pointers from start of TLS block. */
++#define TP_OFFSET 0x7000
++#define DTP_OFFSET 0x8000
++
++/* The relocation table used for SHT_REL sections. */
++
++static reloc_howto_type elf_nios2_howto_table_rel[] = {
++ /* No relocation. */
++ HOWTO (R_NIOS2_NONE, /* type */
++ 0, /* rightshift */
++ 0, /* size (0 = byte, 1 = short, 2 = long) */
++ 0, /* bitsize */
++ FALSE, /* pc_relative */
++ 0, /* bitpos */
++ complain_overflow_dont, /* complain_on_overflow */
++ bfd_elf_generic_reloc, /* special_function */
++ "R_NIOS2_NONE", /* name */
++ FALSE, /* partial_inplace */
++ 0, /* src_mask */
++ 0, /* dst_mask */
++ FALSE), /* pcrel_offset */
++
++ /* 16-bit signed immediate relocation */
++ HOWTO (R_NIOS2_S16, /* type */
++ 0, /* rightshift */
++ 2, /* size (0 = byte, 1 = short, 2 = long) */
++ 16, /* bitsize */
++ FALSE, /* pc_relative */
++ 6, /* bitpos */
++ complain_overflow_signed, /* complain on overflow */
++ bfd_elf_generic_reloc, /* special function */
++ "R_NIOS2_S16", /* name */
++ FALSE, /* partial_inplace */
++ 0x003fffc0, /* src_mask */
++ 0x003fffc0, /* dest_mask */
++ FALSE), /* pcrel_offset */
++
++ /* 16-bit unsigned immediate relocation */
++ HOWTO (R_NIOS2_U16, /* type */
++ 0, /* rightshift */
++ 2, /* size (0 = byte, 1 = short, 2 = long) */
++ 16, /* bitsize */
++ FALSE, /* pc_relative */
++ 6, /* bitpos */
++ complain_overflow_unsigned, /* complain on overflow */
++ bfd_elf_generic_reloc, /* special function */
++ "R_NIOS2_U16", /* name */
++ FALSE, /* partial_inplace */
++ 0x003fffc0, /* src_mask */
++ 0x003fffc0, /* dest_mask */
++ FALSE), /* pcrel_offset */
++
++ HOWTO (R_NIOS2_PCREL16, /* type */
++ 0, /* rightshift */
++ 2, /* size (0 = byte, 1 = short, 2 = long) */
++ 16, /* bitsize */
++ TRUE, /* pc_relative */
++ 6, /* bitpos */
++ complain_overflow_signed, /* complain on overflow */
++ nios2_elf32_pcrel16_relocate, /* special function */
++ "R_NIOS2_PCREL16", /* name */
++ FALSE, /* partial_inplace */
++ 0x003fffc0, /* src_mask */
++ 0x003fffc0, /* dest_mask */
++ TRUE), /* pcrel_offset */
++
++ HOWTO (R_NIOS2_CALL26, /* type */
++ 2, /* rightshift */
++ 2, /* size (0 = byte, 1 = short, 2 = long) */
++ 26, /* bitsize */
++ FALSE, /* pc_relative */
++ 6, /* bitpos */
++ complain_overflow_dont, /* complain on overflow */
++ nios2_elf32_call26_relocate, /* special function */
++ "R_NIOS2_CALL26", /* name */
++ FALSE, /* partial_inplace */
++ 0xffffffc0, /* src_mask */
++ 0xffffffc0, /* dst_mask */
++ FALSE), /* pcrel_offset */
++
++ HOWTO (R_NIOS2_IMM5,
++ 0,
++ 2,
++ 5,
++ FALSE,
++ 6,
++ complain_overflow_bitfield,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_IMM5",
++ FALSE,
++ 0x000007c0,
++ 0x000007c0,
++ FALSE),
++
++ HOWTO (R_NIOS2_CACHE_OPX,
++ 0,
++ 2,
++ 5,
++ FALSE,
++ 22,
++ complain_overflow_bitfield,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_CACHE_OPX",
++ FALSE,
++ 0x07c00000,
++ 0x07c00000,
++ FALSE),
++
++ HOWTO (R_NIOS2_IMM6,
++ 0,
++ 2,
++ 6,
++ FALSE,
++ 6,
++ complain_overflow_bitfield,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_IMM6",
++ FALSE,
++ 0x00000fc0,
++ 0x00000fc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_IMM8,
++ 0,
++ 2,
++ 8,
++ FALSE,
++ 6,
++ complain_overflow_bitfield,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_IMM8",
++ FALSE,
++ 0x00003fc0,
++ 0x00003fc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_HI16,
++ 0,
++ 2,
++ 32,
++ FALSE,
++ 6,
++ complain_overflow_dont,
++ nios2_elf32_hi16_relocate,
++ "R_NIOS2_HI16",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_LO16,
++ 0,
++ 2,
++ 32,
++ FALSE,
++ 6,
++ complain_overflow_dont,
++ nios2_elf32_lo16_relocate,
++ "R_NIOS2_LO16",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_HIADJ16,
++ 0,
++ 2,
++ 32,
++ FALSE,
++ 6,
++ complain_overflow_dont,
++ nios2_elf32_hiadj16_relocate,
++ "R_NIOS2_HIADJ16",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_BFD_RELOC_32,
++ 0,
++ 2, /* long */
++ 32,
++ FALSE,
++ 0,
++ complain_overflow_dont,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_BFD_RELOC32",
++ FALSE,
++ 0xffffffff,
++ 0xffffffff,
++ FALSE),
++
++ HOWTO (R_NIOS2_BFD_RELOC_16,
++ 0,
++ 1, /* short */
++ 16,
++ FALSE,
++ 0,
++ complain_overflow_bitfield,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_BFD_RELOC16",
++ FALSE,
++ 0x0000ffff,
++ 0x0000ffff,
++ FALSE),
++
++ HOWTO (R_NIOS2_BFD_RELOC_8,
++ 0,
++ 0, /* byte */
++ 8,
++ FALSE,
++ 0,
++ complain_overflow_bitfield,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_BFD_RELOC8",
++ FALSE,
++ 0x000000ff,
++ 0x000000ff,
++ FALSE),
++
++ HOWTO (R_NIOS2_GPREL,
++ 0,
++ 2,
++ 32,
++ FALSE,
++ 6,
++ complain_overflow_dont,
++ nios2_elf32_gprel_relocate,
++ "R_NIOS2_GPREL",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_GNU_VTINHERIT,
++ 0,
++ 2, /* short */
++ 0,
++ FALSE,
++ 0,
++ complain_overflow_dont,
++ NULL,
++ "R_NIOS2_GNU_VTINHERIT",
++ FALSE,
++ 0,
++ 0,
++ FALSE),
++
++ HOWTO (R_NIOS2_GNU_VTENTRY,
++ 0,
++ 2, /* byte */
++ 0,
++ FALSE,
++ 0,
++ complain_overflow_dont,
++ _bfd_elf_rel_vtable_reloc_fn,
++ "R_NIOS2_GNU_VTENTRY",
++ FALSE,
++ 0,
++ 0,
++ FALSE),
++
++ HOWTO (R_NIOS2_UJMP,
++ 0,
++ 2,
++ 32,
++ FALSE,
++ 6,
++ complain_overflow_dont,
++ nios2_elf32_ujmp_relocate,
++ "R_NIOS2_UJMP",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_CJMP,
++ 0,
++ 2,
++ 32,
++ FALSE,
++ 6,
++ complain_overflow_dont,
++ nios2_elf32_cjmp_relocate,
++ "R_NIOS2_CJMP",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_CALLR,
++ 0,
++ 2,
++ 32,
++ FALSE,
++ 6,
++ complain_overflow_dont,
++ nios2_elf32_callr_relocate,
++ "R_NIOS2_CALLR",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_ALIGN,
++ 0,
++ 2,
++ 0,
++ FALSE,
++ 0,
++ complain_overflow_dont,
++ nios2_elf32_ignore_reloc,
++ "R_NIOS2_ALIGN",
++ FALSE,
++ 0,
++ 0,
++ TRUE),
++
++
++ HOWTO (R_NIOS2_GOT16,
++ 0,
++ 2,
++ 16,
++ FALSE,
++ 6,
++ complain_overflow_bitfield,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_GOT16",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_CALL16,
++ 0,
++ 2,
++ 16,
++ FALSE,
++ 6,
++ complain_overflow_bitfield,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_CALL16",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_GOTOFF_LO,
++ 0,
++ 2,
++ 16,
++ FALSE,
++ 6,
++ complain_overflow_dont,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_GOTOFF_LO",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_GOTOFF_HA,
++ 0,
++ 2,
++ 16,
++ FALSE,
++ 6,
++ complain_overflow_dont,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_GOTOFF_HA",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_PCREL_LO,
++ 0,
++ 2,
++ 16,
++ TRUE,
++ 6,
++ complain_overflow_dont,
++ nios2_elf32_pcrel_lo16_relocate,
++ "R_NIOS2_PCREL_LO",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ TRUE),
++
++ HOWTO (R_NIOS2_PCREL_HA,
++ 0,
++ 2,
++ 16,
++ FALSE, /* This is a PC-relative relocation, but we need to subtract
++ PC ourselves before the HIADJ. */
++ 6,
++ complain_overflow_dont,
++ nios2_elf32_pcrel_hiadj16_relocate,
++ "R_NIOS2_PCREL_HA",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ TRUE),
++
++ HOWTO (R_NIOS2_TLS_GD16,
++ 0,
++ 2,
++ 16,
++ FALSE,
++ 6,
++ complain_overflow_bitfield,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_TLS_GD16",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_TLS_LDM16,
++ 0,
++ 2,
++ 16,
++ FALSE,
++ 6,
++ complain_overflow_bitfield,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_TLS_LDM16",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_TLS_LDO16,
++ 0,
++ 2,
++ 16,
++ FALSE,
++ 6,
++ complain_overflow_bitfield,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_TLS_LDO16",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_TLS_IE16,
++ 0,
++ 2,
++ 16,
++ FALSE,
++ 6,
++ complain_overflow_bitfield,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_TLS_IE16",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_TLS_LE16,
++ 0,
++ 2,
++ 16,
++ FALSE,
++ 6,
++ complain_overflow_bitfield,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_TLS_LE16",
++ FALSE,
++ 0x003fffc0,
++ 0x003fffc0,
++ FALSE),
++
++ HOWTO (R_NIOS2_TLS_DTPMOD,
++ 0,
++ 2,
++ 32,
++ FALSE,
++ 0,
++ complain_overflow_dont,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_TLS_DTPMOD",
++ FALSE,
++ 0xffffffff,
++ 0xffffffff,
++ FALSE),
++
++ HOWTO (R_NIOS2_TLS_DTPREL,
++ 0,
++ 2,
++ 32,
++ FALSE,
++ 0,
++ complain_overflow_dont,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_TLS_DTPREL",
++ FALSE,
++ 0xffffffff,
++ 0xffffffff,
++ FALSE),
++
++ HOWTO (R_NIOS2_TLS_TPREL,
++ 0,
++ 2,
++ 32,
++ FALSE,
++ 0,
++ complain_overflow_dont,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_TLS_TPREL",
++ FALSE,
++ 0xffffffff,
++ 0xffffffff,
++ FALSE),
++
++ HOWTO (R_NIOS2_COPY,
++ 0,
++ 2,
++ 32,
++ FALSE,
++ 0,
++ complain_overflow_dont,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_COPY",
++ FALSE,
++ 0,
++ 0,
++ FALSE),
++
++ HOWTO (R_NIOS2_GLOB_DAT,
++ 0,
++ 2,
++ 32,
++ FALSE,
++ 0,
++ complain_overflow_dont,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_GLOB_DAT",
++ FALSE,
++ 0xffffffff,
++ 0xffffffff,
++ FALSE),
++
++ HOWTO (R_NIOS2_JUMP_SLOT,
++ 0,
++ 2,
++ 32,
++ FALSE,
++ 0,
++ complain_overflow_dont,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_JUMP_SLOT",
++ FALSE,
++ 0xffffffff,
++ 0xffffffff,
++ FALSE),
++
++ HOWTO (R_NIOS2_RELATIVE,
++ 0,
++ 2,
++ 32,
++ FALSE,
++ 0,
++ complain_overflow_dont,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_RELATIVE",
++ FALSE,
++ 0xffffffff,
++ 0xffffffff,
++ FALSE),
++
++ HOWTO (R_NIOS2_GOTOFF,
++ 0,
++ 2,
++ 32,
++ FALSE,
++ 0,
++ complain_overflow_dont,
++ bfd_elf_generic_reloc,
++ "R_NIOS2_GOTOFF",
++ FALSE,
++ 0xffffffff,
++ 0xffffffff,
++ FALSE),
++
++/* Add other relocations here. */
++};
++
++static unsigned char elf_code_to_howto_index[R_NIOS2_ILLEGAL + 1];
++
++static reloc_howto_type *
++lookup_howto (unsigned int rtype)
++{
++ static int initialized = 0;
++ int i;
++ int howto_tbl_size = (int) (sizeof (elf_nios2_howto_table_rel)
++ / sizeof (elf_nios2_howto_table_rel[0]));
++
++ if (!initialized)
++ {
++ initialized = 1;
++ memset (elf_code_to_howto_index, 0xff,
++ sizeof (elf_code_to_howto_index));
++ for (i = 0; i < howto_tbl_size; i++)
++ elf_code_to_howto_index[elf_nios2_howto_table_rel[i].type] = i;
++ }
++
++ BFD_ASSERT (rtype <= R_NIOS2_ILLEGAL);
++ i = elf_code_to_howto_index[rtype];
++ if (i >= howto_tbl_size)
++ return 0;
++ return elf_nios2_howto_table_rel + i;
++}
++
++/* Map for converting BFD reloc types to New Jersey reloc types. */
++struct elf_reloc_map
++{
++ bfd_reloc_code_real_type bfd_val;
++ enum elf_nios2_reloc_type elf_val;
++};
++
++static const struct elf_reloc_map nios2_reloc_map[] = {
++ {BFD_RELOC_NIOS2_S16, R_NIOS2_S16},
++ {BFD_RELOC_NIOS2_U16, R_NIOS2_U16},
++ {BFD_RELOC_16_PCREL, R_NIOS2_PCREL16},
++ {BFD_RELOC_NIOS2_CALL26, R_NIOS2_CALL26},
++ {BFD_RELOC_NIOS2_IMM5, R_NIOS2_IMM5},
++ {BFD_RELOC_NIOS2_CACHE_OPX, R_NIOS2_CACHE_OPX},
++ {BFD_RELOC_NIOS2_IMM6, R_NIOS2_IMM6},
++ {BFD_RELOC_NIOS2_IMM8, R_NIOS2_IMM8},
++ {BFD_RELOC_NIOS2_HI16, R_NIOS2_HI16},
++ {BFD_RELOC_NIOS2_LO16, R_NIOS2_LO16},
++ {BFD_RELOC_NIOS2_HIADJ16, R_NIOS2_HIADJ16},
++ {BFD_RELOC_32, R_NIOS2_BFD_RELOC_32},
++ {BFD_RELOC_16, R_NIOS2_BFD_RELOC_16},
++ {BFD_RELOC_8, R_NIOS2_BFD_RELOC_8},
++ {BFD_RELOC_NIOS2_GPREL, R_NIOS2_GPREL},
++ {BFD_RELOC_VTABLE_INHERIT, R_NIOS2_GNU_VTINHERIT},
++ {BFD_RELOC_VTABLE_ENTRY, R_NIOS2_GNU_VTENTRY},
++ {BFD_RELOC_NIOS2_UJMP, R_NIOS2_UJMP},
++ {BFD_RELOC_NIOS2_CJMP, R_NIOS2_CJMP},
++ {BFD_RELOC_NIOS2_CALLR, R_NIOS2_CALLR},
++ {BFD_RELOC_NIOS2_ALIGN, R_NIOS2_ALIGN},
++ {BFD_RELOC_NIOS2_GOT16, R_NIOS2_GOT16},
++ {BFD_RELOC_NIOS2_CALL16, R_NIOS2_CALL16},
++ {BFD_RELOC_NIOS2_GOTOFF_LO, R_NIOS2_GOTOFF_LO},
++ {BFD_RELOC_NIOS2_GOTOFF_HA, R_NIOS2_GOTOFF_HA},
++ {BFD_RELOC_NIOS2_PCREL_LO, R_NIOS2_PCREL_LO},
++ {BFD_RELOC_NIOS2_PCREL_HA, R_NIOS2_PCREL_HA},
++ {BFD_RELOC_NIOS2_TLS_GD16, R_NIOS2_TLS_GD16},
++ {BFD_RELOC_NIOS2_TLS_LDM16, R_NIOS2_TLS_LDM16},
++ {BFD_RELOC_NIOS2_TLS_LDO16, R_NIOS2_TLS_LDO16},
++ {BFD_RELOC_NIOS2_TLS_IE16, R_NIOS2_TLS_IE16},
++ {BFD_RELOC_NIOS2_TLS_LE16, R_NIOS2_TLS_LE16},
++ {BFD_RELOC_NIOS2_TLS_DTPMOD, R_NIOS2_TLS_DTPMOD},
++ {BFD_RELOC_NIOS2_TLS_DTPREL, R_NIOS2_TLS_DTPREL},
++ {BFD_RELOC_NIOS2_TLS_TPREL, R_NIOS2_TLS_TPREL},
++ {BFD_RELOC_NIOS2_COPY, R_NIOS2_COPY},
++ {BFD_RELOC_NIOS2_GLOB_DAT, R_NIOS2_GLOB_DAT},
++ {BFD_RELOC_NIOS2_JUMP_SLOT, R_NIOS2_JUMP_SLOT},
++ {BFD_RELOC_NIOS2_RELATIVE, R_NIOS2_RELATIVE},
++ {BFD_RELOC_NIOS2_GOTOFF, R_NIOS2_GOTOFF}
++};
++
++/* The Nios II linker needs to keep track of the number of relocs that it
++ decides to copy as dynamic relocs in check_relocs for each symbol.
++ This is so that it can later discard them if they are found to be
++ unnecessary. We store the information in a field extending the
++ regular ELF linker hash table. */
++
++struct elf32_nios2_dyn_relocs
++{
++ struct elf32_nios2_dyn_relocs *next;
++
++ /* The input section of the reloc. */
++ asection *sec;
++
++ /* Total number of relocs copied for the input section. */
++ bfd_size_type count;
++
++ /* Number of pc-relative relocs copied for the input section. */
++ bfd_size_type pc_count;
++};
++
++/* Nios II ELF linker hash entry. */
++
++struct elf32_nios2_link_hash_entry
++{
++ struct elf_link_hash_entry root;
++
++ /* Track dynamic relocs copied for this symbol. */
++ struct elf32_nios2_dyn_relocs *dyn_relocs;
++
++#define GOT_UNKNOWN 0
++#define GOT_NORMAL 1
++#define GOT_TLS_GD 2
++#define GOT_TLS_IE 4
++ unsigned char tls_type;
++
++ /* We need to detect and take special action for symbols which are only
++ referenced with %call() and not with %got(). Such symbols do not need
++ a dynamic GOT reloc in shared objects, only a dynamic PLT reloc. Lazy
++ linking will not work if the dynamic GOT reloc exists.
++ To check for this condition efficiently, we compare got_types_used against
++ CALL16_USED, meaning
++ (got_types_used & (GOT16_USED | CALL16_USED)) == CALL16_USED. */
++#define GOT16_USED 1
++#define CALL16_USED 2
++ unsigned char got_types_used;
++};
++
++#define elf32_nios2_hash_entry(ent) \
++ ((struct elf32_nios2_link_hash_entry *) (ent))
++
++/* Get the Nios II elf linker hash table from a link_info structure. */
++#define elf32_nios2_hash_table(info) \
++ ((struct elf32_nios2_link_hash_table *) ((info)->hash))
++
++/* Nios II ELF linker hash table. */
++struct elf32_nios2_link_hash_table
++ {
++ /* The main hash table. */
++ struct elf_link_hash_table root;
++
++ /* Short-cuts to get to dynamic linker sections. */
++ asection *sgot;
++ asection *sgotplt;
++ asection *srelgot;
++ asection *splt;
++ asection *srelplt;
++ asection *sdynbss;
++ asection *srelbss;
++ asection *sbss;
++
++ union {
++ bfd_signed_vma refcount;
++ bfd_vma offset;
++ } tls_ldm_got;
++
++ /* Small local sym to section mapping cache. */
++ struct sym_cache sym_sec;
++
++ bfd_vma res_n_size;
++ };
++
++struct nios2_elf32_obj_tdata
++{
++ struct elf_obj_tdata root;
++
++ /* tls_type for each local got entry. */
++ char *local_got_tls_type;
++
++ /* TRUE if TLS GD relocs have been seen for this object. */
++ bfd_boolean has_tlsgd;
++};
++
++#define elf32_nios2_tdata(abfd) \
++ ((struct nios2_elf32_obj_tdata *) (abfd)->tdata.any)
++
++#define elf32_nios2_local_got_tls_type(abfd) \
++ (elf32_nios2_tdata (abfd)->local_got_tls_type)
++
++#define is_nios2_elf(bfd) \
++ (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
++ && elf_object_id (bfd) == NIOS2_ELF_TDATA)
++/* The name of the dynamic interpreter. This is put in the .interp
++ section. */
++
++#define ELF_DYNAMIC_INTERPRETER "/lib/ld.so.1"
++
++/* PLT implementation for position-dependent code. */
++
++static const bfd_vma nios2_plt_entry[] = { /* .PLTn: */
++ 0x03c00034, /* movhi r15, %hiadj(plt_got_slot_address) */
++ 0x7bc00017, /* ldw r15, %lo(plt_got_slot_address)(r15) */
++ 0x7800683a /* jmp r15 */
++};
++
++static const bfd_vma nios2_plt0_entry[] = { /* .PLTresolve */
++ 0x03800034, /* movhi r14, %hiadj(res_0) */
++ 0x73800004, /* addi r14, r14, %lo(res_0) */
++ 0x7b9fc83a, /* sub r15, r15, r14 */
++ 0x03400034, /* movhi r13, %hiadj(_GLOBAL_OFFSET_TABLE_) */
++ 0x6b800017, /* ldw r14, %lo(_GLOBAL_OFFSET_TABLE_+4)(r13) */
++ 0x6b400017, /* ldw r13, %lo(_GLOBAL_OFFSET_TABLE_+8)(r13) */
++ 0x6800683a /* jmp r13 */
++};
++
++/* PLT implementation for position-independent code. */
++
++static const bfd_vma nios2_so_plt_entry[] = { /* .PLTn */
++ 0x03c00034, /* movhi r15, %hiadj(index * 4) */
++ 0x7bc00004, /* addi r15, r15, %lo(index * 4) */
++ 0x00000006 /* br .PLTresolve */
++};
++
++static const bfd_vma nios2_so_plt0_entry[] = { /* .PLTresolve */
++ 0x001ce03a, /* nextpc r14 */
++ 0x03400034, /* movhi r13, %hiadj(_GLOBAL_OFFSET_TABLE_) */
++ 0x6b9b883a, /* add r13, r13, r14 */
++ 0x6b800017, /* ldw r14, %lo(_GLOBAL_OFFSET_TABLE_+4)(r13) */
++ 0x6b400017, /* ldw r13, %lo(_GLOBAL_OFFSET_TABLE_+8)(r13) */
++ 0x6800683a /* jmp r13 */
++};
++
++/* Support for core dump NOTE sections */
++static bfd_boolean
++nios2_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
++{
++ int offset;
++ size_t size;
++
++ switch (note->descsz)
++ {
++ default:
++ return FALSE;
++
++ case 212: /* Linux/Nios II */
++ /* pr_cursig */
++ elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12);
++
++ /* pr_pid */
++ elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24);
++
++ /* pr_reg */
++ offset = 72;
++ size = 136;
++
++ break;
++ }
++
++ /* Make a ".reg/999" section. */
++ return _bfd_elfcore_make_pseudosection (abfd, ".reg",
++ size, note->descpos + offset);
++}
++
++static bfd_boolean
++nios2_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
++{
++ switch (note->descsz)
++ {
++ default:
++ return FALSE;
++
++ case 124: /* Linux/Nios II elf_prpsinfo */
++ elf_tdata (abfd)->core_program
++ = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16);
++ elf_tdata (abfd)->core_command
++ = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80);
++ }
++
++ /* Note that for some reason, a spurious space is tacked
++ onto the end of the args in some (at least one anyway)
++ implementations, so strip it off if it exists. */
++
++ {
++ char *command = elf_tdata (abfd)->core_command;
++ int n = strlen (command);
++
++ if (0 < n && command[n - 1] == ' ')
++ command[n - 1] = '\0';
++ }
++
++ return TRUE;
++}
++
++/* Create an entry in a Nios II ELF linker hash table. */
++
++static struct bfd_hash_entry *
++link_hash_newfunc (struct bfd_hash_entry *entry,
++ struct bfd_hash_table *table, const char *string)
++{
++ /* Allocate the structure if it has not already been allocated by a
++ subclass. */
++ if (entry == NULL)
++ {
++ entry = bfd_hash_allocate (table,
++ sizeof (struct elf32_nios2_link_hash_entry));
++ if (entry == NULL)
++ return entry;
++ }
++
++ /* Call the allocation method of the superclass. */
++ entry = _bfd_elf_link_hash_newfunc (entry, table, string);
++ if (entry != NULL)
++ {
++ struct elf32_nios2_link_hash_entry *eh;
++
++ eh = (struct elf32_nios2_link_hash_entry *) entry;
++ eh->dyn_relocs = NULL;
++ eh->tls_type = GOT_UNKNOWN;
++ eh->got_types_used = 0;
++ }
++
++ return entry;
++}
++
++/* Given a BFD reloc type, return a howto structure. */
++
++static reloc_howto_type *
++nios2_elf32_bfd_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
++ bfd_reloc_code_real_type code)
++{
++ int i;
++ for (i = 0;
++ i < (int) (sizeof (nios2_reloc_map) / sizeof (struct elf_reloc_map));
++ ++i)
++ {
++ if (nios2_reloc_map[i].bfd_val == code)
++ return &elf_nios2_howto_table_rel[(int) nios2_reloc_map[i].elf_val];
++ }
++
++ return NULL;
++}
++
++/* Given a reloc name, return a howto structure. */
++
++static reloc_howto_type *
++nios2_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
++ const char *r_name)
++{
++ unsigned int i;
++ for (i = 0;
++ i < (sizeof (elf_nios2_howto_table_rel)
++ / sizeof (elf_nios2_howto_table_rel[0]));
++ i++)
++ if (elf_nios2_howto_table_rel[i].name != NULL
++ && strcasecmp (elf_nios2_howto_table_rel[i].name, r_name) == 0)
++ return &elf_nios2_howto_table_rel[i];
++
++ return NULL;
++}
++
++/* Helper function for nios2_elf32_info_to_howto. */
++
++static reloc_howto_type *
++nios2_elf32_rtype_to_howto (unsigned int r_type,
++ bfd_boolean rela_p ATTRIBUTE_UNUSED)
++{
++ BFD_ASSERT (r_type < R_NIOS2_ILLEGAL);
++ return &elf_nios2_howto_table_rel[r_type];
++}
++
++/* Given a ELF32 relocation, fill in a arelent structure. */
++
++static void
++nios2_elf32_info_to_howto (bfd * abfd ATTRIBUTE_UNUSED, arelent * cache_ptr,
++ Elf_Internal_Rela * dst)
++{
++ unsigned int r_type;
++
++ r_type = ELF32_R_TYPE (dst->r_info);
++ cache_ptr->howto = nios2_elf32_rtype_to_howto (r_type, FALSE);
++
++ /* FIXME - do we need to do anything else here??? */
++}
++
++/* Return the base VMA address which should be subtracted from real addresses
++ when resolving @dtpoff relocation.
++ This is PT_TLS segment p_vaddr. */
++
++static bfd_vma
++dtpoff_base (struct bfd_link_info *info)
++{
++ /* If tls_sec is NULL, we should have signalled an error already. */
++ if (elf_hash_table (info)->tls_sec == NULL)
++ return 0;
++ return elf_hash_table (info)->tls_sec->vma;
++}
++
++/* Return the relocation value for @tpoff relocation
++ if STT_TLS virtual address is ADDRESS. */
++
++static bfd_vma
++tpoff (struct bfd_link_info *info, bfd_vma address)
++{
++ struct elf_link_hash_table *htab = elf_hash_table (info);
++
++ /* If tls_sec is NULL, we should have signalled an error already. */
++ if (htab->tls_sec == NULL)
++ return 0;
++ return address - htab->tls_sec->vma;
++}
++
++/* The assembler has output long jmp/call sequences for all calls
++ and pc-relative branches that it cannot guarantee are within
++ range, so the linker must attempt to "relax" these sequences to
++ short branches and calls if it can. We avoid having to re-relax by
++ replacing redundant instructions with nops instead of deleting them. */
++static bfd_boolean
++nios2_elf32_relax_section (bfd * abfd,
++ asection * sec,
++ struct bfd_link_info *link_info, bfd_boolean * again)
++{
++ Elf_Internal_Shdr *symtab_hdr;
++ Elf_Internal_Rela *internal_relocs;
++ Elf_Internal_Rela *irel, *irelend;
++ bfd_byte *contents = NULL;
++ Elf_Internal_Sym *isymbuf = NULL;
++
++#define OP_MATCH_NOP 0x0001883a
++
++ /* Assume nothing changes. */
++ *again = FALSE;
++
++ /* We don't have to do anything for a relocatable link, if
++ this section does not have relocs, or if this is not a
++ code section. */
++ if (link_info->relocatable
++ || (sec->flags & SEC_RELOC) == 0
++ || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0)
++ return TRUE;
++
++ /* If this is the first time we have been called for this section,
++ initialize the cooked size. */
++ if (sec->size == 0)
++ sec->size = sec->rawsize;
++
++ symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
++
++ /* Get a copy of the native relocations. */
++ internal_relocs = (_bfd_elf_link_read_relocs
++ (abfd, sec, (void *) NULL, (Elf_Internal_Rela *) NULL,
++ link_info->keep_memory));
++ if (internal_relocs == NULL)
++ goto error_return;
++
++ /* Walk through them looking for relaxing opportunities. */
++ irelend = internal_relocs + sec->reloc_count;
++ for (irel = internal_relocs; irel < irelend; irel++)
++ {
++ bfd_vma symval;
++
++ /* If this isn't something that can be relaxed, then ignore
++ this reloc. */
++ if (ELF32_R_TYPE (irel->r_info) != (int) R_NIOS2_UJMP
++ && ELF32_R_TYPE (irel->r_info) != (int) R_NIOS2_CJMP
++ && ELF32_R_TYPE (irel->r_info) != (int) R_NIOS2_CALLR)
++ {
++ continue;
++ }
++
++ /* Get the section contents if we haven't done so already. */
++ if (contents == NULL)
++ {
++ /* Get cached copy if it exists. */
++ if (elf_section_data (sec)->this_hdr.contents != NULL)
++ contents = elf_section_data (sec)->this_hdr.contents;
++ else
++ {
++ /* Go get them off disk. */
++ contents = (bfd_byte *) bfd_malloc (sec->rawsize);
++ if (contents == NULL)
++ goto error_return;
++
++ if (!bfd_get_section_contents (abfd, sec, contents,
++ (file_ptr) 0, sec->rawsize))
++ goto error_return;
++ }
++ }
++
++ /* Read this BFD's local symbols if we haven't done so already. */
++ if (isymbuf == NULL && symtab_hdr->sh_info != 0)
++ {
++ isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
++ if (isymbuf == NULL)
++ isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
++ symtab_hdr->sh_info, 0,
++ NULL, NULL, NULL);
++ if (isymbuf == NULL)
++ goto error_return;
++ }
++
++ /* Get the value of the symbol referred to by the reloc. */
++ if (ELF32_R_SYM (irel->r_info) < symtab_hdr->sh_info)
++ {
++ /* A local symbol. */
++ Elf_Internal_Sym *isym;
++ asection *sym_sec;
++
++ isym = isymbuf + ELF32_R_SYM (irel->r_info);
++ if (isym->st_shndx == SHN_UNDEF)
++ sym_sec = bfd_und_section_ptr;
++ else if (isym->st_shndx == SHN_ABS)
++ sym_sec = bfd_abs_section_ptr;
++ else if (isym->st_shndx == SHN_COMMON)
++ sym_sec = bfd_com_section_ptr;
++ else
++ sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
++ symval = (isym->st_value
++ + sym_sec->output_section->vma + sym_sec->output_offset);
++ }
++ else
++ {
++ unsigned long indx;
++ struct elf_link_hash_entry *h;
++
++ /* An external symbol. */
++ indx = ELF32_R_SYM (irel->r_info) - symtab_hdr->sh_info;
++ h = elf_sym_hashes (abfd)[indx];
++ BFD_ASSERT (h != NULL);
++ if (h->root.type != bfd_link_hash_defined
++ && h->root.type != bfd_link_hash_defweak)
++ {
++ /* This appears to be a reference to an undefined
++ symbol. Just ignore it--it will be caught by the
++ regular reloc processing. */
++ continue;
++ }
++
++ symval = (h->root.u.def.value
++ + h->root.u.def.section->output_section->vma
++ + h->root.u.def.section->output_offset);
++ }
++
++ /* For simplicity of coding, we are going to modify the section
++ contents, the section relocs, and the BFD symbol table. We
++ must tell the rest of the code not to free up this
++ information. It would be possible to instead create a table
++ of changes which have to be made, as is done in coff-mips.c;
++ that would be more work, but would require less memory when
++ the linker is run. */
++
++ /* try to turn :
++ * movhi at, %hi(symbol)
++ * movui at, %lo(symbol)
++ * callr at
++ * into:
++ * call symbol
++ */
++ if (ELF32_R_TYPE (irel->r_info) == (int) R_NIOS2_CALLR)
++ {
++ bfd_vma targ_addr = symval + irel->r_addend;
++ bfd_vma curr_addr = (sec->output_section->vma + sec->output_offset);
++ bfd_vma targ_page, curr_page;
++ targ_page = targ_addr & 0xf0000000;
++ curr_page = curr_addr & 0xf0000000;
++
++ if (targ_page == curr_page)
++ {
++ /* change the opcode to a call */
++ bfd_put_32 (abfd, OP_MATCH_CALL, contents + irel->r_offset);
++ /* Note that we've changed the relocs, section contents, etc. */
++ elf_section_data (sec)->relocs = internal_relocs;
++ elf_section_data (sec)->this_hdr.contents = contents;
++ symtab_hdr->contents = (unsigned char *) isymbuf;
++
++ /* Fix the relocation's type. */
++ irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
++ R_NIOS2_CALL26);
++
++ /* replace next two instructions with nops */
++ bfd_put_32 (abfd, OP_MATCH_NOP, contents + irel->r_offset + 4);
++ bfd_put_32 (abfd, OP_MATCH_NOP, contents + irel->r_offset + 8);
++ }
++ }
++
++ /* try to turn :
++ * movhi at, %hi(symbol)
++ * movui at, %lo(symbol)
++ * jmp at
++ * into:
++ * br symbol
++ */
++ if (ELF32_R_TYPE (irel->r_info) == (int) R_NIOS2_UJMP)
++ {
++ bfd_vma pcrel_offset;
++ Elf_Internal_Rela *irelalign = NULL;
++ Elf_Internal_Rela *irela = elf_section_data (sec)->relocs;
++ Elf_Internal_Rela *irelend = irel + sec->reloc_count;
++
++ for (; irela < irelend; irela++)
++ {
++ if (ELF32_R_TYPE (irela->r_info) == (int) R_NIOS2_ALIGN
++ && irela->r_offset > irel->r_offset + 4
++ && 8 < (1 << irela->r_addend))
++ {
++ irelalign = irela;
++ break;
++ }
++ }
++
++ /* calculate the pcrelative offset from current location */
++ pcrel_offset = symval;
++ pcrel_offset -= (sec->output_section->vma + sec->output_offset);
++ pcrel_offset += irel->r_addend;
++
++ /* we need to compute the pcrel_offset from the next instruction */
++ pcrel_offset -= (irel->r_offset + 4);
++
++ /* does this value fit in 16 bits */
++ if ((irelalign == NULL && (long) pcrel_offset <= 0x8004
++ && (long) pcrel_offset >= -0x8000) || (irelalign != NULL
++ && (long) pcrel_offset
++ <= 0x7ffc
++ && (long) pcrel_offset
++ >= -0x8000))
++ {
++ /* change the opcode to an unconditional branch */
++ bfd_put_32 (abfd, OP_MATCH_BR, contents + irel->r_offset);
++ /* Note that we've changed the relocs, section contents, etc. */
++ elf_section_data (sec)->relocs = internal_relocs;
++ elf_section_data (sec)->this_hdr.contents = contents;
++ symtab_hdr->contents = (unsigned char *) isymbuf;
++
++ /* Fix the relocation's type. */
++ irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
++ R_NIOS2_PCREL16);
++
++ /* replace next two instructions with nops */
++ bfd_put_32 (abfd, OP_MATCH_NOP, contents + irel->r_offset + 4);
++ bfd_put_32 (abfd, OP_MATCH_NOP, contents + irel->r_offset + 8);
++ }
++ }
++
++ /* try to turn :
++ * b{cond} a, b skip
++ * movhi at, %hi(symbol)
++ * movui at, %lo(symbol)
++ * jmp at
++ * skip:
++ * ...
++ * into:
++ * br{opp_cond} a, b, symbol
++ */
++ if (ELF32_R_TYPE (irel->r_info) == (int) R_NIOS2_CJMP)
++ {
++ bfd_vma pcrel_offset;
++ Elf_Internal_Rela *irelalign = NULL;
++ Elf_Internal_Rela *irela = elf_section_data (sec)->relocs;
++ Elf_Internal_Rela *irelend = irel + sec->reloc_count;
++
++ for (; irela < irelend; irela++)
++ {
++ if (ELF32_R_TYPE (irela->r_info) == (int) R_NIOS2_ALIGN
++ && irela->r_offset > irel->r_offset + 4
++ && 8 < (1 << irela->r_addend))
++ {
++ irelalign = irela;
++ break;
++ }
++ }
++
++ /* calculate the pcrelative offset from current location */
++ pcrel_offset = symval;
++ pcrel_offset -= (sec->output_section->vma + sec->output_offset);
++ pcrel_offset += irel->r_addend;
++
++ /* we need to compute the pcrel_offset from this instruction
++ * ie the movhi */
++ pcrel_offset -= (irel->r_offset);
++
++ /* does this value fit in 16 bits */
++ if ((irelalign == NULL && (long) pcrel_offset <= 0x8008
++ && (long) pcrel_offset >= -0x8000) || (irelalign != NULL
++ && (long) pcrel_offset
++ <= 0x7ffc
++ && (long) pcrel_offset
++ >= -0x8000))
++ {
++ unsigned long opcode, op_a, op_b;
++ /* get the conditional branch opcode */
++ opcode = bfd_get_32 (abfd, contents + irel->r_offset - 4);
++ /* reverse the condition */
++ switch (opcode & OP_MASK_OP)
++ {
++ case OP_MATCH_BEQ:
++ opcode = (opcode & ~OP_MASK_OP) | OP_MATCH_BNE;
++ break;
++ case OP_MATCH_BNE:
++ opcode = (opcode & ~OP_MASK_OP) | OP_MATCH_BEQ;
++ break;
++ case OP_MATCH_BGE:
++ case OP_MATCH_BGEU:
++ case OP_MATCH_BLT:
++ case OP_MATCH_BLTU:
++ /* swap the operands */
++ op_a = (opcode & OP_MASK_RRT) << 5;
++ op_b = (opcode & OP_MASK_RRS) >> 5;
++ opcode =
++ (opcode & ~(OP_MASK_RRS | OP_MASK_RRT)) | op_a | op_b;
++ break;
++ default:
++ fprintf (stderr,
++ "relaxation error - expecting conditional branch, "
++ "aborting\n");
++ abort ();
++ break;
++ }
++
++ /* We must set the branch target to zero so that the skip over
++ the jmp doesn't get added to the jmp. */
++ opcode = opcode & (~OP_MASK_IMM16);
++
++ /* Change the opcode to the reversed conditional branch. */
++ bfd_put_32 (abfd, opcode, contents + irel->r_offset - 4);
++ /* Note that we've changed the relocs, section contents, etc. */
++ elf_section_data (sec)->relocs = internal_relocs;
++ elf_section_data (sec)->this_hdr.contents = contents;
++ symtab_hdr->contents = (unsigned char *) isymbuf;
++
++ /* Fix the relocation's type. */
++ irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
++ R_NIOS2_PCREL16);
++
++ /* This relocation's offset has also been reduced by 4 bytes. */
++ irel->r_offset -= 4;
++
++ /* Replace next two instructions with nops. */
++ bfd_put_32 (abfd, OP_MATCH_NOP, contents + irel->r_offset + 4);
++ bfd_put_32 (abfd, OP_MATCH_NOP, contents + irel->r_offset + 8);
++ bfd_put_32 (abfd, OP_MATCH_NOP, contents + irel->r_offset + 12);
++ }
++ }
++
++ /* Otherwise, leave alone. */
++ }
++
++ if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
++ {
++ if (!link_info->keep_memory)
++ free (isymbuf);
++ else
++ {
++ /* Cache the symbols for elf_link_input_bfd. */
++ symtab_hdr->contents = (unsigned char *) isymbuf;
++ }
++ }
++
++ if (contents != NULL
++ && elf_section_data (sec)->this_hdr.contents != contents)
++ {
++ if (!link_info->keep_memory)
++ free (contents);
++ else
++ {
++ /* Cache the section contents for elf_link_input_bfd. */
++ elf_section_data (sec)->this_hdr.contents = contents;
++ }
++ }
++
++ if (internal_relocs != NULL
++ && elf_section_data (sec)->relocs != internal_relocs)
++ free (internal_relocs);
++
++
++ return TRUE;
++
++error_return:
++ if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf)
++ free (isymbuf);
++ if (contents != NULL
++ && elf_section_data (sec)->this_hdr.contents != contents)
++ free (contents);
++ if (internal_relocs != NULL
++ && elf_section_data (sec)->relocs != internal_relocs)
++ free (internal_relocs);
++
++ return FALSE;
++}
++#if 0
++/* Delete some bytes from a section while relaxing.
++ * Copied from mn10200 port */
++
++static bfd_boolean
++nios2_elf32_relax_delete_bytes (bfd * abfd,
++ asection * sec, bfd_vma addr, int count)
++{
++ Elf_Internal_Shdr *symtab_hdr;
++ unsigned int sec_shndx;
++ bfd_byte *contents;
++ Elf_Internal_Rela *irel, *irelend;
++ Elf_Internal_Rela *irelalign;
++ bfd_vma toaddr;
++ Elf_Internal_Sym *isym;
++ Elf_Internal_Sym *isymend;
++ struct elf_link_hash_entry **sym_hashes;
++ struct elf_link_hash_entry **end_hashes;
++ unsigned int symcount;
++ asection *asec;
++
++ sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
++
++ contents = elf_section_data (sec)->this_hdr.contents;
++
++ /* The deletion must stop at the next ALIGN reloc for an aligment
++ power larger than the number of bytes we are deleting. */
++
++ irelalign = NULL;
++ /* +1 because we need to readjust symbols at end of section */
++ toaddr = sec->size + 1;
++
++ irel = elf_section_data (sec)->relocs;
++ irelend = irel + sec->reloc_count;
++
++ for (; irel < irelend; irel++)
++ {
++ if (ELF32_R_TYPE (irel->r_info) == (int) R_NIOS2_ALIGN
++ && irel->r_offset > addr && count < (1 << irel->r_addend))
++ {
++ irelalign = irel;
++ /* +1 because we need to readjust symbols at end of section */
++ toaddr = irel->r_offset + 1;
++ break;
++ }
++ }
++
++
++ /* Actually delete the bytes. */
++ memmove (contents + addr, contents + addr + count,
++ (size_t) ((toaddr - 1) - addr - count));
++
++ if (irelalign == NULL)
++ sec->size -= count;
++ else
++ {
++ int i;
++
++#define NOP_OPCODE (0x0001883a)
++
++ BFD_ASSERT ((count & 3) == 0);
++ for (i = 0; i < count; i += 4)
++ bfd_put_32 (abfd, (bfd_vma) NOP_OPCODE,
++ contents + (toaddr - 1) - count + i);
++ }
++
++ /* get the symbol table */
++ symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
++ isym = (Elf_Internal_Sym *) symtab_hdr->contents;
++
++ /* Adjust all the reloc offsets in this section. */
++ for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
++ {
++ /* Get the new reloc address. */
++ if ((irel->r_offset > addr && irel->r_offset < toaddr))
++ irel->r_offset -= count;
++ }
++
++ /* Adjust relocations against targets in this section whose positions
++ * have moved as a result of the relaxation */
++
++ for (asec = abfd->sections; asec; asec = asec->next)
++ {
++ irelend = elf_section_data (asec)->relocs + asec->reloc_count;
++ for (irel = elf_section_data (asec)->relocs; irel < irelend; irel++)
++ {
++ Elf_Internal_Sym *sym;
++ /* if the symbol which this reloc is against doesn't change
++ * we need to change the reloc addend */
++
++ sym = isym + ELF32_R_SYM (irel->r_info);
++ if (sym->st_shndx == sec_shndx
++ && !(sym->st_value > addr && sym->st_value < toaddr)
++ && sym->st_value + irel->r_addend > addr
++ && sym->st_value + irel->r_addend < toaddr)
++ {
++ irel->r_addend -= count;
++ }
++
++ }
++ }
++
++ /* Adjust the local symbols defined in this section. */
++ for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
++ {
++ if (isym->st_shndx == sec_shndx
++ && isym->st_value > addr && isym->st_value < toaddr)
++ isym->st_value -= count;
++
++
++ }
++
++ /* Now adjust the global symbols defined in this section. */
++ symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
++ - symtab_hdr->sh_info);
++ sym_hashes = elf_sym_hashes (abfd);
++ end_hashes = sym_hashes + symcount;
++ for (; sym_hashes < end_hashes; sym_hashes++)
++ {
++ struct elf_link_hash_entry *sym_hash = *sym_hashes;
++ if ((sym_hash->root.type == bfd_link_hash_defined
++ || sym_hash->root.type == bfd_link_hash_defweak)
++ && sym_hash->root.u.def.section == sec
++ && sym_hash->root.u.def.value > addr
++ && sym_hash->root.u.def.value < toaddr)
++ {
++ sym_hash->root.u.def.value -= count;
++ }
++ }
++
++ return TRUE;
++}
++#endif
++struct bfd_link_info *nios2_link_info = NULL;
++
++void
++_bfd_set_link_info (struct bfd_link_info *info)
++{
++ nios2_link_info = info;
++}
++
++bfd_boolean linker_force_make_executable = FALSE;
++
++void
++_bfd_set_force_make_executable (bfd_boolean force)
++{
++ linker_force_make_executable = force;
++}
++
++/* Set the GP value for OUTPUT_BFD. Returns FALSE if this is a
++ dangerous relocation. */
++
++static bfd_boolean
++nios2_elf_assign_gp (bfd *output_bfd, bfd_vma *pgp, struct bfd_link_info *info)
++{
++
++ bfd_boolean gp_found;
++ struct bfd_hash_entry *h;
++ struct bfd_link_hash_entry *lh;
++
++ /* If we've already figured out what GP will be, just return it. */
++ *pgp = _bfd_get_gp_value (output_bfd);
++ if (*pgp)
++ return TRUE;
++
++ h = bfd_hash_lookup (&info->hash->table, "_gp", FALSE, FALSE);
++ lh = (struct bfd_link_hash_entry *) h;
++lookup:
++ if (lh)
++ {
++ switch (lh->type)
++ {
++ case bfd_link_hash_undefined:
++ case bfd_link_hash_undefweak:
++ case bfd_link_hash_common:
++ gp_found = FALSE;
++ break;
++ case bfd_link_hash_defined:
++ case bfd_link_hash_defweak:
++ gp_found = TRUE;
++ *pgp = lh->u.def.value;
++ break;
++ case bfd_link_hash_indirect:
++ case bfd_link_hash_warning:
++ lh = lh->u.i.link;
++ /* @@FIXME ignoring warning for now */
++ goto lookup;
++ case bfd_link_hash_new:
++ default:
++ abort ();
++ }
++ }
++ else
++ gp_found = FALSE;
++
++ if (!gp_found)
++ {
++ /* Only get the error once. */
++ *pgp = 4;
++ _bfd_set_gp_value (output_bfd, *pgp);
++ return FALSE;
++ }
++
++ _bfd_set_gp_value (output_bfd, *pgp);
++
++ return TRUE;
++}
++
++/* We have to figure out the gp value, so that we can adjust the
++ symbol value correctly. We look up the symbol _gp in the output
++ BFD. If we can't find it, we're stuck. We cache it in the ELF
++ target data. We don't need to adjust the symbol value for an
++ external symbol if we are producing relocatable output. */
++
++static bfd_reloc_status_type
++nios2_elf_final_gp (bfd *output_bfd, asymbol *symbol, bfd_boolean relocatable,
++ char **error_message, bfd_vma *pgp,
++ struct bfd_link_info *info)
++{
++ if (bfd_is_und_section (symbol->section) && !relocatable)
++ {
++ *pgp = 0;
++ return bfd_reloc_undefined;
++ }
++
++ *pgp = _bfd_get_gp_value (output_bfd);
++ if (*pgp == 0 && (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0))
++ {
++ /* if this is called without link_info, then
++ we cannot be doing a final link */
++ if (info == NULL)
++ relocatable = TRUE;
++
++ if (relocatable)
++ {
++ /* Make up a value. */
++ *pgp = symbol->section->output_section->vma + 0x4000;
++ _bfd_set_gp_value (output_bfd, *pgp);
++ }
++ else if (!nios2_elf_assign_gp (output_bfd, pgp, info))
++ {
++ *error_message =
++ (char *)
++ _("global pointer relative relocation when _gp not defined");
++ return bfd_reloc_dangerous;
++ }
++ }
++
++ return bfd_reloc_ok;
++}
++
++
++/* Relocations that require special handling */
++
++/* This is for relocations used only when relaxing to ensure
++ changes in size of section don't screw up .align. */
++static bfd_reloc_status_type
++nios2_elf32_ignore_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
++ asymbol *symbol ATTRIBUTE_UNUSED,
++ void *data ATTRIBUTE_UNUSED, asection *input_section,
++ bfd *output_bfd,
++ char **error_message ATTRIBUTE_UNUSED)
++{
++ if (output_bfd != NULL)
++ reloc_entry->address += input_section->output_offset;
++ return bfd_reloc_ok;
++}
++
++static bfd_reloc_status_type
++nios2_elf32_hi16_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
++ void *data, asection *input_section,
++ bfd *output_bfd,
++ char **error_message ATTRIBUTE_UNUSED)
++{
++ /* This part is from bfd_elf_generic_reloc. */
++ if (output_bfd != (bfd *) NULL
++ && (symbol->flags & BSF_SECTION_SYM) == 0
++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
++ {
++ reloc_entry->address += input_section->output_offset;
++ return bfd_reloc_ok;
++ }
++
++ if (output_bfd != NULL)
++ /* FIXME: See bfd_perform_relocation. Is this right? */
++ return bfd_reloc_ok;
++
++ return nios2_elf32_do_hi16_relocate (abfd, reloc_entry->howto,
++ input_section,
++ data, reloc_entry->address,
++ (symbol->value
++ + symbol->section->output_section->vma
++ + symbol->section->output_offset),
++ reloc_entry->addend);
++}
++
++static bfd_reloc_status_type
++nios2_elf32_lo16_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
++ void *data, asection *input_section,
++ bfd *output_bfd,
++ char **error_message ATTRIBUTE_UNUSED)
++{
++/* This part is from bfd_elf_generic_reloc. */
++ if (output_bfd != (bfd *) NULL
++ && (symbol->flags & BSF_SECTION_SYM) == 0
++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
++ {
++ reloc_entry->address += input_section->output_offset;
++ return bfd_reloc_ok;
++ }
++
++ if (output_bfd != NULL)
++ /* FIXME: See bfd_perform_relocation. Is this right? */
++ return bfd_reloc_ok;
++
++ return nios2_elf32_do_lo16_relocate (abfd, reloc_entry->howto,
++ input_section,
++ data, reloc_entry->address,
++ (symbol->value
++ + symbol->section->output_section->vma
++ + symbol->section->output_offset),
++ reloc_entry->addend);
++}
++
++static bfd_reloc_status_type
++nios2_elf32_hiadj16_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
++ void *data, asection *input_section,
++ bfd *output_bfd,
++ char **error_message ATTRIBUTE_UNUSED)
++{
++ /* This part is from bfd_elf_generic_reloc. */
++ if (output_bfd != (bfd *) NULL
++ && (symbol->flags & BSF_SECTION_SYM) == 0
++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
++ {
++ reloc_entry->address += input_section->output_offset;
++ return bfd_reloc_ok;
++ }
++
++ if (output_bfd != NULL)
++ /* FIXME: See bfd_perform_relocation. Is this right? */
++ return bfd_reloc_ok;
++
++ return nios2_elf32_do_hiadj16_relocate (abfd, reloc_entry->howto,
++ input_section,
++ data, reloc_entry->address,
++ (symbol->value
++ +
++ symbol->section->output_section->
++ vma +
++ symbol->section->output_offset),
++ reloc_entry->addend);
++}
++
++static bfd_reloc_status_type
++nios2_elf32_pcrel_lo16_relocate (bfd *abfd, arelent *reloc_entry,
++ asymbol *symbol, void *data,
++ asection *input_section, bfd *output_bfd,
++ char **error_message ATTRIBUTE_UNUSED)
++{
++ /* This part is from bfd_elf_generic_reloc. */
++ if (output_bfd != (bfd *) NULL
++ && (symbol->flags & BSF_SECTION_SYM) == 0
++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
++ {
++ reloc_entry->address += input_section->output_offset;
++ return bfd_reloc_ok;
++ }
++
++ if (output_bfd != NULL)
++ /* FIXME: See bfd_perform_relocation. Is this right? */
++ return bfd_reloc_ok;
++
++ return nios2_elf32_do_pcrel_lo16_relocate (
++ abfd, reloc_entry->howto, input_section, data, reloc_entry->address,
++ (symbol->value + symbol->section->output_section->vma +
++ symbol->section->output_offset),
++ reloc_entry->addend);
++}
++
++static bfd_reloc_status_type
++nios2_elf32_pcrel_hiadj16_relocate (bfd *abfd, arelent *reloc_entry,
++ asymbol *symbol, void *data,
++ asection *input_section, bfd *output_bfd,
++ char **error_message ATTRIBUTE_UNUSED)
++{
++ /* This part is from bfd_elf_generic_reloc. */
++ if (output_bfd != (bfd *) NULL
++ && (symbol->flags & BSF_SECTION_SYM) == 0
++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
++ {
++ reloc_entry->address += input_section->output_offset;
++ return bfd_reloc_ok;
++ }
++
++ if (output_bfd != NULL)
++ /* FIXME: See bfd_perform_relocation. Is this right? */
++ return bfd_reloc_ok;
++
++ return nios2_elf32_do_pcrel_hiadj16_relocate (
++ abfd, reloc_entry->howto, input_section, data, reloc_entry->address,
++ (symbol->value + symbol->section->output_section->vma +
++ symbol->section->output_offset),
++ reloc_entry->addend);
++}
++
++static bfd_reloc_status_type
++nios2_elf32_pcrel16_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
++ void *data, asection *input_section,
++ bfd *output_bfd,
++ char **error_message ATTRIBUTE_UNUSED)
++{
++ /* This part is from bfd_elf_generic_reloc. */
++ if (output_bfd != (bfd *) NULL
++ && (symbol->flags & BSF_SECTION_SYM) == 0
++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
++ {
++ reloc_entry->address += input_section->output_offset;
++ return bfd_reloc_ok;
++ }
++
++ if (output_bfd != NULL)
++ /* FIXME: See bfd_perform_relocation. Is this right? */
++ return bfd_reloc_ok;
++
++ return nios2_elf32_do_pcrel16_relocate (abfd, reloc_entry->howto,
++ input_section,
++ data, reloc_entry->address,
++ (symbol->value
++ +
++ symbol->section->output_section->
++ vma +
++ symbol->section->output_offset),
++ reloc_entry->addend);
++}
++
++static bfd_reloc_status_type
++nios2_elf32_call26_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
++ void *data, asection *input_section,
++ bfd *output_bfd,
++ char **error_message ATTRIBUTE_UNUSED)
++{
++ /* This part is from bfd_elf_generic_reloc. */
++ if (output_bfd != (bfd *) NULL
++ && (symbol->flags & BSF_SECTION_SYM) == 0
++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
++ {
++ reloc_entry->address += input_section->output_offset;
++ return bfd_reloc_ok;
++ }
++
++ if (output_bfd != NULL)
++ /* FIXME: See bfd_perform_relocation. Is this right? */
++ return bfd_reloc_ok;
++
++ return nios2_elf32_do_call26_relocate (abfd, reloc_entry->howto,
++ input_section,
++ data, reloc_entry->address,
++ (symbol->value
++ +
++ symbol->section->output_section->
++ vma +
++ symbol->section->output_offset),
++ reloc_entry->addend);
++}
++
++static bfd_reloc_status_type
++nios2_elf32_gprel_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
++ void *data, asection *input_section,
++ bfd *output_bfd, char **msg)
++{
++ bfd_vma relocation;
++ bfd_vma gp;
++ bfd_reloc_status_type r;
++
++
++ /* This part is from bfd_elf_generic_reloc. */
++ if (output_bfd != (bfd *) NULL
++ && (symbol->flags & BSF_SECTION_SYM) == 0
++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
++ {
++ reloc_entry->address += input_section->output_offset;
++ return bfd_reloc_ok;
++ }
++
++ if (output_bfd != NULL)
++ /* FIXME: See bfd_perform_relocation. Is this right? */
++ return bfd_reloc_ok;
++
++ relocation = symbol->value
++ + symbol->section->output_section->vma + symbol->section->output_offset;
++
++ if ((r =
++ nios2_elf_final_gp (abfd, symbol, FALSE, msg, &gp,
++ nios2_link_info)) == bfd_reloc_ok)
++ {
++ relocation = relocation + reloc_entry->addend - gp;
++ reloc_entry->addend = 0;
++ if ((signed) relocation < -32768 || (signed) relocation > 32767)
++ {
++ *msg = _("global pointer relative address out of range");
++ r = bfd_reloc_outofrange;
++ }
++ else
++ {
++ r = nios2_elf32_do_gprel_relocate (abfd, reloc_entry->howto,
++ input_section,
++ data, reloc_entry->address,
++ relocation, reloc_entry->addend);
++ }
++ }
++
++ return r;
++}
++
++static bfd_reloc_status_type
++nios2_elf32_ujmp_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
++ void *data, asection *input_section,
++ bfd *output_bfd, char **msg ATTRIBUTE_UNUSED)
++{
++ /* This part is from bfd_elf_generic_reloc. */
++ if (output_bfd != (bfd *) NULL
++ && (symbol->flags & BSF_SECTION_SYM) == 0
++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
++ {
++ reloc_entry->address += input_section->output_offset;
++ return bfd_reloc_ok;
++ }
++
++ if (output_bfd != NULL)
++ /* FIXME: See bfd_perform_relocation. Is this right? */
++ return bfd_reloc_ok;
++
++ return nios2_elf32_do_ujmp_relocate (abfd, reloc_entry->howto,
++ input_section,
++ data, reloc_entry->address,
++ (symbol->value
++ + symbol->section->output_section->vma
++ + symbol->section->output_offset),
++ reloc_entry->addend);
++}
++
++static bfd_reloc_status_type
++nios2_elf32_cjmp_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
++ void *data, asection *input_section,
++ bfd *output_bfd, char **msg ATTRIBUTE_UNUSED)
++{
++ /* This part is from bfd_elf_generic_reloc. */
++ if (output_bfd != (bfd *) NULL
++ && (symbol->flags & BSF_SECTION_SYM) == 0
++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
++ {
++ reloc_entry->address += input_section->output_offset;
++ return bfd_reloc_ok;
++ }
++
++ if (output_bfd != NULL)
++ /* FIXME: See bfd_perform_relocation. Is this right? */
++ return bfd_reloc_ok;
++
++ return nios2_elf32_do_cjmp_relocate (abfd, reloc_entry->howto,
++ input_section,
++ data, reloc_entry->address,
++ (symbol->value
++ + symbol->section->output_section->vma
++ + symbol->section->output_offset),
++ reloc_entry->addend);
++}
++
++static bfd_reloc_status_type
++nios2_elf32_callr_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
++ void *data, asection *input_section,
++ bfd *output_bfd, char **msg ATTRIBUTE_UNUSED)
++{
++ /* This part is from bfd_elf_generic_reloc. */
++ if (output_bfd != (bfd *) NULL
++ && (symbol->flags & BSF_SECTION_SYM) == 0
++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0))
++ {
++ reloc_entry->address += input_section->output_offset;
++ return bfd_reloc_ok;
++ }
++
++ if (output_bfd != NULL)
++ /* FIXME: See bfd_perform_relocation. Is this right? */
++ return bfd_reloc_ok;
++
++
++ return nios2_elf32_do_callr_relocate (abfd, reloc_entry->howto,
++ input_section,
++ data, reloc_entry->address,
++ (symbol->value
++ +
++ symbol->section->output_section->
++ vma +
++ symbol->section->output_offset),
++ reloc_entry->addend);
++}
++
++/* Do the relocations which require special handling. */
++
++static bfd_reloc_status_type
++nios2_elf32_do_hi16_relocate (bfd *abfd, reloc_howto_type *howto,
++ asection *input_section ATTRIBUTE_UNUSED,
++ bfd_byte *data, bfd_vma offset,
++ bfd_vma symbol_value, bfd_vma addend)
++{
++ symbol_value = symbol_value + addend;
++ addend = 0;
++ symbol_value = (symbol_value >> 16) & 0xffff;
++ return _bfd_final_link_relocate (howto, abfd, input_section,
++ data, offset, symbol_value, addend);
++}
++
++
++static bfd_reloc_status_type
++nios2_elf32_do_lo16_relocate (bfd *abfd, reloc_howto_type *howto,
++ asection *input_section ATTRIBUTE_UNUSED,
++ bfd_byte *data, bfd_vma offset,
++ bfd_vma symbol_value, bfd_vma addend)
++{
++ symbol_value = symbol_value + addend;
++ addend = 0;
++ symbol_value = symbol_value & 0xffff;
++ return _bfd_final_link_relocate (howto, abfd, input_section,
++ data, offset, symbol_value, addend);
++}
++
++/* The usual way of loading a 32-bit constant into a Nios II register is to
++ load the high 16 bits in one instruction and then add the low 16 bits with
++ a signed add. This means that the high halfword needs to be adjusted to
++ compensate for the sign bit of the low halfword. This function returns the
++ adjusted high halfword for a given 32-bit constant. */
++
++static bfd_vma hiadj(bfd_vma symbol_value)
++{
++ return
++ (((symbol_value >> 16) & 0xffff) + ((symbol_value >> 15) & 0x01)) & 0xffff;
++}
++
++static bfd_reloc_status_type
++nios2_elf32_do_hiadj16_relocate (bfd *abfd, reloc_howto_type *howto,
++ asection *input_section ATTRIBUTE_UNUSED,
++ bfd_byte *data, bfd_vma offset,
++ bfd_vma symbol_value, bfd_vma addend)
++{
++ symbol_value = symbol_value + addend;
++ addend = 0;
++ symbol_value = hiadj(symbol_value);
++ return _bfd_final_link_relocate (howto, abfd, input_section, data, offset,
++ symbol_value, addend);
++}
++
++static bfd_reloc_status_type
++nios2_elf32_do_pcrel_lo16_relocate (bfd *abfd, reloc_howto_type *howto,
++ asection *input_section ATTRIBUTE_UNUSED,
++ bfd_byte *data, bfd_vma offset,
++ bfd_vma symbol_value, bfd_vma addend)
++{
++ symbol_value = symbol_value + addend;
++ addend = 0;
++ symbol_value = symbol_value & 0xffff;
++ return _bfd_final_link_relocate (howto, abfd, input_section,
++ data, offset, symbol_value, addend);
++}
++
++static bfd_reloc_status_type
++nios2_elf32_do_pcrel_hiadj16_relocate (bfd *abfd, reloc_howto_type *howto,
++ asection *input_section
++ ATTRIBUTE_UNUSED,
++ bfd_byte *data, bfd_vma offset,
++ bfd_vma symbol_value, bfd_vma addend)
++{
++ symbol_value = symbol_value + addend;
++ symbol_value -= (input_section->output_section->vma +
++ input_section->output_offset);
++ symbol_value -= offset;
++ addend = 0;
++ symbol_value = hiadj(symbol_value);
++ return _bfd_final_link_relocate (howto, abfd, input_section, data, offset,
++ symbol_value, addend);
++}
++
++static bfd_reloc_status_type
++nios2_elf32_do_pcrel16_relocate (bfd *abfd, reloc_howto_type *howto,
++ asection *input_section ATTRIBUTE_UNUSED,
++ bfd_byte *data, bfd_vma offset,
++ bfd_vma symbol_value, bfd_vma addend)
++{
++ /* NIOS2 pc relative relocations are relative to the next 32-bit instruction
++ so we need to subtract 4 before doing a final_link_relocate. */
++ symbol_value = symbol_value + addend - 4;
++ addend = 0;
++ return _bfd_final_link_relocate (howto, abfd, input_section,
++ data, offset, symbol_value, addend);
++}
++
++static bfd_reloc_status_type
++nios2_elf32_do_call26_relocate (bfd *abfd, reloc_howto_type *howto,
++ asection *input_section ATTRIBUTE_UNUSED,
++ bfd_byte *data, bfd_vma offset,
++ bfd_vma symbol_value, bfd_vma addend)
++{
++ /* Check that the relocation is in the same page as the current address. */
++ if (((symbol_value + addend) & 0xf0000000)
++ != ((input_section->output_section->vma + offset) & 0xf0000000))
++ return bfd_reloc_overflow;
++
++ return _bfd_final_link_relocate (howto, abfd, input_section,
++ data, offset, symbol_value, addend);
++}
++
++
++static bfd_reloc_status_type
++nios2_elf32_do_gprel_relocate (bfd *abfd, reloc_howto_type *howto,
++ asection *input_section ATTRIBUTE_UNUSED,
++ bfd_byte *data, bfd_vma offset,
++ bfd_vma symbol_value, bfd_vma addend)
++{
++ /* Because we need the output_bfd, the special handling is done
++ in nios2_elf32_relocate_section or in nios2_elf32_gprel_relocate. */
++ return _bfd_final_link_relocate (howto, abfd, input_section,
++ data, offset, symbol_value, addend);
++}
++
++static bfd_reloc_status_type
++nios2_elf32_do_ujmp_relocate (bfd *abfd, reloc_howto_type *howto,
++ asection *input_section ATTRIBUTE_UNUSED,
++ bfd_byte *data, bfd_vma offset,
++ bfd_vma symbol_value, bfd_vma addend)
++{
++ bfd_vma symbol_lo16, symbol_hi16;
++ bfd_reloc_status_type r;
++ symbol_value = symbol_value + addend;
++ addend = 0;
++ symbol_hi16 = (symbol_value >> 16) & 0xffff;
++ symbol_lo16 = symbol_value & 0xffff;
++
++ r = _bfd_final_link_relocate (howto, abfd, input_section,
++ data, offset, symbol_hi16, addend);
++
++ if (r == bfd_reloc_ok)
++ return _bfd_final_link_relocate (howto, abfd, input_section,
++ data, offset + 4, symbol_lo16, addend);
++
++ return r;
++}
++
++static bfd_reloc_status_type
++nios2_elf32_do_cjmp_relocate (bfd *abfd, reloc_howto_type *howto,
++ asection *input_section ATTRIBUTE_UNUSED,
++ bfd_byte *data, bfd_vma offset,
++ bfd_vma symbol_value, bfd_vma addend)
++{
++ bfd_vma symbol_lo16, symbol_hi16;
++ bfd_reloc_status_type r;
++ symbol_value = symbol_value + addend;
++ addend = 0;
++ symbol_hi16 = (symbol_value >> 16) & 0xffff;
++ symbol_lo16 = symbol_value & 0xffff;
++
++ r = _bfd_final_link_relocate (howto, abfd, input_section,
++ data, offset, symbol_hi16, addend);
++
++ if (r == bfd_reloc_ok)
++ return _bfd_final_link_relocate (howto, abfd, input_section,
++ data, offset + 4, symbol_lo16, addend);
++
++ return r;
++}
++
++static bfd_reloc_status_type
++nios2_elf32_do_callr_relocate (bfd *abfd, reloc_howto_type *howto,
++ asection *input_section ATTRIBUTE_UNUSED,
++ bfd_byte *data, bfd_vma offset,
++ bfd_vma symbol_value, bfd_vma addend)
++{
++ bfd_vma symbol_lo16, symbol_hi16;
++ bfd_reloc_status_type r;
++ symbol_value = symbol_value + addend;
++ addend = 0;
++ symbol_hi16 = (symbol_value >> 16) & 0xffff;
++ symbol_lo16 = symbol_value & 0xffff;
++
++ r = _bfd_final_link_relocate (howto, abfd, input_section,
++ data, offset, symbol_hi16, addend);
++
++ if (r == bfd_reloc_ok)
++ return _bfd_final_link_relocate (howto, abfd, input_section,
++ data, offset + 4, symbol_lo16, addend);
++
++ return r;
++}
++
++/* The function nios2_elf32_relocate_section is used by the linker
++ to perform relocations. */
++static bfd_boolean
++nios2_elf32_relocate_section (bfd * output_bfd,
++ struct bfd_link_info *info,
++ bfd * input_bfd,
++ asection * input_section,
++ bfd_byte * contents,
++ Elf_Internal_Rela * relocs,
++ Elf_Internal_Sym * local_syms,
++ asection ** local_sections)
++{
++ Elf_Internal_Shdr *symtab_hdr;
++ struct elf_link_hash_entry **sym_hashes;
++ Elf_Internal_Rela *rel;
++ Elf_Internal_Rela *relend;
++ struct elf32_nios2_link_hash_table *htab;
++ asection *sgot;
++ asection *splt;
++ asection *sreloc = NULL;
++ bfd_vma *local_got_offsets;
++ bfd *dynobj = NULL;
++
++ symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
++ sym_hashes = elf_sym_hashes (input_bfd);
++ relend = relocs + input_section->reloc_count;
++
++ htab = elf32_nios2_hash_table (info);
++ sgot = htab->sgot;
++ splt = htab->splt;
++ local_got_offsets = elf_local_got_offsets (input_bfd);
++
++ dynobj = elf_hash_table (info)->dynobj;
++
++#if 0
++ size_t psymalloc = 0;
++ _bfd_generic_link_output_symbols(output_bfd, input_bfd, info, &psymalloc);
++#endif
++ for (rel = relocs; rel < relend; rel++)
++ {
++ reloc_howto_type *howto;
++ unsigned long r_symndx;
++ Elf_Internal_Sym *sym;
++ asection *sec;
++ struct elf_link_hash_entry *h;
++ struct elf32_nios2_link_hash_entry *eh;
++ bfd_vma relocation;
++ bfd_vma gp;
++ bfd_vma reloc_address;
++ bfd_reloc_status_type r = bfd_reloc_ok;
++ const char *name = NULL;
++ int r_type;
++ const char *format;
++ char msgbuf[256];
++ const char* msg = (const char*) NULL;
++ bfd_boolean unresolved_reloc;
++ bfd_vma off;
++ int use_plt;
++
++
++
++ r_type = ELF32_R_TYPE (rel->r_info);
++
++ r_symndx = ELF32_R_SYM (rel->r_info);
++
++ if (info->relocatable)
++ {
++ /* This is a relocatable link. We don't have to change
++ anything, unless the reloc is against a section symbol,
++ in which case we have to adjust according to where the
++ section symbol winds up in the output section. */
++ if (r_symndx < symtab_hdr->sh_info)
++ {
++ sym = local_syms + r_symndx;
++
++ if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
++ {
++ sec = local_sections[r_symndx];
++ rel->r_addend += sec->output_offset + sym->st_value;
++ }
++ }
++ continue;
++ }
++
++ /* This is a final link. */
++ howto = lookup_howto ((unsigned) ELF32_R_TYPE (rel->r_info));
++ h = NULL;
++ sym = NULL;
++ sec = NULL;
++
++ if (r_symndx < symtab_hdr->sh_info)
++ {
++ sym = local_syms + r_symndx;
++ sec = local_sections[r_symndx];
++ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
++ }
++ else
++ {
++ bfd_boolean warned;
++
++ RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
++ r_symndx, symtab_hdr, sym_hashes,
++ h, sec, relocation,
++ unresolved_reloc, warned);
++ }
++
++ if (sec != NULL && elf_discarded_section (sec))
++ {
++ /* For relocs against symbols from removed linkonce sections,
++ or sections discarded by a linker script, we just want the
++ section contents zeroed. Avoid any special processing. */
++ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
++ rel->r_info = 0;
++ rel->r_addend = 0;
++ continue;
++ }
++
++ if (sec && sec->output_section != NULL)
++ reloc_address = sec->output_section->vma + sec->output_offset +
++ rel->r_offset;
++ else
++ reloc_address = 0;
++
++ if (howto != NULL)
++ {
++ switch (howto->type)
++ {
++ case R_NIOS2_HI16:
++ r =
++ nios2_elf32_do_hi16_relocate (input_bfd, howto, input_section,
++ contents, rel->r_offset,
++ relocation, rel->r_addend);
++ break;
++ case R_NIOS2_LO16:
++ r =
++ nios2_elf32_do_lo16_relocate (input_bfd, howto, input_section,
++ contents, rel->r_offset,
++ relocation, rel->r_addend);
++ break;
++ case R_NIOS2_PCREL_LO:
++ r =
++ nios2_elf32_do_pcrel_lo16_relocate (input_bfd, howto,
++ input_section, contents,
++ rel->r_offset, relocation,
++ rel->r_addend);
++ break;
++ case R_NIOS2_HIADJ16:
++ r =
++ nios2_elf32_do_hiadj16_relocate (input_bfd, howto,
++ input_section, contents,
++ rel->r_offset, relocation,
++ rel->r_addend);
++ break;
++ case R_NIOS2_PCREL_HA:
++ r =
++ nios2_elf32_do_pcrel_hiadj16_relocate (input_bfd, howto,
++ input_section, contents,
++ rel->r_offset,
++ relocation,
++ rel->r_addend);
++ break;
++ case R_NIOS2_PCREL16:
++ r =
++ nios2_elf32_do_pcrel16_relocate (input_bfd, howto,
++ input_section, contents,
++ rel->r_offset, relocation,
++ rel->r_addend);
++ break;
++ case R_NIOS2_GPREL:
++ /* Turns an absolute address into a gp-relative address. */
++ if (!nios2_elf_assign_gp (output_bfd, &gp, info))
++ {
++ format = _("global pointer relative relocation at address "
++ "0x%08x when _gp not defined\n");
++ sprintf(msgbuf, format, reloc_address);
++ msg = msgbuf;
++ r = bfd_reloc_dangerous;
++ }
++ else
++ {
++ bfd_vma symbol_address = rel->r_addend + relocation;
++ relocation = relocation + rel->r_addend - gp;
++ rel->r_addend = 0;
++ if ((signed) relocation < -32768
++ || (signed) relocation > 32767)
++ {
++ format = _("Unable to reach %s (at 0x%08x) from the "
++ "global pointer (at 0x%08x) because the "
++ "offset (%d) is out of the allowed range, "
++ "-32678 to 32767.\n" );
++ sprintf(msgbuf, format, name, symbol_address, gp,
++ (signed)relocation);
++ msg = msgbuf;
++ r = bfd_reloc_outofrange;
++ }
++ else
++ {
++ r =
++ _bfd_final_link_relocate (howto, input_bfd,
++ input_section, contents,
++ rel->r_offset, relocation,
++ rel->r_addend);
++ }
++ }
++
++ break;
++ case R_NIOS2_UJMP:
++ r =
++ nios2_elf32_do_ujmp_relocate (input_bfd, howto, input_section,
++ contents, rel->r_offset,
++ relocation, rel->r_addend);
++ break;
++ case R_NIOS2_CJMP:
++ r =
++ nios2_elf32_do_cjmp_relocate (input_bfd, howto, input_section,
++ contents, rel->r_offset,
++ relocation, rel->r_addend);
++ break;
++ case R_NIOS2_CALLR:
++ r =
++ nios2_elf32_do_callr_relocate (input_bfd, howto,
++ input_section, contents,
++ rel->r_offset, relocation,
++ rel->r_addend);
++ break;
++ case R_NIOS2_CALL26:
++ /* Handle relocations which should use the PLT entry.
++ NIOS2_BFD_RELOC_32 relocations will use the symbol's value,
++ which may point to a PLT entry, but we don't need to handle
++ that here. If we created a PLT entry, all branches in this
++ object should go to it. */
++ if (h != NULL && splt != NULL && h->plt.offset != (bfd_vma) -1)
++ {
++ /* If we've created a .plt section, and assigned a PLT entry
++ to this function, it should not be known to bind locally.
++ If it were, we would have cleared the PLT entry. */
++ BFD_ASSERT (!SYMBOL_CALLS_LOCAL (info, h));
++
++ relocation = (splt->output_section->vma
++ + splt->output_offset
++ + h->plt.offset);
++
++ unresolved_reloc = FALSE;
++ }
++ r =
++ nios2_elf32_do_call26_relocate (input_bfd, howto,
++ input_section, contents,
++ rel->r_offset, relocation,
++ rel->r_addend);
++ break;
++ case R_NIOS2_ALIGN:
++ r = bfd_reloc_ok;
++ /* For symmetry this would be
++ r = nios2_elf32_do_ignore_reloc (input_bfd, howto,
++ input_section, contents,
++ rel->r_offset, relocation,
++ rel->r_addend);
++ but do_ignore_reloc would do no more than return bfd_reloc_ok.
++ */
++ break;
++
++ case R_NIOS2_GOT16:
++ case R_NIOS2_CALL16:
++ /* Relocation is to the entry for this symbol in the
++ global offset table. */
++ if (sgot == NULL)
++ {
++ r = bfd_reloc_notsupported;
++ break;
++ }
++
++ use_plt = 0;
++
++ if (h != NULL)
++ {
++ bfd_boolean dyn;
++
++ eh = (struct elf32_nios2_link_hash_entry *)h;
++ use_plt = (eh->got_types_used == CALL16_USED &&
++ h->plt.offset != (bfd_vma) -1);
++
++ off = h->got.offset;
++ BFD_ASSERT (off != (bfd_vma) -1);
++ dyn = elf_hash_table (info)->dynamic_sections_created;
++ if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
++ || (info->shared
++ && SYMBOL_REFERENCES_LOCAL (info, h))
++ || (ELF_ST_VISIBILITY (h->other)
++ && h->root.type == bfd_link_hash_undefweak))
++ {
++ /* This is actually a static link, or it is a -Bsymbolic
++ link and the symbol is defined locally. We must
++ initialize this entry in the global offset table.
++ Since the offset must always be a multiple of 4, we
++ use the least significant bit to record whether we
++ have initialized it already.
++
++ When doing a dynamic link, we create a .rela.got
++ relocation entry to initialize the value. This is
++ done in the finish_dynamic_symbol routine. */
++ if ((off & 1) != 0)
++ off &= ~1;
++ else
++ {
++ bfd_put_32 (output_bfd, relocation,
++ sgot->contents + off);
++ h->got.offset |= 1;
++ }
++ }
++ else
++ unresolved_reloc = FALSE;
++ }
++ else
++ {
++ BFD_ASSERT (local_got_offsets != NULL &&
++ local_got_offsets[r_symndx] != (bfd_vma) -1);
++
++ off = local_got_offsets[r_symndx];
++
++ /* The offset must always be a multiple of 4. We use the
++ least significant bit to record whether we have already
++ generated the necessary reloc. */
++ if ((off & 1) != 0)
++ off &= ~1;
++ else
++ {
++ bfd_put_32 (output_bfd, relocation,
++ sgot->contents + off);
++
++ if (info->shared)
++ {
++ asection * srelgot;
++ Elf_Internal_Rela outrel;
++ bfd_byte *loc;
++
++ srelgot = htab->srelgot;
++ BFD_ASSERT (srelgot != NULL);
++
++ outrel.r_addend = relocation;
++ outrel.r_offset = (sgot->output_section->vma
++ + sgot->output_offset
++ + off);
++ outrel.r_info = ELF32_R_INFO (0, R_NIOS2_RELATIVE);
++ loc = srelgot->contents;
++ loc += (srelgot->reloc_count++ *
++ sizeof (Elf32_External_Rela));
++ bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
++ }
++
++ local_got_offsets[r_symndx] |= 1;
++ }
++ }
++
++ if (use_plt && info->shared)
++ {
++ off = ((h->plt.offset - 24) / 12 + 3) * 4;
++ relocation = htab->sgotplt->output_offset + off;
++ }
++ else
++ relocation = sgot->output_offset + off;
++
++ /* This relocation does not use the addend. */
++ rel->r_addend = 0;
++
++ r = _bfd_final_link_relocate (howto, input_bfd, input_section,
++ contents, rel->r_offset,
++ relocation, rel->r_addend);
++ break;
++
++ case R_NIOS2_GOTOFF_LO:
++ case R_NIOS2_GOTOFF_HA:
++ case R_NIOS2_GOTOFF:
++ /* Relocation is relative to the start of the
++ global offset table. */
++
++ BFD_ASSERT (sgot != NULL);
++ if (sgot == NULL)
++ {
++ r = bfd_reloc_notsupported;
++ break;
++ }
++
++ /* Note that sgot->output_offset is not involved in this
++ calculation. We always want the start of .got. If we
++ define _GLOBAL_OFFSET_TABLE in a different way, as is
++ permitted by the ABI, we might have to change this
++ calculation. */
++ relocation -= sgot->output_section->vma;
++ switch (howto->type)
++ {
++ case R_NIOS2_GOTOFF_LO:
++ r = nios2_elf32_do_lo16_relocate (input_bfd, howto,
++ input_section, contents,
++ rel->r_offset, relocation,
++ rel->r_addend);
++ break;
++ case R_NIOS2_GOTOFF_HA:
++ r = nios2_elf32_do_hiadj16_relocate (input_bfd, howto,
++ input_section, contents,
++ rel->r_offset,
++ relocation,
++ rel->r_addend);
++ break;
++ default:
++ r = _bfd_final_link_relocate (howto, input_bfd,
++ input_section, contents,
++ rel->r_offset, relocation,
++ rel->r_addend);
++ break;
++ }
++ break;
++
++ case R_NIOS2_TLS_LDO16:
++ relocation -= dtpoff_base (info) + DTP_OFFSET;
++
++ r = _bfd_final_link_relocate (howto, input_bfd, input_section,
++ contents, rel->r_offset,
++ relocation, rel->r_addend);
++ break;
++ case R_NIOS2_TLS_LDM16:
++ {
++ bfd_vma off;
++
++ if (htab->sgot == NULL)
++ abort ();
++
++ off = htab->tls_ldm_got.offset;
++
++ if ((off & 1) != 0)
++ off &= ~1;
++ else
++ {
++ /* If we don't know the module number, create a relocation
++ for it. */
++ if (info->shared)
++ {
++ Elf_Internal_Rela outrel;
++ bfd_byte *loc;
++
++ if (htab->srelgot == NULL)
++ abort ();
++
++ outrel.r_addend = 0;
++ outrel.r_offset = (htab->sgot->output_section->vma
++ + htab->sgot->output_offset
++ + off);
++ outrel.r_info = ELF32_R_INFO (0, R_NIOS2_TLS_DTPMOD);
++
++ loc = htab->srelgot->contents;
++ loc += (htab->srelgot->reloc_count++
++ * sizeof (Elf32_External_Rela));
++ bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
++ }
++ else
++ bfd_put_32 (output_bfd, 1,
++ htab->sgot->contents + off);
++
++ htab->tls_ldm_got.offset |= 1;
++ }
++
++ relocation = (htab->sgot->output_offset + off);
++
++ r = _bfd_final_link_relocate (howto, input_bfd,
++ input_section, contents,
++ rel->r_offset, relocation,
++ rel->r_addend);
++ }
++
++ break;
++ case R_NIOS2_TLS_GD16:
++ case R_NIOS2_TLS_IE16:
++ {
++ bfd_vma off;
++ int indx;
++ char tls_type;
++
++ if (htab->sgot == NULL)
++ abort ();
++
++ indx = 0;
++ if (h != NULL)
++ {
++ bfd_boolean dyn;
++ dyn = htab->root.dynamic_sections_created;
++ if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
++ && (!info->shared
++ || !SYMBOL_REFERENCES_LOCAL (info, h)))
++ {
++ unresolved_reloc = FALSE;
++ indx = h->dynindx;
++ }
++ off = h->got.offset;
++ tls_type = (((struct elf32_nios2_link_hash_entry *) h)
++ ->tls_type);
++ }
++ else
++ {
++ if (local_got_offsets == NULL)
++ abort ();
++ off = local_got_offsets[r_symndx];
++ tls_type = (elf32_nios2_local_got_tls_type (input_bfd)
++ [r_symndx]);
++ }
++
++ if (tls_type == GOT_UNKNOWN)
++ abort ();
++
++ if ((off & 1) != 0)
++ off &= ~1;
++ else
++ {
++ bfd_boolean need_relocs = FALSE;
++ Elf_Internal_Rela outrel;
++ bfd_byte *loc = NULL;
++ int cur_off = off;
++
++ /* The GOT entries have not been initialized yet. Do it
++ now, and emit any relocations. If both an IE GOT and a
++ GD GOT are necessary, we emit the GD first. */
++
++ if ((info->shared || indx != 0)
++ && (h == NULL
++ || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
++ || h->root.type != bfd_link_hash_undefweak))
++ {
++ need_relocs = TRUE;
++ if (htab->srelgot == NULL)
++ abort ();
++ loc = htab->srelgot->contents;
++ loc += (htab->srelgot->reloc_count *
++ sizeof (Elf32_External_Rela));
++ }
++
++ if (tls_type & GOT_TLS_GD)
++ {
++ if (need_relocs)
++ {
++ outrel.r_addend = 0;
++ outrel.r_offset = (htab->sgot->output_section->vma
++ + htab->sgot->output_offset
++ + cur_off);
++ outrel.r_info = ELF32_R_INFO (indx,
++ R_NIOS2_TLS_DTPMOD);
++
++ bfd_elf32_swap_reloca_out (output_bfd, &outrel,
++ loc);
++ htab->srelgot->reloc_count++;
++ loc += sizeof (Elf32_External_Rela);
++
++ if (indx == 0)
++ bfd_put_32 (output_bfd,
++ (relocation - dtpoff_base (info) -
++ DTP_OFFSET),
++ htab->sgot->contents + cur_off + 4);
++ else
++ {
++ outrel.r_addend = 0;
++ outrel.r_info = ELF32_R_INFO (indx,
++ R_NIOS2_TLS_DTPREL);
++ outrel.r_offset += 4;
++
++ bfd_elf32_swap_reloca_out (output_bfd, &outrel,
++ loc);
++ htab->srelgot->reloc_count++;
++ loc += sizeof (Elf32_External_Rela);
++ }
++ }
++ else
++ {
++ /* If we are not emitting relocations for a
++ general dynamic reference, then we must be in a
++ static link or an executable link with the
++ symbol binding locally. Mark it as belonging
++ to module 1, the executable. */
++ bfd_put_32 (output_bfd, 1,
++ htab->sgot->contents + cur_off);
++ bfd_put_32 (output_bfd, (relocation -
++ dtpoff_base (info) -
++ DTP_OFFSET),
++ htab->sgot->contents + cur_off + 4);
++ }
++
++ cur_off += 8;
++ }
++
++ if (tls_type & GOT_TLS_IE)
++ {
++ if (need_relocs)
++ {
++ if (indx == 0)
++ outrel.r_addend = (relocation -
++ dtpoff_base (info));
++ else
++ outrel.r_addend = 0;
++ outrel.r_offset = (htab->sgot->output_section->vma
++ + htab->sgot->output_offset
++ + cur_off);
++ outrel.r_info = ELF32_R_INFO (indx,
++ R_NIOS2_TLS_TPREL);
++
++ bfd_elf32_swap_reloca_out (output_bfd, &outrel,
++ loc);
++ htab->srelgot->reloc_count++;
++ loc += sizeof (Elf32_External_Rela);
++ }
++ else
++ bfd_put_32 (output_bfd, (tpoff (info, relocation)
++ - TP_OFFSET),
++ htab->sgot->contents + cur_off);
++ cur_off += 4;
++ }
++
++ if (h != NULL)
++ h->got.offset |= 1;
++ else
++ local_got_offsets[r_symndx] |= 1;
++ }
++
++ if ((tls_type & GOT_TLS_GD) && r_type != R_NIOS2_TLS_GD16)
++ off += 8;
++ relocation = (htab->sgot->output_offset + off);
++
++ r = _bfd_final_link_relocate (howto, input_bfd, input_section,
++ contents, rel->r_offset,
++ relocation, rel->r_addend);
++ }
++
++ break;
++ case R_NIOS2_TLS_LE16:
++ if (info->shared)
++ {
++ (*_bfd_error_handler)
++ (_("%B(%A+0x%lx): R_NIOS2_TLS_LE16 relocation not "
++ "permitted in shared object"),
++ input_bfd, input_section,
++ (long) rel->r_offset, howto->name);
++ return FALSE;
++ }
++ else
++ relocation = tpoff (info, relocation) - TP_OFFSET;
++
++ r = _bfd_final_link_relocate (howto, input_bfd, input_section,
++ contents, rel->r_offset,
++ relocation, rel->r_addend);
++ break;
++
++ case R_NIOS2_BFD_RELOC_32:
++ if (info->shared
++ && (input_section->flags & SEC_ALLOC) != 0
++ && (h == NULL
++ || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
++ || h->root.type != bfd_link_hash_undefweak))
++ {
++ Elf_Internal_Rela outrel;
++ bfd_byte *loc;
++ bfd_boolean skip, relocate;
++
++ /* When generating a shared object, these relocations
++ are copied into the output file to be resolved at run
++ time. */
++
++ skip = FALSE;
++ relocate = FALSE;
++
++ outrel.r_offset =
++ _bfd_elf_section_offset (output_bfd, info, input_section,
++ rel->r_offset);
++ if (outrel.r_offset == (bfd_vma) -1)
++ skip = TRUE;
++ else if (outrel.r_offset == (bfd_vma) -2)
++ skip = TRUE, relocate = TRUE;
++ outrel.r_offset += (input_section->output_section->vma
++ + input_section->output_offset);
++
++ if (skip)
++ memset (&outrel, 0, sizeof outrel);
++ else if (h != NULL
++ && h->dynindx != -1
++ && (!info->shared
++ || !info->symbolic
++ || !h->def_regular))
++ {
++ outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
++ outrel.r_addend = rel->r_addend;
++ }
++ else
++ {
++ /* This symbol is local, or marked to become local. */
++ outrel.r_addend = relocation + rel->r_addend;
++ relocate = TRUE;
++ outrel.r_info = ELF32_R_INFO (0, R_NIOS2_RELATIVE);
++ }
++
++ sreloc = elf_section_data (input_section)->sreloc;
++ if (sreloc == NULL)
++ abort ();
++
++ loc = sreloc->contents;
++ loc += sreloc->reloc_count++ * sizeof (Elf32_External_Rela);
++ bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
++
++ /* This reloc will be computed at runtime, so there's no
++ need to do anything now, except for R_NIOS2_BFD_RELOC_32
++ relocations that have been turned into
++ R_NIOS2_RELATIVE. */
++ if (!relocate)
++ break;
++ }
++
++ r = _bfd_final_link_relocate (howto, input_bfd,
++ input_section, contents,
++ rel->r_offset, relocation,
++ rel->r_addend);
++ break;
++
++ case R_NIOS2_TLS_DTPREL:
++ relocation -= dtpoff_base (info);
++ /* Fall through. */
++
++ default:
++ r = _bfd_final_link_relocate (howto, input_bfd,
++ input_section, contents,
++ rel->r_offset, relocation,
++ rel->r_addend);
++ break;
++ }
++ }
++ else
++ {
++ r = bfd_reloc_notsupported;
++ }
++
++ if (r != bfd_reloc_ok)
++ {
++ if (h != NULL)
++ name = h->root.root.string;
++ else
++ {
++ name = (bfd_elf_string_from_elf_section
++ (input_bfd, symtab_hdr->sh_link, sym->st_name));
++ if (name == NULL || *name == '\0')
++ name = bfd_section_name (input_bfd, sec);
++ }
++
++ switch (r)
++ {
++ case bfd_reloc_overflow:
++ r = info->callbacks->reloc_overflow
++ (info, NULL, name, howto->name, (bfd_vma) 0,
++ input_bfd, input_section, rel->r_offset);
++ break;
++
++ case bfd_reloc_undefined:
++ r = info->callbacks->undefined_symbol
++ (info, name, input_bfd, input_section, rel->r_offset, TRUE);
++ break;
++
++ case bfd_reloc_outofrange:
++ if (msg == NULL)
++ msg = _("relocation out of range");
++ break;
++
++ case bfd_reloc_notsupported:
++ if (msg == NULL)
++ msg = _("unsupported relocation");
++ break;
++
++ case bfd_reloc_dangerous:
++ if (msg == NULL)
++ msg = _("dangerous relocation");
++ break;
++
++ default:
++ if (msg == NULL)
++ msg = _("unknown error");
++ break;
++ }
++
++ if (msg)
++ {
++ r = info->callbacks->warning
++ (info, msg, name, input_bfd, input_section, rel->r_offset);
++ return linker_force_make_executable;
++ }
++ }
++ }
++ return TRUE;
++}
++
++
++
++/* Handle an NIOS2 specific section when reading an object file. This
++ is called when elfcode.h finds a section with an unknown type.
++ FIXME: We need to handle the SHF_NIOS2_GPREL flag. */
++
++static bfd_boolean
++nios2_elf32_section_from_shdr (bfd *abfd,
++ Elf_Internal_Shdr *hdr, const char *name, int shindex)
++{
++ asection *newsect;
++
++ /* NG - I'm keeping this code commented out at the moment
++ in case we add a .mdebug section. */
++
++ /*
++ switch (hdr->sh_type)
++ {
++ case SHT_NIOS2_DEBUG:
++ if (strcmp (name, ".mdebug") != 0)
++ return FALSE;
++ break;
++ default:
++ return FALSE;
++ }
++ */
++
++ if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
++ return FALSE;
++
++ newsect = hdr->bfd_section;
++
++ /* ditto */
++ /*
++ if (hdr->sh_type == SHT_NIOS2_DEBUG)
++ {
++ if (! bfd_set_section_flags (abfd, newsect,
++ (bfd_get_section_flags (abfd, newsect)
++ | SEC_DEBUGGING)))
++ return FALSE;
++ }
++ */
++ return TRUE;
++}
++
++/* Convert NIOS2 specific section flags to bfd internal section flags. */
++
++static bfd_boolean
++nios2_elf32_section_flags (flagword *flags, const Elf_Internal_Shdr *hdr)
++{
++ if (hdr->sh_flags & SHF_NIOS2_GPREL)
++ *flags |= SEC_SMALL_DATA;
++
++ return TRUE;
++}
++
++/* Set the correct type for an NIOS2 ELF section. We do this by the
++ section name, which is a hack, but ought to work. */
++
++static bfd_boolean
++nios2_elf32_fake_sections (bfd *abfd ATTRIBUTE_UNUSED,
++ Elf_Internal_Shdr *hdr, asection *sec)
++{
++ register const char *name;
++
++ name = bfd_get_section_name (abfd, sec);
++
++ if (strcmp (name, ".mdebug") == 0)
++ {
++ /* we don't yet have an .mdebug section, but I'm leaving this here
++ in case we ever do
++ hdr->sh_type = SHT_NIOS2_DEBUG;
++
++ if ((abfd->flags & DYNAMIC) != 0 )
++ hdr->sh_entsize = 0;
++ else
++ hdr->sh_entsize = 1;
++ */
++ }
++ else if ((sec->flags & SEC_SMALL_DATA)
++ || strcmp (name, ".sdata") == 0
++ || strcmp (name, ".sbss") == 0
++ || strcmp (name, ".lit4") == 0 || strcmp (name, ".lit8") == 0)
++ hdr->sh_flags |= SHF_NIOS2_GPREL;
++
++ return TRUE;
++}
++
++/* Create .got, .gotplt, and .rela.got sections in DYNOBJ, and set up
++ shortcuts to them in our hash table. */
++
++static bfd_boolean
++create_got_section (bfd *dynobj, struct bfd_link_info *info)
++{
++ struct elf32_nios2_link_hash_table *htab;
++
++ htab = elf32_nios2_hash_table (info);
++
++ if (! _bfd_elf_create_got_section (dynobj, info))
++ return FALSE;
++
++ htab->sgot = bfd_get_section_by_name (dynobj, ".got");
++ htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
++ if (!htab->sgot || !htab->sgotplt)
++ abort ();
++
++ /* In order for the two loads in .PLTresolve to share the same %hiadj,
++ _GLOBAL_OFFSET_TABLE_ must be aligned to a 16-byte boundary. */
++ if (!bfd_set_section_alignment (dynobj, htab->sgotplt, 4))
++ return FALSE;
++
++ htab->srelgot = bfd_make_section_with_flags (dynobj,
++ ".rela.got",
++ (SEC_ALLOC | SEC_LOAD
++ | SEC_HAS_CONTENTS
++ | SEC_IN_MEMORY
++ | SEC_LINKER_CREATED
++ | SEC_READONLY));
++ if (htab->srelgot == NULL
++ || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2))
++ return FALSE;
++ return TRUE;
++}
++
++/* Create .plt, .rela.plt, .got, .got.plt, .rela.got, .dynbss, and
++ .rela.bss sections in DYNOBJ, and set up shortcuts to them in our
++ hash table. */
++
++static bfd_boolean
++nios2_elf32_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
++{
++ struct elf32_nios2_link_hash_table *htab;
++
++ htab = elf32_nios2_hash_table (info);
++ if (!htab->sgot && !create_got_section (dynobj, info))
++ return FALSE;
++
++ _bfd_elf_create_dynamic_sections (dynobj, info);
++
++ htab->splt = bfd_get_section_by_name (dynobj, ".plt");
++
++ /* In order for the two loads in a shared object .PLTresolve to share the
++ same %hiadj, the start of the PLT (as well as the GOT) must be aligned
++ to a 16-byte boundary. This is because the addresses for these loads
++ include the -(.plt+4) PIC correction. */
++ if (!bfd_set_section_alignment (dynobj, htab->splt, 4))
++ return FALSE;
++
++ htab->srelplt = bfd_get_section_by_name (dynobj, ".rela.plt");
++ htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss");
++ if (!htab->splt || !htab->srelplt || !htab->sdynbss)
++ return FALSE;
++ if (!info->shared)
++ {
++ htab->srelbss = bfd_get_section_by_name (dynobj, ".rela.bss");
++ if (!htab->srelbss)
++ return FALSE;
++ }
++
++ return TRUE;
++}
++
++/* Copy the extra info we tack onto an elf_link_hash_entry. */
++
++static void
++nios2_elf32_copy_indirect_symbol (struct bfd_link_info *info,
++ struct elf_link_hash_entry *dir,
++ struct elf_link_hash_entry *ind)
++{
++ struct elf32_nios2_link_hash_entry *edir, *eind;
++
++ edir = (struct elf32_nios2_link_hash_entry *) dir;
++ eind = (struct elf32_nios2_link_hash_entry *) ind;
++
++ if (eind->dyn_relocs != NULL)
++ {
++ if (edir->dyn_relocs != NULL)
++ {
++ struct elf32_nios2_dyn_relocs **pp;
++ struct elf32_nios2_dyn_relocs *p;
++
++ /* Add reloc counts against the indirect sym to the direct sym
++ list. Merge any entries against the same section. */
++ for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
++ {
++ struct elf32_nios2_dyn_relocs *q;
++
++ for (q = edir->dyn_relocs; q != NULL; q = q->next)
++ if (q->sec == p->sec)
++ {
++ q->pc_count += p->pc_count;
++ q->count += p->count;
++ *pp = p->next;
++ break;
++ }
++ if (q == NULL)
++ pp = &p->next;
++ }
++ *pp = edir->dyn_relocs;
++ }
++
++ edir->dyn_relocs = eind->dyn_relocs;
++ eind->dyn_relocs = NULL;
++ }
++
++ if (ind->root.type == bfd_link_hash_indirect
++ && dir->got.refcount <= 0)
++ {
++ edir->tls_type = eind->tls_type;
++ eind->tls_type = GOT_UNKNOWN;
++ }
++
++ edir->got_types_used |= eind->got_types_used;
++
++ _bfd_elf_link_hash_copy_indirect (info, dir, ind);
++}
++
++/* Look through the relocs for a section during the first phase. */
++
++static bfd_boolean
++nios2_elf32_check_relocs (bfd *abfd, struct bfd_link_info *info,
++ asection *sec, const Elf_Internal_Rela *relocs)
++{
++ bfd *dynobj;
++ Elf_Internal_Shdr *symtab_hdr;
++ struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
++ const Elf_Internal_Rela *rel;
++ const Elf_Internal_Rela *rel_end;
++ struct elf32_nios2_link_hash_table *htab;
++ asection *sgot;
++ asection *srelgot;
++ asection *sreloc = NULL;
++ bfd_signed_vma *local_got_refcounts;
++
++ if (info->relocatable)
++ return TRUE;
++
++ dynobj = elf_hash_table (info)->dynobj;
++ symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
++ sym_hashes = elf_sym_hashes (abfd);
++ sym_hashes_end =
++ sym_hashes + symtab_hdr->sh_size / sizeof (Elf32_External_Sym);
++ if (!elf_bad_symtab (abfd))
++ sym_hashes_end -= symtab_hdr->sh_info;
++ local_got_refcounts = elf_local_got_refcounts (abfd);
++
++ htab = elf32_nios2_hash_table (info);
++ sgot = htab->sgot;
++ srelgot = htab->srelgot;
++
++ rel_end = relocs + sec->reloc_count;
++ for (rel = relocs; rel < rel_end; rel++)
++ {
++ unsigned int r_type;
++ struct elf_link_hash_entry *h;
++ unsigned long r_symndx;
++
++ r_symndx = ELF32_R_SYM (rel->r_info);
++ if (r_symndx < symtab_hdr->sh_info)
++ h = NULL;
++ else
++ {
++ h = sym_hashes[r_symndx - symtab_hdr->sh_info];
++ while (h->root.type == bfd_link_hash_indirect
++ || h->root.type == bfd_link_hash_warning)
++ h = (struct elf_link_hash_entry *) h->root.u.i.link;
++ }
++
++ r_type = ELF32_R_TYPE (rel->r_info);
++
++ switch (r_type)
++ {
++ case R_NIOS2_GOT16:
++ case R_NIOS2_CALL16:
++ case R_NIOS2_TLS_GD16:
++ case R_NIOS2_TLS_IE16:
++ /* This symbol requires a global offset table entry. */
++ {
++ int tls_type, old_tls_type;
++
++ switch (r_type)
++ {
++ default:
++ case R_NIOS2_GOT16:
++ case R_NIOS2_CALL16:
++ tls_type = GOT_NORMAL;
++ break;
++ case R_NIOS2_TLS_GD16:
++ tls_type = GOT_TLS_GD;
++ break;
++ case R_NIOS2_TLS_IE16:
++ tls_type = GOT_TLS_IE;
++ break;
++ }
++
++ if (dynobj == NULL)
++ {
++ /* Create the .got section. */
++ elf_hash_table (info)->dynobj = dynobj = abfd;
++ nios2_elf32_create_dynamic_sections (dynobj, info);
++ }
++
++ if (sgot == NULL)
++ {
++ sgot = htab->sgot;
++ BFD_ASSERT (sgot != NULL);
++ }
++
++ if (srelgot == NULL
++ && (h != NULL || info->shared))
++ {
++ srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
++ BFD_ASSERT (srelgot != NULL);
++ }
++
++ if (h != NULL)
++ {
++ struct elf32_nios2_link_hash_entry *eh =
++ (struct elf32_nios2_link_hash_entry *)h;
++ h->got.refcount++;
++ old_tls_type = elf32_nios2_hash_entry(h)->tls_type;
++ if (r_type == R_NIOS2_CALL16)
++ {
++ /* Make sure a plt entry is created for this symbol if it
++ turns out to be a function defined by a dynamic object.
++ */
++ h->plt.refcount++;
++
++ h->needs_plt = 1;
++
++ h->type = STT_FUNC;
++
++ eh->got_types_used |= CALL16_USED;
++ }
++ else
++ eh->got_types_used |= GOT16_USED;
++ }
++ else
++ {
++ /* This is a global offset table entry for a local symbol. */
++ if (local_got_refcounts == NULL)
++ {
++ bfd_size_type size;
++
++ size = symtab_hdr->sh_info;
++ size *= (sizeof (bfd_signed_vma) + sizeof(char));
++ local_got_refcounts = ((bfd_signed_vma *)
++ bfd_zalloc (abfd, size));
++ if (local_got_refcounts == NULL)
++ return FALSE;
++ elf_local_got_refcounts (abfd) = local_got_refcounts;
++ elf32_nios2_local_got_tls_type (abfd) =
++ (char *) (local_got_refcounts + symtab_hdr->sh_info);
++ }
++ local_got_refcounts[r_symndx]++;
++ old_tls_type =
++ elf32_nios2_local_got_tls_type (abfd) [r_symndx];
++ }
++
++ /* We will already have issued an error message if there is a
++ TLS / non-TLS mismatch, based on the symbol type. We don't
++ support any linker relaxations. So just combine any TLS
++ types needed. */
++ if (old_tls_type != GOT_UNKNOWN && old_tls_type != GOT_NORMAL
++ && tls_type != GOT_NORMAL)
++ tls_type |= old_tls_type;
++
++ if (old_tls_type != tls_type)
++ {
++ if (h != NULL)
++ elf32_nios2_hash_entry (h)->tls_type = tls_type;
++ else
++ elf32_nios2_local_got_tls_type (abfd) [r_symndx] = tls_type;
++ }
++ }
++ /* Fall through */
++ case R_NIOS2_TLS_LDM16:
++ if (r_type == R_NIOS2_TLS_LDM16)
++ htab->tls_ldm_got.refcount++;
++
++ if (htab->sgot == NULL)
++ {
++ if (htab->root.dynobj == NULL)
++ htab->root.dynobj = abfd;
++ if (!create_got_section (htab->root.dynobj, info))
++ return FALSE;
++ }
++ break;
++
++ /* This relocation describes the C++ object vtable hierarchy.
++ Reconstruct it for later use during GC. */
++ case R_NIOS2_GNU_VTINHERIT:
++ if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
++ return FALSE;
++ break;
++
++ /* This relocation describes which C++ vtable entries are actually
++ used. Record for later use during GC. */
++ case R_NIOS2_GNU_VTENTRY:
++ if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
++ return FALSE;
++ break;
++
++ case R_NIOS2_BFD_RELOC_32:
++ case R_NIOS2_CALL26:
++ case R_NIOS2_HIADJ16:
++ case R_NIOS2_LO16:
++
++ if (h != NULL)
++ {
++ /* If this reloc is in a read-only section, we might
++ need a copy reloc. We can't check reliably at this
++ stage whether the section is read-only, as input
++ sections have not yet been mapped to output sections.
++ Tentatively set the flag for now, and correct in
++ adjust_dynamic_symbol. */
++ if (!info->shared)
++ h->non_got_ref = 1;
++
++ /* Make sure a plt entry is created for this symbol if it
++ turns out to be a function defined by a dynamic object. */
++ h->plt.refcount++;
++
++ if (r_type == R_NIOS2_CALL26)
++ h->needs_plt = 1;
++ }
++
++ /* If we are creating a shared library, we need to copy the
++ reloc into the shared library. */
++ if (info->shared
++ && (sec->flags & SEC_ALLOC) != 0
++ && (r_type == R_NIOS2_BFD_RELOC_32
++ || (h != NULL && ! h->needs_plt
++ && (! info->symbolic || ! h->def_regular))))
++ {
++ struct elf32_nios2_dyn_relocs *p;
++ struct elf32_nios2_dyn_relocs **head;
++
++ /* When creating a shared object, we must copy these
++ reloc types into the output file. We create a reloc
++ section in dynobj and make room for this reloc. */
++ if (sreloc == NULL)
++ {
++ const char *name;
++
++ name = (bfd_elf_string_from_elf_section
++ (abfd,
++ elf_elfheader (abfd)->e_shstrndx,
++ elf_section_data (sec)->rel_hdr.sh_name));
++ if (name == NULL)
++ return FALSE;
++
++ BFD_ASSERT (CONST_STRNEQ (name, ".rela")
++ && strcmp (bfd_get_section_name (abfd, sec),
++ name + 5) == 0);
++
++ sreloc = bfd_get_section_by_name (dynobj, name);
++ if (sreloc == NULL)
++ {
++ sreloc = bfd_make_section_with_flags (
++ dynobj,
++ name,
++ (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS |
++ SEC_IN_MEMORY | SEC_LINKER_CREATED | SEC_READONLY));
++ if (sreloc == NULL ||
++ !bfd_set_section_alignment (dynobj, sreloc, 2))
++ return FALSE;
++ }
++ elf_section_data (sec)->sreloc = sreloc;
++ }
++
++ /* If this is a global symbol, we count the number of
++ relocations we need for this symbol. */
++ if (h != NULL)
++ head = &((struct elf32_nios2_link_hash_entry *) h)->dyn_relocs;
++ else
++ {
++ /* Track dynamic relocs needed for local syms too.
++ We really need local syms available to do this
++ easily. Oh well. */
++
++ asection *s;
++ void *vpp;
++ Elf_Internal_Sym *isym;
++
++ isym = bfd_sym_from_r_symndx (&htab->sym_sec,
++ abfd, r_symndx);
++ if (isym == NULL)
++ return FALSE;
++
++ s = bfd_section_from_elf_index (abfd, isym->st_shndx);
++ if (s == NULL)
++ s = sec;
++
++ vpp = &elf_section_data (s)->local_dynrel;
++ head = (struct _bfd_nios2_elf_dyn_relocs **) vpp;
++ }
++
++ p = *head;
++ if (p == NULL || p->sec != sec)
++ {
++ bfd_size_type amt = sizeof *p;
++ p = ((struct elf32_nios2_dyn_relocs *)
++ bfd_alloc (htab->root.dynobj, amt));
++ if (p == NULL)
++ return FALSE;
++ p->next = *head;
++ *head = p;
++ p->sec = sec;
++ p->count = 0;
++ p->pc_count = 0;
++ }
++
++ p->count += 1;
++
++ }
++ break;
++ }
++ }
++
++ return TRUE;
++}
++
++
++/* Return the section that should be marked against GC for a given
++ relocation. */
++
++asection *
++nios2_elf32_gc_mark_hook (asection *sec,
++ struct bfd_link_info *info ATTRIBUTE_UNUSED,
++ Elf_Internal_Rela *rel,
++ struct elf_link_hash_entry *h,
++ Elf_Internal_Sym *sym)
++{
++ if (h != NULL)
++ switch (ELF32_R_TYPE (rel->r_info))
++ {
++ case R_NIOS2_GNU_VTINHERIT:
++ case R_NIOS2_GNU_VTENTRY:
++ return NULL;
++ }
++ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
++}
++
++/* Update the got entry reference counts for the section being removed. */
++
++static bfd_boolean
++nios2_elf32_gc_sweep_hook (bfd *abfd,
++ struct bfd_link_info *info,
++ asection *sec,
++ const Elf_Internal_Rela *relocs)
++{
++ Elf_Internal_Shdr *symtab_hdr;
++ struct elf_link_hash_entry **sym_hashes;
++ bfd_signed_vma *local_got_refcounts;
++ const Elf_Internal_Rela *rel, *relend;
++ bfd *dynobj;
++ asection *sgot;
++ asection *srelgot;
++ struct elf32_nios2_link_hash_table *htab;
++
++ htab = elf32_nios2_hash_table (info);
++ sgot = htab->sgot;
++ srelgot = htab->srelgot;
++
++ elf_section_data (sec)->local_dynrel = NULL;
++
++ dynobj = elf_hash_table (info)->dynobj;
++ if (dynobj == NULL)
++ return TRUE;
++
++ symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
++ sym_hashes = elf_sym_hashes (abfd);
++ local_got_refcounts = elf_local_got_refcounts (abfd);
++
++ relend = relocs + sec->reloc_count;
++ for (rel = relocs; rel < relend; rel++)
++ {
++ unsigned long r_symndx;
++ struct elf_link_hash_entry *h = NULL;
++ int r_type;
++
++ r_symndx = ELF32_R_SYM (rel->r_info);
++ if (r_symndx >= symtab_hdr->sh_info)
++ {
++ h = sym_hashes[r_symndx - symtab_hdr->sh_info];
++ while (h->root.type == bfd_link_hash_indirect
++ || h->root.type == bfd_link_hash_warning)
++ h = (struct elf_link_hash_entry *) h->root.u.i.link;
++ }
++
++ r_type = ELF32_R_TYPE (rel->r_info);
++ switch (r_type)
++ {
++ case R_NIOS2_GOT16:
++ case R_NIOS2_CALL16:
++ if (h != NULL)
++ {
++ if (h->got.refcount > 0)
++ --h->got.refcount;
++ }
++ else if (local_got_refcounts != NULL)
++ {
++ if (local_got_refcounts[r_symndx] > 0)
++ --local_got_refcounts[r_symndx];
++ }
++ break;
++
++ case R_NIOS2_PCREL_LO:
++ case R_NIOS2_PCREL_HA:
++ case R_NIOS2_BFD_RELOC_32:
++ case R_NIOS2_CALL26:
++ if (h != NULL)
++ {
++ struct elf32_nios2_link_hash_entry *eh;
++ struct elf32_nios2_dyn_relocs **pp;
++ struct elf32_nios2_dyn_relocs *p;
++
++ eh = (struct elf32_nios2_link_hash_entry *) h;
++
++ if (h->plt.refcount > 0)
++ --h->plt.refcount;
++
++ if (r_type == R_NIOS2_PCREL_LO || r_type == R_NIOS2_PCREL_HA ||
++ r_type == R_NIOS2_BFD_RELOC_32)
++ {
++ for (pp = &eh->dyn_relocs; (p = *pp) != NULL;
++ pp = &p->next)
++ if (p->sec == sec)
++ {
++ p->count -= 1;
++ if (p->count == 0)
++ *pp = p->next;
++ break;
++ }
++ }
++ }
++ break;
++
++ default:
++ break;
++ }
++ }
++
++ return TRUE;
++}
++
++/* Install 16-bit immediate value VALUE at offset OFFSET into section SEC. */
++
++static void
++nios2_elf32_install_imm16 (asection *sec, bfd_vma offset, bfd_vma value)
++{
++ bfd_vma word = bfd_get_32 (sec->owner, sec->contents + offset);
++
++ BFD_ASSERT(value <= 0xffff);
++
++ bfd_put_32 (sec->owner, word | ((value & 0xffff) << 6),
++ sec->contents + offset);
++}
++
++/* Install COUNT 32-bit values DATA starting at offset OFFSET into section SEC.
++ */
++
++static void
++nios2_elf32_install_data (asection *sec, const bfd_vma *data, bfd_vma offset,
++ int count)
++{
++ while (count--)
++ {
++ bfd_put_32 (sec->owner, *data, sec->contents + offset);
++ offset += 4;
++ ++data;
++ }
++}
++
++
++/* Finish up dynamic symbol handling. We set the contents of various
++ dynamic sections here. */
++
++static bfd_boolean
++nios2_elf32_finish_dynamic_symbol (bfd * output_bfd,
++ struct bfd_link_info * info,
++ struct elf_link_hash_entry * h,
++ Elf_Internal_Sym * sym)
++{
++ struct elf32_nios2_link_hash_table *htab;
++ struct elf32_nios2_link_hash_entry *eh =
++ (struct elf32_nios2_link_hash_entry *)h;
++ bfd *dynobj;
++ int use_plt;
++
++ htab = elf32_nios2_hash_table (info);
++
++ dynobj = elf_hash_table (info)->dynobj;
++
++ if (h->plt.offset != (bfd_vma) -1)
++ {
++ asection *splt;
++ asection *sgotplt;
++ asection *srela;
++ bfd_vma plt_index;
++ bfd_vma got_offset;
++ Elf_Internal_Rela rela;
++ bfd_byte *loc;
++ bfd_vma got_address;
++
++ /* This symbol has an entry in the procedure linkage table. Set
++ it up. */
++
++ BFD_ASSERT (h->dynindx != -1);
++
++ splt = htab->splt;
++ sgotplt = htab->sgotplt;
++ srela = htab->srelplt;
++ BFD_ASSERT (splt != NULL && sgotplt != NULL && srela != NULL);
++
++ /* Emit the PLT entry. */
++ if (info->shared)
++ {
++ nios2_elf32_install_data (splt, nios2_so_plt_entry, h->plt.offset,
++ 3);
++ plt_index = (h->plt.offset - 24) / 12;
++ got_offset = (plt_index + 3) * 4;
++ nios2_elf32_install_imm16 (splt, h->plt.offset,
++ hiadj(plt_index * 4));
++ nios2_elf32_install_imm16 (splt, h->plt.offset + 4,
++ (plt_index * 4) & 0xffff);
++ nios2_elf32_install_imm16 (splt, h->plt.offset + 8,
++ 0xfff4 - h->plt.offset);
++ got_address = (sgotplt->output_section->vma + sgotplt->output_offset
++ + got_offset);
++
++ /* Fill in the entry in the global offset table. There are no
++ res_n slots for a shared object PLT, instead the .got.plt entries
++ point to the PLT entries. */
++ bfd_put_32 (output_bfd,
++ splt->output_section->vma + splt->output_offset
++ + h->plt.offset, sgotplt->contents + got_offset);
++ }
++ else
++ {
++ plt_index = (h->plt.offset - 28 - htab->res_n_size) / 12;
++ got_offset = (plt_index + 3) * 4;
++
++ nios2_elf32_install_data (splt, nios2_plt_entry, h->plt.offset, 3);
++ got_address = (sgotplt->output_section->vma + sgotplt->output_offset
++ + got_offset);
++ nios2_elf32_install_imm16 (splt, h->plt.offset, hiadj(got_address));
++ nios2_elf32_install_imm16 (splt, h->plt.offset + 4,
++ got_address & 0xffff);
++
++ /* Fill in the entry in the global offset table. */
++ bfd_put_32 (output_bfd,
++ splt->output_section->vma + splt->output_offset
++ + plt_index * 4, sgotplt->contents + got_offset);
++ }
++
++ /* Fill in the entry in the .rela.plt section. */
++ rela.r_offset = got_address;
++ rela.r_info = ELF32_R_INFO (h->dynindx, R_NIOS2_JUMP_SLOT);
++ rela.r_addend = 0;
++ loc = srela->contents + plt_index * sizeof (Elf32_External_Rela);
++ bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
++
++ if (!h->def_regular)
++ {
++ /* Mark the symbol as undefined, rather than as defined in
++ the .plt section. Leave the value alone. */
++ sym->st_shndx = SHN_UNDEF;
++ /* If the symbol is weak, we do need to clear the value.
++ Otherwise, the PLT entry would provide a definition for
++ the symbol even if the symbol wasn't defined anywhere,
++ and so the symbol would never be NULL. */
++ if (!h->ref_regular_nonweak)
++ sym->st_value = 0;
++ }
++ }
++
++ use_plt = (eh->got_types_used == CALL16_USED &&
++ h->plt.offset != (bfd_vma) -1);
++
++ if (!use_plt && h->got.offset != (bfd_vma) -1
++ && (elf32_nios2_hash_entry (h)->tls_type & GOT_TLS_GD) == 0
++ && (elf32_nios2_hash_entry (h)->tls_type & GOT_TLS_IE) == 0)
++ {
++ asection *sgot;
++ asection *srela;
++ Elf_Internal_Rela rela;
++ bfd_byte *loc;
++ bfd_vma offset;
++
++ /* This symbol has an entry in the global offset table. Set it
++ up. */
++
++ sgot = htab->sgot;
++ srela = htab->srelgot;
++ BFD_ASSERT (sgot != NULL && srela != NULL);
++
++ offset = (h->got.offset & ~(bfd_vma) 1);
++ rela.r_offset = (sgot->output_section->vma
++ + sgot->output_offset + offset);
++
++ /* If this is a -Bsymbolic link, and the symbol is defined
++ locally, we just want to emit a RELATIVE reloc. Likewise if
++ the symbol was forced to be local because of a version file.
++ The entry in the global offset table will already have been
++ initialized in the relocate_section function. */
++
++ if (info->shared && SYMBOL_REFERENCES_LOCAL (info, h))
++ {
++ rela.r_info = ELF32_R_INFO (0, R_NIOS2_RELATIVE);
++ rela.r_addend = bfd_get_signed_32 (output_bfd,
++ (sgot->contents + offset));
++ bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + offset);
++ }
++ else
++ {
++ bfd_put_32 (output_bfd, (bfd_vma) 0,
++ sgot->contents + offset);
++ rela.r_info = ELF32_R_INFO (h->dynindx, R_NIOS2_GLOB_DAT);
++ rela.r_addend = 0;
++ }
++
++ loc = srela->contents;
++ loc += srela->reloc_count++ * sizeof (Elf32_External_Rela);
++ bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
++ }
++
++ if (use_plt && h->got.offset != (bfd_vma) -1)
++ {
++ bfd_vma offset = (h->got.offset & ~(bfd_vma) 1);
++ asection *sgot = htab->sgot;
++ asection *splt = htab->splt;
++ bfd_put_32 (output_bfd, (splt->output_section->vma + splt->output_offset
++ + h->plt.offset), sgot->contents + offset);
++ }
++
++ if (h->needs_copy)
++ {
++ asection *s;
++ Elf_Internal_Rela rela;
++ bfd_byte *loc;
++
++ /* This symbol needs a copy reloc. Set it up. */
++
++ BFD_ASSERT (h->dynindx != -1
++ && (h->root.type == bfd_link_hash_defined
++ || h->root.type == bfd_link_hash_defweak));
++
++ s = bfd_get_section_by_name (h->root.u.def.section->owner,
++ ".rela.bss");
++ BFD_ASSERT (s != NULL);
++
++ rela.r_offset = (h->root.u.def.value
++ + h->root.u.def.section->output_section->vma
++ + h->root.u.def.section->output_offset);
++ rela.r_info = ELF32_R_INFO (h->dynindx, R_NIOS2_COPY);
++ rela.r_addend = 0;
++ loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
++ bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
++ }
++
++ /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
++ if (strcmp (h->root.root.string, "_DYNAMIC") == 0
++ || h == elf_hash_table (info)->hgot)
++ sym->st_shndx = SHN_ABS;
++
++ return TRUE;
++}
++
++/* Finish up the dynamic sections. */
++
++static bfd_boolean
++nios2_elf32_finish_dynamic_sections (bfd * output_bfd,
++ struct bfd_link_info * info)
++{
++ bfd *dynobj;
++ asection *sgotplt;
++ asection *sdyn;
++ struct elf32_nios2_link_hash_table *htab;
++
++ htab = elf32_nios2_hash_table (info);
++
++ dynobj = elf_hash_table (info)->dynobj;
++
++ sgotplt = htab->sgotplt;
++ BFD_ASSERT (sgotplt != NULL);
++ sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
++
++ if (elf_hash_table (info)->dynamic_sections_created)
++ {
++ asection *splt;
++ Elf32_External_Dyn *dyncon, *dynconend;
++
++ splt = htab->splt;
++ BFD_ASSERT (splt != NULL && sdyn != NULL);
++
++ dyncon = (Elf32_External_Dyn *) sdyn->contents;
++ dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size);
++ for (; dyncon < dynconend; dyncon++)
++ {
++ Elf_Internal_Dyn dyn;
++ const char *name;
++ asection *s;
++
++ bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
++
++ switch (dyn.d_tag)
++ {
++ default:
++ break;
++
++ case DT_PLTGOT:
++ name = ".got";
++ goto get_vma;
++ case DT_JMPREL:
++ name = ".rela.plt";
++ get_vma:
++ s = bfd_get_section_by_name (output_bfd, name);
++ BFD_ASSERT (s != NULL);
++ dyn.d_un.d_ptr = s->vma;
++ bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
++ break;
++
++ case DT_PLTRELSZ:
++ s = bfd_get_section_by_name (output_bfd, ".rela.plt");
++ BFD_ASSERT (s != NULL);
++ dyn.d_un.d_val = s->size;
++ bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
++ break;
++
++ case DT_RELASZ:
++ /* The procedure linkage table relocs (DT_JMPREL) should
++ not be included in the overall relocs (DT_RELA).
++ Therefore, we override the DT_RELASZ entry here to
++ make it not include the JMPREL relocs. Since the
++ linker script arranges for .rela.plt to follow all
++ other relocation sections, we don't have to worry
++ about changing the DT_RELA entry. */
++ s = bfd_get_section_by_name (output_bfd, ".rela.plt");
++ if (s != NULL)
++ dyn.d_un.d_val -= s->size;
++ bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
++ break;
++
++ case DT_NIOS2_GP:
++ s = bfd_get_section_by_name (output_bfd, ".got");
++ BFD_ASSERT (s != NULL);
++ dyn.d_un.d_ptr = s->vma + 0x7ff0;
++ bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
++ break;
++ }
++ }
++
++ /* Fill in the first entry in the procedure linkage table. */
++ if (splt->size > 0)
++ {
++ bfd_vma got_address = (sgotplt->output_section->vma +
++ sgotplt->output_offset);
++ if (info->shared)
++ {
++ bfd_vma corrected = got_address - (splt->output_section->vma +
++ splt->output_offset + 4);
++ nios2_elf32_install_data (splt, nios2_so_plt0_entry, 0, 6);
++ nios2_elf32_install_imm16 (splt, 4, hiadj (corrected));
++ nios2_elf32_install_imm16 (splt, 12, (corrected & 0xffff) + 4);
++ nios2_elf32_install_imm16 (splt, 16, (corrected & 0xffff) + 8);
++
++ elf_section_data (splt->output_section)->this_hdr.sh_entsize
++ = 24;
++ }
++ else
++ {
++ /* Divide by 4 here, not 3 because we already corrected for the
++ res_N branches. */
++ bfd_vma res_size = (splt->size - 28) / 4;
++ bfd_vma res_start = (splt->output_section->vma +
++ splt->output_offset);
++ bfd_vma res_offset;
++
++ for (res_offset = 0; res_offset < res_size; res_offset += 4)
++ bfd_put_32 (output_bfd,
++ 6 | ((res_size - (res_offset + 4)) << 6),
++ splt->contents + res_offset);
++
++ nios2_elf32_install_data (splt, nios2_plt0_entry, res_size, 7);
++ nios2_elf32_install_imm16 (splt, res_size, hiadj (res_start));
++ nios2_elf32_install_imm16 (splt, res_size + 4,
++ res_start & 0xffff);
++ nios2_elf32_install_imm16 (splt, res_size + 12,
++ hiadj (got_address));
++ nios2_elf32_install_imm16 (splt, res_size + 16,
++ (got_address & 0xffff) + 4);
++ nios2_elf32_install_imm16 (splt, res_size + 20,
++ (got_address & 0xffff) + 8);
++
++ elf_section_data (splt->output_section)->this_hdr.sh_entsize
++ = 28 + res_size;
++ }
++ }
++ }
++ /* Fill in the first three entries in the global offset table. */
++ if (sgotplt->size > 0)
++ {
++ if (sdyn == NULL)
++ bfd_put_32 (output_bfd, (bfd_vma) 0, sgotplt->contents);
++ else
++ bfd_put_32 (output_bfd,
++ sdyn->output_section->vma + sdyn->output_offset,
++ sgotplt->contents);
++ bfd_put_32 (output_bfd, (bfd_vma) 0, sgotplt->contents + 4);
++ bfd_put_32 (output_bfd, (bfd_vma) 0, sgotplt->contents + 8);
++ }
++
++ elf_section_data (sgotplt->output_section)->this_hdr.sh_entsize = 4;
++
++ return TRUE;
++}
++
++/* Adjust a symbol defined by a dynamic object and referenced by a
++ regular object. The current definition is in some section of the
++ dynamic object, but we're not including those sections. We have to
++ change the definition to something the rest of the link can
++ understand. */
++
++static bfd_boolean
++nios2_elf32_adjust_dynamic_symbol (struct bfd_link_info * info,
++ struct elf_link_hash_entry * h)
++{
++ struct elf32_nios2_link_hash_table *htab;
++ bfd *dynobj;
++ asection *s;
++ unsigned align2;
++
++ htab = elf32_nios2_hash_table (info);
++ dynobj = elf_hash_table (info)->dynobj;
++
++ /* Make sure we know what is going on here. */
++ BFD_ASSERT (dynobj != NULL
++ && (h->needs_plt
++ || h->u.weakdef != NULL
++ || (h->def_dynamic
++ && h->ref_regular
++ && !h->def_regular)));
++
++ /* If this is a function, put it in the procedure linkage table. We
++ will fill in the contents of the procedure linkage table later,
++ when we know the address of the .got section. */
++ if (h->type == STT_FUNC
++ || h->needs_plt)
++ {
++ if (h->plt.refcount <= 0
++ || SYMBOL_CALLS_LOCAL (info, h)
++ || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
++ && h->root.type == bfd_link_hash_undefweak))
++ {
++ /* This case can occur if we saw a PLT reloc in an input
++ file, but the symbol was never referred to by a dynamic
++ object, or if all references were garbage collected. In
++ such a case, we don't actually need to build a procedure
++ linkage table, and we can just do a PCREL reloc instead. */
++ h->plt.offset = (bfd_vma) -1;
++ h->needs_plt = 0;
++ }
++
++ return TRUE;
++ }
++
++ /* Reinitialize the plt offset now that it is not used as a reference
++ count any more. */
++ h->plt.offset = (bfd_vma) -1;
++
++ /* If this is a weak symbol, and there is a real definition, the
++ processor independent code will have arranged for us to see the
++ real definition first, and we can just use the same value. */
++ if (h->u.weakdef != NULL)
++ {
++ BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
++ || h->u.weakdef->root.type == bfd_link_hash_defweak);
++ h->root.u.def.section = h->u.weakdef->root.u.def.section;
++ h->root.u.def.value = h->u.weakdef->root.u.def.value;
++ return TRUE;
++ }
++
++ /* If there are no non-GOT references, we do not need a copy
++ relocation. */
++ if (!h->non_got_ref)
++ return TRUE;
++
++ /* This is a reference to a symbol defined by a dynamic object which
++ is not a function. */
++
++ /* If we are creating a shared library, we must presume that the
++ only references to the symbol are via the global offset table.
++ For such cases we need not do anything here; the relocations will
++ be handled correctly by relocate_section. */
++ if (info->shared)
++ return TRUE;
++
++ if (h->size == 0)
++ {
++ (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
++ h->root.root.string);
++ return TRUE;
++ }
++
++ /* We must allocate the symbol in our .dynbss section, which will
++ become part of the .bss section of the executable. There will be
++ an entry for this symbol in the .dynsym section. The dynamic
++ object will contain position independent code, so all references
++ from the dynamic object to this symbol will go through the global
++ offset table. The dynamic linker will use the .dynsym entry to
++ determine the address it must put in the global offset table, so
++ both the dynamic object and the regular object will refer to the
++ same memory location for the variable. */
++
++ s = htab->sdynbss;
++ BFD_ASSERT (s != NULL);
++
++ /* We must generate a R_NIOS2_COPY reloc to tell the dynamic linker to
++ copy the initial value out of the dynamic object and into the
++ runtime process image. We need to remember the offset into the
++ .rela.bss section we are going to use. */
++ if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
++ {
++ asection *srel;
++
++ srel = htab->srelbss;
++ BFD_ASSERT (srel != NULL);
++ srel->size += sizeof (Elf32_External_Rela);
++ h->needs_copy = 1;
++ }
++
++ align2 = bfd_log2 (h->size);
++ if (align2 > h->root.u.def.section->alignment_power)
++ align2 = h->root.u.def.section->alignment_power;
++
++ /* align dynbss */
++ s->size = BFD_ALIGN (s->size, (bfd_size_type)1 << align2);
++ if (align2 > bfd_get_section_alignment (dynobj, s)
++ && !bfd_set_section_alignment (dynobj, s, align2))
++ return FALSE;
++
++ /* Define the symbol as being at this point in the section. */
++ h->root.u.def.section = s;
++ h->root.u.def.value = s->size;
++
++ /* Increment the section size to make room for the symbol. */
++ s->size += h->size;
++
++ return TRUE;
++}
++
++static bfd_boolean
++adjust_dynrelocs (struct elf_link_hash_entry *h, PTR inf)
++{
++ struct bfd_link_info *info;
++ struct elf32_nios2_link_hash_table *htab;
++
++ if (h->root.type == bfd_link_hash_indirect)
++ return TRUE;
++
++ if (h->root.type == bfd_link_hash_warning)
++ /* When warning symbols are created, they **replace** the "real"
++ entry in the hash table, thus we never get to see the real
++ symbol in a hash traversal. So look at it now. */
++ h = (struct elf_link_hash_entry *) h->root.u.i.link;
++
++ info = (struct bfd_link_info *) inf;
++ htab = elf32_nios2_hash_table (info);
++
++ if (h->plt.offset != (bfd_vma)-1)
++ h->plt.offset += htab->res_n_size;
++ if (htab->splt == h->root.u.def.section)
++ h->root.u.def.value += htab->res_n_size;
++
++ return TRUE;
++}
++
++/* Allocate space in .plt, .got and associated reloc sections for
++ dynamic relocs. */
++
++static bfd_boolean
++allocate_dynrelocs (struct elf_link_hash_entry *h, PTR inf)
++{
++ struct bfd_link_info *info;
++ struct elf32_nios2_link_hash_table *htab;
++ struct elf32_nios2_link_hash_entry *eh;
++ struct elf32_nios2_dyn_relocs *p;
++ int use_plt;
++
++ if (h->root.type == bfd_link_hash_indirect)
++ return TRUE;
++
++ if (h->root.type == bfd_link_hash_warning)
++ /* When warning symbols are created, they **replace** the "real"
++ entry in the hash table, thus we never get to see the real
++ symbol in a hash traversal. So look at it now. */
++ h = (struct elf_link_hash_entry *) h->root.u.i.link;
++
++ info = (struct bfd_link_info *) inf;
++ htab = elf32_nios2_hash_table (info);
++
++ if (htab->root.dynamic_sections_created
++ && h->plt.refcount > 0)
++ {
++ /* Make sure this symbol is output as a dynamic symbol.
++ Undefined weak syms won't yet be marked as dynamic. */
++ if (h->dynindx == -1
++ && !h->forced_local)
++ {
++ if (! bfd_elf_link_record_dynamic_symbol (info, h))
++ return FALSE;
++ }
++
++ if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h))
++ {
++ asection *s = htab->splt;
++
++ /* Allocate room for the header. */
++ if (s->size == 0)
++ {
++ if (info->shared)
++ s->size = 24;
++ else
++ s->size = 28;
++ }
++
++ h->plt.offset = s->size;
++
++ /* If this symbol is not defined in a regular file, and we are
++ not generating a shared library, then set the symbol to this
++ location in the .plt. This is required to make function
++ pointers compare as equal between the normal executable and
++ the shared library. */
++ if (! info->shared
++ && !h->def_regular)
++ {
++ h->root.u.def.section = s;
++ h->root.u.def.value = h->plt.offset;
++ }
++
++ /* Make room for this entry. */
++ s->size += 12;
++
++ /* We also need to make an entry in the .rela.plt section. */
++ htab->srelplt->size += sizeof (Elf32_External_Rela);
++
++ /* And the .got.plt section. */
++ htab->sgotplt->size += 4;
++ }
++ else
++ {
++ h->plt.offset = (bfd_vma) -1;
++ h->needs_plt = 0;
++ }
++ }
++ else
++ {
++ h->plt.offset = (bfd_vma) -1;
++ h->needs_plt = 0;
++ }
++
++ eh = (struct elf32_nios2_link_hash_entry *) h;
++ use_plt = (eh->got_types_used == CALL16_USED &&
++ h->plt.offset != (bfd_vma) -1);
++
++ if (h->got.refcount > 0)
++ {
++ asection *s;
++ bfd_boolean dyn;
++ int tls_type = eh->tls_type;
++ int indx;
++
++ /* Make sure this symbol is output as a dynamic symbol.
++ Undefined weak syms won't yet be marked as dynamic. */
++ if (h->dynindx == -1
++ && !h->forced_local)
++ {
++ if (! bfd_elf_link_record_dynamic_symbol (info, h))
++ return FALSE;
++ }
++
++ s = htab->sgot;
++ h->got.offset = s->size;
++
++ if (tls_type == GOT_UNKNOWN)
++ abort ();
++
++ if (tls_type == GOT_NORMAL)
++ /* Non-TLS symbols need one GOT slot. */
++ s->size += 4;
++ else
++ {
++ if (tls_type & GOT_TLS_GD)
++ /* R_NIOS2_TLS_GD16 needs 2 consecutive GOT slots. */
++ s->size += 8;
++ if (tls_type & GOT_TLS_IE)
++ /* R_NIOS2_TLS_IE16 needs one GOT slot. */
++ s->size += 4;
++ }
++
++ dyn = htab->root.dynamic_sections_created;
++
++ indx = 0;
++ if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
++ && (!info->shared
++ || !SYMBOL_REFERENCES_LOCAL (info, h)))
++ indx = h->dynindx;
++
++ if (tls_type != GOT_NORMAL
++ && (info->shared || indx != 0)
++ && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
++ || h->root.type != bfd_link_hash_undefweak))
++ {
++ if (tls_type & GOT_TLS_IE)
++ htab->srelgot->size += sizeof (Elf32_External_Rela);
++
++ if (tls_type & GOT_TLS_GD)
++ htab->srelgot->size += sizeof (Elf32_External_Rela);
++
++ if ((tls_type & GOT_TLS_GD) && indx != 0)
++ htab->srelgot->size += sizeof (Elf32_External_Rela);
++ }
++ else if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
++ || h->root.type != bfd_link_hash_undefweak)
++ && !use_plt && (info->shared
++ || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)))
++ htab->srelgot->size += sizeof (Elf32_External_Rela);
++ }
++ else
++ h->got.offset = (bfd_vma) -1;
++
++ if (eh->dyn_relocs == NULL)
++ return TRUE;
++
++ /* In the shared -Bsymbolic case, discard space allocated for
++ dynamic pc-relative relocs against symbols which turn out to be
++ defined in regular objects. For the normal shared case, discard
++ space for pc-relative relocs that have become local due to symbol
++ visibility changes. */
++
++ if (info->shared)
++ {
++ if (h->def_regular
++ && (h->forced_local
++ || info->symbolic))
++ {
++ struct elf32_nios2_dyn_relocs **pp;
++
++ for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
++ {
++ p->count -= p->pc_count;
++ p->pc_count = 0;
++ if (p->count == 0)
++ *pp = p->next;
++ else
++ pp = &p->next;
++ }
++ }
++
++ /* Also discard relocs on undefined weak syms with non-default
++ visibility. */
++ if (eh->dyn_relocs != NULL
++ && h->root.type == bfd_link_hash_undefweak)
++ {
++ if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
++ eh->dyn_relocs = NULL;
++
++ /* Make sure undefined weak symbols are output as a dynamic
++ symbol in PIEs. */
++ else if (h->dynindx == -1
++ && !h->forced_local)
++ {
++ if (! bfd_elf_link_record_dynamic_symbol (info, h))
++ return FALSE;
++ }
++ }
++ }
++ else
++ {
++ /* For the non-shared case, discard space for relocs against
++ symbols which turn out to need copy relocs or are not
++ dynamic. */
++
++ if (!h->non_got_ref
++ && ((h->def_dynamic
++ && !h->def_regular)
++ || (htab->root.dynamic_sections_created
++ && (h->root.type == bfd_link_hash_undefweak
++ || h->root.type == bfd_link_hash_undefined))))
++ {
++ /* Make sure this symbol is output as a dynamic symbol.
++ Undefined weak syms won't yet be marked as dynamic. */
++ if (h->dynindx == -1
++ && !h->forced_local)
++ {
++ if (! bfd_elf_link_record_dynamic_symbol (info, h))
++ return FALSE;
++ }
++
++ /* If that succeeded, we know we'll be keeping all the
++ relocs. */
++ if (h->dynindx != -1)
++ goto keep;
++ }
++
++ eh->dyn_relocs = NULL;
++
++ keep: ;
++ }
++
++ /* Finally, allocate space. */
++ for (p = eh->dyn_relocs; p != NULL; p = p->next)
++ {
++ asection *sreloc = elf_section_data (p->sec)->sreloc;
++ sreloc->size += p->count * sizeof (Elf32_External_Rela);
++ }
++
++ return TRUE;
++}
++
++/* Set the sizes of the dynamic sections. */
++
++static bfd_boolean
++nios2_elf32_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
++ struct bfd_link_info *info)
++{
++ bfd *dynobj;
++ asection *s;
++ bfd_boolean plt;
++ bfd_boolean got;
++ bfd_boolean relocs;
++ bfd *ibfd;
++ struct elf32_nios2_link_hash_table *htab;
++
++ htab = elf32_nios2_hash_table (info);
++ dynobj = elf_hash_table (info)->dynobj;
++ BFD_ASSERT (dynobj != NULL);
++
++ htab->res_n_size = 0;
++ if (elf_hash_table (info)->dynamic_sections_created)
++ {
++ /* Set the contents of the .interp section to the interpreter. */
++ if (info->executable)
++ {
++ s = bfd_get_section_by_name (dynobj, ".interp");
++ BFD_ASSERT (s != NULL);
++ s->size = sizeof ELF_DYNAMIC_INTERPRETER;
++ s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
++ }
++ }
++ else
++ {
++ /* We may have created entries in the .rela.got section.
++ However, if we are not creating the dynamic sections, we will
++ not actually use these entries. Reset the size of .rela.got,
++ which will cause it to get stripped from the output file
++ below. */
++ s = htab->srelgot;
++ if (s != NULL)
++ s->size = 0;
++ }
++
++ /* Set up .got offsets for local syms, and space for local dynamic
++ relocs. */
++ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
++ {
++ bfd_signed_vma *local_got;
++ bfd_signed_vma *end_local_got;
++ char *local_tls_type;
++ bfd_size_type locsymcount;
++ Elf_Internal_Shdr *symtab_hdr;
++ asection *srel;
++
++ if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
++ continue;
++
++ for (s = ibfd->sections; s != NULL; s = s->next)
++ {
++ struct elf32_nios2_dyn_relocs *p;
++
++ for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
++ {
++ if (!bfd_is_abs_section (p->sec)
++ && bfd_is_abs_section (p->sec->output_section))
++ {
++ /* Input section has been discarded, either because
++ it is a copy of a linkonce section or due to
++ linker script /DISCARD/, so we'll be discarding
++ the relocs too. */
++ }
++ else if (p->count != 0)
++ {
++ srel = elf_section_data (p->sec)->sreloc;
++ srel->size += p->count * sizeof (Elf32_External_Rela);
++ if ((p->sec->output_section->flags & SEC_READONLY) != 0)
++ info->flags |= DF_TEXTREL;
++ }
++ }
++ }
++
++ local_got = elf_local_got_refcounts (ibfd);
++ if (!local_got)
++ continue;
++
++ symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
++ locsymcount = symtab_hdr->sh_info;
++ end_local_got = local_got + locsymcount;
++ local_tls_type = elf32_nios2_local_got_tls_type (ibfd);
++ s = htab->sgot;
++ srel = htab->srelgot;
++ for (; local_got < end_local_got; ++local_got, ++local_tls_type)
++ {
++ if (*local_got > 0)
++ {
++ *local_got = s->size;
++ if (*local_tls_type & GOT_TLS_GD)
++ /* TLS_GD relocs need an 8-byte structure in the GOT. */
++ s->size += 8;
++ if (*local_tls_type & GOT_TLS_IE)
++ s->size += 4;
++ if (*local_tls_type == GOT_NORMAL)
++ s->size += 4;
++
++ if (info->shared || *local_tls_type == GOT_TLS_GD)
++ srel->size += sizeof (Elf32_External_Rela);
++ }
++ else
++ *local_got = (bfd_vma) -1;
++ }
++ }
++
++ if (htab->tls_ldm_got.refcount > 0)
++ {
++ /* Allocate two GOT entries and one dynamic relocation (if necessary)
++ for R_NIOS2_TLS_LDM16 relocations. */
++ htab->tls_ldm_got.offset = htab->sgot->size;
++ htab->sgot->size += 8;
++ if (info->shared)
++ htab->srelgot->size += sizeof (Elf32_External_Rela);
++ }
++ else
++ htab->tls_ldm_got.offset = -1;
++
++ /* Allocate global sym .plt and .got entries, and space for global
++ sym dynamic relocs. */
++ elf_link_hash_traverse (& htab->root, allocate_dynrelocs, info);
++
++ /* The check_relocs and adjust_dynamic_symbol entry points have
++ determined the sizes of the various dynamic sections. Allocate
++ memory for them. */
++ plt = FALSE;
++ got = FALSE;
++ relocs = FALSE;
++ for (s = dynobj->sections; s != NULL; s = s->next)
++ {
++ const char *name;
++
++ if ((s->flags & SEC_LINKER_CREATED) == 0)
++ continue;
++
++ /* It's OK to base decisions on the section name, because none
++ of the dynobj section names depend upon the input files. */
++ name = bfd_get_section_name (dynobj, s);
++
++ if (strcmp (name, ".plt") == 0)
++ {
++ /* Remember whether there is a PLT. */
++ plt = s->size != 0;
++
++ /* Correct for the number of res_N branches. */
++ if (plt && !info->shared)
++ {
++ htab->res_n_size = (s->size-28) / 3;
++ s->size += htab->res_n_size;
++ }
++ }
++ else if (CONST_STRNEQ (name, ".rela"))
++ {
++ if (s->size != 0)
++ {
++ relocs = TRUE;
++
++ /* We use the reloc_count field as a counter if we need
++ to copy relocs into the output file. */
++ s->reloc_count = 0;
++ }
++ }
++ else if (CONST_STRNEQ (name, ".got"))
++ got = s->size != 0;
++ else if (strcmp (name, ".dynbss") != 0)
++ {
++ /* It's not one of our sections, so don't allocate space. */
++ continue;
++ }
++
++ if (s->size == 0)
++ {
++ /* If we don't need this section, strip it from the
++ output file. This is mostly to handle .rela.bss and
++ .rela.plt. We must create both sections in
++ create_dynamic_sections, because they must be created
++ before the linker maps input sections to output
++ sections. The linker does that before
++ adjust_dynamic_symbol is called, and it is that
++ function which decides whether anything needs to go
++ into these sections. */
++ s->flags |= SEC_EXCLUDE;
++ continue;
++ }
++
++ if ((s->flags & SEC_HAS_CONTENTS) == 0)
++ continue;
++
++ /* Allocate memory for the section contents. */
++ /* FIXME: This should be a call to bfd_alloc not bfd_zalloc.
++ Unused entries should be reclaimed before the section's contents
++ are written out, but at the moment this does not happen. Thus in
++ order to prevent writing out garbage, we initialise the section's
++ contents to zero. */
++ s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
++ if (s->contents == NULL)
++ return FALSE;
++ }
++
++ /* Adjust dynamic symbols that point to the plt to account for the
++ now-known number of resN slots. */
++ if (htab->res_n_size)
++ elf_link_hash_traverse (& htab->root, adjust_dynrelocs, info);
++
++ if (elf_hash_table (info)->dynamic_sections_created)
++ {
++ /* Add some entries to the .dynamic section. We fill in the
++ values later, in elf_nios2_finish_dynamic_sections, but we
++ must add the entries now so that we get the correct size for
++ the .dynamic section. The DT_DEBUG entry is filled in by the
++ dynamic linker and used by the debugger. */
++#define add_dynamic_entry(TAG, VAL) \
++ _bfd_elf_add_dynamic_entry (info, TAG, VAL)
++
++ if (!info->shared)
++ {
++ if (!add_dynamic_entry (DT_DEBUG, 0))
++ return FALSE;
++ }
++
++ if (got)
++ if (!add_dynamic_entry (DT_PLTGOT, 0))
++ return FALSE;
++
++ if (plt)
++ if (!add_dynamic_entry (DT_PLTRELSZ, 0)
++ || !add_dynamic_entry (DT_PLTREL, DT_RELA)
++ || !add_dynamic_entry (DT_JMPREL, 0))
++ return FALSE;
++
++ if (relocs)
++ {
++ if (!add_dynamic_entry (DT_RELA, 0)
++ || !add_dynamic_entry (DT_RELASZ, 0)
++ || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))
++ return FALSE;
++ }
++
++ if (!info->shared)
++ {
++ if (!add_dynamic_entry (DT_NIOS2_GP, 0))
++ return FALSE;
++ }
++
++ if ((info->flags & DF_TEXTREL) != 0)
++ {
++ if (!add_dynamic_entry (DT_TEXTREL, 0))
++ return FALSE;
++ }
++ }
++#undef add_dynamic_entry
++
++ return TRUE;
++}
++
++/* Create a Nios II elf linker hash table. */
++
++static struct bfd_link_hash_table *
++nios2_elf32_link_hash_table_create (bfd *abfd)
++{
++ struct elf32_nios2_link_hash_table *ret;
++ bfd_size_type amt = sizeof (struct elf32_nios2_link_hash_table);
++
++ ret = bfd_malloc (amt);
++ if (ret == NULL)
++ return NULL;
++
++ if (!_bfd_elf_link_hash_table_init (& ret->root, abfd,
++ link_hash_newfunc,
++ sizeof (struct
++ elf32_nios2_link_hash_entry)))
++ {
++ free (ret);
++ return NULL;
++ }
++
++ ret->sgot = NULL;
++ ret->sgotplt = NULL;
++ ret->srelgot = NULL;
++ ret->splt = NULL;
++ ret->srelplt = NULL;
++ ret->sdynbss = NULL;
++ ret->srelbss = NULL;
++ ret->sbss = NULL;
++ ret->tls_ldm_got.refcount = 0;
++ ret->sym_sec.abfd = NULL;
++ return &ret->root.root;
++}
++
++static enum elf_reloc_type_class
++nios2_elf32_reloc_type_class (const Elf_Internal_Rela *rela)
++{
++ switch ((int) ELF32_R_TYPE (rela->r_info))
++ {
++ case R_NIOS2_RELATIVE:
++ return reloc_class_relative;
++ case R_NIOS2_JUMP_SLOT:
++ return reloc_class_plt;
++ case R_NIOS2_COPY:
++ return reloc_class_copy;
++ default:
++ return reloc_class_normal;
++ }
++}
++
++/* Return 1 if target is one of ours. */
++
++static bfd_boolean
++is_nios2_elf_target (const struct bfd_target *targ)
++{
++ return (targ == &bfd_elf32_littlenios2_vec
++ || targ == &bfd_elf32_bignios2_vec);
++}
++
++/* Hook called by the linker routine which adds symbols from an object
++ file. We use it to put .comm items in .sbss, and not .bss. */
++
++static bfd_boolean
++nios2_elf_add_symbol_hook (bfd *abfd,
++ struct bfd_link_info *info,
++ Elf_Internal_Sym *sym,
++ const char **namep ATTRIBUTE_UNUSED,
++ flagword *flagsp ATTRIBUTE_UNUSED,
++ asection **secp,
++ bfd_vma *valp)
++{
++ bfd *dynobj;
++
++ if (sym->st_shndx == SHN_COMMON
++ && !info->relocatable
++ && is_nios2_elf (info->output_bfd)
++ && sym->st_size <= elf_gp_size (abfd))
++ {
++ /* Common symbols less than or equal to -G nn bytes are automatically
++ put into .sbss. */
++ struct elf32_nios2_link_hash_table *htab;
++
++ htab = elf32_nios2_hash_table (info);
++ if (htab->sbss == NULL)
++ {
++ flagword flags = SEC_IS_COMMON | SEC_LINKER_CREATED;
++
++ dynobj = elf_hash_table (info)->dynobj;
++ if (!dynobj)
++ dynobj = abfd;
++
++ htab->sbss = bfd_make_section_anyway_with_flags (dynobj, ".sbss",
++ flags);
++ if (htab->sbss == NULL)
++ return FALSE;
++ }
++
++ *secp = htab->sbss;
++ *valp = sym->st_size;
++ }
++
++ if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
++ elf_tdata (info->output_bfd)->has_ifunc_symbols = TRUE;
++
++ return TRUE;
++}
++
++/* Decide whether to attempt to turn absptr or lsda encodings in
++ shared libraries into pcrel within the given input section. */
++
++static bfd_boolean
++nios2_elf32_can_make_relative_eh_frame(bfd *input_bfd ATTRIBUTE_UNUSED,
++ struct bfd_link_info *info
++ ATTRIBUTE_UNUSED,
++ asection *eh_frame_section
++ ATTRIBUTE_UNUSED)
++{
++ /* We can't use PC-relative encodings in the .eh_frame section. */
++ return FALSE;
++}
++
++#define ELF_ARCH bfd_arch_nios2
++#define ELF_MACHINE_CODE EM_ALTERA_NIOS2
++
++/* The Nios II MMU uses a 4K page size. */
++
++#define ELF_MAXPAGESIZE 0x1000
++
++#define bfd_elf32_bfd_link_hash_table_create \
++ nios2_elf32_link_hash_table_create
++
++/* Relocation table lookup macros. */
++
++#define bfd_elf32_bfd_reloc_type_lookup nios2_elf32_bfd_reloc_type_lookup
++#define bfd_elf32_bfd_reloc_name_lookup nios2_elf32_bfd_reloc_name_lookup
++
++/* JUMP_TABLE_LINK macros. */
++
++#define bfd_elf32_bfd_relax_section nios2_elf32_relax_section
++
++/* elf_info_to_howto (using RELA relocations). */
++
++#define elf_info_to_howto nios2_elf32_info_to_howto
++
++/* elf backend functions. */
++
++#define elf_backend_can_gc_sections 1
++#define elf_backend_can_refcount 1
++#define elf_backend_plt_readonly 1
++#define elf_backend_want_got_plt 1
++
++#define elf_backend_relocate_section nios2_elf32_relocate_section
++#define elf_backend_section_from_shdr nios2_elf32_section_from_shdr
++#define elf_backend_section_flags nios2_elf32_section_flags
++#define elf_backend_fake_sections nios2_elf32_fake_sections
++#define elf_backend_check_relocs nios2_elf32_check_relocs
++
++#define elf_backend_gc_mark_hook nios2_elf32_gc_mark_hook
++#define elf_backend_gc_sweep_hook nios2_elf32_gc_sweep_hook
++#define elf_backend_create_dynamic_sections \
++ nios2_elf32_create_dynamic_sections
++#define elf_backend_finish_dynamic_symbol nios2_elf32_finish_dynamic_symbol
++#define elf_backend_finish_dynamic_sections \
++ nios2_elf32_finish_dynamic_sections
++#define elf_backend_adjust_dynamic_symbol nios2_elf32_adjust_dynamic_symbol
++#define elf_backend_reloc_type_class nios2_elf32_reloc_type_class
++#define elf_backend_size_dynamic_sections nios2_elf32_size_dynamic_sections
++#define elf_backend_add_symbol_hook nios2_elf_add_symbol_hook
++#define elf_backend_copy_indirect_symbol nios2_elf32_copy_indirect_symbol
++
++#define elf_backend_grok_prstatus nios2_grok_prstatus
++#define elf_backend_grok_psinfo nios2_grok_psinfo
++
++#undef elf_backend_can_make_relative_eh_frame
++#define elf_backend_can_make_relative_eh_frame \
++ nios2_elf32_can_make_relative_eh_frame
++
++/* Support for SGI-ish mips targets. */
++#define TARGET_LITTLE_SYM bfd_elf32_littlenios2_vec
++#define TARGET_LITTLE_NAME "elf32-littlenios2"
++#define TARGET_BIG_SYM bfd_elf32_bignios2_vec
++#define TARGET_BIG_NAME "elf32-bignios2"
++
++#define elf_backend_got_header_size 12
++
++#include "elf32-target.h"
+Index: binutils-2.20.1/gas/config/tc-nios2.c
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/config/tc-nios2.c
+@@ -0,0 +1,3361 @@
++/* NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. */
++/* tc-nios2.c -- assemble code for a New Jersey processor.
++
++ Copyright (C) 2003
++ by Nigel Gray (ngray@altera.com).
++
++
++ This file is part of GAS.
++
++ GAS is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2, or (at your option)
++ any later version.
++
++ GAS is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with GAS; see the file COPYING. If not, write to the Free
++ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
++ 02111-1307, USA. */
++
++
++#include <stdio.h>
++#include <limits.h>
++#include <string.h>
++#include <stdlib.h>
++#include "as.h"
++#include "opcode/nios2.h"
++#include "elf/nios2.h"
++#include "tc-nios2.h"
++#include "bfd.h"
++#include "dwarf2dbg.h"
++#include "subsegs.h"
++#include "safe-ctype.h"
++#include "dw2gencfi.h"
++
++/* We can choose our endianness at run-time, regardless of configuration. */
++extern int target_big_endian;
++
++#ifndef OBJ_ELF
++ /* We are not supporting any other target
++ so we throw a compile time error. */
++OBJ_ELF not defined
++#endif
++ typedef enum
++{
++ relax_section = 0,
++ relax_none,
++ relax_all
++}
++relax_optionT;
++
++
++/* Struct contains all assembler options set with .set. */
++struct
++{
++ /* .set noat -> noat = 1 allows assembly code to use at without warning
++ and macro expansions will generate a warning.
++ .set at -> noat = 0, assembly code using at will warn
++ macro expansions will not generate warnings. */
++ bfd_boolean noat;
++
++ /* .set nobreak -> nobreak = 1 allows assembly code to use ba,bt without
++ warning.
++ .set break -> nobreak = 0, assembly code using ba,bt will warn. */
++ bfd_boolean nobreak;
++
++ /* .cmd line option -relax-all allows all branches and calls to be replaced
++ with longer versions.
++ -no-relax inhibits branch/call conversion.
++ default value is relax_section, which relaxes branches within a section.
++ */
++ relax_optionT relax;
++
++}
++nios2_as_options =
++{
++FALSE, FALSE, relax_section};
++
++
++typedef struct nios2_insn_reloc
++{
++ /* Any expression in the instruction is parsed into
++ this field which is passed to fix_new_exp() to
++ generate a fixup. */
++ expressionS reloc_expression;
++
++ /* The type of the relocation to be applied. */
++ bfd_reloc_code_real_type reloc_type;
++
++ /* pc relative. */
++ unsigned int reloc_pcrel;
++
++ /* The next relocation to be applied to the instruction. */
++ struct nios2_insn_reloc *reloc_next;
++}
++nios2_insn_relocS;
++
++
++/* ------------------------------------------------------------------
++ This struct is used by the functions in tc-nios2.c to assemble an
++ instruction
++ ------------------------------------------------------------------*/
++
++typedef struct nios2_insn_info
++{
++ /* Assembled instruction. */
++ unsigned long insn_code;
++ /* Pointer to the relevant bit of the opcode table. */
++ const struct nios2_opcode *insn_nios2_opcode;
++ /* After parsing ptrs to the tokens in the instruction fill this array
++ it is terminated with a null pointer (hence the first +1).
++ The second +1 is because in some parts of the code the opcode
++ is not counted as a token, but still placed in this array. */
++ const char *insn_tokens[NIOS2_MAX_INSN_TOKENS + 1 + 1];
++
++ /* This holds information used to generate fixups
++ and eventually relocations if it is not null. */
++ nios2_insn_relocS *insn_reloc;
++}
++nios2_insn_infoS;
++
++
++/* This struct associates an argument assemble function with
++ an argument syntax string. Used by the assembler to find out
++ how to parse and assemble a set of instruction operands and
++ return the instruction field values. */
++
++typedef struct nios2_arg_info
++{
++ const char *args;
++ void (*assemble_args_func) (nios2_insn_infoS * insn_info);
++}
++nios2_arg_infoS;
++
++/* This struct is used to convert New Jersey pseudo-ops into the
++ corresponding real op. */
++typedef struct nios2_ps_insn_info
++{
++ const char *pseudo_insn;
++ const char *insn;
++ const char *arg_modifier;
++ void (*arg_modifer_func) (const char *arg, char **parsedArgs, int numArg,
++ int startIndex);
++ int num;
++ int index;
++}
++nios2_ps_insn_infoS;
++
++
++
++/* Function prototypes. */
++static void NIOS2_CHECK_ASSEMBLY (unsigned int opcode,
++ const char *exp_opcode);
++static void s_nios2_sdata (int);
++void nios2_assemble_args_dst (nios2_insn_infoS * insn_info);
++void nios2_assemble_args_tsi (nios2_insn_infoS * insn_info);
++void nios2_assemble_args_tsu (nios2_insn_infoS * insn_info);
++void nios2_assemble_args_o (nios2_insn_infoS * insn_info);
++void nios2_assemble_args_m (nios2_insn_infoS * insn_info);
++void nios2_assemble_args_s (nios2_insn_infoS * insn_info);
++void nios2_assemble_args_tis (nios2_insn_infoS * insn_info);
++void nios2_assemble_args_dc (nios2_insn_infoS * insn_info);
++void nios2_assemble_args_cs (nios2_insn_infoS * insn_info);
++void nios2_assemble_args_ldst (nios2_insn_infoS * insn_info);
++void nios2_assemble_args_none (nios2_insn_infoS * insn_info);
++void nios2_assemble_args_dsj (nios2_insn_infoS * insn_info);
++void nios2_assemble_args_is (nios2_insn_infoS * insn_info);
++void nios2_assemble_args_sto (nios2_insn_infoS * insn_info);
++void nios2_assemble_args_d (nios2_insn_infoS * insn_info);
++void nios2_assemble_args_b (nios2_insn_infoS * insn_info);
++
++nios2_insn_relocS *nios2_insn_reloc_new (bfd_reloc_code_real_type reloc_type,
++ unsigned int pcrel);
++void nios2_insn_reloc_destroy (nios2_insn_relocS * reloc);
++unsigned long nios2_assemble_expression (const char *exprstr,
++ nios2_insn_infoS * insn,
++ nios2_insn_relocS * prev_reloc,
++ bfd_reloc_code_real_type reloc_type,
++ unsigned int pcrel);
++char *nios2_consume_separator (char *argStr, const char *separator);
++char *nios2_consume_arg (char *argStr, const char *argType);
++void nios2_parse_args (char *argStr, const char *parseStr, char **parsedArgs);
++
++void nios2_modify_arg (const char *modifier, char **parsedArgs, int unused,
++ int index);
++void nios2_append_arg (const char *append, char **parsedArgs, int numAppend,
++ int startIndex);
++void nios2_insert_arg (const char *insert, char **parsedArgs, int numInsert,
++ int startIndex);
++void nios2_swap_args (const char *unused, char **parsedArgs, int index_1,
++ int index_2);
++void nios2_negate_arg (const char *modifier ATTRIBUTE_UNUSED,
++ char **parsedArgs, int unused ATTRIBUTE_UNUSED,
++ int index);
++void nios2_translate_pseudo_insn (nios2_insn_infoS * insn);
++void md_apply_fix (fixS * fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED);
++valueT md_chars_to_number (char *buf, int n);
++void md_number_to_imm (char *buf, valueT val, int n);
++void md_number_to_disp (char *buf, valueT val, int n);
++void md_number_to_field (char *buf, valueT val, int n);
++static void nios2_align (int log_size, const char *pfill, symbolS * sym);
++static void s_nios2_ucons (int nbytes);
++static void s_nios2_set (int equiv);
++static void s_nios2_align (int ignore);
++static void s_nios2_text (int);
++static void s_nios2_data (int);
++static void s_nios2_section (int);
++static bfd_boolean nios2_coproc_reg (const char *reg_name);
++static void output_insn (void);
++static void output_ubranch (void);
++static void output_cbranch (void);
++static void output_call (void);
++static void output_movia (void);
++static void output_andi (void);
++static void output_addi (void);
++static void output_ori (void);
++static void output_xori (void);
++static int can_evaluate_expr (void);
++static int get_expr_value (void);
++
++
++bfd_boolean nios2_check_overflow (valueT fixup, reloc_howto_type * howto);
++
++/* The known current alignment of the current section. */
++static int nios2_current_align;
++static segT nios2_current_align_seg;
++
++/* The last seen label in the current section. This is used to auto-align
++ labels preceeding instructions. */
++static symbolS *nios2_last_label;
++
++
++static int nios2_auto_align_on = 1;
++
++/* This array holds the chars that always start a comment. If the
++ pre-processor is disabled, these aren't very useful. */
++const char comment_chars[] = "#";
++
++/* This array holds the chars that only start a comment at the beginning of
++ a line. If the line seems to have the form '# 123 filename'
++ .line and .file directives will appear in the pre-processed output. */
++/* Note that input_file.c hand checks for '#' at the beginning of the
++ first line of the input file. This is because the compiler outputs
++ #NO_APP at the beginning of its output. */
++/* Also note that C style comments are always supported. */
++const char line_comment_chars[] = "#";
++
++/* This array holds machine specific line separator characters. */
++const char line_separator_chars[] = ";";
++
++/* Chars that can be used to separate mant from exp in floating point nums. */
++const char EXP_CHARS[] = "eE";
++
++/* Chars that mean this number is a floating point constant. */
++/* As in 0f12.456 */
++/* or 0d1.2345e12 */
++const char FLT_CHARS[] = "rRsSfFdDxXpP";
++
++/* Also be aware that MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT may have to be
++ changed in read.c. Ideally it shouldn't have to know about it at all,
++ but nothing is ideal around here. */
++
++/* Handle of the OPCODE hash table. */
++static struct hash_control *nios2_opcode_hash = NULL;
++
++/* Handle of the Register hash table. */
++static struct hash_control *nios2_reg_hash = NULL;
++
++/* Handle of the parse args hash table. */
++static struct hash_control *nios2_arg_hash = NULL;
++
++/* Pseudo-op hash table. */
++static struct hash_control *nios2_ps_hash = NULL;
++
++#ifdef OBJ_ELF
++/* Pre-defined "_GLOBAL_OFFSET_TABLE_" */
++symbolS * GOT_symbol;
++#endif
++
++#define streq(a, b) (strcmp (a, b) == 0)
++
++/* Mode of the assembler. */
++typedef enum
++{
++ NIOS2_MODE_ASSEMBLE, /* Ordinary operation. */
++ NIOS2_MODE_TEST /* Hidden mode used for self testing. */
++}
++NIOS2_MODE;
++
++static NIOS2_MODE nios2_mode = NIOS2_MODE_ASSEMBLE;
++
++/* This function is used to in self-checking mode
++ to check the assembled instruction
++ opcode should be the assembled opcode, and exp_opcode
++ the parsed string representing the expected opcode. */
++void
++NIOS2_CHECK_ASSEMBLY (unsigned int opcode, const char *exp_opcode)
++{
++ if (nios2_mode == NIOS2_MODE_TEST)
++ {
++ if ((exp_opcode) == NULL)
++ {
++ as_bad (_("expecting opcode string in self test mode"));
++ }
++ else if ((opcode) != strtoul ((exp_opcode), NULL, 16))
++ {
++ as_bad (_("assembly 0x%08x, expected %s"), (opcode), (exp_opcode));
++ }
++ }
++}
++
++/* Machine-dependent command-line options. */
++
++const char *md_shortopts = "r";
++
++struct option md_longopts[] = {
++#define OPTION_RELAX_ALL (OPTION_MD_BASE + 0)
++ {"relax-all", no_argument, NULL, OPTION_RELAX_ALL},
++#define OPTION_NORELAX (OPTION_MD_BASE + 1)
++ {"no-relax", no_argument, NULL, OPTION_NORELAX},
++#define OPTION_RELAX_SECTION (OPTION_MD_BASE + 2)
++ {"relax-section", no_argument, NULL, OPTION_RELAX_SECTION},
++#define OPTION_EB (OPTION_MD_BASE + 3)
++ {"EB", no_argument, NULL, OPTION_EB},
++#define OPTION_EL (OPTION_MD_BASE + 4)
++ {"EL", no_argument, NULL, OPTION_EL}
++};
++
++size_t md_longopts_size = sizeof (md_longopts);
++
++/* Machine dependent pseudo-ops.
++ These are actually assembler directives.
++ Format of each entry is:
++
++ { "directive", handler_func, param } */
++const pseudo_typeS md_pseudo_table[] = {
++ {"align", s_nios2_align, 0},
++ {"text", s_nios2_text, 0},
++ {"data", s_nios2_data, 0},
++ {"section", s_nios2_section, 0},
++ {"section.s", s_nios2_section, 0},
++ {"sect", s_nios2_section, 0},
++ {"sect.s", s_nios2_section, 0},
++ /* .dword and .half are included for compatibility with MIPS. */
++ {"dword", cons, 8},
++ {"half", cons, 2},
++ /* NIOS2 native word size is 4 bytes, so we override
++ the GAS default of 2. */
++ {"word", cons, 4},
++ /* Explicitly unaligned directives. */
++ {"2byte", s_nios2_ucons, 2},
++ {"4byte", s_nios2_ucons, 4},
++ {"8byte", s_nios2_ucons, 8},
++ {"16byte", s_nios2_ucons, 16},
++#ifdef OBJ_ELF
++ {"sdata", s_nios2_sdata, 0},
++#endif
++ {"set", s_nios2_set, 0},
++ {NULL, NULL, 0}
++};
++
++#define BYTE_F 32764
++#define BYTE_B -32768
++#define ABS (long)0xffffffff /* Special value to indicate
++ non-pc relative jmp. */
++
++#define UBRANCH 1
++#define UJMP 2
++#define CBRANCH 3
++#define CJMP 4
++
++
++#define RELAX_MAX_SIZE(type) nios2_relax_table[nios2_relax_table[type \
++ ].rlx_more].rlx_length
++#define RELAX_SIZE(type) nios2_relax_table[type].rlx_length
++#define RELAX_SUBSTATE(type) type
++
++/* Machine dependent relaxations. */
++struct relax_type nios2_relax_table[] = {
++ /* First entry unused (ends relaxation sequence). */
++ {1, 1, 0, 0},
++ /* Unconditional branch. */
++ {BYTE_F, BYTE_B, 4, 2}, /* br label (label is in range) */
++ /* Unconditional jmp. */
++ {ABS, ABS, 12, 0}, /* movhi at, %hi(label) ;
++ ori at, %lo(label) ; jmp at */
++ /* Conditional branch. */
++ {BYTE_F, BYTE_B, 4, 4}, /* br{cond} label (label is in range) */
++ /* Conditional jmp. */
++ {ABS, ABS, 16, 0}, /* br{opp_cond} skip ; movhi at, %hi(label) ;
++ ori at, %lo(label) ; jmp at ; skip: } */
++};
++
++
++/* This is just the generic relax_frag function but
++ amended to include absolute jmps in the relax table. */
++
++long
++nios2_relax_frag (segT segment, fragS * fragP, long stretch)
++{
++ const relax_typeS *this_type;
++ const relax_typeS *start_type;
++ relax_substateT next_state;
++ relax_substateT this_state;
++ long growth;
++ offsetT aim;
++ addressT target;
++ addressT address;
++ symbolS *symbolP;
++ const relax_typeS *table;
++
++ target = fragP->fr_offset;
++ address = fragP->fr_address;
++ table = nios2_relax_table;
++ this_state = fragP->fr_subtype;
++ start_type = this_type = table + this_state;
++ symbolP = fragP->fr_symbol;
++
++ if (symbolP)
++ {
++ fragS *sym_frag;
++
++ sym_frag = symbol_get_frag (symbolP);
++
++#ifndef DIFF_EXPR_OK
++#if 0
++#if !defined (MANY_SEGMENTS) && !defined (BFD_ASSEMBLER)
++ know ((S_GET_SEGMENT (symbolP) == SEG_ABSOLUTE)
++ || (S_GET_SEGMENT (symbolP) == SEG_DATA)
++ || (S_GET_SEGMENT (symbolP) == SEG_BSS)
++ || (S_GET_SEGMENT (symbolP) == SEG_TEXT));
++#endif
++#endif
++ know (sym_frag != NULL);
++#endif
++ know (!(S_GET_SEGMENT (symbolP) == absolute_section)
++ || sym_frag == &zero_address_frag);
++ target += S_GET_VALUE (symbolP);
++
++ /* If frag has yet to be reached on this pass,
++ assume it will move by STRETCH just as we did.
++ If this is not so, it will be because some frag
++ between grows, and that will force another pass. */
++
++ if (stretch != 0
++ && sym_frag->relax_marker != fragP->relax_marker
++ && S_GET_SEGMENT (symbolP) == segment)
++ {
++ target += stretch;
++ }
++ }
++
++
++ /* NG we subtract 4 because all pc relative branches are
++ from the next instruction. */
++ aim = target - address - fragP->fr_fix - 4;
++
++ if (aim < 0)
++ {
++ /* Look backwards. */
++ for (next_state = this_type->rlx_more; next_state;)
++ {
++ if (aim >= this_type->rlx_backward
++ || this_type->rlx_backward == ABS)
++ next_state = 0;
++ else
++ {
++ /* Grow to next state. */
++ this_state = next_state;
++ this_type = table + this_state;
++ next_state = this_type->rlx_more;
++ }
++ }
++ }
++ else
++ {
++ /* Look forwards. */
++
++ for (next_state = this_type->rlx_more; next_state;)
++ {
++ if (aim <= this_type->rlx_forward || this_type->rlx_forward == ABS)
++ next_state = 0;
++ else
++ {
++ /* Grow to next state. */
++ this_state = next_state;
++ this_type = table + this_state;
++ next_state = this_type->rlx_more;
++ }
++ }
++ }
++
++
++ growth = this_type->rlx_length - start_type->rlx_length;
++
++ if (growth != 0)
++ fragP->fr_subtype = this_state;
++
++ return growth;
++}
++
++/*--------------------------------------------------------------------------------
++ The next table associates pointers to functions which parse the arguments to an
++ instruction and fill in the relevant fields of the instruction
++ --------------------------------------------------------------------------------*/
++
++const nios2_arg_infoS nios2_arg_info_structs[] = {
++ /* args, assemble_args_func */
++ {"d,s,t", nios2_assemble_args_dst},
++ {"d,s,t,E", nios2_assemble_args_dst},
++ {"t,s,i", nios2_assemble_args_tsi},
++ {"t,s,i,E", nios2_assemble_args_tsi},
++ {"t,s,u", nios2_assemble_args_tsu},
++ {"t,s,u,E", nios2_assemble_args_tsu},
++ {"s,t,o", nios2_assemble_args_sto},
++ {"s,t,o,E", nios2_assemble_args_sto},
++ {"o", nios2_assemble_args_o},
++ {"o,E", nios2_assemble_args_o},
++ {"s", nios2_assemble_args_s},
++ {"s,E", nios2_assemble_args_s},
++ {"", nios2_assemble_args_none},
++ {"E", nios2_assemble_args_none},
++ {"i(s)", nios2_assemble_args_is},
++ {"i(s)E", nios2_assemble_args_is},
++ {"m", nios2_assemble_args_m},
++ {"m,E", nios2_assemble_args_m},
++ {"t,i(s)", nios2_assemble_args_tis},
++ {"t,i(s)E", nios2_assemble_args_tis},
++ {"d,c", nios2_assemble_args_dc},
++ {"d,c,E", nios2_assemble_args_dc},
++ {"c,s", nios2_assemble_args_cs},
++ {"c,s,E", nios2_assemble_args_cs},
++ {"l,d,s,t", nios2_assemble_args_ldst},
++ {"l,d,s,t,E", nios2_assemble_args_ldst},
++ {"d,s,j", nios2_assemble_args_dsj},
++ {"d,s,j,E", nios2_assemble_args_dsj},
++ {"d", nios2_assemble_args_d},
++ {"d,E", nios2_assemble_args_d},
++ {"b", nios2_assemble_args_b},
++ {"b,E", nios2_assemble_args_b}
++};
++
++#define NIOS2_NUM_ARGS \
++ ((sizeof(nios2_arg_info_structs)/sizeof(nios2_arg_info_structs[0])))
++const int nios2_num_arg_info_structs = NIOS2_NUM_ARGS;
++
++
++const nios2_ps_insn_infoS nios2_ps_insn_info_structs[] = {
++ /* pseudo-op, real-op, arg, arg_modifier_func, num, index */
++ {"mov", "add", "zero", nios2_append_arg, 1, 3},
++ {"movi", "addi", "zero", nios2_insert_arg, 1, 2},
++ {"movhi", "orhi", "zero", nios2_insert_arg, 1, 2},
++ {"movui", "ori", "zero", nios2_insert_arg, 1, 2},
++ {"movia", "orhi", "zero", nios2_insert_arg, 1, 2},
++ {"nop", "add", "zero", nios2_append_arg, 3, 1},
++ {"bgt", "blt", "", nios2_swap_args, 1, 2},
++ {"bgtu", "bltu", "", nios2_swap_args, 1, 2},
++ {"ble", "bge", "", nios2_swap_args, 1, 2},
++ {"bleu", "bgeu", "", nios2_swap_args, 1, 2},
++ {"cmpgt", "cmplt", "", nios2_swap_args, 2, 3},
++ {"cmpgtu", "cmpltu", "", nios2_swap_args, 2, 3},
++ {"cmple", "cmpge", "", nios2_swap_args, 2, 3},
++ {"cmpleu", "cmpgeu", "", nios2_swap_args, 2, 3},
++ {"cmpgti", "cmpgei", "+1", nios2_modify_arg, 0, 3},
++ {"cmpgtui", "cmpgeui", "+1", nios2_modify_arg, 0, 3},
++ {"cmplei", "cmplti", "+1", nios2_modify_arg, 0, 3},
++ {"cmpleui", "cmpltui", "+1", nios2_modify_arg, 0, 3},
++ {"subi", "addi", "", nios2_negate_arg, 0, 3}
++ /* Add further pseudo-ops here. */
++};
++
++#define NIOS2_NUM_PSEUDO_INSNS \
++ ((sizeof(nios2_ps_insn_info_structs)/ \
++ sizeof(nios2_ps_insn_info_structs[0])))
++const int nios2_num_ps_insn_info_structs = NIOS2_NUM_PSEUDO_INSNS;
++
++/* Special relocation directive strings. */
++
++struct nios2_special_relocS
++{
++ const char *string;
++ bfd_reloc_code_real_type reloc_type;
++};
++
++struct nios2_special_relocS nios2_special_reloc[] = {
++ {"%hiadj", BFD_RELOC_NIOS2_HIADJ16},
++ {"%hi", BFD_RELOC_NIOS2_HI16},
++ {"%lo", BFD_RELOC_NIOS2_LO16},
++ {"%gprel", BFD_RELOC_NIOS2_GPREL},
++ {"%call", BFD_RELOC_NIOS2_CALL16},
++ {"%gotoff_lo", BFD_RELOC_NIOS2_GOTOFF_LO},
++ {"%gotoff_hiadj", BFD_RELOC_NIOS2_GOTOFF_HA},
++ {"%tls_gd", BFD_RELOC_NIOS2_TLS_GD16},
++ {"%tls_ldm", BFD_RELOC_NIOS2_TLS_LDM16},
++ {"%tls_ldo", BFD_RELOC_NIOS2_TLS_LDO16},
++ {"%tls_ie", BFD_RELOC_NIOS2_TLS_IE16},
++ {"%tls_le", BFD_RELOC_NIOS2_TLS_LE16},
++ {"%gotoff", BFD_RELOC_NIOS2_GOTOFF},
++ {"%got", BFD_RELOC_NIOS2_GOT16}
++};
++
++#define NIOS2_NUM_SPECIAL_RELOCS \
++ (sizeof(nios2_special_reloc)/sizeof(nios2_special_reloc[0]))
++const int nios2_num_special_relocs = NIOS2_NUM_SPECIAL_RELOCS;
++
++/* The function nios2_modify_arg appends the string modifier to the string
++ contained in the argument at index in the array parsedArgs[]. */
++void
++nios2_modify_arg (const char *modifier,
++ char **parsedArgs, int unused ATTRIBUTE_UNUSED, int index)
++{
++ gas_assert (index < NIOS2_MAX_INSN_TOKENS);
++
++ /* We can't just strcat here because strcat will free the memory pointed
++ to by the first argument and allocate new memory - but at this stage,
++ parsedArgs[index] may point into the middle of a block of allocated
++ memory, so trying to free it will cause a seg fault. */
++ char *tmp = parsedArgs[index];
++ parsedArgs[index] =
++ (char *) malloc (strlen (parsedArgs[index]) + strlen (modifier) + 1);
++ strcpy (parsedArgs[index], tmp);
++ strcat (parsedArgs[index], modifier);
++}
++
++
++void
++nios2_negate_arg (const char *modifier ATTRIBUTE_UNUSED,
++ char **parsedArgs, int unused ATTRIBUTE_UNUSED, int index)
++{
++ char *tmp = parsedArgs[index];
++ parsedArgs[index] =
++ (char *) malloc (strlen ("~(") + strlen (parsedArgs[index]) +
++ strlen (")+1") + 1);
++
++ strcpy (parsedArgs[index], "~(");
++ strcat (parsedArgs[index], tmp);
++ strcat (parsedArgs[index], ")+1");
++}
++
++/* The function nios2_swap_args swaps the pointers at indices index_1 and
++ index_2 in the array parsedArgs[] - this is used for operand swapping
++ for comparison operations. */
++void
++nios2_swap_args (const char *unused ATTRIBUTE_UNUSED,
++ char **parsedArgs, int index_1, int index_2)
++{
++ char *tmp;
++ gas_assert (index_1 < NIOS2_MAX_INSN_TOKENS && index_2 < NIOS2_MAX_INSN_TOKENS);
++ tmp = parsedArgs[index_1];
++ parsedArgs[index_1] = parsedArgs[index_2];
++ parsedArgs[index_2] = tmp;
++}
++
++/* This function appends the string append to the array of strings in
++ parsedArgs numAppend times starting at index startIndex in the array. */
++void
++nios2_append_arg (const char *append, char **parsedArgs, int numAppend,
++ int startIndex)
++{
++ int i, count;
++ char *tmp;
++
++ gas_assert ((startIndex + numAppend) < NIOS2_MAX_INSN_TOKENS);
++ i = startIndex;
++ count = numAppend;
++
++ if (nios2_mode == NIOS2_MODE_TEST)
++ tmp = parsedArgs[startIndex];
++ else
++ tmp = NULL;
++
++ while (count > 0)
++ {
++ parsedArgs[i] = (char *) append;
++ ++i;
++ --count;
++ }
++
++ gas_assert (i == (startIndex + numAppend));
++ parsedArgs[i] = tmp;
++ parsedArgs[i + 1] = NULL;
++}
++
++/* This function inserts the string insert numInsert times in the array
++ parsedArgs, starting at the index startIndex. */
++void
++nios2_insert_arg (const char *insert, char **parsedArgs, int numInsert,
++ int startIndex)
++{
++ int i, count, from, to;
++
++ gas_assert ((startIndex + numInsert) < NIOS2_MAX_INSN_TOKENS);
++
++ to = startIndex + numInsert;
++ from = startIndex;
++
++ /* Move the existing arguments up to create space. */
++ i = NIOS2_MAX_INSN_TOKENS;
++ while ((i - numInsert) >= startIndex)
++ {
++ parsedArgs[i] = parsedArgs[i - numInsert];
++ --i;
++ }
++
++ i = startIndex;
++ count = numInsert;
++ while (count > 0)
++ {
++ parsedArgs[i] = (char *) insert;
++ ++i;
++ --count;
++ }
++}
++
++/* This function swaps the pseudo-op for a real op.
++ FIXME - only works for 1-to-1 correspondence. */
++void
++nios2_translate_pseudo_insn (nios2_insn_infoS * insn)
++{
++
++ nios2_ps_insn_infoS *ps_insn;
++
++ /* Find which real insn the pseudo-op transates to and
++ switch the insn_info ptr to point to it. */
++ ps_insn =
++ (nios2_ps_insn_infoS *) hash_find (nios2_ps_hash,
++ insn->insn_nios2_opcode->name);
++
++ if (ps_insn != NULL)
++ {
++ insn->insn_nios2_opcode =
++ (struct nios2_opcode *) hash_find (nios2_opcode_hash, ps_insn->insn);
++ insn->insn_tokens[0] = insn->insn_nios2_opcode->name;
++ /* Modify the args so they work with the real insn. */
++ ps_insn->arg_modifer_func (ps_insn->arg_modifier,
++ (char **) insn->insn_tokens, ps_insn->num,
++ ps_insn->index);
++ }
++ else
++ {
++ /* we cannot recover from this. */
++ as_fatal (_("unrecognized pseudo-instruction %s"),
++ ps_insn->pseudo_insn);
++ }
++}
++
++/********************************************************************
++ The following functions are called by machine-independent parts of
++ the assembler
++ ********************************************************************/
++
++int
++md_parse_option (int c, char *arg ATTRIBUTE_UNUSED)
++{
++ switch (c)
++ {
++ case 'r':
++ /* hidden option for self-test mode */
++ nios2_mode = NIOS2_MODE_TEST;
++ break;
++ case OPTION_RELAX_ALL:
++ nios2_as_options.relax = relax_all;
++ break;
++ case OPTION_NORELAX:
++ nios2_as_options.relax = relax_none;
++ break;
++ case OPTION_RELAX_SECTION:
++ nios2_as_options.relax = relax_section;
++ break;
++ case OPTION_EB:
++ target_big_endian = 1;
++ break;
++ case OPTION_EL:
++ target_big_endian = 0;
++ break;
++ default:
++ return 0;
++ break;
++ }
++
++ return 1;
++}
++
++/* We can choose to be big-endian or little-endian at runtime based
++ on a switch. */
++const char *
++nios2_target_format (void)
++{
++ return target_big_endian ? "elf32-bignios2" : "elf32-littlenios2";
++}
++
++/* Machine-dependent usage message. */
++void
++md_show_usage (FILE * stream)
++{
++ fprintf (stream, " NIOS2 options:\n"
++ " -relax-all replace all branch and call "
++ "instructions with jmp and callr sequences\n"
++ " -relax-section replace identified out of range "
++ "branches with jmp sequences (default)\n"
++ " -no-relax do not replace any branches or calls\n"
++ " -EB force big-endian byte ordering\n"
++ " -EL force little-endian byte ordering\n");
++}
++
++/* This function is called once, at assembler startup time.
++ It should set up all the tables, etc. that the MD part of the
++ assembler will need. */
++void
++md_begin (void)
++{
++ int i;
++ const char *inserted;
++
++ /* Create and fill a hashtable for the New Jersey opcodes, registers and
++ arguments. */
++ nios2_opcode_hash = hash_new ();
++ nios2_reg_hash = hash_new ();
++ nios2_arg_hash = hash_new ();
++ nios2_ps_hash = hash_new ();
++
++ for (i = 0; i < NUMOPCODES; ++i)
++ {
++ inserted =
++ hash_insert (nios2_opcode_hash, nios2_opcodes[i].name,
++ (PTR) & nios2_opcodes[i]);
++ if (inserted != NULL)
++ {
++ fprintf (stderr, _("internal error: can't hash `%s': %s\n"),
++ nios2_opcodes[i].name, inserted);
++ /* Probably a memory allocation problem? Give up now. */
++ as_fatal (_("Broken assembler. No assembly attempted."));
++ }
++ }
++
++ for (i = 0; i < nios2_num_regs; ++i)
++ {
++ inserted =
++ hash_insert (nios2_reg_hash, nios2_regs[i].name,
++ (PTR) & nios2_regs[i]);
++ if (inserted != NULL)
++ {
++ fprintf (stderr, _("internal error: can't hash `%s': %s\n"),
++ nios2_regs[i].name, inserted);
++ /* Probably a memory allocation problem? Give up now. */
++ as_fatal (_("Broken assembler. No assembly attempted."));
++ }
++
++ }
++
++ for (i = 0; i < nios2_num_arg_info_structs; ++i)
++ {
++ inserted =
++ hash_insert (nios2_arg_hash, nios2_arg_info_structs[i].args,
++ (PTR) & nios2_arg_info_structs[i]);
++ if (inserted != NULL)
++ {
++ fprintf (stderr, _("internal error: can't hash `%s': %s\n"),
++ nios2_arg_info_structs[i].args, inserted);
++ /* Probably a memory allocation problem? Give up now. */
++ as_fatal (_("Broken assembler. No assembly attempted."));
++ }
++ }
++
++ for (i = 0; i < nios2_num_ps_insn_info_structs; ++i)
++ {
++ inserted =
++ hash_insert (nios2_ps_hash, nios2_ps_insn_info_structs[i].pseudo_insn,
++ (PTR) & nios2_ps_insn_info_structs[i]);
++ if (inserted != NULL)
++ {
++ fprintf (stderr, _("internal error: can't hash `%s': %s\n"),
++ nios2_ps_insn_info_structs[i].pseudo_insn, inserted);
++ /* Probably a memory allocation problem? Give up now. */
++ as_fatal (_("Broken assembler. No assembly attempted."));
++ }
++ }
++
++ /* Assembler option defaults. */
++ nios2_as_options.noat = FALSE;
++ nios2_as_options.nobreak = FALSE;
++
++ /* Debug information is incompatible with relaxation. */
++ if (debug_type != DEBUG_UNSPECIFIED)
++ {
++ nios2_as_options.relax = relax_none;
++ }
++
++ /* Initialize the alignment data. */
++ nios2_current_align_seg = now_seg;
++ nios2_last_label = NULL;
++ nios2_current_align = 0;
++}
++
++
++
++
++/* Made this global to avoid changing one function prototype. */
++nios2_insn_infoS insn;
++
++/* Assembles a single line of Nios II assembly language. */
++void
++md_assemble (char *op_str)
++{
++ char *argstr;
++ char *op_strdup;
++ nios2_arg_infoS *arg_info;
++ unsigned long saved_pinfo = 0;
++
++ /* Make sure we are aligned on a 4-byte boundary. */
++ if (nios2_current_align < 2)
++ nios2_align (2, NULL, nios2_last_label);
++ else if (nios2_current_align > 2)
++ nios2_current_align = 2;
++ nios2_last_label = NULL;
++
++
++ /* We don't want to clobber to op_str
++ because we want to be able to use it in messages. */
++ op_strdup = strdup (op_str);
++
++ insn.insn_tokens[0] = strtok (op_strdup, " ");
++ argstr = strtok (NULL, "");
++
++ /* Assemble the opcode. */
++ insn.insn_nios2_opcode =
++ (struct nios2_opcode *) hash_find (nios2_opcode_hash,
++ insn.insn_tokens[0]);
++ insn.insn_reloc = NULL;
++
++ if (insn.insn_nios2_opcode != NULL)
++ {
++ /* Set the opcode for the instruction. */
++ insn.insn_code = insn.insn_nios2_opcode->match;
++
++ /* Parse the arguments pointed to by argstr. */
++ if (nios2_mode == NIOS2_MODE_ASSEMBLE)
++ {
++ nios2_parse_args (argstr, insn.insn_nios2_opcode->args,
++ (char **) &insn.insn_tokens[1]);
++ }
++ else
++ {
++ nios2_parse_args (argstr, insn.insn_nios2_opcode->args_test,
++ (char **) &insn.insn_tokens[1]);
++ }
++
++ /* We need to preserve the MOVIA macro as this is clobbered by
++ translate_pseudo_insn. */
++ if (insn.insn_nios2_opcode->pinfo == NIOS2_INSN_MACRO_MOVIA)
++ {
++ saved_pinfo = NIOS2_INSN_MACRO_MOVIA;
++ }
++ /* If the instruction is an pseudo-instruction, we want to replace it
++ with its real equivalent, and then continue. */
++ if ((insn.insn_nios2_opcode->pinfo & NIOS2_INSN_MACRO) ==
++ NIOS2_INSN_MACRO)
++ {
++ nios2_translate_pseudo_insn (&insn);
++ }
++
++ /* Find the assemble function, and call it. */
++ arg_info =
++ (nios2_arg_infoS *) hash_find (nios2_arg_hash,
++ insn.insn_nios2_opcode->args);
++ if (arg_info != NULL)
++ {
++ arg_info->assemble_args_func (&insn);
++
++ if (nios2_as_options.relax != relax_none
++ && insn.insn_nios2_opcode->pinfo & NIOS2_INSN_UBRANCH)
++ output_ubranch ();
++ else if (nios2_as_options.relax != relax_none
++ && insn.insn_nios2_opcode->pinfo & NIOS2_INSN_CBRANCH)
++ output_cbranch ();
++ else if (nios2_as_options.relax == relax_all
++ && insn.insn_nios2_opcode->pinfo & NIOS2_INSN_CALL)
++ output_call ();
++ else if (insn.insn_nios2_opcode->pinfo & NIOS2_INSN_ANDI)
++ output_andi ();
++ else if (insn.insn_nios2_opcode->pinfo & NIOS2_INSN_ORI)
++ output_ori ();
++ else if (insn.insn_nios2_opcode->pinfo & NIOS2_INSN_XORI)
++ output_xori ();
++ else if (insn.insn_nios2_opcode->pinfo & NIOS2_INSN_ADDI)
++ output_addi ();
++ else if (saved_pinfo == NIOS2_INSN_MACRO_MOVIA)
++ output_movia ();
++ else
++ output_insn ();
++ }
++ else
++ {
++ /* The assembler is broken. */
++ fprintf (stderr,
++ _("internal error: %s is not a valid argument syntax\n"),
++ insn.insn_nios2_opcode->args);
++ /* Probably a memory allocation problem. Give up now. */
++ as_fatal (_("Broken assembler. No assembly attempted."));
++ }
++ }
++ else
++ {
++ /* Unrecognised instruction - error. */
++ as_bad (_("unrecognised instruction %s"), insn.insn_tokens[0]);
++ }
++}
++
++/* Output a normal instruction. */
++static void
++output_insn ()
++{
++ char *f;
++ nios2_insn_relocS *reloc;
++
++ f = frag_more (4);
++ /* This allocates enough space for the instruction
++ and puts it in the current frag. */
++ md_number_to_chars (f, insn.insn_code, 4);
++ /* Emit debug info. */
++ dwarf2_emit_insn (4);
++ /* Create any fixups. */
++ reloc = insn.insn_reloc;
++ while (reloc != NULL)
++ {
++ /* This creates any fixups to be acted on later. */
++ fix_new_exp (frag_now, f - frag_now->fr_literal, 4,
++ &reloc->reloc_expression, reloc->reloc_pcrel,
++ reloc->reloc_type);
++ reloc = reloc->reloc_next;
++ }
++}
++
++/* Output an unconditional branch. */
++static void
++output_ubranch (void)
++{
++ char *f;
++ nios2_insn_relocS *reloc;
++ symbolS *symp;
++ offsetT offset;
++
++ reloc = insn.insn_reloc;
++
++ /* If the reloc is NULL, there was an error assembling the branch. */
++ if (reloc != NULL)
++ {
++
++ symp = reloc->reloc_expression.X_add_symbol;
++ offset = reloc->reloc_expression.X_add_number;
++
++ /* We must tag debug info here since we can't do it after
++ calling frag_var. */
++ dwarf2_emit_insn (4);
++
++ /* We create a machine dependent frag which can grow
++ to accommodate the largest possible instruction sequence
++ this may generate. */
++ f = frag_var (rs_machine_dependent,
++ RELAX_MAX_SIZE (UBRANCH),
++ RELAX_SIZE (UBRANCH),
++ RELAX_SUBSTATE (UBRANCH), symp, offset, NULL);
++
++ md_number_to_chars (f, insn.insn_code, 4);
++
++ /* We leave fixup generation to md_convert_frag. */
++ }
++}
++
++/* Output a conditional branch. */
++static void
++output_cbranch (void)
++{
++ char *f;
++ nios2_insn_relocS *reloc;
++ symbolS *symp;
++ offsetT offset;
++
++ reloc = insn.insn_reloc;
++
++ /* If the reloc is NULL, there was an error assembling the branch. */
++ if (reloc != NULL)
++ {
++
++ symp = reloc->reloc_expression.X_add_symbol;
++ offset = reloc->reloc_expression.X_add_number;
++
++ /* We must tag debug info here since we can't do it after
++ calling frag_var. */
++ dwarf2_emit_insn (4);
++
++ /* We create a machine dependent frag which can grow
++ to accommodate the largest possible instruction sequence
++ this may generate. */
++ f = frag_var (rs_machine_dependent,
++ RELAX_MAX_SIZE (CBRANCH),
++ RELAX_SIZE (CBRANCH),
++ RELAX_SUBSTATE (CBRANCH), symp, offset, NULL);
++
++ md_number_to_chars (f, insn.insn_code, 4);
++
++
++ /* We leave fixup generation to md_convert_frag. */
++ }
++}
++
++/* Output a call sequence. Since calls are not pc-relative for NIOS2,
++ but are page-relative, we cannot tell at any stage in assembly
++ whether a call will be out of range since a section may be linked
++ at any address. So if we are relaxing, we convert all call instructions
++ to long call sequences, and rely on the linker to relax them back to
++ short calls. */
++static void
++output_call (void)
++{
++ char *f;
++ nios2_insn_relocS *reloc;
++ f = frag_more (12);
++ /* This allocates enough space for the instruction
++ and puts it in the current frag. */
++ reloc = insn.insn_reloc;
++
++ /* If the reloc is NULL, there was an error assembling the branch. */
++ if (reloc != NULL)
++ {
++ md_number_to_chars (f, OP_MATCH_ORHI | 0x00400000, 4);
++ dwarf2_emit_insn (4);
++ md_number_to_chars (f + 4, OP_MATCH_ORI | 0x08400000, 4);
++ dwarf2_emit_insn (4);
++ md_number_to_chars (f + 8, OP_MATCH_CALLR | 0x08000000, 4);
++ dwarf2_emit_insn (4);
++ fix_new (frag_now, f - frag_now->fr_literal, 4,
++ reloc->reloc_expression.X_add_symbol,
++ reloc->reloc_expression.X_add_number, 0,
++ BFD_RELOC_NIOS2_CALLR);
++
++
++ }
++}
++
++
++static int
++can_evaluate_expr (void)
++{
++ /* Remove this check for null and the invalid insn "ori r9, 1234" seg faults. */
++ if (!insn.insn_reloc)
++ {
++ /* ??? Ideally we should do something other than as_fatal here as we can
++ continue to assemble.
++ However this function (actually the output_* functions) should not
++ have been called in the first place once an illegal instruction had
++ been encountered. */
++ as_fatal (_("Invalid instruction encountered, cannot recover. No assembly attempted."));
++ }
++
++ if (insn.insn_reloc->reloc_expression.X_op == O_constant)
++ return 1;
++
++ return 0;
++}
++
++static int
++get_expr_value (void)
++{
++ int value = 0;
++ if (insn.insn_reloc->reloc_expression.X_op == O_constant)
++ value = insn.insn_reloc->reloc_expression.X_add_number;
++ return value;
++}
++
++/* Output an addi - will silently convert to
++ orhi if rA = r0 and (expr & 0xffff0000) == 0. */
++static void
++output_addi (void)
++{
++ int expr_val = 0;
++ if (can_evaluate_expr ())
++ {
++ expr_val = get_expr_value ();
++ if (GET_INSN_FIELD (RRS, insn.insn_code) == 0 &&
++ (expr_val & 0xffff) == 0 && expr_val != 0)
++ {
++
++ /* We really want a movhi (orhi) here. */
++ insn.insn_code = (insn.insn_code & ~OP_MATCH_ADDI) | OP_MATCH_ORHI;
++ insn.insn_reloc->reloc_expression.X_add_number =
++ (insn.insn_reloc->reloc_expression.X_add_number >> 16) & 0xffff;
++ insn.insn_reloc->reloc_type = BFD_RELOC_NIOS2_U16;
++ }
++ }
++
++ /* Output an instruction. */
++ output_insn ();
++}
++
++static void
++output_andi (void)
++{
++ int expr_val = 0;
++ if (can_evaluate_expr ())
++ {
++ expr_val = get_expr_value ();
++ if (expr_val != 0 && (expr_val & 0xffff) == 0)
++ {
++ /* We really want a movhi (orhi) here. */
++ insn.insn_code = (insn.insn_code & ~OP_MATCH_ANDI) | OP_MATCH_ANDHI;
++ insn.insn_reloc->reloc_expression.X_add_number =
++ (insn.insn_reloc->reloc_expression.X_add_number >> 16) & 0xffff;
++ insn.insn_reloc->reloc_type = BFD_RELOC_NIOS2_U16;
++ }
++ }
++
++ /* Output an instruction. */
++ output_insn ();
++}
++
++static void
++output_ori (void)
++{
++ int expr_val = 0;
++ if (can_evaluate_expr ())
++ {
++ expr_val = get_expr_value ();
++ if (expr_val != 0 && (expr_val & 0xffff) == 0)
++ {
++ /* We really want a movhi (orhi) here. */
++ insn.insn_code = (insn.insn_code & ~OP_MATCH_ORI) | OP_MATCH_ORHI;
++ insn.insn_reloc->reloc_expression.X_add_number =
++ (insn.insn_reloc->reloc_expression.X_add_number >> 16) & 0xffff;
++ insn.insn_reloc->reloc_type = BFD_RELOC_NIOS2_U16;
++ }
++ }
++
++ /* Output an instruction. */
++ output_insn ();
++}
++
++static void
++output_xori (void)
++{
++ int expr_val = 0;
++ if (can_evaluate_expr ())
++ {
++ expr_val = get_expr_value ();
++ if (expr_val != 0 && (expr_val & 0xffff) == 0)
++ {
++ /* We really want a movhi (orhi) here. */
++ insn.insn_code = (insn.insn_code & ~OP_MATCH_XORI) | OP_MATCH_XORHI;
++ insn.insn_reloc->reloc_expression.X_add_number =
++ (insn.insn_reloc->reloc_expression.X_add_number >> 16) & 0xffff;
++ insn.insn_reloc->reloc_type = BFD_RELOC_NIOS2_U16;
++ }
++ }
++
++ /* Output an instruction. */
++ output_insn ();
++}
++
++
++/* Output a movhi/addi pair for the movia pseudo-op. */
++static void
++output_movia (void)
++{
++ char *f;
++ nios2_insn_relocS *reloc;
++ f = frag_more (8);
++ unsigned long reg_index = GET_INSN_FIELD (IRT, insn.insn_code);
++
++ /* This allocates enough space for the instruction
++ and puts it in the current frag. */
++ reloc = insn.insn_reloc;
++
++ /* If the reloc is NULL, there was an error assembling the movia. */
++ if (reloc != NULL)
++ {
++ md_number_to_chars (f, insn.insn_code, 4);
++ dwarf2_emit_insn (4);
++ md_number_to_chars (f + 4,
++ OP_MATCH_ADDI | (reg_index << OP_SH_IRT) |
++ (reg_index << OP_SH_IRS), 4);
++ dwarf2_emit_insn (4);
++ fix_new (frag_now, f - frag_now->fr_literal, 4,
++ reloc->reloc_expression.X_add_symbol,
++ reloc->reloc_expression.X_add_number, 0,
++ BFD_RELOC_NIOS2_HIADJ16);
++ fix_new (frag_now, f + 4 - frag_now->fr_literal, 4,
++ reloc->reloc_expression.X_add_symbol,
++ reloc->reloc_expression.X_add_number, 0, BFD_RELOC_NIOS2_LO16);
++
++ }
++}
++
++/* Function md_chars_to_number takes the sequence of
++ bytes in buf and returns the corresponding value
++ in an int. n must be 1, 2 or 4. */
++valueT
++md_chars_to_number (char *buf, int n)
++{
++ int i;
++ valueT val;
++
++ gas_assert (n == 1 || n == 2 || n == 4);
++
++ val = 0;
++ if (target_big_endian)
++ {
++ for (i = 0; i < n; ++i)
++ {
++ val = val | ((buf[i] & 0xff) << 8 * (n - (i + 1)));
++ }
++ }
++ else
++ {
++ for (i = 0; i < n; ++i)
++ {
++ val = val | ((buf[i] & 0xff) << 8 * i);
++ }
++ }
++ return val;
++}
++
++
++/* This function turns a C long int, short int or char
++ into the series of bytes that represent the number
++ on the target machine. */
++void
++md_number_to_chars (char *buf, valueT val, int n)
++{
++ gas_assert (n == 1 || n == 2 || n == 4);
++ if (target_big_endian)
++ {
++ number_to_chars_bigendian (buf, val, n);
++ }
++ else
++ {
++ number_to_chars_littleendian (buf, val, n);
++ }
++}
++
++/* This function is identical to md_number_to_chars. */
++void
++md_number_to_imm (char *buf, valueT val, int n)
++{
++ md_number_to_chars (buf, val, n);
++}
++
++/* This function is identical to md_number_to_chars. */
++void
++md_number_to_disp (char *buf, valueT val, int n)
++{
++ md_number_to_chars (buf, val, n);
++}
++
++/* This function is identical to md_number_to_chars. */
++void
++md_number_to_field (char *buf, valueT val, int n)
++{
++ md_number_to_chars (buf, val, n);
++}
++
++/* Turn a string in input_line_pointer into a floating point constant
++ of type TYPE, and store the appropriate bytes in *LITP. The number
++ of LITTLENUMS emitted is stored in *SIZEP. An error message is
++ returned, or NULL on OK. */
++char *
++md_atof (int type, char *litP, int *sizeP)
++{
++ int prec;
++ LITTLENUM_TYPE words[4];
++ char *t;
++ int i;
++
++ switch (type)
++ {
++ case 'f':
++ prec = 2;
++ break;
++ case 'd':
++ prec = 4;
++ break;
++ default:
++ *sizeP = 0;
++ return _("bad call to md_atof");
++ }
++
++ t = atof_ieee (input_line_pointer, type, words);
++ if (t)
++ input_line_pointer = t;
++
++ *sizeP = prec * 2;
++
++ if (! target_big_endian)
++ {
++ for (i = prec - 1; i >= 0; i--)
++ {
++ md_number_to_chars (litP, (valueT) words[i], 2);
++ litP += 2;
++ }
++ }
++ else
++ {
++ for (i = 0; i < prec; i++)
++ {
++ md_number_to_chars (litP, (valueT) words[i], 2);
++ litP += 2;
++ }
++ }
++
++ return NULL;
++}
++
++
++
++int md_short_jump_size;
++int md_long_jump_size;
++
++void
++md_create_short_jump (char *result_ptr ATTRIBUTE_UNUSED,
++ addressT from_addr ATTRIBUTE_UNUSED,
++ addressT to_addr ATTRIBUTE_UNUSED,
++ fragS * frag ATTRIBUTE_UNUSED,
++ symbolS * to_symbol ATTRIBUTE_UNUSED)
++{
++ abort ();
++}
++
++void
++md_create_long_jump (char *ptr ATTRIBUTE_UNUSED,
++ addressT from_addr ATTRIBUTE_UNUSED,
++ addressT to_addr ATTRIBUTE_UNUSED,
++ fragS * frag ATTRIBUTE_UNUSED,
++ symbolS * to_symbol ATTRIBUTE_UNUSED)
++{
++ abort ();
++}
++
++int
++md_estimate_size_before_relax (fragS * fragp, segT segment ATTRIBUTE_UNUSED)
++{
++ /* We only support ELF targets. */
++
++ switch (nios2_as_options.relax)
++ {
++ case relax_none:
++ case relax_section:
++ break;
++ case relax_all:
++ /* The NIOS2 linker performs relaxation so the assembler
++ always assumes the worst case, so that the linker can
++ replace with a better case if possible - this way, linker
++ relaxation can never cause a short branch to be out of range. */
++ while (nios2_relax_table[fragp->fr_subtype].rlx_more != 0)
++ fragp->fr_subtype = nios2_relax_table[fragp->fr_subtype].rlx_more;
++ break;
++ default:
++ abort ();
++ break;
++ }
++
++ /* Return the estimated size of the frag. */
++ return nios2_relax_table[fragp->fr_subtype].rlx_length;
++}
++
++
++void
++md_convert_frag (bfd * headers ATTRIBUTE_UNUSED, segT seg ATTRIBUTE_UNUSED,
++ fragS * fragp)
++{
++ unsigned char *buffer = fragp->fr_literal + fragp->fr_fix;
++ relax_substateT subtype = fragp->fr_subtype;
++ unsigned int growth = RELAX_SIZE (subtype);
++ unsigned int br_opcode, br_op_a, br_op_b;
++
++ switch (subtype)
++ {
++ case UBRANCH:
++ /* We just need to generate the fixup for the symbol and offset. */
++ fix_new (fragp, fragp->fr_fix, 4, fragp->fr_symbol, fragp->fr_offset, 1,
++ BFD_RELOC_16_PCREL);
++ break;
++ case UJMP:
++ /* Replace ubranch at fr_fix with :
++ movhi at, %hi(symbol+offset)
++ ori at, %lo(symbol+offset)
++ jmp at
++ */
++ md_number_to_chars (buffer, OP_MATCH_ORHI | 0x00400000, 4);
++ md_number_to_chars (buffer + 4, OP_MATCH_ORI | 0x08400000, 4);
++ md_number_to_chars (buffer + 8, OP_MATCH_JMP | 0x08000000, 4);
++ fix_new (fragp, fragp->fr_fix, 4, fragp->fr_symbol, fragp->fr_offset, 0,
++ BFD_RELOC_NIOS2_UJMP);
++ break;
++ case CBRANCH:
++ /* We just need to generate the fixup for the symbol and offset. */
++ fix_new (fragp, fragp->fr_fix, 4, fragp->fr_symbol, fragp->fr_offset, 1,
++ BFD_RELOC_16_PCREL);
++ break;
++ case CJMP:
++ /* Replace cbranch at fr_fix with :
++ b(opposite condition) r, s, skip
++ movhi at, %hi(symbol+offset)
++ ori at, %lo(symbol+offset)
++ jmp at
++ skip:
++ ...
++ */
++ br_opcode = md_chars_to_number (buffer, 4);
++
++ switch (br_opcode & OP_MASK_OP)
++ {
++ case OP_MATCH_BEQ:
++ br_opcode =
++ (br_opcode & ~OP_MASK_OP) | OP_MATCH_BNE | (12 << OP_SH_IMM16);
++ break;
++ case OP_MATCH_BNE:
++ br_opcode =
++ (br_opcode & ~OP_MASK_OP) | OP_MATCH_BEQ | (12 << OP_SH_IMM16);
++ break;
++ case OP_MATCH_BGE:
++ case OP_MATCH_BGEU:
++ case OP_MATCH_BLT:
++ case OP_MATCH_BLTU:
++ /* Swap the operands. */
++ br_op_a = (br_opcode & OP_MASK_RRT) << 5;
++ br_op_b = (br_opcode & OP_MASK_RRS) >> 5;
++ br_opcode =
++ (br_opcode & ~(OP_MASK_RRS | OP_MASK_RRT)) | br_op_a | br_op_b |
++ (12 << OP_SH_IMM16);
++ break;
++ default:
++ as_bad_where (fragp->fr_file, fragp->fr_line,
++ _("expecting conditional branch for relaxation\n"));
++ abort ();
++ }
++
++ md_number_to_chars (buffer, br_opcode, 4);
++ md_number_to_chars (buffer + 4, OP_MATCH_ORHI | 0x00400000, 4);
++ md_number_to_chars (buffer + 8, OP_MATCH_ORI | 0x08400000, 4);
++ md_number_to_chars (buffer + 12, OP_MATCH_JMP | 0x08000000, 4);
++ fix_new (fragp, fragp->fr_fix + 4, 4, fragp->fr_symbol,
++ fragp->fr_offset, 0, BFD_RELOC_NIOS2_CJMP);
++ break;
++ default:
++ as_bad_where (fragp->fr_file, fragp->fr_line,
++ _("can't relax instruction\n"));
++ abort ();
++ break;
++ }
++
++ fragp->fr_fix += growth;
++}
++
++
++/* Round up section size. */
++valueT
++md_section_align (asection * seg ATTRIBUTE_UNUSED, valueT size)
++{
++ /* I think byte alignment is fine here */
++ return size;
++}
++
++
++int
++nios2_force_relocation (fixS * fixp)
++{
++ if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
++ || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY
++ || fixp->fx_r_type == BFD_RELOC_NIOS2_ALIGN)
++ return 1;
++
++ return generic_force_reloc (fixp);
++}
++
++/* nios2_fix_adjustable is called to see whether a reloc against a defined
++ symbol should be converted into a reloc against a section. */
++int
++nios2_fix_adjustable (fixS * fixp)
++{
++ if (fixp->fx_addsy == NULL)
++ return 1;
++
++#ifdef OBJ_ELF
++ /* Prevent all adjustments to global symbols. */
++ if (OUTPUT_FLAVOR == bfd_target_elf_flavour
++ && (S_IS_EXTERNAL (fixp->fx_addsy) || S_IS_WEAK (fixp->fx_addsy)))
++ return 0;
++#endif
++ if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
++ || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
++ return 0;
++
++ /* Preserve relocations against symbols with function type. */
++ if (symbol_get_bfdsym (fixp->fx_addsy)->flags & BSF_FUNCTION)
++ return 0;
++
++ /* Don't allow symbols to be discarded on GOT related relocs. */
++ if (fixp->fx_r_type == BFD_RELOC_NIOS2_GOT16
++ || fixp->fx_r_type == BFD_RELOC_NIOS2_CALL16
++ || fixp->fx_r_type == BFD_RELOC_NIOS2_GOTOFF_LO
++ || fixp->fx_r_type == BFD_RELOC_NIOS2_GOTOFF_HA
++ || fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_GD16
++ || fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_LDM16
++ || fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_LDO16
++ || fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_IE16
++ || fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_LE16
++ || fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_DTPMOD
++ || fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_DTPREL
++ || fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_TPREL
++ || fixp->fx_r_type == BFD_RELOC_NIOS2_GOTOFF)
++ return 0;
++
++ return 1;
++}
++
++/* nios2_frob_symbol is called in adjust_reloc_syms through the macro
++ tc_frob_symbol - it is used to remove *ABS* references from the
++ symbol table. */
++int
++nios2_frob_symbol (symbolS * symp)
++{
++ if ((OUTPUT_FLAVOR == bfd_target_elf_flavour
++ && (symp) == section_symbol (absolute_section))
++ || !S_IS_DEFINED (symp))
++ return 1;
++ else
++ return 0;
++}
++
++/* The function tc_gen_reloc creates a relocation structure for the
++ fixup fixp, and returns a pointer to it. This structure is passed
++ to bfd_install_relocation so that it can be written to the object
++ file for linking.
++*/
++arelent *
++tc_gen_reloc (asection * section ATTRIBUTE_UNUSED, fixS * fixp)
++{
++ arelent *reloc;
++ reloc = (arelent *) xmalloc (sizeof (arelent));
++ reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
++ *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
++
++ reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
++ reloc->addend = fixp->fx_offset; // fixp->fx_addnumber;
++
++ if (fixp->fx_pcrel)
++ {
++ switch (fixp->fx_r_type)
++ {
++ case BFD_RELOC_16:
++ fixp->fx_r_type = BFD_RELOC_16_PCREL;
++ break;
++ case BFD_RELOC_NIOS2_LO16:
++ fixp->fx_r_type = BFD_RELOC_NIOS2_PCREL_LO;
++ break;
++ case BFD_RELOC_NIOS2_HIADJ16:
++ fixp->fx_r_type = BFD_RELOC_NIOS2_PCREL_HA;
++ break;
++ default:
++ break;
++ }
++ }
++
++ reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type);
++ if (reloc->howto == NULL)
++ {
++ as_bad_where (fixp->fx_file, fixp->fx_line,
++ _("can't represent relocation type %s"),
++ bfd_get_reloc_code_name (fixp->fx_r_type));
++
++ /* Set howto to a garbage value so that we can keep going. */
++ reloc->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32);
++ gas_assert (reloc->howto != NULL);
++ }
++ return reloc;
++}
++
++long
++md_pcrel_from (fixS * fixP ATTRIBUTE_UNUSED)
++{
++ return 0;
++}
++
++
++/* Apply a fixup to the object file. */
++void
++md_apply_fix (fixS * fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED)
++{
++ const struct nios2_opcode *opcode;
++ enum overflow_type overflow_msg_type;
++ bfd_boolean overflowed = FALSE;
++ valueT fixup = 0;
++
++ /* Assert that the fixup is one we can handle. */
++ gas_assert (fixP != NULL && valP != NULL &&
++ (fixP->fx_r_type == BFD_RELOC_8 ||
++ fixP->fx_r_type == BFD_RELOC_16 ||
++ fixP->fx_r_type == BFD_RELOC_32 ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_S16 ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_U16 ||
++ fixP->fx_r_type == BFD_RELOC_16_PCREL ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_CALL26 ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_IMM5 ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_CACHE_OPX ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_IMM6 ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_IMM8 ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_HI16 ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_LO16 ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_HIADJ16 ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_GPREL ||
++ fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT ||
++ fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_UJMP ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_CJMP ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_CALLR ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_ALIGN ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_GOT16 ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_CALL16 ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_GOTOFF_LO ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_GOTOFF_HA ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_TLS_GD16 ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_TLS_LDM16 ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_TLS_LDO16 ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_TLS_IE16 ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_TLS_LE16 ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_GOTOFF ||
++ fixP->fx_r_type == BFD_RELOC_NIOS2_TLS_DTPREL
++ /* Add other relocs here as we generate them. */
++ ));
++
++
++ /* The value passed in valP can be the value of a fully
++ resolved expression, or it can be the value of a partially
++ resolved expression. In the former case, both fixP->fx_addsy
++ and fixP->fx_subsy are NULL, and fixP->fx_offset == *valP, and
++ we can fix up the instruction that fixP relates to.
++ In the latter case, one or both of fixP->fx_addsy and
++ fixP->fx_subsy are not NULL, and fixP->fx_offset may or may not
++ equal *valP. We don't need to check for fixP->fx_subsy being null
++ because the generic part of the assembler generates an error if
++ it is not an absolute symbol. */
++
++ if (fixP->fx_addsy != NULL)
++ {
++ fixP->fx_addnumber = fixP->fx_offset;
++ fixP->fx_done = 0;
++
++ switch (fixP->fx_r_type)
++ {
++ case BFD_RELOC_NIOS2_TLS_GD16:
++ case BFD_RELOC_NIOS2_TLS_LDM16:
++ case BFD_RELOC_NIOS2_TLS_LDO16:
++ case BFD_RELOC_NIOS2_TLS_IE16:
++ case BFD_RELOC_NIOS2_TLS_LE16:
++ case BFD_RELOC_NIOS2_TLS_DTPMOD:
++ case BFD_RELOC_NIOS2_TLS_DTPREL:
++ case BFD_RELOC_NIOS2_TLS_TPREL:
++ S_SET_THREAD_LOCAL (fixP->fx_addsy);
++ break;
++ default:
++ break;
++ }
++ }
++ else
++ {
++ valueT value;
++
++ char *buf;
++ reloc_howto_type *howto;
++ howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
++
++ if (howto == NULL)
++ {
++ as_bad_where (fixP->fx_file, fixP->fx_line,
++ _("relocation is not supported"));
++ }
++ else
++ {
++ fixup += *valP;
++
++ /* If this is a pc-relative relocation, we need to
++ subtract the current offset within the object file
++ FIXME : for some reason fixP->fx_pcrel isn't 1 when it should be
++ so I'm using the howto structure instead to determine this. */
++ if (howto->pc_relative == 1)
++ fixup = fixup - (fixP->fx_frag->fr_address + fixP->fx_where + 4);
++
++
++
++ /* Get the instruction to be fixed up. */
++ buf = fixP->fx_frag->fr_literal + fixP->fx_where;
++ value = md_chars_to_number (buf, 4);
++
++ /* What opcode is the instruction? This will determine
++ whether we check for overflow in immediate values
++ and what error message we get. */
++ opcode = nios2_find_opcode_hash (value);
++ overflow_msg_type = opcode->overflow_msg;
++
++ overflowed = nios2_check_overflow (fixup, howto);
++
++
++ if (overflowed)
++ {
++ unsigned int range_min;
++ unsigned int range_max;
++ unsigned int address;
++ switch (overflow_msg_type)
++ {
++ case call_target_overflow:
++ range_min =
++ ((fixP->fx_frag->fr_address +
++ fixP->fx_where) & 0xf0000000);
++ range_max = range_min + 0x0fffffff;
++ address = fixup | range_min;
++
++ as_bad_where (fixP->fx_file, fixP->fx_line,
++ _(overflow_msgs[call_target_overflow]),
++ address, range_min, range_max);
++ break;
++ case branch_target_overflow:
++ as_bad_where (fixP->fx_file, fixP->fx_line,
++ _(overflow_msgs[branch_target_overflow]),
++ fixup, BYTE_B, BYTE_F);
++ break;
++ case address_offset_overflow:
++ as_bad_where (fixP->fx_file, fixP->fx_line,
++ _(overflow_msgs[address_offset_overflow]),
++ opcode->name, fixup, -32768, 32767);
++ break;
++ case signed_immed16_overflow:
++ as_bad_where (fixP->fx_file, fixP->fx_line,
++ _(overflow_msgs[signed_immed16_overflow]),
++ fixup, -32768, 32767);
++ break;
++ case unsigned_immed16_overflow:
++ as_bad_where (fixP->fx_file, fixP->fx_line,
++ _(overflow_msgs[unsigned_immed16_overflow]),
++ fixup, 0, 65535);
++ break;
++ case unsigned_immed5_overflow:
++ as_bad_where (fixP->fx_file, fixP->fx_line,
++ _(overflow_msgs[unsigned_immed5_overflow]),
++ fixup, 0, 31);
++ break;
++ case custom_opcode_overflow:
++ as_bad_where (fixP->fx_file, fixP->fx_line,
++ _(overflow_msgs[custom_opcode_overflow]),
++ fixup, 0, 255);
++ break;
++ default:
++ as_bad_where (fixP->fx_file, fixP->fx_line,
++ _
++ ("unspecified overflow in immediate argument"));
++ break;
++ }
++ }
++
++
++ /* Apply the rightshift. */
++ fixup = ((signed)fixup) >> howto->rightshift;
++
++ /* Truncate the fixup to right size. */
++ switch (fixP->fx_r_type)
++ {
++ case BFD_RELOC_NIOS2_HI16:
++ fixup = (fixup >> 16) & 0xFFFF;
++ break;
++ case BFD_RELOC_NIOS2_LO16:
++ fixup = fixup & 0xFFFF;
++ break;
++ case BFD_RELOC_NIOS2_HIADJ16:
++ fixup = ((fixup >> 16) & 0xFFFF) + ((fixup >> 15) & 0x01);
++ break;
++ default:
++ fixup =
++ (fixup << (32 - howto->bitsize)) >> (32 - howto->bitsize);
++ break;
++ }
++
++ /* Fixup the instruction. */
++ value = (value & ~howto->dst_mask) | (fixup << howto->bitpos);
++ md_number_to_chars (buf, value, 4);
++ }
++
++ fixP->fx_done = 1;
++ }
++
++ if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT)
++ {
++ fixP->fx_done = 0;
++ if (fixP->fx_addsy
++ && !S_IS_DEFINED (fixP->fx_addsy) && !S_IS_WEAK (fixP->fx_addsy))
++ S_SET_WEAK (fixP->fx_addsy);
++ }
++ else if (fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
++ {
++ fixP->fx_done = 0;
++ }
++}
++
++bfd_boolean
++nios2_check_overflow (valueT fixup, reloc_howto_type * howto)
++{
++ /* Apply the rightshift before checking for overflow. */
++ fixup = ((signed)fixup) >> howto->rightshift;
++
++ /* Check for overflow - return TRUE if overflow, FALSE if not. */
++ switch (howto->complain_on_overflow)
++ {
++ case complain_overflow_dont:
++ break;
++ case complain_overflow_bitfield:
++ if ((fixup >> howto->bitsize) != 0)
++ return TRUE;
++ break;
++ case complain_overflow_signed:
++ if ((fixup & 0x80000000) > 0)
++ {
++ /* Check for negative overflow. */
++ if ((signed) fixup < ((signed) 0x80000000 >> howto->bitsize))
++ return TRUE;
++ }
++ else
++ {
++ /* Check for positive overflow. */
++ if (fixup >= ((unsigned) 1 << (howto->bitsize - 1)))
++ return TRUE;
++ }
++ break;
++ case complain_overflow_unsigned:
++ if ((fixup >> howto->bitsize) != 0)
++ return TRUE;
++ break;
++ default:
++ as_bad (_("error checking for overflow - broken assembler"));
++ break;
++ }
++
++ return FALSE;
++}
++
++/* Called just before the assembler exits. */
++void
++md_end ()
++{
++ /* FIXME - not yet implemented */
++}
++
++/* Under ELF we need to default _GLOBAL_OFFSET_TABLE.
++ Otherwise we have no need to default values of symbols. */
++
++symbolS *
++md_undefined_symbol (char * name ATTRIBUTE_UNUSED)
++{
++#ifdef OBJ_ELF
++ if (name[0] == '_' && name[1] == 'G'
++ && streq (name, GLOBAL_OFFSET_TABLE_NAME))
++ {
++ if (!GOT_symbol)
++ {
++ if (symbol_find (name))
++ as_bad ("GOT already in the symbol table");
++
++ GOT_symbol = symbol_new (name, undefined_section,
++ (valueT) 0, & zero_address_frag);
++ }
++
++ return GOT_symbol;
++ }
++#endif
++
++ return 0;
++}
++
++
++/* Creates a new nios2_insn_relocS and returns a pointer to it. */
++nios2_insn_relocS *
++nios2_insn_reloc_new (bfd_reloc_code_real_type reloc_type, unsigned int pcrel)
++{
++ nios2_insn_relocS *retval;
++ retval = (nios2_insn_relocS *) malloc (sizeof (nios2_insn_relocS));
++ if (retval == NULL)
++ {
++ as_bad (_("can't create relocation"));
++ abort ();
++ }
++
++ /* Fill out the fields with default values. */
++ retval->reloc_next = NULL;
++ retval->reloc_type = reloc_type;
++ retval->reloc_pcrel = pcrel;
++ return retval;
++}
++
++/* Frees up memory previously allocated by nios2_insn_reloc_new(). */
++void
++nios2_insn_reloc_destroy (nios2_insn_relocS * reloc)
++{
++ gas_assert (reloc != NULL);
++ free (reloc);
++}
++
++/* The various nios2_assemble_* functions call this
++ function to generate an expression from a string representing an expression.
++ It then tries to evaluate the expression, and if it can, returns its value.
++ If not, it creates a new nios2_insn_relocS and stores the expression and
++ reloc_type for future use. */
++unsigned long
++nios2_assemble_expression (const char *exprstr,
++ nios2_insn_infoS * insn,
++ nios2_insn_relocS * prev_reloc,
++ bfd_reloc_code_real_type reloc_type,
++ unsigned int pcrel)
++{
++ nios2_insn_relocS *reloc;
++ char *saved_line_ptr;
++ unsigned short value;
++ int i;
++
++ gas_assert (exprstr != NULL);
++ gas_assert (insn != NULL);
++
++ /* Check for relocation operators.
++ Change the relocation type and advance the ptr to the start of
++ the expression proper. */
++ for (i = 0; i < nios2_num_special_relocs; i++)
++ {
++ if (strstr (exprstr, nios2_special_reloc[i].string) != NULL)
++ {
++ reloc_type = nios2_special_reloc[i].reloc_type;
++ exprstr += strlen (nios2_special_reloc[i].string) + 1;
++
++ /* %lo and %hiadj have different meanings for PC-relative
++ expressions. */
++ if (pcrel)
++ {
++ if (reloc_type == BFD_RELOC_NIOS2_LO16)
++ reloc_type = BFD_RELOC_NIOS2_PCREL_LO;
++ if (reloc_type == BFD_RELOC_NIOS2_HIADJ16)
++ reloc_type = BFD_RELOC_NIOS2_PCREL_HA;
++ }
++
++ break;
++ }
++ }
++
++ /* We potentially have a relocation. */
++ reloc = nios2_insn_reloc_new (reloc_type, pcrel);
++ if (prev_reloc != NULL)
++ prev_reloc->reloc_next = reloc;
++ else
++ insn->insn_reloc = reloc;
++
++ /* Parse the expression string. */
++ saved_line_ptr = input_line_pointer;
++ input_line_pointer = (char *) exprstr;
++ expression (&reloc->reloc_expression);
++ input_line_pointer = saved_line_ptr;
++
++ /* This is redundant as the fixup will put this into
++ the instruction, but it is included here so that
++ self-test mode (-r) works. */
++ value = 0;
++ if (nios2_mode == NIOS2_MODE_TEST)
++ {
++ if (reloc->reloc_expression.X_op == O_constant)
++ value = reloc->reloc_expression.X_add_number;
++ }
++
++ return (unsigned long) value;
++}
++
++/* The function consume_separate takes a pointer into a string
++ of instruction tokens (args) and a pointer into a string representing
++ the expected sequence of tokens and separators. It finds the first
++ instance of the character pointed to by separator in argStr, and
++ returns a pointer to the next element of argStr, which is the
++ following token in the sequence. */
++char *
++nios2_consume_separator (char *argStr, const char *separator)
++{
++ char *argPtr;
++
++ /* If we have a opcode reg, expr(reg) type instruction, and
++ * we are separating the expr from the (reg), we find the last
++ * (, just in case the expression has brackets. */
++
++ if (*separator == '(')
++ argPtr = strrchr (argStr, *separator);
++ else
++ argPtr = strchr (argStr, *separator);
++
++ if (argPtr != NULL)
++ *argPtr++ = 0;
++ else
++ as_bad (_("expecting %c near %s"), *separator, argStr);
++ return argPtr;
++}
++
++/* The function consume_arg takes a pointer into a string
++ of instruction tokens (args) and a pointer into a string
++ representing the expected sequence of tokens and separators.
++ It checks whether the first argument in argStr is of the
++ expected type, throwing an error if it is not, and returns
++ the pointer argStr. */
++char *
++nios2_consume_arg (char *argStr, const char *argType)
++{
++ char *temp;
++ int regno = -1;
++
++ switch (*argType)
++ {
++ case 'c':
++ if (strncmp (argStr, "ctl", strlen ("ctl")) != 0
++ && strncmp (argStr, "cpuid", strlen ("cpuid")) != 0
++ && strncmp (argStr, "status", strlen ("status")) != 0
++ && strncmp (argStr, "estatus", strlen ("estatus")) != 0
++ && strncmp (argStr, "bstatus", strlen ("bstatus")) != 0
++ && strncmp (argStr, "ienable", strlen ("ienable")) != 0
++ && strncmp (argStr, "ipending", strlen ("ipending")) != 0
++ && strncmp (argStr, "exception", strlen ("exception")) != 0
++ && strncmp (argStr, "pteaddr", strlen ("pteaddr")) != 0
++ && strncmp (argStr, "tlbacc", strlen ("tlbacc")) != 0
++ && strncmp (argStr, "tlbmisc", strlen ("tlbmisc")) != 0
++ && strncmp (argStr, "fstatus", strlen ("fstatus")) != 0
++ && strncmp (argStr, "config", strlen ("config")) != 0
++ && strncmp (argStr, "mpubase", strlen ("mpubase")) != 0
++ && strncmp (argStr, "mpuacc", strlen ("mpuacc")) != 0
++ && strncmp (argStr, "badaddr", strlen ("badaddr")) != 0)
++ {
++ as_bad (_("expecting control register"));
++ }
++ break;
++ case 'd':
++ case 's':
++ case 't':
++
++ /* We check to make sure we don't have a control register. */
++ if (strncmp (argStr, "ctl", strlen ("ctl")) == 0
++ || strncmp (argStr, "cpuid", strlen ("cpuid")) == 0
++ || strncmp (argStr, "status", strlen ("status")) == 0
++ || strncmp (argStr, "estatus", strlen ("estatus")) == 0
++ || strncmp (argStr, "bstatus", strlen ("bstatus")) == 0
++ || strncmp (argStr, "ienable", strlen ("ienable")) == 0
++ || strncmp (argStr, "ipending", strlen ("ipending")) == 0
++ || strncmp (argStr, "exception", strlen ("exception")) == 0
++ || strncmp (argStr, "pteaddr", strlen ("pteaddr")) == 0
++ || strncmp (argStr, "tlbacc", strlen ("tlbacc")) == 0
++ || strncmp (argStr, "tlbmisc", strlen ("tlbmisc")) == 0
++ || strncmp (argStr, "fstatus", strlen ("fstatus")) == 0
++ || strncmp (argStr, "config", strlen ("config")) == 0
++ || strncmp (argStr, "mpubase", strlen ("mpubase")) == 0
++ || strncmp (argStr, "mpuacc", strlen ("mpuacc")) == 0
++ || strncmp (argStr, "badaddr", strlen ("badaddr")) == 0)
++ {
++ as_bad (_("illegal use of control register"));
++ }
++
++ /* And whether coprocessor registers are valid here. */
++ if (nios2_coproc_reg (argStr)
++ && insn.insn_nios2_opcode->match != OP_MATCH_CUSTOM)
++ {
++ as_bad (_("illegal use of coprocessor register\n"));
++ }
++
++
++ /* Extract a register number if the register is of the
++ form r[0-9]+, if it is a normal register, set
++ regno to its number (0-31), else set regno to -1. */
++ if (argStr[0] == 'r' && ISDIGIT (argStr[1]))
++ {
++ char *p = argStr;
++
++ ++p;
++ regno = 0;
++ do
++ {
++ regno *= 10;
++ regno += *p - '0';
++ ++p;
++ }
++ while (ISDIGIT (*p));
++ }
++ else
++ regno = -1;
++
++ /* And whether we are using at. */
++ if (!nios2_as_options.noat
++ && (regno == 1
++ || strncmp (argStr, "at", strlen ("at")) == 0))
++ as_warn (_("Register at (r1) can sometimes be corrupted by assembler "
++ "optimizations.\n"
++ "Use .set noat to turn off those optimizations (and this "
++ "warning)."));
++
++ /* And whether we are using oci registers. */
++ if (!nios2_as_options.nobreak
++ && (regno == 25
++ || strncmp (argStr, "bt", strlen ("bt")) == 0))
++ as_warn (_("The debugger will corrupt bt (r25). If you don't need to "
++ "debug this\n"
++ "code then use .set nobreak to turn off this warning."));
++
++ if (!nios2_as_options.nobreak
++ && (regno == 30
++ || strncmp (argStr, "ba", strlen ("ba")) == 0))
++ as_warn (_("The debugger will corrupt ba (r30). If you don't need to "
++ "debug this\n"
++ "code then use .set nobreak to turn off this warning."));
++ break;
++ case 'i':
++ case 'u':
++ if (*argStr == '%')
++ {
++ if (strstr (argStr, "%hi(") || strstr (argStr, "%lo(")
++ || strstr (argStr, "%hiadj(") || strstr (argStr, "%gprel(")
++ || strstr (argStr, "%got(") || strstr (argStr, "%call(")
++ || strstr (argStr, "%gotoff_lo(")
++ || strstr (argStr, "%gotoff_hiadj(")
++ || strstr (argStr, "%tls_gd(") || strstr (argStr, "%tls_ldm(")
++ || strstr (argStr, "%tls_ldo(") || strstr (argStr, "%tls_ie(")
++ || strstr (argStr, "%tls_le(") || strstr (argStr, "%gotoff("))
++ {
++ /* We zap the brackets because we don't want them confused with
++ separators. */
++ temp = strchr (argStr, '(');
++ if (temp != NULL)
++ *temp = ' ';
++ temp = strchr (argStr, ')');
++ if (temp != NULL)
++ *temp = ' ';
++ }
++ else
++ as_bad (_("badly formed expression near %s"), argStr);
++ }
++ break;
++ case 'm':
++ case 'j':
++ case 'k':
++ case 'l':
++ case 'b':
++ /* We can't have %hi, %lo or %hiadj here. */
++ if (*argStr == '%')
++ as_bad (_("badly formed expression near %s"), argStr);
++ break;
++ default:
++ break;
++ }
++
++#if 0
++ /* ??? SPR:173865 This is actually supported by the HW but the documentation
++ is a bit funny.
++ The compiler really want the extra register, so let it have it! */
++ /* checks for jmp 31 */
++ /* TODO: move test that insn is jmp to somewhere better.*/
++ if ((strncmp (insn.insn_nios2_opcode->name, "jmp", strlen ("jmp")) == 0)
++ && (regno == 31
++ || strncmp (argStr, "ra", strlen ("ra")) == 0))
++ as_bad (_("It is illegal to jump to the address contained in register ra "
++ "(r31). "
++ "To return from subroutines called by call or callr, use ret "
++ "instead of jmp."));
++#endif
++
++ return argStr;
++}
++
++/* The principal argument parsing function which takes a string
++ representing the instruction arguments, and extracts the argument
++ tokens. */
++void
++nios2_parse_args (char *argStr, const char *parseStr, char **parsedArgs)
++{
++ char *p;
++ char *end = NULL;
++ int i;
++ p = argStr;
++ i = 0;
++ bfd_boolean terminate = FALSE;
++
++ /* This rest of this function is it too fragile and it mostly works,
++ therefore special case this one. */
++ if (*parseStr == 0 && argStr != 0)
++ {
++ as_bad (_("too many arguments"));
++ parsedArgs[0] = NULL;
++ return;
++ }
++
++
++ while (p != NULL && !terminate && i < NIOS2_MAX_INSN_TOKENS)
++ {
++ parsedArgs[i] = nios2_consume_arg (p, parseStr);
++ ++parseStr;
++ if (*parseStr != '\0')
++ {
++ p = nios2_consume_separator (p, parseStr);
++ ++parseStr;
++ }
++ else
++ {
++ /* Check that the argument string has no trailing arguments. */
++ /* If we've got a %lo etc relocation, we've zapped the brackets with
++ spaces. */
++ if (strstr (p, "%lo") == p || strstr (p, "%hi") == p
++ || strstr (p, "%hiadj") == p || strstr (p, "%gprel") == p
++ || strstr (p, "%got") == p || strstr (argStr, "%call")
++ || strstr (p, "%gotoff_lo") == p
++ || strstr (p, "%gotoff_hiadj") == p
++ || strstr (p, "%tls_gd") == p || strstr (p, "%tls_ldm") == p
++ || strstr (p, "%tls_ldo") == p || strstr (p, "%tls_ie") == p
++ || strstr (p, "%tls_le") == p || strstr (p, "%gotoff") == p)
++ end = strpbrk (p, ",");
++ else
++ end = strpbrk (p, " ,");
++
++ if (end != NULL)
++ as_bad (_("too many arguments"));
++ }
++
++ if (*parseStr == '\0' || (p != NULL && *p == '\0'))
++ terminate = TRUE;
++ ++i;
++ }
++
++ parsedArgs[i] = NULL;
++
++ if (*parseStr != '\0' && insn.insn_nios2_opcode->match != OP_MATCH_BREAK)
++ as_bad (_("missing argument"));
++
++}
++
++
++/* Checks whether the register name is a coprocessor
++ register - returns TRUE if it is, FALSE otherwise. */
++static bfd_boolean
++nios2_coproc_reg (const char *reg_name)
++{
++ gas_assert (reg_name != NULL);
++
++ /* Check that we do have a valid register name and that it is a
++ coprocessor register.
++ It must begin with c, not be a control register, and be a valid
++ register name. */
++
++ if (strncmp (reg_name, "c", 1) == 0 &&
++ strncmp (reg_name, "ctl", strlen ("ctl")) != 0 &&
++ hash_find (nios2_reg_hash, reg_name) != NULL)
++ return TRUE;
++ else
++ return FALSE;
++}
++
++
++/*********************************************************************
++ Argument assemble functions
++
++ Description : All take an instruction argument string, and a pointer
++ to an instruction opcode. Upon return the insn_opcode
++ has the relevant fields filled in to represent the arg
++ string. The return value is NULL if successful, or
++ an error message if an error was detected
++ *********************************************************************/
++
++/* Assembles register arguments "dst, src1, src2". */
++void
++nios2_assemble_args_dst (nios2_insn_infoS * insn_info)
++{
++ struct nios2_reg *dst, *src1, *src2;
++
++ if (insn_info->insn_tokens[1] != NULL &&
++ insn_info->insn_tokens[2] != NULL && insn_info->insn_tokens[3] != NULL)
++ {
++ dst =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[1]);
++ src1 =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[2]);
++ src2 =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[3]);
++
++ if (dst == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]);
++ else
++ SET_INSN_FIELD (RRD, insn_info->insn_code, dst->index);
++
++ if (src1 == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[2]);
++ else
++ SET_INSN_FIELD (RRS, insn_info->insn_code, src1->index);
++
++ if (src2 == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[3]);
++ else
++ SET_INSN_FIELD (RRT, insn_info->insn_code, src2->index);
++
++
++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[4]);
++ }
++}
++
++
++/* Assembles arguments successfully parsed by nios2_parse_args_tsi. */
++void
++nios2_assemble_args_tsi (nios2_insn_infoS * insn_info)
++{
++ struct nios2_reg *dst, *src1;
++ unsigned int src2;
++
++ if (insn_info->insn_tokens[1] != NULL &&
++ insn_info->insn_tokens[2] != NULL && insn_info->insn_tokens[3] != NULL)
++ {
++ dst =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[1]);
++ src1 =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[2]);
++ src2 =
++ nios2_assemble_expression (insn_info->insn_tokens[3], insn_info,
++ insn_info->insn_reloc, BFD_RELOC_NIOS2_S16,
++ 0);
++
++ if (dst == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]);
++ else
++ SET_INSN_FIELD (IRT, insn_info->insn_code, dst->index);
++
++ if (src1 == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[2]);
++ else
++ SET_INSN_FIELD (IRS, insn_info->insn_code, src1->index);
++
++ SET_INSN_FIELD (IMM16, insn_info->insn_code, src2);
++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[4]);
++
++ SET_INSN_FIELD (IMM16, insn_info->insn_code, 0);
++ }
++}
++
++
++/* Assembles args successfully parsed by nios2_parse_args_tsu. */
++void
++nios2_assemble_args_tsu (nios2_insn_infoS * insn_info)
++{
++ struct nios2_reg *dst, *src1;
++ unsigned int src2;
++
++ if (insn_info->insn_tokens[1] != NULL &&
++ insn_info->insn_tokens[2] != NULL && insn_info->insn_tokens[3] != NULL)
++ {
++ dst =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[1]);
++ src1 =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[2]);
++ src2 =
++ nios2_assemble_expression (insn_info->insn_tokens[3], insn_info,
++ insn_info->insn_reloc, BFD_RELOC_NIOS2_U16,
++ 0);
++
++ if (dst == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]);
++ else
++ SET_INSN_FIELD (IRT, insn_info->insn_code, dst->index);
++
++ if (src1 == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[2]);
++ else
++ SET_INSN_FIELD (IRS, insn_info->insn_code, src1->index);
++
++ SET_INSN_FIELD (IMM16, insn_info->insn_code, src2);
++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[4]);
++
++ SET_INSN_FIELD (IMM16, insn_info->insn_code, 0);
++ }
++}
++
++
++/* Assembles args successfully parsed by nios2_parse_args_sti. */
++void
++nios2_assemble_args_sto (nios2_insn_infoS * insn_info)
++{
++ struct nios2_reg *dst, *src1;
++ unsigned int src2;
++
++ if (insn_info->insn_tokens[1] != NULL &&
++ insn_info->insn_tokens[2] != NULL && insn_info->insn_tokens[3] != NULL)
++ {
++ dst =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[1]);
++ src1 =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[2]);
++ src2 =
++ nios2_assemble_expression (insn_info->insn_tokens[3], insn_info,
++ insn_info->insn_reloc, BFD_RELOC_16_PCREL,
++ 1);
++
++ if (dst == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]);
++ else
++ SET_INSN_FIELD (IRS, insn_info->insn_code, dst->index);
++
++ if (src1 == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[2]);
++ else
++ SET_INSN_FIELD (IRT, insn_info->insn_code, src1->index);
++
++ SET_INSN_FIELD (IMM16, insn_info->insn_code, src2);
++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[4]);
++
++ SET_INSN_FIELD (IMM16, insn_info->insn_code, 0);
++ }
++}
++
++
++void
++nios2_assemble_args_o (nios2_insn_infoS * insn_info)
++{
++ unsigned long immed;
++
++ if (insn_info->insn_tokens[1] != NULL)
++ {
++ immed =
++ nios2_assemble_expression (insn_info->insn_tokens[1], insn_info,
++ insn_info->insn_reloc, BFD_RELOC_16_PCREL,
++ 1);
++ SET_INSN_FIELD (IMM16, insn_info->insn_code, immed);
++
++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[2]);
++
++ SET_INSN_FIELD (IMM16, insn_info->insn_code, 0);
++ }
++}
++
++
++void
++nios2_assemble_args_is (nios2_insn_infoS * insn_info)
++{
++ struct nios2_reg *addr_src;
++ unsigned long immed;
++
++ if (insn_info->insn_tokens[1] != NULL && insn_info->insn_tokens[2] != NULL)
++ {
++ addr_src =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[2]);
++
++ immed =
++ nios2_assemble_expression (insn_info->insn_tokens[1], insn_info,
++ insn_info->insn_reloc, BFD_RELOC_NIOS2_S16,
++ 0);
++
++ SET_INSN_FIELD (IMM16, insn_info->insn_code, immed);
++
++ if (addr_src == NULL)
++ as_bad (_("unknown base register %s"), insn_info->insn_tokens[2]);
++ else
++ SET_INSN_FIELD (RRS, insn_info->insn_code, addr_src->index);
++
++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[3]);
++
++ SET_INSN_FIELD (IMM16, insn_info->insn_code, 0);
++ }
++}
++
++
++void
++nios2_assemble_args_m (nios2_insn_infoS * insn_info)
++{
++ unsigned long immed;
++ if (insn_info->insn_tokens[1] != NULL)
++ {
++ immed =
++ nios2_assemble_expression (insn_info->insn_tokens[1], insn_info,
++ insn_info->insn_reloc,
++ BFD_RELOC_NIOS2_CALL26, 0);
++
++ SET_INSN_FIELD (IMM26, insn_info->insn_code, immed);
++
++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[2]);
++
++ SET_INSN_FIELD (IMM26, insn_info->insn_code, 0);
++ }
++}
++
++
++void
++nios2_assemble_args_s (nios2_insn_infoS * insn_info)
++{
++ struct nios2_reg *src;
++
++ if (insn_info->insn_tokens[1] != NULL)
++ {
++ src =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[1]);
++
++ if (src == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]);
++ else
++ SET_INSN_FIELD (RRS, insn_info->insn_code, src->index);
++
++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[2]);
++ }
++}
++
++
++void
++nios2_assemble_args_tis (nios2_insn_infoS * insn_info)
++{
++ struct nios2_reg *addr_src, *dst;
++ unsigned long immed;
++
++ if (insn_info->insn_tokens[1] != NULL &&
++ insn_info->insn_tokens[2] != NULL && insn_info->insn_tokens[3] != NULL)
++ {
++
++ dst =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[1]);
++ addr_src =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[3]);
++ immed =
++ nios2_assemble_expression (insn_info->insn_tokens[2], insn_info,
++ insn_info->insn_reloc, BFD_RELOC_NIOS2_S16,
++ 0);
++
++
++ if (addr_src == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[3]);
++ else
++ SET_INSN_FIELD (RRS, insn_info->insn_code, addr_src->index);
++
++ if (dst == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]);
++ else
++ SET_INSN_FIELD (RRT, insn_info->insn_code, dst->index);
++
++ SET_INSN_FIELD (IMM16, insn_info->insn_code, immed);
++
++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[4]);
++
++ SET_INSN_FIELD (IMM16, insn_info->insn_code, 0);
++ }
++}
++
++
++/* Assemble rdctl dst, ctl. */
++void
++nios2_assemble_args_dc (nios2_insn_infoS * insn_info)
++{
++ struct nios2_reg *dst, *ctl;
++
++ if (insn_info->insn_tokens[1] != NULL && insn_info->insn_tokens[2] != NULL)
++ {
++ ctl =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[2]);
++ dst =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[1]);
++
++ if (ctl == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]);
++ else
++ SET_INSN_FIELD (RCTL, insn_info->insn_code, ctl->index);
++
++ if (dst == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[2]);
++ else
++ SET_INSN_FIELD (RRD, insn_info->insn_code, dst->index);
++
++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[3]);
++ }
++}
++
++
++/* Assemble wrctl ctl, src. */
++void
++nios2_assemble_args_cs (nios2_insn_infoS * insn_info)
++{
++ struct nios2_reg *src, *ctl;
++
++ if (insn_info->insn_tokens[1] != NULL && insn_info->insn_tokens[2] != NULL)
++ {
++ ctl =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[1]);
++ src =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[2]);
++
++ if (ctl == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]);
++ else if (ctl->index == 4)
++ as_bad (_("ipending control register (ctl4) is read-only\n"));
++ else
++ SET_INSN_FIELD (RCTL, insn_info->insn_code, ctl->index);
++
++ if (src == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[2]);
++ else
++ SET_INSN_FIELD (RRS, insn_info->insn_code, src->index);
++
++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[3]);
++ }
++}
++
++
++
++void
++nios2_assemble_args_ldst (nios2_insn_infoS * insn_info)
++{
++ struct nios2_reg *dst, *src1, *src2;
++ unsigned long custom_n;
++
++ if (insn_info->insn_tokens[1] != NULL &&
++ insn_info->insn_tokens[2] != NULL &&
++ insn_info->insn_tokens[3] != NULL && insn_info->insn_tokens[4] != NULL)
++ {
++#if 0 /* ??? Unused/half commented out code */
++ char *end_p;
++ /* custom_n = nios2_strtoul(insn_info->insn_tokens[1], &end_p); */
++#endif
++ custom_n =
++ nios2_assemble_expression (insn_info->insn_tokens[1], insn_info,
++ insn_info->insn_reloc,
++ BFD_RELOC_NIOS2_IMM8, 0);
++
++ dst =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[2]);
++ src1 =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[3]);
++ src2 =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[4]);
++
++ SET_INSN_FIELD (CUSTOM_N, insn_info->insn_code, custom_n);
++
++ if (dst == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[2]);
++ else
++ SET_INSN_FIELD (RRD, insn_info->insn_code, dst->index);
++
++ if (src1 == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[3]);
++ else
++ SET_INSN_FIELD (RRS, insn_info->insn_code, src1->index);
++
++ if (src2 == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[4]);
++ else
++ SET_INSN_FIELD (RRT, insn_info->insn_code, src2->index);
++
++ /* Set or clear the bits to indicate whether coprocessor registers are
++ used. */
++ if (nios2_coproc_reg (insn_info->insn_tokens[2]))
++ SET_INSN_FIELD (CUSTOM_C, insn_info->insn_code, 0);
++ else
++ SET_INSN_FIELD (CUSTOM_C, insn_info->insn_code, 1);
++
++ if (nios2_coproc_reg (insn_info->insn_tokens[3]))
++ SET_INSN_FIELD (CUSTOM_A, insn_info->insn_code, 0);
++ else
++ SET_INSN_FIELD (CUSTOM_A, insn_info->insn_code, 1);
++
++ if (nios2_coproc_reg (insn_info->insn_tokens[4]))
++ SET_INSN_FIELD (CUSTOM_B, insn_info->insn_code, 0);
++ else
++ SET_INSN_FIELD (CUSTOM_B, insn_info->insn_code, 1);
++
++
++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[5]);
++ }
++}
++
++
++void
++nios2_assemble_args_none (nios2_insn_infoS * insn_info ATTRIBUTE_UNUSED)
++{
++ /* Nothing to do. */
++}
++
++
++void
++nios2_assemble_args_dsj (nios2_insn_infoS * insn_info)
++{
++ struct nios2_reg *dst, *src1;
++ unsigned int src2;
++
++ if (insn_info->insn_tokens[1] != NULL &&
++ insn_info->insn_tokens[2] != NULL && insn_info->insn_tokens[3] != NULL)
++ {
++ dst =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[1]);
++ src1 =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[2]);
++
++ /* A 5-bit constant expression. */
++ src2 =
++ nios2_assemble_expression (insn_info->insn_tokens[3], insn_info,
++ insn_info->insn_reloc,
++ BFD_RELOC_NIOS2_IMM5, 0);
++
++ if (dst == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]);
++ else
++ SET_INSN_FIELD (RRD, insn_info->insn_code, dst->index);
++
++ if (src1 == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[2]);
++ else
++ SET_INSN_FIELD (RRS, insn_info->insn_code, src1->index);
++
++ SET_INSN_FIELD (IMM5, insn_info->insn_code, src2);
++
++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[4]);
++
++ SET_INSN_FIELD (IMM5, insn_info->insn_code, 0);
++ }
++}
++
++
++/* Assembles register arguments "dst". */
++void
++nios2_assemble_args_d (nios2_insn_infoS * insn_info)
++{
++ struct nios2_reg *dst;
++
++ if (insn_info->insn_tokens[1] != NULL)
++ {
++ dst =
++ (struct nios2_reg *) hash_find (nios2_reg_hash,
++ insn_info->insn_tokens[1]);
++
++ if (dst == NULL)
++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]);
++ else
++ SET_INSN_FIELD (RRD, insn_info->insn_code, dst->index);
++
++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[2]);
++ }
++}
++
++/* Assemble break op. */
++void
++nios2_assemble_args_b (nios2_insn_infoS * insn_info)
++{
++ unsigned int imm5 = 0;
++
++ if (insn_info->insn_tokens[1] != NULL)
++ {
++ /* A 5-bit constant expression. */
++ imm5 =
++ nios2_assemble_expression (insn_info->insn_tokens[1], insn_info,
++ insn_info->insn_reloc,
++ BFD_RELOC_NIOS2_IMM5, 0);
++
++ SET_INSN_FIELD (TRAP_IMM5, insn_info->insn_code, imm5);
++
++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[2]);
++ }
++
++ SET_INSN_FIELD (TRAP_IMM5, insn_info->insn_code, imm5);
++
++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[2]);
++}
++
++/* Machine-dependent assembler directive handling follows */
++
++/* .set sets assembler options eg noat/at and is also used
++ to set symbol values (.equ, .equiv ). */
++void
++s_nios2_set (int equiv)
++{
++ char *directive = input_line_pointer;
++ char delim = get_symbol_end ();
++ char *endline;
++ endline = input_line_pointer;
++ *endline = delim;
++
++ /* We only want to handle ".set XXX" if the
++ user has tried ".set XXX, YYY" they are not
++ trying a directive. This prevents
++ us from polluting the name space. */
++
++ SKIP_WHITESPACE ();
++
++ if (is_end_of_line[(unsigned char) *input_line_pointer])
++ {
++ bfd_boolean done = FALSE;
++ *endline = 0;
++
++ if (!strcmp (directive, "noat"))
++ {
++ done = TRUE;
++ nios2_as_options.noat = TRUE;
++ }
++
++ if (!strcmp (directive, "at"))
++ {
++ done = TRUE;
++ nios2_as_options.noat = FALSE;
++ }
++
++ if (!strcmp (directive, "nobreak"))
++ {
++ done = TRUE;
++ nios2_as_options.nobreak = TRUE;
++ }
++
++ if (!strcmp (directive, "break"))
++ {
++ done = TRUE;
++ nios2_as_options.nobreak = FALSE;
++ }
++
++ if (!strcmp (directive, "norelax"))
++ {
++ done = TRUE;
++ nios2_as_options.relax = relax_none;
++ }
++ else if (!strcmp (directive, "relaxsection"))
++ {
++ done = TRUE;
++ nios2_as_options.relax = relax_section;
++ }
++ else if (!strcmp (directive, "relaxall"))
++ {
++ done = TRUE;
++ nios2_as_options.relax = relax_all;
++ }
++
++
++ if (done)
++ {
++ *endline = delim;
++ demand_empty_rest_of_line ();
++ return;
++ }
++ }
++
++
++ /* If we fall through to here, either we have ".set XXX, YYY"
++ or we have ".set XXX" where XXX is unknown or we have
++ a syntax error. */
++ input_line_pointer = directive;
++ *endline = delim;
++ s_set (equiv);
++}
++
++/* nop fill pattern for text section. */
++static char const nop[4] = { 0x3a, 0x88, 0x01, 0x00 };
++
++/* nios2_frob_label() is called when after a label is recognized. */
++
++void
++nios2_frob_label (symbolS * lab)
++{
++ /* Update the label's address with the current output pointer. */
++ symbol_set_frag (lab, frag_now);
++ S_SET_VALUE (lab, (valueT) frag_now_fix ());
++
++ /* Record this label for future adjustment after we find out what
++ kind of data it references, and the required alignment therewith. */
++ nios2_last_label = lab;
++}
++
++
++
++/* Hook into cons for auto-alignment. */
++
++void
++nios2_cons_align (int size)
++{
++ int log_size;
++ const char *pfill = NULL;
++
++ log_size = 0;
++ while ((size >>= 1) != 0)
++ ++log_size;
++
++ if (subseg_text_p (now_seg))
++ {
++ pfill = (const char *) &nop;
++ }
++ else
++ pfill = NULL;
++
++ if (nios2_auto_align_on)
++ nios2_align (log_size, pfill, NULL);
++
++ nios2_last_label = NULL;
++}
++
++static void
++s_nios2_sdata (int ignore ATTRIBUTE_UNUSED)
++{
++ int temp;
++
++ temp = get_absolute_expression ();
++ subseg_new (".sdata", 0);
++ demand_empty_rest_of_line ();
++}
++
++/* Map 's' to SHF_NIOS2_GPREL. */
++/* This is from the Alpha code tc-alpha.c. */
++int
++nios2_elf_section_letter (int letter, char **ptr_msg)
++{
++ if (letter == 's')
++ return SHF_NIOS2_GPREL;
++
++ *ptr_msg = _("Bad .section directive: want a,s,w,x,M,S,G,T in string");
++ return 0;
++}
++
++/* Map SHF_ALPHA_GPREL to SEC_SMALL_DATA. */
++/* This is from the Alpha code tc-alpha.c. */
++flagword
++nios2_elf_section_flags (flagword flags, int attr, int type ATTRIBUTE_UNUSED)
++{
++ if (attr & SHF_NIOS2_GPREL)
++ flags |= SEC_SMALL_DATA;
++ return flags;
++}
++
++/* Explicitly unaligned cons. */
++
++static void
++s_nios2_ucons (int nbytes)
++{
++ int hold;
++ hold = nios2_auto_align_on;
++ nios2_auto_align_on = 0;
++ cons (nbytes);
++ nios2_auto_align_on = hold;
++}
++
++static int nios2_tls_ldo_reloc;
++
++void
++nios2_cons (expressionS *exp, int size)
++{
++ /* Handle %tls_ldo(...) */
++
++ nios2_tls_ldo_reloc = 0;
++
++ SKIP_WHITESPACE ();
++ if (input_line_pointer[0] == '%')
++ {
++ if (strncmp (input_line_pointer + 1, "tls_ldo", 7) == 0)
++ {
++ if (size != 4)
++ as_bad (_("Illegal operands: %%tls_ldo in %d-byte data field"),
++ size);
++ else
++ {
++ input_line_pointer += 8;
++ nios2_tls_ldo_reloc = 1;
++ }
++ }
++ if (nios2_tls_ldo_reloc)
++ {
++ SKIP_WHITESPACE ();
++ if (input_line_pointer[0] != '(')
++ as_bad (_("Illegal operands: %%tls_ldo requires arguments in ()"));
++ else
++ {
++ int c;
++ char *end = ++input_line_pointer;
++ int npar = 0;
++
++ while (! is_end_of_line[(c = *end)])
++ {
++ if (c == '(')
++ npar++;
++ else if (c == ')')
++ {
++ if (!npar)
++ break;
++ npar--;
++ }
++ end++;
++ }
++
++ if (c != ')')
++ as_bad (_("Illegal operands: %%tls_ldo requires arguments in ()"));
++ else
++ {
++ *end = '\0';
++ expression (exp);
++ *end = c;
++ if (input_line_pointer != end)
++ as_bad (_("Illegal operands: %%tls_ldo requires arguments in ()"));
++ else
++ {
++ input_line_pointer++;
++ SKIP_WHITESPACE ();
++ c = *input_line_pointer;
++ if (! is_end_of_line[c] && c != ',')
++ as_bad (_("Illegal operands: garbage after %%tls_ldo()"));
++ }
++ }
++ }
++ }
++ }
++ if (!nios2_tls_ldo_reloc)
++ expression (exp);
++}
++
++void
++nios2_cons_fix_new (fragS *frag, int where, unsigned int nbytes,
++ expressionS *exp)
++{
++ bfd_reloc_code_real_type r;
++
++ r = (nbytes == 1 ? BFD_RELOC_8 :
++ (nbytes == 2 ? BFD_RELOC_16 :
++ (nbytes == 4 ? BFD_RELOC_32 : BFD_RELOC_64)));
++
++ if (nios2_tls_ldo_reloc)
++ r = BFD_RELOC_NIOS2_TLS_DTPREL;
++
++ fix_new_exp (frag, where, (int) nbytes, exp, 0, r);
++ nios2_tls_ldo_reloc = 0;
++}
++
++/* Handles all machine-dependent alignment needs. */
++static void
++nios2_align (int log_size, const char *pfill, symbolS * label)
++{
++ int align;
++ long max_alignment = 15;
++
++ /* The front end is prone to changing segments out from under us
++ temporarily when -g is in effect. */
++ int switched_seg_p = (nios2_current_align_seg != now_seg);
++
++ align = log_size;
++ if (align > max_alignment)
++ {
++ align = max_alignment;
++ as_bad (_("Alignment too large: %d. assumed"), align);
++ }
++ else if (align < 0)
++ {
++ as_warn (_("Alignment negative: 0 assumed"));
++ align = 0;
++ }
++
++ if (align != 0)
++ {
++ if (subseg_text_p (now_seg) && align >= 2)
++ {
++ /* First, make sure we're on a four-byte boundary, in case
++ someone has been putting .byte values the text section. */
++ if (nios2_current_align < 2 || switched_seg_p)
++ frag_align (2, 0, 0);
++
++ /* Now fill in the alignment pattern. */
++ if (pfill != NULL)
++ frag_align_pattern (align, pfill, sizeof nop, 0);
++ else
++ frag_align (align, 0, 0);
++ }
++ else
++ {
++ frag_align (align, 0, 0);
++ }
++
++ if (!switched_seg_p)
++ nios2_current_align = align;
++
++ /* If the last label was in a different section we can't align it. */
++ if (label != NULL && !switched_seg_p)
++ {
++ symbolS *sym;
++ int label_seen = FALSE;
++ struct frag *old_frag;
++ valueT old_value;
++ valueT new_value;
++
++ gas_assert (S_GET_SEGMENT (label) == now_seg);
++
++ old_frag = symbol_get_frag (label);
++ old_value = S_GET_VALUE (label);
++ new_value = (valueT) frag_now_fix ();
++
++ /* It is possible to have more than one label at a particular
++ address, especially if debugging is enabled, so we must
++ take care to adjust all the labels at this address in this
++ fragment. To save time we search from the end of the symbol
++ list, backwards, since the symbols we are interested in are
++ almost certainly the ones that were most recently added.
++ Also to save time we stop searching once we have seen at least
++ one matching label, and we encounter a label that is no longer
++ in the target fragment. Note, this search is guaranteed to
++ find at least one match when sym == label, so no special case
++ code is necessary. */
++ for (sym = symbol_lastP; sym != NULL; sym = symbol_previous (sym))
++ {
++ if (symbol_get_frag (sym) == old_frag
++ && S_GET_VALUE (sym) == old_value)
++ {
++ label_seen = TRUE;
++ symbol_set_frag (sym, frag_now);
++ S_SET_VALUE (sym, new_value);
++ }
++ else if (label_seen && symbol_get_frag (sym) != old_frag)
++ break;
++ }
++ }
++ record_alignment (now_seg, align);
++ }
++}
++
++/* This is called from HANDLE_ALIGN in tc-nios2.h. */
++
++void
++nios2_handle_align (fragS * fragp)
++{
++ /* If we are expecting to relax in the linker, then we must output a relocation
++ * to tell the linker we are aligning code. */
++ if (nios2_as_options.relax == relax_all
++ && (fragp->fr_type == rs_align
++ || fragp->fr_type == rs_align_code)
++ && fragp->fr_address + fragp->fr_fix > 0
++ && fragp->fr_offset > 1 && now_seg != bss_section)
++ fix_new (fragp, fragp->fr_fix, 4, &abs_symbol, fragp->fr_offset, 0,
++ BFD_RELOC_NIOS2_ALIGN);
++
++}
++
++/* Handle the .align pseudo-op. This aligns to a power of two. It
++ also adjusts any current instruction label. We treat this the same
++ way the MIPS port does: .align 0 turns off auto alignment. */
++
++static void
++s_nios2_align (int ignore ATTRIBUTE_UNUSED)
++{
++ int align;
++ char fill;
++ const char *pfill = NULL;
++ long max_alignment = 15;
++
++
++ align = get_absolute_expression ();
++ if (align > max_alignment)
++ {
++ align = max_alignment;
++ as_bad (_("Alignment too large: %d. assumed"), align);
++ }
++ else if (align < 0)
++ {
++ as_warn (_("Alignment negative: 0 assumed"));
++ align = 0;
++ }
++
++ if (*input_line_pointer == ',')
++ {
++ input_line_pointer++;
++ fill = get_absolute_expression ();
++ pfill = (const char *) &fill;
++ }
++ else if (subseg_text_p (now_seg))
++ {
++ pfill = (const char *) &nop;
++ }
++ else
++ {
++ pfill = NULL;
++ nios2_last_label = NULL;
++ }
++
++ if (align != 0)
++ {
++ nios2_auto_align_on = 1;
++ nios2_align (align, pfill, nios2_last_label);
++ nios2_last_label = NULL;
++ }
++ else
++ {
++ nios2_auto_align_on = 0;
++ }
++
++ demand_empty_rest_of_line ();
++}
++
++
++/* Handle the .text pseudo-op. This is like the usual one, but it
++ clears the saved last label and resets known alignment. */
++
++static void
++s_nios2_text (int i)
++{
++ s_text (i);
++ nios2_last_label = NULL;
++ nios2_current_align = 0;
++ nios2_current_align_seg = now_seg;
++}
++
++/* Handle the .data pseudo-op. This is like the usual one, but it
++ clears the saved last label and resets known alignment. */
++
++static void
++s_nios2_data (int i)
++{
++ s_data (i);
++ nios2_last_label = NULL;
++ nios2_current_align = 0;
++ nios2_current_align_seg = now_seg;
++}
++
++/* Handle the .section pseudo-op. This is like the usual one, but it
++ clears the saved last label and resets known alignment. */
++
++static void
++s_nios2_section (int ignore)
++{
++ obj_elf_section (ignore);
++ nios2_last_label = NULL;
++ nios2_current_align = 0;
++ nios2_current_align_seg = now_seg;
++}
++
++/* Convert REGNAME to a DWARF-2 register number. */
++
++int
++tc_nios2_regname_to_dw2regnum (char *regname)
++{
++ struct nios2_reg *r = (struct nios2_reg *) hash_find (nios2_reg_hash,
++ regname);
++ if (r == NULL)
++ return -1;
++ return r->index;
++}
++
++/* Initialize the DWARF-2 unwind information for this procedure. */
++
++void
++tc_nios2_frame_initial_instructions (void)
++{
++ cfi_add_CFA_def_cfa (27, 0);
++}
+Index: binutils-2.20.1/gas/config/tc-nios2.h
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/config/tc-nios2.h
+@@ -0,0 +1,124 @@
++/* NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. */
++/* tc-nios2.h -- header file for tc-nios2.c.
++
++ Copyright (C) 2003
++ by Nigel Gray (ngray@altera.com).
++
++ This file is part of GAS.
++
++ GAS is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2, or (at your option)
++ any later version.
++
++ GAS is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with GAS; see the file COPYING. If not, write to the Free
++ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
++ 02111-1307, USA. */
++
++#ifndef TC_NIOS2
++#define TC_NIOS2
++
++/*
++ * If unspecified, default to little endian. We can explicitly specify
++ * a big-endian default by configuring with --target=nios2eb-elf. We
++ * can override the default with the -EB and -EL options.
++ */
++#ifndef TARGET_BYTES_BIG_ENDIAN
++#define TARGET_BYTES_BIG_ENDIAN 0
++#endif
++
++#ifdef OBJ_ELF
++extern const char *nios2_target_format (void);
++#define TARGET_FORMAT nios2_target_format ()
++#define TARGET_ARCH bfd_arch_nios2
++#endif
++
++/* An NIOS2 instruction consists of tokens and separator characters
++// the tokens are things like the instruction name (add, or jmp etc),
++// the register indices ($5, $7 etc), and constant expressions. The
++// separator characters are commas, brackets and space.
++// The instruction name is always separated from other tokens by a space
++// The maximum number of tokens in an instruction is 5 (the instruction name,
++// 3 arguments, and a 4th string representing the expected instructin opcode
++// after assembly. The latter is only used when the assemble is running in
++// self test mode, otherwise its presence will generate an error. */
++#define NIOS2_MAX_INSN_TOKENS 6
++
++/* There are no machine-specific operands so we #define this to nothing */
++#define md_operand(x)
++
++/* function prototypes exported to rest of GAS */
++extern void md_assemble (char *op_str);
++extern void md_end (void);
++extern void md_begin (void);
++
++#define TC_FORCE_RELOCATION(fixp) nios2_force_relocation (fixp)
++extern int nios2_force_relocation (struct fix *);
++
++#define tc_fix_adjustable(fixp) nios2_fix_adjustable (fixp)
++extern int nios2_fix_adjustable (struct fix *);
++
++#define tc_frob_label(lab) nios2_frob_label(lab)
++extern void nios2_frob_label (symbolS *);
++
++#define tc_frob_symbol(symp, punt) punt = nios2_frob_symbol(symp) ? 1 : punt
++extern int nios2_frob_symbol (symbolS * symp);
++
++#define md_cons_align(nbytes) nios2_cons_align (nbytes)
++extern void nios2_cons_align (int);
++
++extern void md_convert_frag (bfd * headers, segT sec, fragS * fragP);
++
++/* When relaxing, we need to generate relocations for alignment
++ directives. */
++#define HANDLE_ALIGN(frag) nios2_handle_align (frag)
++extern void nios2_handle_align (fragS *);
++
++extern int tc_nios2_regname_to_dw2regnum (char *regname);
++
++extern void tc_nios2_frame_initial_instructions (void);
++
++#define md_relax_frag nios2_relax_frag
++extern long nios2_relax_frag
++ (segT segment, fragS * fragP, long stretch);
++
++#ifdef OBJ_ELF
++#define ELF_TC_SPECIAL_SECTIONS \
++ { ".sdata", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_NIOS2_GPREL }, \
++ { ".sbss", SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_NIOS2_GPREL }, \
++ { ".lit4", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_NIOS2_GPREL }, \
++ { ".lit8", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_NIOS2_GPREL },
++
++/* Processor specific section directives */
++#define md_elf_section_letter nios2_elf_section_letter
++extern int nios2_elf_section_letter (int, char **);
++#define md_elf_section_flags nios2_elf_section_flags
++extern flagword nios2_elf_section_flags (flagword, int, int);
++#endif
++
++#define GLOBAL_OFFSET_TABLE_NAME "_GLOBAL_OFFSET_TABLE_"
++
++#define DIFF_EXPR_OK
++
++#define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) nios2_cons (EXP, NBYTES)
++extern void nios2_cons (expressionS *exp, int size);
++
++#define TC_CONS_FIX_NEW nios2_cons_fix_new
++extern void nios2_cons_fix_new(struct frag *frag, int where,
++ unsigned int nbytes, struct expressionS *exp);
++
++/* We want .cfi_* pseudo-ops for generating unwind info. */
++#define TARGET_USE_CFIPOP 1
++#define DWARF2_DEFAULT_RETURN_COLUMN 31
++#define DWARF2_CIE_DATA_ALIGNMENT (-4)
++#define tc_regname_to_dw2regnum tc_nios2_regname_to_dw2regnum
++#define tc_cfi_frame_initial_instructions tc_nios2_frame_initial_instructions
++#define tc_cfi_no_pcrel_expr 1
++
++#endif // TC_NIOS2
+Index: binutils-2.20.1/gas/doc/c-nios2.texi
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/doc/c-nios2.texi
+@@ -0,0 +1,223 @@
++@c NOT ASSIGNED TO FSF. COPYRIGHT ALTERA.
++@c Copyright 2004
++@c This is part of the GAS manual.
++@c For copying conditions, see the file as.texinfo.
++@ifset GENERIC
++@page
++@node NiosII-Dependent
++@chapter Altera Nios II Dependent Features
++@end ifset
++@ifclear GENERIC
++@node Machine Dependencies
++@chapter ltera Nios II Dependent Features
++@end ifclear
++
++@cindex Altera Nios II support
++@cindex Nios support
++@cindex Nios II support
++@menu
++* Nios II Options:: Options
++* Nios II Syntax:: Syntax
++* Nios II Relocations:: Relocations
++* Nios II Directives:: Nios II Machine Directives
++* Nios II Opcodes:: Opcodes
++@end menu
++
++@node Nios II Options
++@section Options
++@cindex Nios II options
++@cindex options for Nios II
++
++@table @code
++
++@cindex @code{relax-all} command line option, Nios II
++@item -relax-all
++Replace all branch and call instructions with @code{jmp} and @code{callr} sequences
++
++@cindex @code{relax-section} command line option, Nios II
++@item -relax-section
++Replace identified out of range branches with @code{jmp} sequences (default)
++
++@cindex @code{no-relax} command line option, Nios II
++@item -no-relax
++Do not replace any branches or calls
++
++@cindex @code{EB} command line option, Nios II
++@item -EB
++Generate big-endian output
++
++@cindex @code{EL} command line option, Nios II
++@item -EL
++Generate little-endian output
++
++@end table
++
++
++@node Nios II Syntax
++@section Syntax
++@menu
++* Nios II Chars:: Special Characters
++@end menu
++
++
++@node Nios II Chars
++@subsection Special Characters
++
++@cindex line comment character, Nios II
++@cindex Nios II line comment character
++@samp{#} is the line comment character.
++
++@cindex line separator character, Nios II
++@cindex Nios II line separator character
++@samp{;} is the line separator character.
++
++
++@node Nios II Relocations
++@section Nios II Machine Relocations
++
++@cindex machine relocations, Nios II
++@cindex Nios II machine relocations
++
++@table @code
++@cindex @code{hiadj} directive, Nios II
++@item %hiadj(@var{expression})
++Extract the upper 16-bits of @var{expression} and add
++one if the 15th bit is set.
++
++The value of %hiadj is:
++((@var{expression} >> 16) & 0xffff) + ((@var{expression} >> 15) & 0x01).
++
++The intention of the @code{%hiadj} relocation is to be used with
++an @code{addi}, @code{ld} or @code{st} instructions
++along with a @code{%lo}.
++
++@smallexample
++movhi r2, %hiadj(symbol)
++addi r2, r2, %lo(symbol)
++@end smallexample
++
++@cindex @code{hi} directive, Nios II
++@item %hi(@var{expression})
++Extract the upper 16-bits of @var{expression}.
++
++
++@cindex @code{lo} directive, Nios II
++@item %lo(@var{expression})
++Extract the lower 16-bits of @var{expression}.
++
++
++@cindex @code{gprel} directive, Nios II
++@item %gprel(@var{expression})
++Subtract the value of the symbol @code{_gp} from
++@var{expression}.
++
++The intention of the @code{%gprel} relocation is
++to have a fast small area of memory which only
++takes a 16-bit immediate to access.
++
++@smallexample
++ .section .sdata
++fastint:
++ .int 123
++ .section .text
++ ldw r4, %gprel(fastint)(gp)
++@end smallexample
++
++
++@end table
++
++
++@node Nios II Directives
++@section Nios II Machine Directives
++
++@cindex machine directives, Nios II
++@cindex Nios II machine directives
++
++@table @code
++
++@cindex @code{align} directive, Nios II
++@item .align @var{expression} [, @var{expression}]
++This is the generic @var{.align} directive, however
++this aligns to a power of two.
++
++@cindex @code{half} directive, Nios II
++@item .half @var{expression}
++Create an aligned constant 2-bytes in size
++
++@cindex @code{word} directive, Nios II
++@item .word @var{expression}
++Create an aligned constant 4-bytes in size
++
++@cindex @code{dword} directive, Nios II
++@item .dword @var{expression}
++Create an aligned constant 8-bytes in size
++
++@cindex @code{2byte} directive, Nios II
++@item .2byte @var{expression}
++Create an un-aligned constant 2-bytes in size
++
++@cindex @code{4byte} directive, Nios II
++@item .4byte @var{expression}
++Create an un-aligned constant 4-bytes in size
++
++@cindex @code{8byte} directive, Nios II
++@item .8byte @var{expression}
++Create an un-aligned constant 8-bytes in size
++
++@cindex @code{16byte} directive, Nios II
++@item .16byte @var{expression}
++Create an un-aligned constant 16-bytes in size
++
++@cindex @code{set noat} directive, Nios II
++@item .set noat
++Allows assembly code to use @code{at} register without
++warning and macro or relaxation expansions will
++generate a warning.
++
++@cindex @code{set at} directive, Nios II
++@item .set at
++Assembly code using @code{at} register will generate
++warnings, and macro expansion and relaxation will be
++enabled.
++
++@cindex @code{set nobreak} directive, Nios II
++@item .set nobreak
++Allows assembly code to use @code{ba}, @code{bt},
++registers without warning.
++
++@cindex @code{set break} directive, Nios II
++@item .set break
++Turns warnings back on for using @code{ba}, @code{bt}
++registers.
++
++@cindex @code{set norelax} directive, Nios II
++@item .set norelax
++Do not replace any branches or calls.
++
++@cindex @code{set relaxsection} directive, Nios II
++@item .set relaxsection
++Replace identified out of range branches with
++@code{jmp} sequences (default).
++
++@cindex @code{set relaxall} directive, Nios II
++@item .set relaxsection
++Replace all branch and call instructions with
++@code{jmp} and @code{callr} sequences.
++
++@cindex @code{set} directive, Nios II
++@item .set @dots{}
++All other @code{.set} are the normal use.
++
++@end table
++
++@node Nios II Opcodes
++@section Opcodes
++
++@cindex Nios II opcodes
++@cindex opcodes for Nios II
++@code{@value{AS}} implements all the standard Nios II opcodes. No
++additional pseudo-instructions are needed on this family.
++
++For information on the Nios II machine instruction set, see the @cite{Nios II
++User's Manual}
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/add.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/add.d
+@@ -0,0 +1,16 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 add
++
++# Test the add instruction
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> add r4,r4,r4
++0+0004 <[^>]*> addi r4,r4,32767
++0+0008 <[^>]*> addi r4,r4,-32768
++0+000c <[^>]*> addi r4,r4,0
++0+0010 <[^>]*> addi r4,r4,-1
++0+0014 <[^>]*> addi r4,r4,-1
++0+0018 <[^>]*> addi r4,r4,13398
++0+001c <[^>]*> nop
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/add.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/add.s
+@@ -0,0 +1,13 @@
++# Source file used to test the add and addi instructions.
++
++foo:
++ add r4,r4,r4
++ addi r4,r4,0x7fff
++ addi r4,r4,-0x8000
++ addi r4,r4,0x0
++ addi r4,r4,-0x01
++ subi r4,r4,0x01
++ addi r4,r4,0x3456
++
++# should disassemble to add r0,0,r0
++ nop
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/align_fill.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/align_fill.d
+@@ -0,0 +1,23 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 align_fill
++
++# Test the and macro.
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> addi sp,sp,-8
++0+0004 <[^>]*> stw fp,4\(sp\)
++0+0008 <[^>]*> mov fp,sp
++0+000c <[^>]*> mov r3,zero
++0+0010 <[^>]*> nop
++0+0014 <[^>]*> nop
++0+0018 <[^>]*> nop
++0+001c <[^>]*> nop
++0+0020 <[^>]*> addi r3,r3,1
++0+0024 <[^>]*> cmplti r2,r3,100
++0+0028 <[^>]*> bne r2,zero,0+0020 <[^>*]*>
++0+002c <[^>]*> ldw fp,4\(sp\)
++0+0030 <[^>]*> addi sp,sp,8
++0+0034 <[^>]*> ret
++ ...
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/align_fill.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/align_fill.s
+@@ -0,0 +1,20 @@
++ .file "a.c"
++ .section .text
++ .align 3
++ .global x
++ .type x, @function
++x:
++ addi sp, sp, -8
++ stw fp, 4(sp)
++ mov fp, sp
++ mov r3, zero
++ .align 5
++.L6:
++ addi r3, r3, 1
++ cmplti r2, r3, 100
++ bne r2, zero, .L6
++ ldw fp, 4(sp)
++ addi sp, sp, 8
++ ret
++ .size x, .-x
++ .ident "GCC: (GNU) 3.3.3 (Altera Nios II 1.0 b302)"
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/align_text.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/align_text.d
+@@ -0,0 +1,22 @@
++#objdump: -dr
++#name: NIOS2 align_test
++
++# Test alignment in text sections.
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++00000000 <label-0x20>:
++ 0: 00000000 call 0 <label-0x20>
++ 4: 0001883a nop
++ 8: 0001883a nop
++ c: 0001883a nop
++ 10: 0001883a nop
++ 14: 0001883a nop
++ 18: 0001883a nop
++ 1c: 0001883a nop
++
++00000020 <label>:
++ 20: 0001883a nop
++00000024 <label2>:
++ ...
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/align_text.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/align_text.s
+@@ -0,0 +1,15 @@
++ .asciz "" # empty string
++ .align 2
++
++ nop
++ nop
++ label:
++ .align 5
++ nop
++ label2:
++ .section mysection
++ .align 2
++
++
++
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/and.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/and.d
+@@ -0,0 +1,17 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 and
++
++# Test the and macro.
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> and r4,r4,r4
++0+0004 <[^>]*> andi r4,r4,32767
++0+0008 <[^>]*> andi r4,r4,32768
++0+000c <[^>]*> andi r4,r4,65535
++0+0010 <[^>]*> andi r4,r4,0
++0+0014 <[^>]*> andhi r4,r4,32767
++0+0018 <[^>]*> andhi r4,r4,32768
++0+001c <[^>]*> andhi r4,r4,65535
++0+0020 <[^>]*> andhi r4,r4,0
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/and.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/and.s
+@@ -0,0 +1,13 @@
++# Source file used to test the and, andhi and andi instructions
++
++foo:
++ and r4,r4,r4
++ andi r4,r4,0x7fff
++ andi r4,r4,0x8000
++ andi r4,r4,0xffff
++ andi r4,r4,0x0
++ andhi r4,r4,0x7fff
++ andhi r4,r4,0x8000
++ andhi r4,r4,0xffff
++ andhi r4,r4,0x0
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/blt.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/blt.d
+@@ -0,0 +1 @@
++This file is obsolete
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/blt.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/blt.s
+@@ -0,0 +1 @@
++This file is obsolete
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/branch.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/branch.d
+@@ -0,0 +1,16 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 branch
++
++# Test the branch instructions.
++dump.o: file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> beq r4,r5,00000000 <text_label>
++0+0004 <[^>]*> bge r4,r5,00000000 <text_label>
++0+0008 <[^>]*> bgeu r4,r5,00000000 <text_label>
++0+000c <[^>]*> blt r4,r5,00000000 <text_label>
++0+0010 <[^>]*> bltu r4,r5,00000000 <text_label>
++0+0014 <[^>]*> bne r4,r5,00000000 <text_label>
++0+0018 <[^>]*> br 0000001c <text_label\+0x1c>
++[ ]*18: R_NIOS2_PCREL16 external_label
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/branch.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/branch.s
+@@ -0,0 +1,15 @@
++# Source file used to test the beq macro.
++ .globl text_label
++ .text
++.set norelax
++text_label:
++ beq r4,r5,text_label
++ bge r4,r5,text_label
++ bgeu r4,r5,text_label
++ blt r4,r5,text_label
++ bltu r4,r5,text_label
++ bne r4,r5,text_label
++
++# Branch to an external label.
++ br external_label
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/break.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/break.d
+@@ -0,0 +1,12 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 break
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> break 0
++0+0004 <[^>]*> break 0
++0+0008 <[^>]*> break 31
++0+000c <[^>]*> break 14
++
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/break.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/break.s
+@@ -0,0 +1,8 @@
++# Source file used to test the 20-bit break instructions
++foo:
++ break
++ break 0
++ break 31
++ break 14
++
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/bret.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/bret.d
+@@ -0,0 +1,8 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 bret
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> bret
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/bret.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/bret.s
+@@ -0,0 +1,5 @@
++# Source file used to test the bret instructions
++foo:
++ bret
++
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/cache.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/cache.d
+@@ -0,0 +1,17 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 cache
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> flushd -32768\(r6\)
++0+0004 <[^>]*> flushd 32767\(r6\)
++0+0008 <[^>]*> flushd 0\(r6\)
++0+000c <[^>]*> flushd -1\(r6\)
++0+0010 <[^>]*> flushd 0\(r6\)
++[ ]*10: R_NIOS2_S16 .text
++0+0014 <[^>]*> flushd 0\(r6\)
++[ ]*14: R_NIOS2_S16 external
++0+0018 <[^>]*> flushi r2
++0+001c <[^>]*> flushp
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/cache.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/cache.s
+@@ -0,0 +1,21 @@
++# Source file used to test the cache instruction
++foo:
++ flushd -0x8000(r6)
++ flushd 0x7fff(r6)
++ flushd 0x0(r6)
++ flushd -0x0001(r6)
++
++# use symbol for offset
++ flushd foo(r6)
++
++# use external symbol
++ .global external
++ flushd external(r6)
++
++# flushi
++ flushi r2
++
++#flushp
++ flushp
++
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/call.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/call.d
+@@ -0,0 +1,11 @@
++# objdump: -dr --prefix-addresses
++#name: NIOS2 call
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> call 00000000 <foo>
++[ ]*0: R_NIOS2_CALL26 .text\+0xc
++0+0004 <[^>]*> callr r10
++0+0008 <[^>]*> call 00000000 <foo>
++[ ]*8: R_NIOS2_CALL26 external
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/call.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/call.s
+@@ -0,0 +1,13 @@
++# Source file used to test the call and callr instructions
++.text
++.set norelax
++foo:
++ call func1
++ callr r10
++# use external symbol
++ .global external
++ call external
++func1:
++
++
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/cmp.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/cmp.d
+@@ -0,0 +1,24 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 cmp
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> cmpeq r11,r2,r3
++0+0004 <[^>]*> cmpge r11,r2,r3
++0+0008 <[^>]*> cmpgeu r11,r2,r3
++0+000c <[^>]*> cmplt r11,r2,r3
++0+0010 <[^>]*> cmpltu r11,r2,r3
++0+0014 <[^>]*> cmpne r11,r2,r3
++0+0018 <[^>]*> cmpgei r11,r2,0
++[ ]*18: R_NIOS2_S16 value
++0+001c <[^>]*> cmpgeui r11,r2,0
++[ ]*1c: R_NIOS2_U16 value\+0x200
++0+0020 <[^>]*> cmplti r11,r2,0
++[ ]*20: R_NIOS2_S16 value
++0+0024 <[^>]*> cmpltui r11,r2,0
++[ ]*24: R_NIOS2_U16 value\+0x200
++0+0028 <[^>]*> cmpgei r11,r2,32767
++0+002c <[^>]*> cmpgeui r11,r2,32768
++0+0030 <[^>]*> cmplti r11,r2,-32768
++0+0034 <[^>]*> cmpltui r11,r2,65535
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/cmp.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/cmp.s
+@@ -0,0 +1,22 @@
++# Source file used to test the compare instructions
++foo:
++ cmpeq r11,r2,r3
++ cmpge r11,r2,r3
++ cmpgeu r11,r2,r3
++ cmplt r11,r2,r3
++ cmpltu r11,r2,r3
++ cmpne r11,r2,r3
++# test that cmp generates relocations correctly
++ cmpgei r11,r2,value
++ cmpgeui r11,r2,value+0x200
++ cmplti r11,r2,value
++ cmpltui r11,r2,value+0x200
++
++ cmpgei r11,r2,0x7fff
++ cmpgeui r11,r2,0x8000
++ cmplti r11,r2,-0x8000
++ cmpltui r11,r2,0xFFFF
++.global value
++
++
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/comments.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/comments.d
+@@ -0,0 +1,26 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 comments
++
++# Test the add instruction
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> br 0000001c <start>
++0+0004 <[^>]*> br 00000008 <abort>
++0+0008 <[^>]*> movui r3,0
++0+000c <[^>]*> movui r2,1
++0+0010 <[^>]*> movui r3,0
++0+0014 <[^>]*> movui r2,0
++0+0018 <[^>]*> br 00000044 <exit>
++0+001c <[^>]*> addi r2,r2,-4
++0+0020 <[^>]*> movui r11,1
++0+0024 <[^>]*> movui r5,0
++0+0028 <[^>]*> movui r6,0
++0+002c <[^>]*> br 00000030 <ldst>
++0+0030 <[^>]*> movui r2,61452
++0+0034 <[^>]*> movui r20,64206
++0+0038 <[^>]*> stw r20,0\(r2\)
++0+003c <[^>]*> ldw r21,0\(r2\)
++0+0040 <[^>]*> br 00000010 <end>
++0+0044 <[^>]*> br 00000044 <exit>
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/comments.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/comments.s
+@@ -0,0 +1,28 @@
++.set norelax
++_main: br start
++trap:
++ br abort
++.globl _main
++abort: movui r3, 0x0
++ movui r2, 0x1
++
++end: movui r3, 0x0
++ movui r2, 0x0
++ br exit
++
++start:
++ addi r2, r2, -4 # test for ve numbers
++ movui r11, 0x1
++ ori r5, r0, %lo(0x0) # r5 = 0x0
++ ori r6, r0, %lo(0x0) # r6 = 0x0
++ br ldst
++
++ldst:
++ movui r2, 0xF00C
++ movui r20, 0xFACE
++ stw r20,(r2)
++ ldw r21, (r2)
++ br end
++
++
++exit: br exit
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/complex.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/complex.d
+@@ -0,0 +1,12 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 complex
++
++# Test complex expression parsing
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> ldw r2,-1\(r3\)
++0+0004 <[^>]*> ldw r2,1\(r3\)
++0+0008 <[^>]*> ldw r2,0\(r3\)
++ 8: R_NIOS2_S16 stack_top\+0xffffffff
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/complex.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/complex.s
+@@ -0,0 +1,5 @@
++foo:
++ ldw r2, (2-3)(r3)
++ ldw r2, 2 + (2-3)(r3)
++ ldw r2, 2 + (stack_top-3)(r3)
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/ctl.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/ctl.d
+@@ -0,0 +1,20 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 ctl
++
++# Test the ctl instructions
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> rdctl r8,ctl31
++0+0004 <[^>]*> rdctl r8,ctl30
++0+0008 <[^>]*> rdctl r8,ctl29
++0+000c <[^>]*> rdctl r8,status
++0+0010 <[^>]*> rdctl r8,bstatus
++0+0014 <[^>]*> rdctl r8,estatus
++0+0018 <[^>]*> wrctl ctl31,r8
++0+001c <[^>]*> wrctl ctl30,r8
++0+0020 <[^>]*> wrctl ctl29,r8
++0+0024 <[^>]*> wrctl status,r8
++0+0028 <[^>]*> wrctl bstatus,r8
++0+002c <[^>]*> wrctl estatus,r8
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/ctl.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/ctl.s
+@@ -0,0 +1,18 @@
++# Source file used to test the nor instruction
++
++foo:
++ rdctl r8,ctl31
++ rdctl r8,ctl30
++ rdctl r8,ctl29
++ rdctl r8,status
++ rdctl r8,bstatus
++ rdctl r8,estatus
++ wrctl ctl31,r8
++ wrctl ctl30,r8
++ wrctl ctl29,r8
++ wrctl status,r8
++ wrctl bstatus,r8
++ wrctl estatus,r8
++
++
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/custom.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/custom.d
+@@ -0,0 +1,13 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 custom
++
++# Test the custom instruction
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> custom 0,r11,r2,r3
++0+0004 <[^>]*> custom 255,r11,r2,r3
++0+0008 <[^>]*> custom 150,c1,r2,r3
++0+000c <[^>]*> custom 24,c1,c2,r3
++0+0010 <[^>]*> custom 56,c1,c2,c3
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/custom.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/custom.s
+@@ -0,0 +1,8 @@
++# test progam for assembling user instructions
++
++foo:
++ custom 0, r11, r2, r3
++ custom 255, r11, r2, r3
++ custom 150, c1, r2, r3
++ custom 0x18, c1, c2, r3
++ custom 070, c1, c2, c3
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/etbt.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/etbt.d
+@@ -0,0 +1,10 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 etbt
++
++# Test the et, bt registers
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> add et,bt,r6
++0+0004 <[^>]*> add et,bt,r6
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/etbt.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/etbt.s
+@@ -0,0 +1,4 @@
++.set nobreak
++foo:
++ add r24, r25, r6
++ add et, bt, r6
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/flushda.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/flushda.d
+@@ -0,0 +1,10 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 flushda
++
++# Test the jmp instruction.
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> flushda 12\(r2\)
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/flushda.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/flushda.s
+@@ -0,0 +1,6 @@
++# Source file used to test the flushda instruction.
++.text
++.set nobreak
++foo:
++ flushda 12(r2)
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/hilo_symbol.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/hilo_symbol.s
+@@ -0,0 +1,3 @@
++.global long_symbol
++.set long_symbol, 0xDEADBEEF
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/illegal.l
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/illegal.l
+@@ -0,0 +1,14 @@
++.*illegal.s: Assembler messages:
++.*illegal.s:5: Error: unknown register r56
++.*illegal.s:8: Error: expecting \( near 0x1000
++.*illegal.s:8: Error: missing argument
++.*illegal.s:9: Error: expecting \) near r5
++.*illegal.s:10: Error: expecting \( near 0x1000r5\)
++.*illegal.s:10: Error: missing argument
++.*illegal.s:11: Error: expecting \( near 0x1000,r5
++.*illegal.s:11: Error: missing argument
++.*illegal.s:12: Error: unknown register 0x1000
++.*illegal.s:14: Error: unrecognised instruction fop
++.*illegal.s:16: Error: too many arguments
++.*illegal.s:17: Error: too many arguments
++.*illegal.s:17: Error: unknown register r2,r4
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/illegal.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/illegal.s
+@@ -0,0 +1,17 @@
++# Source file used to test illegal operands.
++
++foo:
++# Illegal registers
++ add r3,r4,r56
++ add r4,r0,r2
++# Illegal syntax
++ ldw r4,0x1000
++ ldw r4,0x1000(r5
++ ldw r4,0x1000r5)
++ ldw r4,0x1000,r5
++ ldw r4,(0x1000)r5
++# Illegal opcodes
++ fop r3,r4,r5
++# Extra operands
++ nop Crapola
++ add r2, r2, r2, r4
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/imm5_symbol.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/imm5_symbol.s
+@@ -0,0 +1,4 @@
++.global imm5
++.text
++.byte imm5
++.set imm5, 31
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/jmp.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/jmp.d
+@@ -0,0 +1,10 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 jmp
++
++# Test the jmp instruction.
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> jmp bt
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/jmp.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/jmp.s
+@@ -0,0 +1,6 @@
++# Source file used to test the jmp instruction.
++.text
++.set nobreak
++foo:
++ jmp r25
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/ldb.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/ldb.d
+@@ -0,0 +1,196 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 ldb
++
++# Test the ld instruction
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> ldb r4,0\(zero\)
++0+0004 <[^>]*> ldb r4,4\(zero\)
++0+0008 <[^>]*> ldb r4,32764\(zero\)
++0+000c <[^>]*> ldb r4,-32768\(zero\)
++0+0010 <[^>]*> ldb r4,0\(r5\)
++0+0014 <[^>]*> ldb r4,4\(r5\)
++0+0018 <[^>]*> ldb r4,32764\(r5\)
++0+001c <[^>]*> ldb r4,-32768\(r5\)
++0+0020 <[^>]*> ldb r4,0\(zero\)
++[ ]*20: R_NIOS2_S16 .data
++0+0024 <[^>]*> ldb r4,0\(zero\)
++[ ]*24: R_NIOS2_S16 big_external_data_label
++0+0028 <[^>]*> ldb r4,0\(zero\)
++[ ]*28: R_NIOS2_S16 small_external_data_label
++0+002c <[^>]*> ldb r4,0\(zero\)
++[ ]*2c: R_NIOS2_S16 big_external_common
++0+0030 <[^>]*> ldb r4,0\(zero\)
++[ ]*30: R_NIOS2_S16 small_external_common
++0+0034 <[^>]*> ldb r4,0\(zero\)
++[ ]*34: R_NIOS2_S16 .bss
++0+0038 <[^>]*> ldb r4,0\(zero\)
++[ ]*38: R_NIOS2_S16 .bss\+0x4000
++0+003c <[^>]*> ldb r4,0\(zero\)
++[ ]*3c: R_NIOS2_S16 .data\+0x4
++0+0040 <[^>]*> ldb r4,0\(zero\)
++[ ]*40: R_NIOS2_S16 big_external_data_label\+0x4
++0+0044 <[^>]*> ldb r4,0\(zero\)
++[ ]*44: R_NIOS2_S16 small_external_data_label\+0x4
++0+0048 <[^>]*> ldb r4,0\(zero\)
++[ ]*48: R_NIOS2_S16 big_external_common\+0x4
++0+004c <[^>]*> ldb r4,0\(zero\)
++[ ]*4c: R_NIOS2_S16 small_external_common\+0x4
++0+0050 <[^>]*> ldb r4,0\(zero\)
++[ ]*50: R_NIOS2_S16 .bss\+0x4
++0+0054 <[^>]*> ldb r4,0\(zero\)
++[ ]*54: R_NIOS2_S16 .bss\+0x4004
++0+0058 <[^>]*> ldb r4,0\(zero\)
++[ ]*58: R_NIOS2_S16 .data\+0xffff8000
++0+005c <[^>]*> ldb r4,0\(zero\)
++[ ]*5c: R_NIOS2_S16 big_external_data_label\+0xffff8000
++0+0060 <[^>]*> ldb r4,0\(zero\)
++[ ]*60: R_NIOS2_S16 small_external_data_label\+0xffff8000
++0+0064 <[^>]*> ldb r4,0\(zero\)
++[ ]*64: R_NIOS2_S16 big_external_common\+0xffff8000
++0+0068 <[^>]*> ldb r4,0\(zero\)
++[ ]*68: R_NIOS2_S16 small_external_common\+0xffff8000
++0+006c <[^>]*> ldb r4,0\(zero\)
++[ ]*6c: R_NIOS2_S16 .bss\+0xffff8000
++0+0070 <[^>]*> ldb r4,0\(zero\)
++[ ]*70: R_NIOS2_S16 .bss\+0xffffc000
++0+0074 <[^>]*> ldb r4,0\(zero\)
++[ ]*74: R_NIOS2_S16 .data\+0x10000
++0+0078 <[^>]*> ldb r4,0\(r5\)
++[ ]*78: R_NIOS2_S16 .data
++0+007c <[^>]*> ldb r4,0\(r5\)
++[ ]*7c: R_NIOS2_S16 big_external_data_label
++0+0080 <[^>]*> ldb r4,0\(r5\)
++[ ]*80: R_NIOS2_S16 small_external_data_label
++0+0084 <[^>]*> ldb r4,0\(r5\)
++[ ]*84: R_NIOS2_S16 big_external_common
++0+0088 <[^>]*> ldb r4,0\(r5\)
++[ ]*88: R_NIOS2_S16 small_external_common
++0+008c <[^>]*> ldb r4,0\(r5\)
++[ ]*8c: R_NIOS2_S16 .bss
++0+0090 <[^>]*> ldb r4,0\(r5\)
++[ ]*90: R_NIOS2_S16 .bss\+0x4000
++0+0094 <[^>]*> ldb r4,0\(r5\)
++[ ]*94: R_NIOS2_S16 .data\+0x4
++0+0098 <[^>]*> ldb r4,0\(r5\)
++[ ]*98: R_NIOS2_S16 big_external_data_label\+0x4
++0+009c <[^>]*> ldb r4,0\(r5\)
++[ ]*9c: R_NIOS2_S16 small_external_data_label\+0x4
++0+00a0 <[^>]*> ldb r4,0\(r5\)
++[ ]*a0: R_NIOS2_S16 big_external_common\+0x4
++0+00a4 <[^>]*> ldb r4,0\(r5\)
++[ ]*a4: R_NIOS2_S16 small_external_common\+0x4
++0+00a8 <[^>]*> ldb r4,0\(r5\)
++[ ]*a8: R_NIOS2_S16 .bss\+0x4
++0+00ac <[^>]*> ldb r4,0\(r5\)
++[ ]*ac: R_NIOS2_S16 .bss\+0x4004
++0+00b0 <[^>]*> ldb r4,0\(r5\)
++[ ]*b0: R_NIOS2_S16 .data\+0xffff8000
++0+00b4 <[^>]*> ldb r4,0\(r5\)
++[ ]*b4: R_NIOS2_S16 big_external_data_label\+0xffff8000
++0+00b8 <[^>]*> ldb r4,0\(r5\)
++[ ]*b8: R_NIOS2_S16 small_external_data_label\+0xffff8000
++0+00bc <[^>]*> ldb r4,0\(r5\)
++[ ]*bc: R_NIOS2_S16 big_external_common\+0xffff8000
++0+00c0 <[^>]*> ldb r4,0\(r5\)
++[ ]*c0: R_NIOS2_S16 small_external_common\+0xffff8000
++0+00c4 <[^>]*> ldb r4,0\(r5\)
++[ ]*c4: R_NIOS2_S16 .bss\+0xffff8000
++0+00c8 <[^>]*> ldb r4,0\(r5\)
++[ ]*c8: R_NIOS2_S16 .bss\+0xffffc000
++0+00cc <[^>]*> ldbio r4,0\(zero\)
++0+00d0 <[^>]*> ldbio r4,4\(zero\)
++0+00d4 <[^>]*> ldbio r4,32764\(zero\)
++0+00d8 <[^>]*> ldbio r4,-32768\(zero\)
++0+00dc <[^>]*> ldbio r4,0\(r5\)
++0+00e0 <[^>]*> ldbio r4,4\(r5\)
++0+00e4 <[^>]*> ldbio r4,32764\(r5\)
++0+00e8 <[^>]*> ldbio r4,-32768\(r5\)
++0+00ec <[^>]*> ldbio r4,0\(zero\)
++[ ]*ec: R_NIOS2_S16 .data
++0+00f0 <[^>]*> ldbio r4,0\(zero\)
++[ ]*f0: R_NIOS2_S16 big_external_data_label
++0+00f4 <[^>]*> ldbio r4,0\(zero\)
++[ ]*f4: R_NIOS2_S16 small_external_data_label
++0+00f8 <[^>]*> ldbio r4,0\(zero\)
++[ ]*f8: R_NIOS2_S16 big_external_common
++0+00fc <[^>]*> ldbio r4,0\(zero\)
++[ ]*fc: R_NIOS2_S16 small_external_common
++0+0100 <[^>]*> ldbio r4,0\(zero\)
++[ ]*100: R_NIOS2_S16 .bss
++0+0104 <[^>]*> ldbio r4,0\(zero\)
++[ ]*104: R_NIOS2_S16 .bss\+0x4000
++0+0108 <[^>]*> ldbio r4,0\(zero\)
++[ ]*108: R_NIOS2_S16 .data\+0x4
++0+010c <[^>]*> ldbio r4,0\(zero\)
++[ ]*10c: R_NIOS2_S16 big_external_data_label\+0x4
++0+0110 <[^>]*> ldbio r4,0\(zero\)
++[ ]*110: R_NIOS2_S16 small_external_data_label\+0x4
++0+0114 <[^>]*> ldbio r4,0\(zero\)
++[ ]*114: R_NIOS2_S16 big_external_common\+0x4
++0+0118 <[^>]*> ldbio r4,0\(zero\)
++[ ]*118: R_NIOS2_S16 small_external_common\+0x4
++0+011c <[^>]*> ldbio r4,0\(zero\)
++[ ]*11c: R_NIOS2_S16 .bss\+0x4
++0+0120 <[^>]*> ldbio r4,0\(zero\)
++[ ]*120: R_NIOS2_S16 .bss\+0x4004
++0+0124 <[^>]*> ldbio r4,0\(zero\)
++[ ]*124: R_NIOS2_S16 .data\+0xffff8000
++0+0128 <[^>]*> ldbio r4,0\(zero\)
++[ ]*128: R_NIOS2_S16 big_external_data_label\+0xffff8000
++0+012c <[^>]*> ldbio r4,0\(zero\)
++[ ]*12c: R_NIOS2_S16 small_external_data_label\+0xffff8000
++0+0130 <[^>]*> ldbio r4,0\(zero\)
++[ ]*130: R_NIOS2_S16 big_external_common\+0xffff8000
++0+0134 <[^>]*> ldbio r4,0\(zero\)
++[ ]*134: R_NIOS2_S16 small_external_common\+0xffff8000
++0+0138 <[^>]*> ldbio r4,0\(zero\)
++[ ]*138: R_NIOS2_S16 .bss\+0xffff8000
++0+013c <[^>]*> ldbio r4,0\(zero\)
++[ ]*13c: R_NIOS2_S16 .bss\+0xffffc000
++0+0140 <[^>]*> ldbio r4,0\(zero\)
++[ ]*140: R_NIOS2_S16 .data\+0x10000
++0+0144 <[^>]*> ldbio r4,0\(r5\)
++[ ]*144: R_NIOS2_S16 .data
++0+0148 <[^>]*> ldbio r4,0\(r5\)
++[ ]*148: R_NIOS2_S16 big_external_data_label
++0+014c <[^>]*> ldbio r4,0\(r5\)
++[ ]*14c: R_NIOS2_S16 small_external_data_label
++0+0150 <[^>]*> ldbio r4,0\(r5\)
++[ ]*150: R_NIOS2_S16 big_external_common
++0+0154 <[^>]*> ldbio r4,0\(r5\)
++[ ]*154: R_NIOS2_S16 small_external_common
++0+0158 <[^>]*> ldbio r4,0\(r5\)
++[ ]*158: R_NIOS2_S16 .bss
++0+015c <[^>]*> ldbio r4,0\(r5\)
++[ ]*15c: R_NIOS2_S16 .bss\+0x4000
++0+0160 <[^>]*> ldbio r4,0\(r5\)
++[ ]*160: R_NIOS2_S16 .data\+0x4
++0+0164 <[^>]*> ldbio r4,0\(r5\)
++[ ]*164: R_NIOS2_S16 big_external_data_label\+0x4
++0+0168 <[^>]*> ldbio r4,0\(r5\)
++[ ]*168: R_NIOS2_S16 small_external_data_label\+0x4
++0+016c <[^>]*> ldbio r4,0\(r5\)
++[ ]*16c: R_NIOS2_S16 big_external_common\+0x4
++0+0170 <[^>]*> ldbio r4,0\(r5\)
++[ ]*170: R_NIOS2_S16 small_external_common\+0x4
++0+0174 <[^>]*> ldbio r4,0\(r5\)
++[ ]*174: R_NIOS2_S16 .bss\+0x4
++0+0178 <[^>]*> ldbio r4,0\(r5\)
++[ ]*178: R_NIOS2_S16 .bss\+0x4004
++0+017c <[^>]*> ldbio r4,0\(r5\)
++[ ]*17c: R_NIOS2_S16 .data\+0xffff8000
++0+0180 <[^>]*> ldbio r4,0\(r5\)
++[ ]*180: R_NIOS2_S16 big_external_data_label\+0xffff8000
++0+0184 <[^>]*> ldbio r4,0\(r5\)
++[ ]*184: R_NIOS2_S16 small_external_data_label\+0xffff8000
++0+0188 <[^>]*> ldbio r4,0\(r5\)
++[ ]*188: R_NIOS2_S16 big_external_common\+0xffff8000
++0+018c <[^>]*> ldbio r4,0\(r5\)
++[ ]*18c: R_NIOS2_S16 small_external_common\+0xffff8000
++0+0190 <[^>]*> ldbio r4,0\(r5\)
++[ ]*190: R_NIOS2_S16 .bss\+0xffff8000
++0+0194 <[^>]*> ldbio r4,0\(r5\)
++[ ]*194: R_NIOS2_S16 .bss\+0xffffc000
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/ldb.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/ldb.s
+@@ -0,0 +1,117 @@
++ .data
++data_label:
++ .extern big_external_data_label,0x4000
++ .extern small_external_data_label,4
++ .comm big_external_common,0x4000
++ .comm small_external_common,4
++ .lcomm big_local_common,0x4000
++ .lcomm small_local_common,4
++
++# the small symbols should have space allocated in the sbss section
++# but this is not yet supported in the assembler, so space is allocated
++# in the .bss section and the relocations are not gp-relative. this will
++# be updated when gp-relative relocations are added
++ .text
++ ldb r4,0(r0)
++ ldb r4,4(r0)
++ ldb r4,0x7ffc(r0)
++ ldb r4,-0x8000(r0)
++ ldb r4,0(r5)
++ ldb r4,4(r5)
++ ldb r4,0x7ffc(r5)
++ ldb r4,-0x8000(r5)
++ ldb r4,data_label(r0)
++ ldb r4,big_external_data_label(r0)
++ ldb r4,small_external_data_label(r0)
++ ldb r4,big_external_common(r0)
++ ldb r4,small_external_common(r0)
++ ldb r4,big_local_common(r0)
++ ldb r4,small_local_common(r0)
++ ldb r4,data_label+4(r0)
++ ldb r4,big_external_data_label+4(r0)
++ ldb r4,small_external_data_label+4(r0)
++ ldb r4,big_external_common+4(r0)
++ ldb r4,small_external_common+4(r0)
++ ldb r4,big_local_common+4(r0)
++ ldb r4,small_local_common+4(r0)
++ ldb r4,data_label-0x8000(r0)
++ ldb r4,big_external_data_label-0x8000(r0)
++ ldb r4,small_external_data_label-0x8000(r0)
++ ldb r4,big_external_common-0x8000(r0)
++ ldb r4,small_external_common-0x8000(r0)
++ ldb r4,big_local_common-0x8000(r0)
++ ldb r4,small_local_common-0x8000(r0)
++ ldb r4,data_label+0x10000(r0)
++ ldb r4,data_label(r5)
++ ldb r4,big_external_data_label(r5)
++ ldb r4,small_external_data_label(r5)
++ ldb r4,big_external_common(r5)
++ ldb r4,small_external_common(r5)
++ ldb r4,big_local_common(r5)
++ ldb r4,small_local_common(r5)
++ ldb r4,data_label+4(r5)
++ ldb r4,big_external_data_label+4(r5)
++ ldb r4,small_external_data_label+4(r5)
++ ldb r4,big_external_common+4(r5)
++ ldb r4,small_external_common+4(r5)
++ ldb r4,big_local_common+4(r5)
++ ldb r4,small_local_common+4(r5)
++ ldb r4,data_label-0x8000(r5)
++ ldb r4,big_external_data_label-0x8000(r5)
++ ldb r4,small_external_data_label-0x8000(r5)
++ ldb r4,big_external_common-0x8000(r5)
++ ldb r4,small_external_common-0x8000(r5)
++ ldb r4,big_local_common-0x8000(r5)
++ ldb r4,small_local_common-0x8000(r5)
++
++ ldbio r4,0(r0)
++ ldbio r4,4(r0)
++ ldbio r4,0x7ffc(r0)
++ ldbio r4,-0x8000(r0)
++ ldbio r4,0(r5)
++ ldbio r4,4(r5)
++ ldbio r4,0x7ffc(r5)
++ ldbio r4,-0x8000(r5)
++ ldbio r4,data_label(r0)
++ ldbio r4,big_external_data_label(r0)
++ ldbio r4,small_external_data_label(r0)
++ ldbio r4,big_external_common(r0)
++ ldbio r4,small_external_common(r0)
++ ldbio r4,big_local_common(r0)
++ ldbio r4,small_local_common(r0)
++ ldbio r4,data_label+4(r0)
++ ldbio r4,big_external_data_label+4(r0)
++ ldbio r4,small_external_data_label+4(r0)
++ ldbio r4,big_external_common+4(r0)
++ ldbio r4,small_external_common+4(r0)
++ ldbio r4,big_local_common+4(r0)
++ ldbio r4,small_local_common+4(r0)
++ ldbio r4,data_label-0x8000(r0)
++ ldbio r4,big_external_data_label-0x8000(r0)
++ ldbio r4,small_external_data_label-0x8000(r0)
++ ldbio r4,big_external_common-0x8000(r0)
++ ldbio r4,small_external_common-0x8000(r0)
++ ldbio r4,big_local_common-0x8000(r0)
++ ldbio r4,small_local_common-0x8000(r0)
++ ldbio r4,data_label+0x10000(r0)
++ ldbio r4,data_label(r5)
++ ldbio r4,big_external_data_label(r5)
++ ldbio r4,small_external_data_label(r5)
++ ldbio r4,big_external_common(r5)
++ ldbio r4,small_external_common(r5)
++ ldbio r4,big_local_common(r5)
++ ldbio r4,small_local_common(r5)
++ ldbio r4,data_label+4(r5)
++ ldbio r4,big_external_data_label+4(r5)
++ ldbio r4,small_external_data_label+4(r5)
++ ldbio r4,big_external_common+4(r5)
++ ldbio r4,small_external_common+4(r5)
++ ldbio r4,big_local_common+4(r5)
++ ldbio r4,small_local_common+4(r5)
++ ldbio r4,data_label-0x8000(r5)
++ ldbio r4,big_external_data_label-0x8000(r5)
++ ldbio r4,small_external_data_label-0x8000(r5)
++ ldbio r4,big_external_common-0x8000(r5)
++ ldbio r4,small_external_common-0x8000(r5)
++ ldbio r4,big_local_common-0x8000(r5)
++ ldbio r4,small_local_common-0x8000(r5)
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/ldh.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/ldh.d
+@@ -0,0 +1,196 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 ldh
++
++# Test the ld instruction
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> ldh r4,0\(zero\)
++0+0004 <[^>]*> ldh r4,4\(zero\)
++0+0008 <[^>]*> ldh r4,32764\(zero\)
++0+000c <[^>]*> ldh r4,-32768\(zero\)
++0+0010 <[^>]*> ldh r4,0\(r5\)
++0+0014 <[^>]*> ldh r4,4\(r5\)
++0+0018 <[^>]*> ldh r4,32764\(r5\)
++0+001c <[^>]*> ldh r4,-32768\(r5\)
++0+0020 <[^>]*> ldh r4,0\(zero\)
++[ ]*20: R_NIOS2_S16 .data
++0+0024 <[^>]*> ldh r4,0\(zero\)
++[ ]*24: R_NIOS2_S16 big_external_data_label
++0+0028 <[^>]*> ldh r4,0\(zero\)
++[ ]*28: R_NIOS2_S16 small_external_data_label
++0+002c <[^>]*> ldh r4,0\(zero\)
++[ ]*2c: R_NIOS2_S16 big_external_common
++0+0030 <[^>]*> ldh r4,0\(zero\)
++[ ]*30: R_NIOS2_S16 small_external_common
++0+0034 <[^>]*> ldh r4,0\(zero\)
++[ ]*34: R_NIOS2_S16 .bss
++0+0038 <[^>]*> ldh r4,0\(zero\)
++[ ]*38: R_NIOS2_S16 .bss\+0x4000
++0+003c <[^>]*> ldh r4,0\(zero\)
++[ ]*3c: R_NIOS2_S16 .data\+0x4
++0+0040 <[^>]*> ldh r4,0\(zero\)
++[ ]*40: R_NIOS2_S16 big_external_data_label\+0x4
++0+0044 <[^>]*> ldh r4,0\(zero\)
++[ ]*44: R_NIOS2_S16 small_external_data_label\+0x4
++0+0048 <[^>]*> ldh r4,0\(zero\)
++[ ]*48: R_NIOS2_S16 big_external_common\+0x4
++0+004c <[^>]*> ldh r4,0\(zero\)
++[ ]*4c: R_NIOS2_S16 small_external_common\+0x4
++0+0050 <[^>]*> ldh r4,0\(zero\)
++[ ]*50: R_NIOS2_S16 .bss\+0x4
++0+0054 <[^>]*> ldh r4,0\(zero\)
++[ ]*54: R_NIOS2_S16 .bss\+0x4004
++0+0058 <[^>]*> ldh r4,0\(zero\)
++[ ]*58: R_NIOS2_S16 .data\+0xffff8000
++0+005c <[^>]*> ldh r4,0\(zero\)
++[ ]*5c: R_NIOS2_S16 big_external_data_label\+0xffff8000
++0+0060 <[^>]*> ldh r4,0\(zero\)
++[ ]*60: R_NIOS2_S16 small_external_data_label\+0xffff8000
++0+0064 <[^>]*> ldh r4,0\(zero\)
++[ ]*64: R_NIOS2_S16 big_external_common\+0xffff8000
++0+0068 <[^>]*> ldh r4,0\(zero\)
++[ ]*68: R_NIOS2_S16 small_external_common\+0xffff8000
++0+006c <[^>]*> ldh r4,0\(zero\)
++[ ]*6c: R_NIOS2_S16 .bss\+0xffff8000
++0+0070 <[^>]*> ldh r4,0\(zero\)
++[ ]*70: R_NIOS2_S16 .bss\+0xffffc000
++0+0074 <[^>]*> ldh r4,0\(zero\)
++[ ]*74: R_NIOS2_S16 .data\+0x10000
++0+0078 <[^>]*> ldh r4,0\(r5\)
++[ ]*78: R_NIOS2_S16 .data
++0+007c <[^>]*> ldh r4,0\(r5\)
++[ ]*7c: R_NIOS2_S16 big_external_data_label
++0+0080 <[^>]*> ldh r4,0\(r5\)
++[ ]*80: R_NIOS2_S16 small_external_data_label
++0+0084 <[^>]*> ldh r4,0\(r5\)
++[ ]*84: R_NIOS2_S16 big_external_common
++0+0088 <[^>]*> ldh r4,0\(r5\)
++[ ]*88: R_NIOS2_S16 small_external_common
++0+008c <[^>]*> ldh r4,0\(r5\)
++[ ]*8c: R_NIOS2_S16 .bss
++0+0090 <[^>]*> ldh r4,0\(r5\)
++[ ]*90: R_NIOS2_S16 .bss\+0x4000
++0+0094 <[^>]*> ldh r4,0\(r5\)
++[ ]*94: R_NIOS2_S16 .data\+0x4
++0+0098 <[^>]*> ldh r4,0\(r5\)
++[ ]*98: R_NIOS2_S16 big_external_data_label\+0x4
++0+009c <[^>]*> ldh r4,0\(r5\)
++[ ]*9c: R_NIOS2_S16 small_external_data_label\+0x4
++0+00a0 <[^>]*> ldh r4,0\(r5\)
++[ ]*a0: R_NIOS2_S16 big_external_common\+0x4
++0+00a4 <[^>]*> ldh r4,0\(r5\)
++[ ]*a4: R_NIOS2_S16 small_external_common\+0x4
++0+00a8 <[^>]*> ldh r4,0\(r5\)
++[ ]*a8: R_NIOS2_S16 .bss\+0x4
++0+00ac <[^>]*> ldh r4,0\(r5\)
++[ ]*ac: R_NIOS2_S16 .bss\+0x4004
++0+00b0 <[^>]*> ldh r4,0\(r5\)
++[ ]*b0: R_NIOS2_S16 .data\+0xffff8000
++0+00b4 <[^>]*> ldh r4,0\(r5\)
++[ ]*b4: R_NIOS2_S16 big_external_data_label\+0xffff8000
++0+00b8 <[^>]*> ldh r4,0\(r5\)
++[ ]*b8: R_NIOS2_S16 small_external_data_label\+0xffff8000
++0+00bc <[^>]*> ldh r4,0\(r5\)
++[ ]*bc: R_NIOS2_S16 big_external_common\+0xffff8000
++0+00c0 <[^>]*> ldh r4,0\(r5\)
++[ ]*c0: R_NIOS2_S16 small_external_common\+0xffff8000
++0+00c4 <[^>]*> ldh r4,0\(r5\)
++[ ]*c4: R_NIOS2_S16 .bss\+0xffff8000
++0+00c8 <[^>]*> ldh r4,0\(r5\)
++[ ]*c8: R_NIOS2_S16 .bss\+0xffffc000
++0+00cc <[^>]*> ldhio r4,0\(zero\)
++0+00d0 <[^>]*> ldhio r4,4\(zero\)
++0+00d4 <[^>]*> ldhio r4,32764\(zero\)
++0+00d8 <[^>]*> ldhio r4,-32768\(zero\)
++0+00dc <[^>]*> ldhio r4,0\(r5\)
++0+00e0 <[^>]*> ldhio r4,4\(r5\)
++0+00e4 <[^>]*> ldhio r4,32764\(r5\)
++0+00e8 <[^>]*> ldhio r4,-32768\(r5\)
++0+00ec <[^>]*> ldhio r4,0\(zero\)
++[ ]*ec: R_NIOS2_S16 .data
++0+00f0 <[^>]*> ldhio r4,0\(zero\)
++[ ]*f0: R_NIOS2_S16 big_external_data_label
++0+00f4 <[^>]*> ldhio r4,0\(zero\)
++[ ]*f4: R_NIOS2_S16 small_external_data_label
++0+00f8 <[^>]*> ldhio r4,0\(zero\)
++[ ]*f8: R_NIOS2_S16 big_external_common
++0+00fc <[^>]*> ldhio r4,0\(zero\)
++[ ]*fc: R_NIOS2_S16 small_external_common
++0+0100 <[^>]*> ldhio r4,0\(zero\)
++[ ]*100: R_NIOS2_S16 .bss
++0+0104 <[^>]*> ldhio r4,0\(zero\)
++[ ]*104: R_NIOS2_S16 .bss\+0x4000
++0+0108 <[^>]*> ldhio r4,0\(zero\)
++[ ]*108: R_NIOS2_S16 .data\+0x4
++0+010c <[^>]*> ldhio r4,0\(zero\)
++[ ]*10c: R_NIOS2_S16 big_external_data_label\+0x4
++0+0110 <[^>]*> ldhio r4,0\(zero\)
++[ ]*110: R_NIOS2_S16 small_external_data_label\+0x4
++0+0114 <[^>]*> ldhio r4,0\(zero\)
++[ ]*114: R_NIOS2_S16 big_external_common\+0x4
++0+0118 <[^>]*> ldhio r4,0\(zero\)
++[ ]*118: R_NIOS2_S16 small_external_common\+0x4
++0+011c <[^>]*> ldhio r4,0\(zero\)
++[ ]*11c: R_NIOS2_S16 .bss\+0x4
++0+0120 <[^>]*> ldhio r4,0\(zero\)
++[ ]*120: R_NIOS2_S16 .bss\+0x4004
++0+0124 <[^>]*> ldhio r4,0\(zero\)
++[ ]*124: R_NIOS2_S16 .data\+0xffff8000
++0+0128 <[^>]*> ldhio r4,0\(zero\)
++[ ]*128: R_NIOS2_S16 big_external_data_label\+0xffff8000
++0+012c <[^>]*> ldhio r4,0\(zero\)
++[ ]*12c: R_NIOS2_S16 small_external_data_label\+0xffff8000
++0+0130 <[^>]*> ldhio r4,0\(zero\)
++[ ]*130: R_NIOS2_S16 big_external_common\+0xffff8000
++0+0134 <[^>]*> ldhio r4,0\(zero\)
++[ ]*134: R_NIOS2_S16 small_external_common\+0xffff8000
++0+0138 <[^>]*> ldhio r4,0\(zero\)
++[ ]*138: R_NIOS2_S16 .bss\+0xffff8000
++0+013c <[^>]*> ldhio r4,0\(zero\)
++[ ]*13c: R_NIOS2_S16 .bss\+0xffffc000
++0+0140 <[^>]*> ldhio r4,0\(zero\)
++[ ]*140: R_NIOS2_S16 .data\+0x10000
++0+0144 <[^>]*> ldhio r4,0\(r5\)
++[ ]*144: R_NIOS2_S16 .data
++0+0148 <[^>]*> ldhio r4,0\(r5\)
++[ ]*148: R_NIOS2_S16 big_external_data_label
++0+014c <[^>]*> ldhio r4,0\(r5\)
++[ ]*14c: R_NIOS2_S16 small_external_data_label
++0+0150 <[^>]*> ldhio r4,0\(r5\)
++[ ]*150: R_NIOS2_S16 big_external_common
++0+0154 <[^>]*> ldhio r4,0\(r5\)
++[ ]*154: R_NIOS2_S16 small_external_common
++0+0158 <[^>]*> ldhio r4,0\(r5\)
++[ ]*158: R_NIOS2_S16 .bss
++0+015c <[^>]*> ldhio r4,0\(r5\)
++[ ]*15c: R_NIOS2_S16 .bss\+0x4000
++0+0160 <[^>]*> ldhio r4,0\(r5\)
++[ ]*160: R_NIOS2_S16 .data\+0x4
++0+0164 <[^>]*> ldhio r4,0\(r5\)
++[ ]*164: R_NIOS2_S16 big_external_data_label\+0x4
++0+0168 <[^>]*> ldhio r4,0\(r5\)
++[ ]*168: R_NIOS2_S16 small_external_data_label\+0x4
++0+016c <[^>]*> ldhio r4,0\(r5\)
++[ ]*16c: R_NIOS2_S16 big_external_common\+0x4
++0+0170 <[^>]*> ldhio r4,0\(r5\)
++[ ]*170: R_NIOS2_S16 small_external_common\+0x4
++0+0174 <[^>]*> ldhio r4,0\(r5\)
++[ ]*174: R_NIOS2_S16 .bss\+0x4
++0+0178 <[^>]*> ldhio r4,0\(r5\)
++[ ]*178: R_NIOS2_S16 .bss\+0x4004
++0+017c <[^>]*> ldhio r4,0\(r5\)
++[ ]*17c: R_NIOS2_S16 .data\+0xffff8000
++0+0180 <[^>]*> ldhio r4,0\(r5\)
++[ ]*180: R_NIOS2_S16 big_external_data_label\+0xffff8000
++0+0184 <[^>]*> ldhio r4,0\(r5\)
++[ ]*184: R_NIOS2_S16 small_external_data_label\+0xffff8000
++0+0188 <[^>]*> ldhio r4,0\(r5\)
++[ ]*188: R_NIOS2_S16 big_external_common\+0xffff8000
++0+018c <[^>]*> ldhio r4,0\(r5\)
++[ ]*18c: R_NIOS2_S16 small_external_common\+0xffff8000
++0+0190 <[^>]*> ldhio r4,0\(r5\)
++[ ]*190: R_NIOS2_S16 .bss\+0xffff8000
++0+0194 <[^>]*> ldhio r4,0\(r5\)
++[ ]*194: R_NIOS2_S16 .bss\+0xffffc000
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/ldh.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/ldh.s
+@@ -0,0 +1,117 @@
++ .data
++data_label:
++ .extern big_external_data_label,0x4000
++ .extern small_external_data_label,4
++ .comm big_external_common,0x4000
++ .comm small_external_common,4
++ .lcomm big_local_common,0x4000
++ .lcomm small_local_common,4
++
++# the small symbols should have space allocated in the sbss section
++# but this is not yet supported in the assembler, so space is allocated
++# in the .bss section and the relocations are not gp-relative. this will
++# be updated when gp-relative relocations are added
++ .text
++ ldh r4,0(r0)
++ ldh r4,4(r0)
++ ldh r4,0x7ffc(r0)
++ ldh r4,-0x8000(r0)
++ ldh r4,0(r5)
++ ldh r4,4(r5)
++ ldh r4,0x7ffc(r5)
++ ldh r4,-0x8000(r5)
++ ldh r4,data_label(r0)
++ ldh r4,big_external_data_label(r0)
++ ldh r4,small_external_data_label(r0)
++ ldh r4,big_external_common(r0)
++ ldh r4,small_external_common(r0)
++ ldh r4,big_local_common(r0)
++ ldh r4,small_local_common(r0)
++ ldh r4,data_label+4(r0)
++ ldh r4,big_external_data_label+4(r0)
++ ldh r4,small_external_data_label+4(r0)
++ ldh r4,big_external_common+4(r0)
++ ldh r4,small_external_common+4(r0)
++ ldh r4,big_local_common+4(r0)
++ ldh r4,small_local_common+4(r0)
++ ldh r4,data_label-0x8000(r0)
++ ldh r4,big_external_data_label-0x8000(r0)
++ ldh r4,small_external_data_label-0x8000(r0)
++ ldh r4,big_external_common-0x8000(r0)
++ ldh r4,small_external_common-0x8000(r0)
++ ldh r4,big_local_common-0x8000(r0)
++ ldh r4,small_local_common-0x8000(r0)
++ ldh r4,data_label+0x10000(r0)
++ ldh r4,data_label(r5)
++ ldh r4,big_external_data_label(r5)
++ ldh r4,small_external_data_label(r5)
++ ldh r4,big_external_common(r5)
++ ldh r4,small_external_common(r5)
++ ldh r4,big_local_common(r5)
++ ldh r4,small_local_common(r5)
++ ldh r4,data_label+4(r5)
++ ldh r4,big_external_data_label+4(r5)
++ ldh r4,small_external_data_label+4(r5)
++ ldh r4,big_external_common+4(r5)
++ ldh r4,small_external_common+4(r5)
++ ldh r4,big_local_common+4(r5)
++ ldh r4,small_local_common+4(r5)
++ ldh r4,data_label-0x8000(r5)
++ ldh r4,big_external_data_label-0x8000(r5)
++ ldh r4,small_external_data_label-0x8000(r5)
++ ldh r4,big_external_common-0x8000(r5)
++ ldh r4,small_external_common-0x8000(r5)
++ ldh r4,big_local_common-0x8000(r5)
++ ldh r4,small_local_common-0x8000(r5)
++
++ ldhio r4,0(r0)
++ ldhio r4,4(r0)
++ ldhio r4,0x7ffc(r0)
++ ldhio r4,-0x8000(r0)
++ ldhio r4,0(r5)
++ ldhio r4,4(r5)
++ ldhio r4,0x7ffc(r5)
++ ldhio r4,-0x8000(r5)
++ ldhio r4,data_label(r0)
++ ldhio r4,big_external_data_label(r0)
++ ldhio r4,small_external_data_label(r0)
++ ldhio r4,big_external_common(r0)
++ ldhio r4,small_external_common(r0)
++ ldhio r4,big_local_common(r0)
++ ldhio r4,small_local_common(r0)
++ ldhio r4,data_label+4(r0)
++ ldhio r4,big_external_data_label+4(r0)
++ ldhio r4,small_external_data_label+4(r0)
++ ldhio r4,big_external_common+4(r0)
++ ldhio r4,small_external_common+4(r0)
++ ldhio r4,big_local_common+4(r0)
++ ldhio r4,small_local_common+4(r0)
++ ldhio r4,data_label-0x8000(r0)
++ ldhio r4,big_external_data_label-0x8000(r0)
++ ldhio r4,small_external_data_label-0x8000(r0)
++ ldhio r4,big_external_common-0x8000(r0)
++ ldhio r4,small_external_common-0x8000(r0)
++ ldhio r4,big_local_common-0x8000(r0)
++ ldhio r4,small_local_common-0x8000(r0)
++ ldhio r4,data_label+0x10000(r0)
++ ldhio r4,data_label(r5)
++ ldhio r4,big_external_data_label(r5)
++ ldhio r4,small_external_data_label(r5)
++ ldhio r4,big_external_common(r5)
++ ldhio r4,small_external_common(r5)
++ ldhio r4,big_local_common(r5)
++ ldhio r4,small_local_common(r5)
++ ldhio r4,data_label+4(r5)
++ ldhio r4,big_external_data_label+4(r5)
++ ldhio r4,small_external_data_label+4(r5)
++ ldhio r4,big_external_common+4(r5)
++ ldhio r4,small_external_common+4(r5)
++ ldhio r4,big_local_common+4(r5)
++ ldhio r4,small_local_common+4(r5)
++ ldhio r4,data_label-0x8000(r5)
++ ldhio r4,big_external_data_label-0x8000(r5)
++ ldhio r4,small_external_data_label-0x8000(r5)
++ ldhio r4,big_external_common-0x8000(r5)
++ ldhio r4,small_external_common-0x8000(r5)
++ ldhio r4,big_local_common-0x8000(r5)
++ ldhio r4,small_local_common-0x8000(r5)
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/ldw.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/ldw.d
+@@ -0,0 +1,196 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 ldw
++
++# Test the ld instruction
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> ldw r4,0\(zero\)
++0+0004 <[^>]*> ldw r4,4\(zero\)
++0+0008 <[^>]*> ldw r4,32764\(zero\)
++0+000c <[^>]*> ldw r4,-32768\(zero\)
++0+0010 <[^>]*> ldw r4,0\(r5\)
++0+0014 <[^>]*> ldw r4,4\(r5\)
++0+0018 <[^>]*> ldw r4,32764\(r5\)
++0+001c <[^>]*> ldw r4,-32768\(r5\)
++0+0020 <[^>]*> ldw r4,0\(zero\)
++[ ]*20: R_NIOS2_S16 .data
++0+0024 <[^>]*> ldw r4,0\(zero\)
++[ ]*24: R_NIOS2_S16 big_external_data_label
++0+0028 <[^>]*> ldw r4,0\(zero\)
++[ ]*28: R_NIOS2_S16 small_external_data_label
++0+002c <[^>]*> ldw r4,0\(zero\)
++[ ]*2c: R_NIOS2_S16 big_external_common
++0+0030 <[^>]*> ldw r4,0\(zero\)
++[ ]*30: R_NIOS2_S16 small_external_common
++0+0034 <[^>]*> ldw r4,0\(zero\)
++[ ]*34: R_NIOS2_S16 .bss
++0+0038 <[^>]*> ldw r4,0\(zero\)
++[ ]*38: R_NIOS2_S16 .bss\+0x4000
++0+003c <[^>]*> ldw r4,0\(zero\)
++[ ]*3c: R_NIOS2_S16 .data\+0x4
++0+0040 <[^>]*> ldw r4,0\(zero\)
++[ ]*40: R_NIOS2_S16 big_external_data_label\+0x4
++0+0044 <[^>]*> ldw r4,0\(zero\)
++[ ]*44: R_NIOS2_S16 small_external_data_label\+0x4
++0+0048 <[^>]*> ldw r4,0\(zero\)
++[ ]*48: R_NIOS2_S16 big_external_common\+0x4
++0+004c <[^>]*> ldw r4,0\(zero\)
++[ ]*4c: R_NIOS2_S16 small_external_common\+0x4
++0+0050 <[^>]*> ldw r4,0\(zero\)
++[ ]*50: R_NIOS2_S16 .bss\+0x4
++0+0054 <[^>]*> ldw r4,0\(zero\)
++[ ]*54: R_NIOS2_S16 .bss\+0x4004
++0+0058 <[^>]*> ldw r4,0\(zero\)
++[ ]*58: R_NIOS2_S16 .data\+0xffff8000
++0+005c <[^>]*> ldw r4,0\(zero\)
++[ ]*5c: R_NIOS2_S16 big_external_data_label\+0xffff8000
++0+0060 <[^>]*> ldw r4,0\(zero\)
++[ ]*60: R_NIOS2_S16 small_external_data_label\+0xffff8000
++0+0064 <[^>]*> ldw r4,0\(zero\)
++[ ]*64: R_NIOS2_S16 big_external_common\+0xffff8000
++0+0068 <[^>]*> ldw r4,0\(zero\)
++[ ]*68: R_NIOS2_S16 small_external_common\+0xffff8000
++0+006c <[^>]*> ldw r4,0\(zero\)
++[ ]*6c: R_NIOS2_S16 .bss\+0xffff8000
++0+0070 <[^>]*> ldw r4,0\(zero\)
++[ ]*70: R_NIOS2_S16 .bss\+0xffffc000
++0+0074 <[^>]*> ldw r4,0\(zero\)
++[ ]*74: R_NIOS2_S16 .data\+0x10000
++0+0078 <[^>]*> ldw r4,0\(r5\)
++[ ]*78: R_NIOS2_S16 .data
++0+007c <[^>]*> ldw r4,0\(r5\)
++[ ]*7c: R_NIOS2_S16 big_external_data_label
++0+0080 <[^>]*> ldw r4,0\(r5\)
++[ ]*80: R_NIOS2_S16 small_external_data_label
++0+0084 <[^>]*> ldw r4,0\(r5\)
++[ ]*84: R_NIOS2_S16 big_external_common
++0+0088 <[^>]*> ldw r4,0\(r5\)
++[ ]*88: R_NIOS2_S16 small_external_common
++0+008c <[^>]*> ldw r4,0\(r5\)
++[ ]*8c: R_NIOS2_S16 .bss
++0+0090 <[^>]*> ldw r4,0\(r5\)
++[ ]*90: R_NIOS2_S16 .bss\+0x4000
++0+0094 <[^>]*> ldw r4,0\(r5\)
++[ ]*94: R_NIOS2_S16 .data\+0x4
++0+0098 <[^>]*> ldw r4,0\(r5\)
++[ ]*98: R_NIOS2_S16 big_external_data_label\+0x4
++0+009c <[^>]*> ldw r4,0\(r5\)
++[ ]*9c: R_NIOS2_S16 small_external_data_label\+0x4
++0+00a0 <[^>]*> ldw r4,0\(r5\)
++[ ]*a0: R_NIOS2_S16 big_external_common\+0x4
++0+00a4 <[^>]*> ldw r4,0\(r5\)
++[ ]*a4: R_NIOS2_S16 small_external_common\+0x4
++0+00a8 <[^>]*> ldw r4,0\(r5\)
++[ ]*a8: R_NIOS2_S16 .bss\+0x4
++0+00ac <[^>]*> ldw r4,0\(r5\)
++[ ]*ac: R_NIOS2_S16 .bss\+0x4004
++0+00b0 <[^>]*> ldw r4,0\(r5\)
++[ ]*b0: R_NIOS2_S16 .data\+0xffff8000
++0+00b4 <[^>]*> ldw r4,0\(r5\)
++[ ]*b4: R_NIOS2_S16 big_external_data_label\+0xffff8000
++0+00b8 <[^>]*> ldw r4,0\(r5\)
++[ ]*b8: R_NIOS2_S16 small_external_data_label\+0xffff8000
++0+00bc <[^>]*> ldw r4,0\(r5\)
++[ ]*bc: R_NIOS2_S16 big_external_common\+0xffff8000
++0+00c0 <[^>]*> ldw r4,0\(r5\)
++[ ]*c0: R_NIOS2_S16 small_external_common\+0xffff8000
++0+00c4 <[^>]*> ldw r4,0\(r5\)
++[ ]*c4: R_NIOS2_S16 .bss\+0xffff8000
++0+00c8 <[^>]*> ldw r4,0\(r5\)
++[ ]*c8: R_NIOS2_S16 .bss\+0xffffc000
++0+00cc <[^>]*> ldwio r4,0\(zero\)
++0+00d0 <[^>]*> ldwio r4,4\(zero\)
++0+00d4 <[^>]*> ldwio r4,32764\(zero\)
++0+00d8 <[^>]*> ldwio r4,-32768\(zero\)
++0+00dc <[^>]*> ldwio r4,0\(r5\)
++0+00e0 <[^>]*> ldwio r4,4\(r5\)
++0+00e4 <[^>]*> ldwio r4,32764\(r5\)
++0+00e8 <[^>]*> ldwio r4,-32768\(r5\)
++0+00ec <[^>]*> ldwio r4,0\(zero\)
++[ ]*ec: R_NIOS2_S16 .data
++0+00f0 <[^>]*> ldwio r4,0\(zero\)
++[ ]*f0: R_NIOS2_S16 big_external_data_label
++0+00f4 <[^>]*> ldwio r4,0\(zero\)
++[ ]*f4: R_NIOS2_S16 small_external_data_label
++0+00f8 <[^>]*> ldwio r4,0\(zero\)
++[ ]*f8: R_NIOS2_S16 big_external_common
++0+00fc <[^>]*> ldwio r4,0\(zero\)
++[ ]*fc: R_NIOS2_S16 small_external_common
++0+0100 <[^>]*> ldwio r4,0\(zero\)
++[ ]*100: R_NIOS2_S16 .bss
++0+0104 <[^>]*> ldwio r4,0\(zero\)
++[ ]*104: R_NIOS2_S16 .bss\+0x4000
++0+0108 <[^>]*> ldwio r4,0\(zero\)
++[ ]*108: R_NIOS2_S16 .data\+0x4
++0+010c <[^>]*> ldwio r4,0\(zero\)
++[ ]*10c: R_NIOS2_S16 big_external_data_label\+0x4
++0+0110 <[^>]*> ldwio r4,0\(zero\)
++[ ]*110: R_NIOS2_S16 small_external_data_label\+0x4
++0+0114 <[^>]*> ldwio r4,0\(zero\)
++[ ]*114: R_NIOS2_S16 big_external_common\+0x4
++0+0118 <[^>]*> ldwio r4,0\(zero\)
++[ ]*118: R_NIOS2_S16 small_external_common\+0x4
++0+011c <[^>]*> ldwio r4,0\(zero\)
++[ ]*11c: R_NIOS2_S16 .bss\+0x4
++0+0120 <[^>]*> ldwio r4,0\(zero\)
++[ ]*120: R_NIOS2_S16 .bss\+0x4004
++0+0124 <[^>]*> ldwio r4,0\(zero\)
++[ ]*124: R_NIOS2_S16 .data\+0xffff8000
++0+0128 <[^>]*> ldwio r4,0\(zero\)
++[ ]*128: R_NIOS2_S16 big_external_data_label\+0xffff8000
++0+012c <[^>]*> ldwio r4,0\(zero\)
++[ ]*12c: R_NIOS2_S16 small_external_data_label\+0xffff8000
++0+0130 <[^>]*> ldwio r4,0\(zero\)
++[ ]*130: R_NIOS2_S16 big_external_common\+0xffff8000
++0+0134 <[^>]*> ldwio r4,0\(zero\)
++[ ]*134: R_NIOS2_S16 small_external_common\+0xffff8000
++0+0138 <[^>]*> ldwio r4,0\(zero\)
++[ ]*138: R_NIOS2_S16 .bss\+0xffff8000
++0+013c <[^>]*> ldwio r4,0\(zero\)
++[ ]*13c: R_NIOS2_S16 .bss\+0xffffc000
++0+0140 <[^>]*> ldwio r4,0\(zero\)
++[ ]*140: R_NIOS2_S16 .data\+0x10000
++0+0144 <[^>]*> ldwio r4,0\(r5\)
++[ ]*144: R_NIOS2_S16 .data
++0+0148 <[^>]*> ldwio r4,0\(r5\)
++[ ]*148: R_NIOS2_S16 big_external_data_label
++0+014c <[^>]*> ldwio r4,0\(r5\)
++[ ]*14c: R_NIOS2_S16 small_external_data_label
++0+0150 <[^>]*> ldwio r4,0\(r5\)
++[ ]*150: R_NIOS2_S16 big_external_common
++0+0154 <[^>]*> ldwio r4,0\(r5\)
++[ ]*154: R_NIOS2_S16 small_external_common
++0+0158 <[^>]*> ldwio r4,0\(r5\)
++[ ]*158: R_NIOS2_S16 .bss
++0+015c <[^>]*> ldwio r4,0\(r5\)
++[ ]*15c: R_NIOS2_S16 .bss\+0x4000
++0+0160 <[^>]*> ldwio r4,0\(r5\)
++[ ]*160: R_NIOS2_S16 .data\+0x4
++0+0164 <[^>]*> ldwio r4,0\(r5\)
++[ ]*164: R_NIOS2_S16 big_external_data_label\+0x4
++0+0168 <[^>]*> ldwio r4,0\(r5\)
++[ ]*168: R_NIOS2_S16 small_external_data_label\+0x4
++0+016c <[^>]*> ldwio r4,0\(r5\)
++[ ]*16c: R_NIOS2_S16 big_external_common\+0x4
++0+0170 <[^>]*> ldwio r4,0\(r5\)
++[ ]*170: R_NIOS2_S16 small_external_common\+0x4
++0+0174 <[^>]*> ldwio r4,0\(r5\)
++[ ]*174: R_NIOS2_S16 .bss\+0x4
++0+0178 <[^>]*> ldwio r4,0\(r5\)
++[ ]*178: R_NIOS2_S16 .bss\+0x4004
++0+017c <[^>]*> ldwio r4,0\(r5\)
++[ ]*17c: R_NIOS2_S16 .data\+0xffff8000
++0+0180 <[^>]*> ldwio r4,0\(r5\)
++[ ]*180: R_NIOS2_S16 big_external_data_label\+0xffff8000
++0+0184 <[^>]*> ldwio r4,0\(r5\)
++[ ]*184: R_NIOS2_S16 small_external_data_label\+0xffff8000
++0+0188 <[^>]*> ldwio r4,0\(r5\)
++[ ]*188: R_NIOS2_S16 big_external_common\+0xffff8000
++0+018c <[^>]*> ldwio r4,0\(r5\)
++[ ]*18c: R_NIOS2_S16 small_external_common\+0xffff8000
++0+0190 <[^>]*> ldwio r4,0\(r5\)
++[ ]*190: R_NIOS2_S16 .bss\+0xffff8000
++0+0194 <[^>]*> ldwio r4,0\(r5\)
++[ ]*194: R_NIOS2_S16 .bss\+0xffffc000
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/ldw.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/ldw.s
+@@ -0,0 +1,117 @@
++ .data
++data_label:
++ .extern big_external_data_label,0x4000
++ .extern small_external_data_label,4
++ .comm big_external_common,0x4000
++ .comm small_external_common,4
++ .lcomm big_local_common,0x4000
++ .lcomm small_local_common,4
++
++# the small symbols should have space allocated in the sbss section
++# but this is not yet supported in the assembler, so space is allocated
++# in the .bss section and the relocations are not gp-relative. this will
++# be updated when gp-relative relocations are added
++ .text
++ ldw r4,0(r0)
++ ldw r4,4(r0)
++ ldw r4,0x7ffc(r0)
++ ldw r4,-0x8000(r0)
++ ldw r4,0(r5)
++ ldw r4,4(r5)
++ ldw r4,0x7ffc(r5)
++ ldw r4,-0x8000(r5)
++ ldw r4,data_label(r0)
++ ldw r4,big_external_data_label(r0)
++ ldw r4,small_external_data_label(r0)
++ ldw r4,big_external_common(r0)
++ ldw r4,small_external_common(r0)
++ ldw r4,big_local_common(r0)
++ ldw r4,small_local_common(r0)
++ ldw r4,data_label+4(r0)
++ ldw r4,big_external_data_label+4(r0)
++ ldw r4,small_external_data_label+4(r0)
++ ldw r4,big_external_common+4(r0)
++ ldw r4,small_external_common+4(r0)
++ ldw r4,big_local_common+4(r0)
++ ldw r4,small_local_common+4(r0)
++ ldw r4,data_label-0x8000(r0)
++ ldw r4,big_external_data_label-0x8000(r0)
++ ldw r4,small_external_data_label-0x8000(r0)
++ ldw r4,big_external_common-0x8000(r0)
++ ldw r4,small_external_common-0x8000(r0)
++ ldw r4,big_local_common-0x8000(r0)
++ ldw r4,small_local_common-0x8000(r0)
++ ldw r4,data_label+0x10000(r0)
++ ldw r4,data_label(r5)
++ ldw r4,big_external_data_label(r5)
++ ldw r4,small_external_data_label(r5)
++ ldw r4,big_external_common(r5)
++ ldw r4,small_external_common(r5)
++ ldw r4,big_local_common(r5)
++ ldw r4,small_local_common(r5)
++ ldw r4,data_label+4(r5)
++ ldw r4,big_external_data_label+4(r5)
++ ldw r4,small_external_data_label+4(r5)
++ ldw r4,big_external_common+4(r5)
++ ldw r4,small_external_common+4(r5)
++ ldw r4,big_local_common+4(r5)
++ ldw r4,small_local_common+4(r5)
++ ldw r4,data_label-0x8000(r5)
++ ldw r4,big_external_data_label-0x8000(r5)
++ ldw r4,small_external_data_label-0x8000(r5)
++ ldw r4,big_external_common-0x8000(r5)
++ ldw r4,small_external_common-0x8000(r5)
++ ldw r4,big_local_common-0x8000(r5)
++ ldw r4,small_local_common-0x8000(r5)
++
++ ldwio r4,0(r0)
++ ldwio r4,4(r0)
++ ldwio r4,0x7ffc(r0)
++ ldwio r4,-0x8000(r0)
++ ldwio r4,0(r5)
++ ldwio r4,4(r5)
++ ldwio r4,0x7ffc(r5)
++ ldwio r4,-0x8000(r5)
++ ldwio r4,data_label(r0)
++ ldwio r4,big_external_data_label(r0)
++ ldwio r4,small_external_data_label(r0)
++ ldwio r4,big_external_common(r0)
++ ldwio r4,small_external_common(r0)
++ ldwio r4,big_local_common(r0)
++ ldwio r4,small_local_common(r0)
++ ldwio r4,data_label+4(r0)
++ ldwio r4,big_external_data_label+4(r0)
++ ldwio r4,small_external_data_label+4(r0)
++ ldwio r4,big_external_common+4(r0)
++ ldwio r4,small_external_common+4(r0)
++ ldwio r4,big_local_common+4(r0)
++ ldwio r4,small_local_common+4(r0)
++ ldwio r4,data_label-0x8000(r0)
++ ldwio r4,big_external_data_label-0x8000(r0)
++ ldwio r4,small_external_data_label-0x8000(r0)
++ ldwio r4,big_external_common-0x8000(r0)
++ ldwio r4,small_external_common-0x8000(r0)
++ ldwio r4,big_local_common-0x8000(r0)
++ ldwio r4,small_local_common-0x8000(r0)
++ ldwio r4,data_label+0x10000(r0)
++ ldwio r4,data_label(r5)
++ ldwio r4,big_external_data_label(r5)
++ ldwio r4,small_external_data_label(r5)
++ ldwio r4,big_external_common(r5)
++ ldwio r4,small_external_common(r5)
++ ldwio r4,big_local_common(r5)
++ ldwio r4,small_local_common(r5)
++ ldwio r4,data_label+4(r5)
++ ldwio r4,big_external_data_label+4(r5)
++ ldwio r4,small_external_data_label+4(r5)
++ ldwio r4,big_external_common+4(r5)
++ ldwio r4,small_external_common+4(r5)
++ ldwio r4,big_local_common+4(r5)
++ ldwio r4,small_local_common+4(r5)
++ ldwio r4,data_label-0x8000(r5)
++ ldwio r4,big_external_data_label-0x8000(r5)
++ ldwio r4,small_external_data_label-0x8000(r5)
++ ldwio r4,big_external_common-0x8000(r5)
++ ldwio r4,small_external_common-0x8000(r5)
++ ldwio r4,big_local_common-0x8000(r5)
++ ldwio r4,small_local_common-0x8000(r5)
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/lineseparator.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/lineseparator.d
+@@ -0,0 +1,10 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 lineseparator
++
++# Test the add instruction
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0x0+0000 mov r5,r4
++0x0+0004 mov r4,r5
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/lineseparator.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/lineseparator.s
+@@ -0,0 +1,4 @@
++mov r5, r4 ; mov r4, r5
++
++
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/link1.lds
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/link1.lds
+@@ -0,0 +1,11 @@
++/* Simple script for testing relaxation */
++
++OUTPUT_FORMAT("elf32-littlenios2", "elf32-littlenios2", "elf32-littlenios2")
++OUTPUT_ARCH(nios2)
++ENTRY(_start)
++SECTIONS
++{
++ _start = .;
++ text2 0 : { *(text2) }
++ text1 0x8000 : { *(text1) }
++}
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/link2.lds
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/link2.lds
+@@ -0,0 +1,11 @@
++/* Simple script for testing relaxation */
++
++OUTPUT_FORMAT("elf32-littlenios2", "elf32-littlenios2", "elf32-littlenios2")
++OUTPUT_ARCH(nios2)
++ENTRY(_start)
++SECTIONS
++{
++ _start = .;
++ text1 0 : { *(text1) }
++ text2 0x80000000 : { *(text2) }
++}
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/link3.lds
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/link3.lds
+@@ -0,0 +1,11 @@
++/* Simple script for testing relaxation */
++
++OUTPUT_FORMAT("elf32-littlenios2", "elf32-littlenios2", "elf32-littlenios2")
++OUTPUT_ARCH(nios2)
++ENTRY(_start)
++SECTIONS
++{
++ _start = .;
++ text1 0 : { *(text1) }
++ text2 0x08000000 : { *(text2) }
++}
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/mov.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/mov.d
+@@ -0,0 +1,11 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 mov
++
++# Test the mov instruction
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> movz \$4,\$5,\$6
++0+0004 <[^>]*> movnz \$4,\$5,\$6
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/mov.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/mov.s
+@@ -0,0 +1,5 @@
++# Source file used to test the movz and movnz instructions
++
++foo:
++ movz $4,$5,$6
++ movnz $4,$5,$6
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/movi.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/movi.d
+@@ -0,0 +1,13 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 movi
++
++# Test implicit conversion of movi/movhi etc
++.*: file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> movi r2,32
++0+0004 <[^>]*> movhi r2,8192
++0+0008 <[^>]*> movhi r2,65535
++0+000c <[^>]*> orhi r2,r5,65535
++0+0010 <[^>]*> xorhi r2,r10,65535
++0+0014 <[^>]*> andhi r2,r15,65535
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/movi.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/movi.s
+@@ -0,0 +1,21 @@
++# Source file used to test silent conversion of
++# movi to orhi etc
++
++foo:
++# this doesn't get converted
++movi r2, 0x20
++
++# this does
++movi r2, 0x20000000
++
++# addi should convert only if the source register is r0
++addi r2, r0, 0xffff0000
++# but we can't test for non-conversion because the value would
++# be out of range
++
++# logical ops should convert for any register
++ori r2, r5, 0xffff0000
++xori r2, r10, 0xffff0000
++andi r2, r15, 0xffff0000
++
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/movia.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/movia.d
+@@ -0,0 +1,18 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 movia
++
++# Test the movia instruction
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> movhi r2,32897
++0+0004 <[^>]*> addi r2,r2,-32640
++0+0008 <[^>]*> movhi r3,0
++ 8: R_NIOS2_HIADJ16 sym\+0x80000000
++0+000c <[^>]*> addi r3,r3,0
++ c: R_NIOS2_LO16 sym\+0x80000000
++0+0010 <[^>]*> movhi r4,0
++ 10: R_NIOS2_HIADJ16 sym\+0x80000001
++0+0014 <[^>]*> addi r4,r4,0
++ 14: R_NIOS2_LO16 sym\+0x80000001
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/movia.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/movia.s
+@@ -0,0 +1,6 @@
++# Test program for movia reg, immed32 macro
++
++foo:
++ movia r2, 0x80808080
++ movia r3, sym + 0x80000000
++ movia r4, sym - 0x7fffffff
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/mul.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/mul.d
+@@ -0,0 +1,19 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 mul
++
++# Test the mul macro.
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> mul r4,r5,r6
++0+0004 <[^>]*> muli r4,r5,0
++0+0008 <[^>]*> muli r4,r5,1
++0+000c <[^>]*> muli r4,r5,-32768
++0+0010 <[^>]*> muli r4,r5,32767
++0+0014 <[^>]*> muli r4,r5,0
++[ ]*14: R_NIOS2_S16 undefined_symbol
++0+0018 <[^>]*> muli r4,r5,16448
++0+001c <[^>]*> mulxss r4,r5,r6
++0+0020 <[^>]*> mulxsu r4,r5,r6
++0+0024 <[^>]*> mulxuu r4,r5,r6
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/mul.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/mul.s
+@@ -0,0 +1,15 @@
++# Source file used to test the mul macro.
++
++foo:
++ mul r4,r5,r6
++ muli r4,r5,0
++ muli r4,r5,1
++ muli r4,r5,-0x8000
++ muli r4,r5,0x7fff
++ muli r4,r5,undefined_symbol
++ muli r4,r5,defined_symbol
++ mulxss r4,r5,r6
++ mulxsu r4,r5,r6
++ mulxuu r4,r5,r6
++.data
++.set defined_symbol, 0x4040
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-merged_strings.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-merged_strings.d
+@@ -0,0 +1,17 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 reloc against merged strings
++
++# Test the merged duplicate strings
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> addi r2,r2,32
++0+0004 <[^>]*> addi r3,r3,63
++0+0008 <[^>]*> addi r4,r4,70
++0+000c <[^>]*> call 00000000 <func1>
++0+0010 <[^>]*> addi r2,r2,101
++0+0014 <[^>]*> addi r3,r3,63
++0+0018 <[^>]*> addi r4,r4,132
++0+001c <[^>]*> call 00000000 <func1>
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-merged_strings.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-merged_strings.s
+@@ -0,0 +1,21 @@
++ .section .rodata.str1.1,"aMS",@progbits,1
++.LC0:
++ .string "DHRYSTONE PROGRAM, 1'ST STRING"
++.LC1:
++ .string "COMMON"
++.LC2:
++ .string "DHRYSTONE PROGRAM, 2'ND STRING"
++
++ .section .text
++ .align 3
++ .global func1
++ .type func1, @function
++func1:
++ #movhi $2, %hiadj(.LC0)
++ addi r2, r2, .LC0
++ #movhi $3, %hiadj(.LC1)
++ addi r3, r3, .LC1
++ #movhi $4, %hiadj(.LC2)
++ addi r4, r4, .LC2
++ .size func1, .-func1
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-bfd-reloc-xx.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-bfd-reloc-xx.d
+@@ -0,0 +1,8 @@
++#objdump: -s
++#name: NIOS2 R_NIOS2_BFD_RELOC_XX
++
++# Test the branch instructions.
++.*: +file format elf32-littlenios2
++
++Contents of section .text:
++ 0000 fa00cefa efbeadde facefaef beadde00 ................
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-bfd-reloc-xx.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-bfd-reloc-xx.s
+@@ -0,0 +1,9 @@
++# Test for New Jersey 32-bit, 16 and 8-bit relocations
++
++.global byte_sym
++.global short_sym
++.global long_sym
++
++.set byte_sym, 0xFA
++.set short_sym, 0xFACE
++.set long_sym, 0xDEADBEEF
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-cache-opx.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-cache-opx.d
+@@ -0,0 +1,10 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 R_NIOS2_CACHE_OPX
++
++# Test the cache opx relocation
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> cache 0x1f,0x1000\(\$1\)
++0+0004 <[^>]*> Address 0x4 is out of bounds.
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-cache-opx.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-cache-opx.s
+@@ -0,0 +1,6 @@
++# Test the imm5 relocation
++
++.text
++ cache imm5, 0x1000($1)
++
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-call26.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-call26.d
+@@ -0,0 +1,76 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 nios2-reloc-r-nios2-call26
++
++# Test the branch instructions.
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++[ ]*\.\.\.
++[ ]*0: R_NIOS2_CALL26 .text\+0x100
++[ ]*4: R_NIOS2_CALL26 globalfunc
++0+0008 <[^>]*> nop
++0+000c <[^>]*> nop
++0+0010 <[^>]*> nop
++0+0014 <[^>]*> nop
++0+0018 <[^>]*> nop
++0+001c <[^>]*> nop
++0+0020 <[^>]*> nop
++0+0024 <[^>]*> nop
++0+0028 <[^>]*> nop
++0+002c <[^>]*> nop
++0+0030 <[^>]*> nop
++0+0034 <[^>]*> nop
++0+0038 <[^>]*> nop
++0+003c <[^>]*> nop
++0+0040 <[^>]*> nop
++0+0044 <[^>]*> nop
++0+0048 <[^>]*> nop
++0+004c <[^>]*> nop
++0+0050 <[^>]*> nop
++0+0054 <[^>]*> nop
++0+0058 <[^>]*> nop
++0+005c <[^>]*> nop
++0+0060 <[^>]*> nop
++0+0064 <[^>]*> nop
++0+0068 <[^>]*> nop
++0+006c <[^>]*> nop
++0+0070 <[^>]*> nop
++0+0074 <[^>]*> nop
++0+0078 <[^>]*> nop
++0+007c <[^>]*> nop
++0+0080 <[^>]*> nop
++0+0084 <[^>]*> nop
++0+0088 <[^>]*> nop
++0+008c <[^>]*> nop
++0+0090 <[^>]*> nop
++0+0094 <[^>]*> nop
++0+0098 <[^>]*> nop
++0+009c <[^>]*> nop
++0+00a0 <[^>]*> nop
++0+00a4 <[^>]*> nop
++0+00a8 <[^>]*> nop
++0+00ac <[^>]*> nop
++0+00b0 <[^>]*> nop
++0+00b4 <[^>]*> nop
++0+00b8 <[^>]*> nop
++0+00bc <[^>]*> nop
++0+00c0 <[^>]*> nop
++0+00c4 <[^>]*> nop
++0+00c8 <[^>]*> nop
++0+00cc <[^>]*> nop
++0+00d0 <[^>]*> nop
++0+00d4 <[^>]*> nop
++0+00d8 <[^>]*> nop
++0+00dc <[^>]*> nop
++0+00e0 <[^>]*> nop
++0+00e4 <[^>]*> nop
++0+00e8 <[^>]*> nop
++0+00ec <[^>]*> nop
++0+00f0 <[^>]*> nop
++0+00f4 <[^>]*> nop
++0+00f8 <[^>]*> nop
++0+00fc <[^>]*> nop
++0+0100 <[^>]*> nop
++ ...
++
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-call26.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-call26.s
+@@ -0,0 +1,12 @@
++# Test for New Jersey 32-bit relocations
++
++.global globalfunc
++.text
++.set norelax
++start:
++ call localfunc
++ call globalfunc
++
++.align 8
++localfunc:
++ nop
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-gprel.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-gprel.d
+@@ -0,0 +1,15 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 gp-relative relocations
++
++# Test the %gprel macro.
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> movui gp,32784
++0+0004 <[^>]*> ldw at,-32756\(gp\)
++0+0008 <[^>]*> ldw r2,-32752\(gp\)
++0+000c <[^>]*> ldb r3,-32748\(gp\)
++0+0010 <[^>]*> ldw at,-32744\(gp\)
++0+0014 <[^>]*> ldw r2,-32740\(gp\)
++0+0018 <[^>]*> ldb r3,-32736\(gp\)
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-gprel.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-gprel.s
+@@ -0,0 +1,24 @@
++.sdata
++sym1:
++.long 0xdead
++sym2:
++.long 0xbeef
++sym3:
++.byte 0x7f
++
++.section sdata1, "s"
++sym4:
++.long 0xdead
++sym5:
++.long 0xbeef
++sym6:
++.byte 0x7f
++
++.text
++ movui gp, _gp
++ ldw r1, %gprel(sym1)(gp)
++ ldw r2, %gprel(sym2)(gp)
++ ldb r3, %gprel(sym3)(gp)
++ ldw r1, %gprel(sym4)(gp)
++ ldw r2, %gprel(sym5)(gp)
++ ldb r3, %gprel(sym6)(gp)
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-hilo16.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-hilo16.d
+@@ -0,0 +1,10 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 R_NIOS2_HI16,LO16,HIADJ16
++
++# Test the %hi, %lo and %hiadi relocations
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> addi at,at,-8531
++0+0004 <[^>]*> addi at,at,-16657
++0+0008 <[^>]*> addi at,at,-8530
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-hilo16.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-hilo16.s
+@@ -0,0 +1,6 @@
++# Test the %hi, lo and %hiadj relocations
++
++.text
++ addi r1, r1, %hi(long_symbol)
++ addi r1, r1, %lo(long_symbol)
++ addi r1, r1, %hiadj(long_symbol)
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-imm5.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-imm5.d
+@@ -0,0 +1,10 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 R_NIOS2_IMM5
++
++# Test the branch instructions.
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> roli at,at,31
++0+0004 <.[^>]*> Address 0x4 is out of bounds.
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-imm5.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-imm5.s
+@@ -0,0 +1,6 @@
++# Test the imm5 relocation
++
++.text
++ roli r1, r1, imm5
++
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-pcrel16.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-pcrel16.d
+@@ -0,0 +1,12 @@
++#objdump: -s
++#name: NIOS2 R_NIOS2_PCREL16
++
++# Test the relative branch relocations.
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++
++0+0000 <[^>]*> br 00000008 <ext_label>
++0+0004 <[^>]*> br 00000018 <__bss_start\+0x8>
++0+0008 <[^>]*> nop
++0+000c <[^>]*> nop
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-pcrel16.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-pcrel16.s
+@@ -0,0 +1,6 @@
++# Test for pc-relative relocations
++.set norelax
++.text
++ br ext_label
++ br ext_label + 16
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-s.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-s.d
+@@ -0,0 +1,8 @@
++
++a.exe: file format elf32-littlenios2
++
++Contents of section .text:
++ 0000 04004408 04006008 c4ff5f08 44004808 ..D...`..._.D.H.
++ 0010 44004008 D.@.
++Contents of section .data:
++Contents of section .sbss:
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-s16.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-s16.d
+@@ -0,0 +1,9 @@
++#objdump: -s
++#name: NIOS2 R_NIOS2_S16
++
++# Test the signed 16-bit relocations.
++.*: +file format elf32-littlenios2
++
++Contents of section .text:
++ 0000 04004408 04006008 c4ff5f08 44004808 ..D...`..._.D.H.
++ 0010 44004008 D.@.
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-s16.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-s16.s
+@@ -0,0 +1,13 @@
++# Test for New Jersey 32-bit, 16 and 8-bit relocations
++
++.set some_other_sym, 0x1000
++.text
++# signed 16-bit relocation
++ addi r1, r1, some_sym
++ addi r1, r1, min
++ addi r1, r1, max
++ addi r1, r1, some_sym + some_other_sym + 1
++ addi r1, r1, some_sym - some_other_sym + 1
++
++
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-u16.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-u16.d
+@@ -0,0 +1,9 @@
++#objdump: -s
++#name: NIOS2 R_NIOS2_U16
++
++# Test the unsigned 16-bit relocations.
++.*: +file format elf32-littlenios2
++
++Contents of section .text:
++ 0000 0c004408 0c004008 ccff7f08 4c004808 ..D...@.....L.H.
++ 0010 4c004008 L.@.
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-u16.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-u16.s
+@@ -0,0 +1,13 @@
++# Test for New Jersey 32-bit, 16 and 8-bit relocations
++
++.set some_other_sym, 0x1000
++.text
++# signed 16-bit relocation
++ andi r1, r1, some_sym
++ andi r1, r1, min
++ andi r1, r1, max
++ andi r1, r1, some_sym + some_other_sym + 1
++ andi r1, r1, some_sym - some_other_sym + 1
++
++
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nios2.exp
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nios2.exp
+@@ -0,0 +1,201 @@
++#
++# Some generic New Jersey tests
++#
++
++# "LOSE" marks information about tests which fail at a particular point
++# in time, but which are not XFAILed. Either they used to pass
++# and indicate either regressions or the need to tweak the tests to keep
++# up the with code, or they are new tests and it is unknown whether or not
++# they should pass as-is for the given object formats.
++
++if ![info exists LD] then {
++ set LD [findfile $base_dir/../../ld/ld-new]
++}
++
++proc run_list_test { name } {
++ global srcdir subdir
++ set testname "NIOS2 $name"
++ set file $srcdir/$subdir/$name
++ gas_run ${name}.s "" ">&dump.out"
++ if { [regexp_diff "dump.out" "${file}.l"] } then {
++ fail $testname
++ verbose "output is [file_contents "dump.out"]" 2
++ return
++ }
++ pass $testname
++}
++
++proc ld_run { obj0 obj1 opts } {
++ global LD
++ global comp_output
++ global srcdir
++ global subdir
++ global host_triplet
++
++ verbose "Executing $srcdir/lib/run $LD $obj0 $obj1 $opts"
++ catch "exec $srcdir/lib/run $LD $obj0 $obj1 $opts" comp_output
++ set comp_output [prune_warnings $comp_output]
++ verbose "output was $comp_output"
++ return [list $comp_output ""];
++}
++
++proc objdump_run { prog opts redir } {
++ global OBJDUMP
++ global comp_output
++ global srcdir
++ global subdir
++ global host_triplet
++
++ verbose "Executing $srcdir/lib/run $OBJDUMP -s $prog"
++ catch "exec $srcdir/lib/run $OBJDUMP $opts $prog $redir" comp_output
++ set comp_output [prune_warnings $comp_output]
++ verbose "output was $comp_output"
++ return [list $comp_output ""];
++}
++
++proc run_reloc_test { name other objdump_opts} {
++ global LD OBJDUMP AS
++ global srcdir subdir
++ set testname "NIOS2 $name"
++ set file $srcdir/$subdir/$name
++ set file1 $srcdir/$subdir/$other
++ gas_run ${name}.s "-o ${name}.o" ""
++ gas_run ${other}.s "-o ${other}.o" ""
++ ld_run ${name}.o ${other}.o "-o ${name}.exe"
++ objdump_run ${name}.exe ${objdump_opts} ">&dump.out"
++ if { [regexp_diff "dump.out" "${file}.d"] } then {
++ fail $testname
++ verbose "output is [file_contents "dump.out"]" 2
++ return
++ }
++ pass $testname
++}
++
++proc run_gpreloc_test { name objdump_opts} {
++ global LD OBJDUMP AS
++ global srcdir subdir
++ set testname "NIOS2 $name"
++ set file $srcdir/$subdir/$name
++ gas_run ${name}.s "-o ${name}.o" ""
++ ld_run ${name}.o "" "-o ${name}.exe"
++ objdump_run ${name}.exe ${objdump_opts} ">&dump.out"
++ if { [regexp_diff "dump.out" "${file}.d"] } then {
++ fail $testname
++ verbose "output is [file_contents "dump.out"]" 2
++ return
++ }
++ pass $testname
++}
++
++proc run_relax_test { name asm_opts link_opts objdump_opts} {
++ global LD OBJDUMP AS
++ global srcdir subdir
++ set testname "NIOS2 $name"
++ set file $srcdir/$subdir/$name
++ gas_run ${name}.s "-o ${name}.o" ${asm_opts}
++ ld_run ${name}.o "" "-o ${name}.exe -T${srcdir}/${subdir}/${link_opts} --relax"
++ objdump_run ${name}.exe ${objdump_opts} ">&dump.out"
++ if { [regexp_diff "dump.out" "${file}.d"] } then {
++ fail $testname
++ verbose "output is [file_contents "dump.out"]" 2
++ return
++ }
++ pass $testname
++}
++
++proc run_relax_section_test { name asm_opts objdump_opts} {
++ global LD OBJDUMP AS
++ global srcdir subdir
++ set testname "NIOS2 $name"
++ set file $srcdir/$subdir/$name
++ gas_run ${name}.s "-o ${name}.o" ${asm_opts}
++ ld_run ${name}.o "" "-o ${name}.exe"
++ objdump_run ${name}.exe ${objdump_opts} ">&dump.out"
++ if { [regexp_diff "dump.out" "${file}.d"] } then {
++ fail $testname
++ verbose "output is [file_contents "dump.out"]" 2
++ return
++ }
++ pass $testname
++}
++
++if { [istarget nios2-*-elf] } then {
++ set elf 1
++
++ run_dump_test "add"
++ run_dump_test "and"
++ run_dump_test "align_fill"
++ run_dump_test "align_text"
++
++ run_dump_test "branch"
++
++
++ run_dump_test "break"
++ run_dump_test "bret"
++ run_dump_test "cache"
++
++ run_dump_test "call"
++
++
++ run_dump_test "cmp"
++
++
++ run_dump_test "jmp"
++ run_dump_test "ldw"
++ run_dump_test "ldh"
++ run_dump_test "ldb"
++
++ run_dump_test "flushda"
++
++ run_dump_test "mul"
++
++ run_dump_test "nor"
++ run_dump_test "or"
++
++ run_dump_test "ctl"
++ run_dump_test "ret"
++ run_dump_test "rotate"
++
++ run_dump_test "stw"
++ run_dump_test "sth"
++ run_dump_test "stb"
++
++ run_dump_test "sub"
++ run_dump_test "sync"
++ run_dump_test "trap"
++ run_dump_test "tret"
++
++ run_dump_test "custom"
++ run_dump_test "xor"
++ run_dump_test "movia"
++
++ run_dump_test "complex"
++ run_dump_test "comments"
++ run_dump_test "etbt"
++ run_dump_test "lineseparator"
++ run_dump_test "movi"
++
++ run_list_test "illegal"
++ run_list_test "warn_nobreak"
++ run_list_test "warn_noat"
++
++
++# now lets make sure that the assembler generates all the relocations
++# that it should correctly, and that the linker links them correctly
++
++ run_reloc_test "nios2-reloc-r-nios2-bfd-reloc-xx" "reloc_symbols" "-s"
++ run_reloc_test "nios2-reloc-r-nios2-s16" "s16_symbol" "-s"
++ run_reloc_test "nios2-reloc-r-nios2-u16" "u16_symbol" "-s"
++ run_reloc_test "nios2-reloc-r-nios2-pcrel16" "pcrel_label" "-dr --prefix-addresses"
++ run_reloc_test "nios2-reloc-r-nios2-hilo16" "hilo_symbol" "-dr --prefix-addresses"
++ run_dump_test "nios2-reloc-r-nios2-call26"
++ run_reloc_test "nios2-reloc-r-nios2-imm5" "imm5_symbol" "-dr --prefix-addresses"
++ run_reloc_test "nios2-reloc-merged_strings" "str2" "-dr --prefix-addresses"
++ run_gpreloc_test "nios2-reloc-r-nios2-gprel" "-dr --prefix-addresses"
++
++# relaxation tests
++ run_relax_test "relax_ujmp" "-relax-all" "link1.lds" "-dr --prefix-addresses"
++ run_relax_test "relax_cjmp" "-relax-all" "link1.lds" "-dr --prefix-addresses"
++ run_relax_test "relax_callr" "-relax-all" "link3.lds" "-dr --prefix-addresses"
++ run_relax_section_test "relax_section" "-relax-section" "-dr --prefix-addresses"
++}
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nor.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nor.d
+@@ -0,0 +1,9 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 nor
++
++# Test the nor instruction
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> nor r6,r8,r10
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/nor.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/nor.s
+@@ -0,0 +1,5 @@
++# Source file used to test the nor instruction
++
++foo:
++ nor r6,r8,r10
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/or.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/or.d
+@@ -0,0 +1,11 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 or
++
++# Test the nor instruction
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section .text:
++0+0000 <[^>]*> or r6,r8,r10
++0+0004 <[^>]*> orhi r6,r7,65535
++0+0008 <[^>]*> ori r6,r7,65535
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/or.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/or.s
+@@ -0,0 +1,7 @@
++# Source file used to test the nor instruction
++
++foo:
++ or r6,r8,r10
++ orhi r6,r7,0xffff
++ ori r6,r7,0xffff
++
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/pcrel_label.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/pcrel_label.s
+@@ -0,0 +1,5 @@
++.text
++ext_label:
++ nop
++ nop
++.global ext_label
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/relax_callr.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/relax_callr.d
+@@ -0,0 +1,22 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 relax_callr
++# Test relaxation of callr
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section text1:
++00000000 <[^>]*> call 08000000 <func>
++00000004 <[^>]*> nop
++00000008 <[^>]*> nop
++0000000c <[^>]*> call 0800001c <func1>
++00000010 <[^>]*> nop
++00000014 <[^>]*> nop
++Disassembly of section text2:
++08000000 <[^>]*> nop
++08000004 <[^>]*> br 0800001c <func1>
++08000008 <[^>]*> nop
++0800000c <[^>]*> nop
++08000010 <[^>]*> nop
++08000014 <[^>]*> nop
++08000018 <[^>]*> nop
++0800001c <[^>]*> nop
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/relax_callr.s
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/relax_callr.s
+@@ -0,0 +1,17 @@
++# relaxation test for callr
++
++.globl text1
++.section text1, "ax", @progbits
++
++ call func
++ call func1
++
++.section text2, "ax", @progbits
++func:
++ nop
++ br func1
++ nop
++ nop
++ nop
++func1:
++ nop
+Index: binutils-2.20.1/gas/testsuite/gas/nios2/relax_cjmp.d
+===================================================================
+--- /dev/null
++++ binutils-2.20.1/gas/testsuite/gas/nios2/relax_cjmp.d
+@@ -0,0 +1,8227 @@
++#objdump: -dr --prefix-addresses
++#name: NIOS2 relax_cjmp
++
++# Test relaxation of conditional jumps
++
++.*: +file format elf32-littlenios2
++
++Disassembly of section text2:
++00000000 <[^>]*> bge r2,r3,00008000 <[^>]*>
++00000004 <[^>]*> nop
++00000008 <[^>]*> nop
++0000000c <[^>]*> nop
++00000010 <[^>]*> blt r3,r2,00000020 <[^>]*>
++00000014 <[^>]*> movhi at,1
++00000018 <[^>]*> ori at,at,36
++0000001c <[^>]*> jmp at
++00000020 <[^>]*> bge r3,r2,00000038 <[^>]*>
++00000024 <[^>]*> nop
++00000028 <[^>]*> nop
++0000002c <[^>]*> nop
++00000030 <[^>]*> nop
++00000034 <[^>]*> nop
++00000038 <[^>]*> nop
++Disassembly of section text1:
++00008000 <[^>]*> beq r2,r3,00010000 <[^>]*>
++00008004 <[^>]*> nop
++00008008 <[^>]*> nop
++0000800c <[^>]*> nop
++00008010 <[^>]*> bne r2,r3,00008020 <[^>]*>
++00008014 <[^>]*> movhi at,1
++00008018 <[^>]*> ori at,at,36
++0000801c <[^>]*> jmp at
++00008020 <[^>]*> nop
++00008024 <[^>]*> nop
++00008028 <[^>]*> nop
++0000802c <[^>]*> nop
++00008030 <[^>]*> nop
++00008034 <[^>]*> nop
++00008038 <[^>]*> nop
++0000803c <[^>]*> nop
++00008040 <[^>]*> nop
++00008044 <[^>]*> nop
++00008048 <[^>]*> nop
++0000804c <[^>]*> nop
++00008050 <[^>]*> nop
++00008054 <[^>]*> nop
++00008058 <[^>]*> nop
++0000805c <[^>]*> nop
++00008060 <[^>]*> nop
++00008064 <[^>]*> nop
++00008068 <[^>]*> nop
++0000806c <[^>]*> nop
++00008070 <[^>]*> nop
++00008074 <[^>]*> nop
++00008078 <[^>]*> nop
++0000807c <[^>]*> nop
++00008080 <[^>]*> nop
++00008084 <[^>]*> nop
++00008088 <[^>]*> nop
++0000808c <[^>]*> nop
++00008090 <[^>]*> nop
++00008094 <[^>]*> nop
++00008098 <[^>]*> nop
++0000809c <[^>]*> nop
++000080a0 <[^>]*> nop
++000080a4 <[^>]*> nop
++000080a8 <[^>]*> nop
++000080ac <[^>]*> nop
++000080b0 <[^>]*> nop
++000080b4 <[^>]*> nop
++000080b8 <[^>]*> nop
++000080bc <[^>]*> nop
++000080c0 <[^>]*> nop
++000080c4 <[^>]*> nop
++000080c8 <[^>]*> nop
++000080cc <[^>]*> nop
++000080d0 <[^>]*> nop
++000080d4 <[^>]*> nop
++000080d8 <[^>]*> nop
++000080dc <[^>]*> nop
++000080e0 <[^>]*> nop
++000080e4 <[^>]*> nop
++000080e8 <[^>]*> nop
++000080ec <[^>]*> nop
++000080f0 <[^>]*> nop
++000080f4 <[^>]*> nop
++000080f8 <[^>]*> nop
++000080fc <[^>]*> nop
++00008100 <[^>]*> nop
++00008104 <[^>]*> nop
++00008108 <[^>]*> nop
++0000810c <[^>]*> nop
++00008110 <[^>]*> nop
++00008114 <[^>]*> nop
++00008118 <[^>]*> nop
++0000811c <[^>]*> nop
++00008120 <[^>]*> nop
++00008124 <[^>]*> nop
++00008128 <[^>]*> nop
++0000812c <[^>]*> nop
++00008130 <[^>]*> nop
++00008134 <[^>]*> nop
++00008138 <[^>]*> nop
++0000813c <[^>]*> nop
++00008140 <[^>]*> nop
++00008144 <[^>]*> nop
++00008148 <[^>]*> nop
++0000814c <[^>]*> nop
++00008150 <[^>]*> nop
++00008154 <[^>]*> nop
++00008158 <[^>]*> nop
++0000815c <[^>]*> nop
++00008160 <[^>]*> nop
++00008164 <[^>]*> nop
++00008168 <[^>]*> nop
++0000816c <[^>]*> nop
++00008170 <[^>]*> nop
++00008174 <[^>]*> nop
++00008178 <[^>]*> nop
++0000817c <[^>]*> nop
++00008180 <[^>]*> nop
++00008184 <[^>]*> nop
++00008188 <[^>]*> nop
++0000818c <[^>]*> nop
++00008190 <[^>]*> nop
++00008194 <[^>]*> nop
++00008198 <[^>]*> nop
++0000819c <[^>]*> nop
++000081a0 <[^>]*> nop
++000081a4 <[^>]*> nop
++000081a8 <[^>]*> nop
++000081ac <[^>]*> nop
++000081b0 <[^>]*> nop
++000081b4 <[^>]*> nop
++000081b8 <[^>]*> nop
++000081bc <[^>]*> nop
++000081c0 <[^>]*> nop
++000081c4 <[^>]*> nop
++000081c8 <[^>]*> nop
++000081cc <[^>]*> nop
++000081d0 <[^>]*> nop
++000081d4 <[^>]*> nop
++000081d8 <[^>]*> nop
++000081dc <[^>]*> nop
++000081e0 <[^>]*> nop
++000081e4 <[^>]*> nop
++000081e8 <[^>]*> nop
++000081ec <[^>]*> nop
++000081f0 <[^>]*> nop
++000081f4 <[^>]*> nop
++000081f8 <[^>]*> nop
++000081fc <[^>]*> nop
++00008200 <[^>]*> nop
++00008204 <[^>]*> nop
++00008208 <[^>]*> nop
++0000820c <[^>]*> nop
++00008210 <[^>]*> nop
++00008214 <[^>]*> nop
++00008218 <[^>]*> nop
++0000821c <[^>]*> nop
++00008220 <[^>]*> nop
++00008224 <[^>]*> nop
++00008228 <[^>]*> nop
++0000822c <[^>]*> nop
++00008230 <[^>]*> nop
++00008234 <[^>]*> nop
++00008238 <[^>]*> nop
++0000823c <[^>]*> nop
++00008240 <[^>]*> nop
++00008244 <[^>]*> nop
++00008248 <[^>]*> nop
++0000824c <[^>]*> nop
++00008250 <[^>]*> nop
++00008254 <[^>]*> nop
++00008258 <[^>]*> nop
++0000825c <[^>]*> nop
++00008260 <[^>]*> nop
++00008264 <[^>]*> nop
++00008268 <[^>]*> nop
++0000826c <[^>]*> nop
++00008270 <[^>]*> nop
++00008274 <[^>]*> nop
++00008278 <[^>]*> nop
++0000827c <[^>]*> nop
++00008280 <[^>]*> nop
++00008284 <[^>]*> nop
++00008288 <[^>]*> nop
++0000828c <[^>]*> nop
++00008290 <[^>]*> nop
++00008294 <[^>]*> nop
++00008298 <[^>]*> nop
++0000829c <[^>]*> nop
++000082a0 <[^>]*> nop
++000082a4 <[^>]*> nop
++000082a8 <[^>]*> nop
++000082ac <[^>]*> nop
++000082b0 <[^>]*> nop
++000082b4 <[^>]*> nop
++000082b8 <[^>]*> nop
++000082bc <[^>]*> nop
++000082c0 <[^>]*> nop
++000082c4 <[^>]*> nop
++000082c8 <[^>]*> nop
++000082cc <[^>]*> nop
++000082d0 <[^>]*> nop
++000082d4 <[^>]*> nop
++000082d8 <[^>]*> nop
++000082dc <[^>]*> nop
++000082e0 <[^>]*> nop
++000082e4 <[^>]*> nop
++000082e8 <[^>]*> nop
++000082ec <[^>]*> nop
++000082f0 <[^>]*> nop
++000082f4 <[^>]*> nop
++000082f8 <[^>]*> nop
++000082fc <[^>]*> nop
++00008300 <[^>]*> nop
++00008304 <[^>]*> nop
++00008308 <[^>]*> nop
++0000830c <[^>]*> nop
++00008310 <[^>]*> nop
++00008314 <[^>]*> nop
++00008318 <[^>]*> nop
++0000831c <[^>]*> nop
++00008320 <[^>]*> nop
++00008324 <[^>]*> nop
++00008328 <[^>]*> nop
++0000832c <[^>]*> nop
++00008330 <[^>]*> nop
++00008334 <[^>]*> nop
++00008338 <[^>]*> nop
++0000833c <[^>]*> nop
++00008340 <[^>]*> nop
++00008344 <[^>]*> nop
++00008348 <[^>]*> nop
++0000834c <[^>]*> nop
++00008350 <[^>]*> nop
++00008354 <[^>]*> nop
++00008358 <[^>]*> nop
++0000835c <[^>]*> nop
++00008360 <[^>]*> nop
++00008364 <[^>]*> nop
++00008368 <[^>]*> nop
++0000836c <[^>]*> nop
++00008370 <[^>]*> nop
++00008374 <[^>]*> nop
++00008378 <[^>]*> nop
++0000837c <[^>]*> nop
++00008380 <[^>]*> nop
++00008384 <[^>]*> nop
++00008388 <[^>]*> nop
++0000838c <[^>]*> nop
++00008390 <[^>]*> nop
++00008394 <[^>]*> nop
++00008398 <[^>]*> nop
++0000839c <[^>]*> nop
++000083a0 <[^>]*> nop
++000083a4 <[^>]*> nop
++000083a8 <[^>]*> nop
++000083ac <[^>]*> nop
++000083b0 <[^>]*> nop
++000083b4 <[^>]*> nop
++000083b8 <[^>]*> nop
++000083bc <[^>]*> nop
++000083c0 <[^>]*> nop
++000083c4 <[^>]*> nop
++000083c8 <[^>]*> nop
++000083cc <[^>]*> nop
++000083d0 <[^>]*> nop
++000083d4 <[^>]*> nop
++000083d8 <[^>]*> nop
++000083dc <[^>]*> nop
++000083e0 <[^>]*> nop
++000083e4 <[^>]*> nop
++000083e8 <[^>]*> nop
++000083ec <[^>]*> nop
++000083f0 <[^>]*> nop
++000083f4 <[^>]*> nop
++000083f8 <[^>]*> nop
++000083fc <[^>]*> nop
++00008400 <[^>]*> nop
++00008404 <[^>]*> nop
++00008408 <[^>]*> nop
++0000840c <[^>]*> nop
++00008410 <[^>]*> nop
++00008414 <[^>]*> nop
++00008418 <[^>]*> nop
++0000841c <[^>]*> nop
++00008420 <[^>]*> nop
++00008424 <[^>]*> nop
++00008428 <[^>]*> nop
++0000842c <[^>]*> nop
++00008430 <[^>]*> nop
++00008434 <[^>]*> nop
++00008438 <[^>]*> nop
++0000843c <[^>]*> nop
++00008440 <[^>]*> nop
++00008444 <[^>]*> nop
++00008448 <[^>]*> nop
++0000844c <[^>]*> nop
++00008450 <[^>]*> nop
++00008454 <[^>]*> nop
++00008458 <[^>]*> nop
++0000845c <[^>]*> nop
++00008460 <[^>]*> nop
++00008464 <[^>]*> nop
++00008468 <[^>]*> nop
++0000846c <[^>]*> nop
++00008470 <[^>]*> nop
++00008474 <[^>]*> nop
++00008478 <[^>]*> nop
++0000847c <[^>]*> nop
++00008480 <[^>]*> nop
++00008484 <[^>]*> nop
++00008488 <[^>]*> nop
++0000848c <[^>]*> nop
++00008490 <[^>]*> nop
++00008494 <[^>]*> nop
++00008498 <[^>]*> nop
++0000849c <[^>]*> nop
++000084a0 <[^>]*> nop
++000084a4 <[^>]*> nop
++000084a8 <[^>]*> nop
++000084ac <[^>]*> nop
++000084b0 <[^>]*> nop
++000084b4 <[^>]*> nop
++000084b8 <[^>]*> nop
++000084bc <[^>]*> nop
++000084c0 <[^>]*> nop
++000084c4 <[^>]*> nop
++000084c8 <[^>]*> nop
++000084cc <[^>]*> nop
++000084d0 <[^>]*> nop
++000084d4 <[^>]*> nop
++000084d8 <[^>]*> nop
++000084dc <[^>]*> nop
++000084e0 <[^>]*> nop
++000084e4 <[^>]*> nop
++000084e8 <[^>]*> nop
++000084ec <[^>]*> nop
++000084f0 <[^>]*> nop
++000084f4 <[^>]*> nop
++000084f8 <[^>]*> nop
++000084fc <[^>]*> nop
++00008500 <[^>]*> nop
++00008504 <[^>]*> nop
++00008508 <[^>]*> nop
++0000850c <[^>]*> nop
++00008510 <[^>]*> nop
++00008514 <[^>]*> nop
++00008518 <[^>]*> nop
++0000851c <[^>]*> nop
++00008520 <[^>]*> nop
++00008524 <[^>]*> nop
++00008528 <[^>]*> nop
++0000852c <[^>]*> nop
++00008530 <[^>]*> nop
++00008534 <[^>]*> nop
++00008538 <[^>]*> nop
++0000853c <[^>]*> nop
++00008540 <[^>]*> nop
++00008544 <[^>]*> nop
++00008548 <[^>]*> nop
++0000854c <[^>]*> nop
++00008550 <[^>]*> nop
++00008554 <[^>]*> nop
++00008558 <[^>]*> nop
++0000855c <[^>]*> nop
++00008560 <[^>]*> nop
++00008564 <[^>]*> nop
++00008568 <[^>]*> nop
++0000856c <[^>]*> nop
++00008570 <[^>]*> nop
++00008574 <[^>]*> nop
++00008578 <[^>]*> nop
++0000857c <[^>]*> nop
++00008580 <[^>]*> nop
++00008584 <[^>]*> nop
++00008588 <[^>]*> nop
++0000858c <[^>]*> nop
++00008590 <[^>]*> nop
++00008594 <[^>]*> nop
++00008598 <[^>]*> nop
++0000859c <[^>]*> nop
++000085a0 <[^>]*> nop
++000085a4 <[^>]*> nop
++000085a8 <[^>]*> nop
++000085ac <[^>]*> nop
++000085b0 <[^>]*> nop
++000085b4 <[^>]*> nop
++000085b8 <[^>]*> nop
++000085bc <[^>]*> nop
++000085c0 <[^>]*> nop
++000085c4 <[^>]*> nop
++000085c8 <[^>]*> nop
++000085cc <[^>]*> nop
++000085d0 <[^>]*> nop
++000085d4 <[^>]*> nop
++000085d8 <[^>]*> nop
++000085dc <[^>]*> nop
++000085e0 <[^>]*> nop
++000085e4 <[^>]*> nop
++000085e8 <[^>]*> nop
++000085ec <[^>]*> nop
++000085f0 <[^>]*> nop
++000085f4 <[^>]*> nop
++000085f8 <[^>]*> nop
++000085fc <[^>]*> nop
++00008600 <[^>]*> nop
++00008604 <[^>]*> nop
++00008608 <[^>]*> nop
++0000860c <[^>]*> nop
++00008610 <[^>]*> nop
++00008614 <[^>]*> nop
++00008618 <[^>]*> nop
++0000861c <[^>]*> nop
++00008620 <[^>]*> nop
++00008624 <[^>]*> nop
++00008628 <[^>]*> nop
++0000862c <[^>]*> nop
++00008630 <[^>]*> nop
++00008634 <[^>]*> nop
++00008638 <[^>]*> nop
++0000863c <[^>]*> nop
++00008640 <[^>]*> nop
++00008644 <[^>]*> nop
++00008648 <[^>]*> nop
++0000864c <[^>]*> nop
++00008650 <[^>]*> nop
++00008654 <[^>]*> nop
++00008658 <[^>]*> nop
++0000865c <[^>]*> nop
++00008660 <[^>]*> nop
++00008664 <[^>]*> nop
++00008668 <[^>]*> nop
++0000866c <[^>]*> nop
++00008670 <[^>]*> nop
++00008674 <[^>]*> nop
++00008678 <[^>]*> nop
++0000867c <[^>]*> nop
++00008680 <[^>]*> nop
++00008684 <[^>]*> nop
++00008688 <[^>]*> nop
++0000868c <[^>]*> nop
++00008690 <[^>]*> nop
++00008694 <[^>]*> nop
++00008698 <[^>]*> nop
++0000869c <[^>]*> nop
++000086a0 <[^>]*> nop
++000086a4 <[^>]*> nop
++000086a8 <[^>]*> nop
++000086ac <[^>]*> nop
++000086b0 <[^>]*> nop
++000086b4 <[^>]*> nop
++000086b8 <[^>]*> nop
++000086bc <[^>]*> nop
++000086c0 <[^>]*> nop
++000086c4 <[^>]*> nop
++000086c8 <[^>]*> nop
++000086cc <[^>]*> nop
++000086d0 <[^>]*> nop
++000086d4 <[^>]*> nop
++000086d8 <[^>]*> nop
++000086dc <[^>]*> nop
++000086e0 <[^>]*> nop
++000086e4 <[^>]*> nop
++000086e8 <[^>]*> nop
++000086ec <[^>]*> nop
++000086f0 <[^>]*> nop
++000086f4 <[^>]*> nop
++000086f8 <[^>]*> nop
++000086fc <[^>]*> nop
++00008700 <[^>]*> nop
++00008704 <[^>]*> nop
++00008708 <[^>]*> nop
++0000870c <[^>]*> nop
++00008710 <[^>]*> nop
++00008714 <[^>]*> nop
++00008718 <[^>]*> nop
++0000871c <[^>]*> nop
++00008720 <[^>]*> nop
++00008724 <[^>]*> nop
++00008728 <[^>]*> nop
++0000872c <[^>]*> nop
++00008730 <[^>]*> nop
++00008734 <[^>]*> nop
++00008738 <[^>]*> nop
++0000873c <[^>]*> nop
++00008740 <[^>]*> nop
++00008744 <[^>]*> nop
++00008748 <[^>]*> nop
++0000874c <[^>]*> nop
++00008750 <[^>]*> nop
++00008754 <[^>]*> nop
++00008758 <[^>]*> nop
++0000875c <[^>]*> nop
++00008760 <[^>]*> nop
++00008764 <[^>]*> nop
++00008768 <[^>]*> nop
++0000876c <[^>]*> nop
++00008770 <[^>]*> nop
++00008774 <[^>]*> nop
++00008778 <[^>]*> nop
++0000877c <[^>]*> nop
++00008780 <[^>]*> nop
++00008784 <[^>]*> nop
++00008788 <[^>]*> nop
++0000878c <[^>]*> nop
++00008790 <[^>]*> nop
++00008794 <[^>]*> nop
++00008798 <[^>]*> nop
++0000879c <[^>]*> nop
++000087a0 <[^>]*> nop
++000087a4 <[^>]*> nop
++000087a8 <[^>]*> nop
++000087ac <[^>]*> nop
++000087b0 <[^>]*> nop
++000087b4 <[^>]*> nop
++000087b8 <[^>]*> nop
++000087bc <[^>]*> nop
++000087c0 <[^>]*> nop
++000087c4 <[^>]*> nop
++000087c8 <[^>]*> nop
++000087cc <[^>]*> nop
++000087d0 <[^>]*> nop
++000087d4 <[^>]*> nop
++000087d8 <[^>]*> nop
++000087dc <[^>]*> nop
++000087e0 <[^>]*> nop
++000087e4 <[^>]*> nop
++000087e8 <[^>]*> nop
++000087ec <[^>]*> nop
++000087f0 <[^>]*> nop
++000087f4 <[^>]*> nop
++000087f8 <[^>]*> nop
++000087fc <[^>]*> nop
++00008800 <[^>]*> nop
++00008804 <[^>]*> nop
++00008808 <[^>]*> nop
++0000880c <[^>]*> nop
++00008810 <[^>]*> nop
++00008814 <[^>]*> nop
++00008818 <[^>]*> nop
++0000881c <[^>]*> nop
++00008820 <[^>]*> nop
++00008824 <[^>]*> nop
++00008828 <[^>]*> nop
++0000882c <[^>]*> nop
++00008830 <[^>]*> nop
++00008834 <[^>]*> nop
++00008838 <[^>]*> nop
++0000883c <[^>]*> nop
++00008840 <[^>]*> nop
++00008844 <[^>]*> nop
++00008848 <[^>]*> nop
++0000884c <[^>]*> nop
++00008850 <[^>]*> nop
++00008854 <[^>]*> nop
++00008858 <[^>]*> nop
++0000885c <[^>]*> nop
++00008860 <[^>]*> nop
++00008864 <[^>]*> nop
++00008868 <[^>]*> nop
++0000886c <[^>]*> nop
++00008870 <[^>]*> nop
++00008874 <[^>]*> nop
++00008878 <[^>]*> nop
++0000887c <[^>]*> nop
++00008880 <[^>]*> nop
++00008884 <[^>]*> nop
++00008888 <[^>]*> nop
++0000888c <[^>]*> nop
++00008890 <[^>]*> nop
++00008894 <[^>]*> nop
++00008898 <[^>]*> nop
++0000889c <[^>]*> nop
++000088a0 <[^>]*> nop
++000088a4 <[^>]*> nop
++000088a8 <[^>]*> nop
++000088ac <[^>]*> nop
++000088b0 <[^>]*> nop
++000088b4 <[^>]*> nop
++000088b8 <[^>]*> nop
++000088bc <[^>]*> nop
++000088c0 <[^>]*> nop
++000088c4 <[^>]*> nop
++000088c8 <[^>]*> nop
++000088cc <[^>]*> nop
++000088d0 <[^>]*> nop
++000088d4 <[^>]*> nop
++000088d8 <[^>]*> nop
++000088dc <[^>]*> nop
++000088e0 <[^>]*> nop
++000088e4 <[^>]*> nop
++000088e8 <[^>]*> nop
++000088ec <[^>]*> nop
++000088f0 <[^>]*> nop
++000088f4 <[^>]*> nop
++000088f8 <[^>]*> nop
++000088fc <[^>]*> nop
++00008900 <[^>]*> nop
++00008904 <[^>]*> nop
++00008908 <[^>]*> nop
++0000890c <[^>]*> nop
++00008910 <[^>]*> nop
++00008914 <[^>]*> nop
++00008918 <[^>]*> nop
++0000891c <[^>]*> nop
++00008920 <[^>]*> nop
++00008924 <[^>]*> nop
++00008928 <[^>]*> nop
++0000892c <[^>]*> nop
++00008930 <[^>]*> nop
++00008934 <[^>]*> nop
++00008938 <[^>]*> nop
++0000893c <[^>]*> nop
++00008940 <[^>]*> nop
++00008944 <[^>]*> nop
++00008948 <[^>]*> nop
++0000894c <[^>]*> nop
++00008950 <[^>]*> nop
++00008954 <[^>]*> nop
++00008958 <[^>]*> nop
++0000895c <[^>]*> nop
++00008960 <[^>]*> nop
++00008964 <[^>]*> nop
++00008968 <[^>]*> nop
++0000896c <[^>]*> nop
++00008970 <[^>]*> nop
++00008974 <[^>]*> nop
++00008978 <[^>]*> nop
++0000897c <[^>]*> nop
++00008980 <[^>]*> nop
++00008984 <[^>]*> nop
++00008988 <[^>]*> nop
++0000898c <[^>]*> nop
++00008990 <[^>]*> nop
++00008994 <[^>]*> nop
++00008998 <[^>]*> nop
++0000899c <[^>]*> nop
++000089a0 <[^>]*> nop
++000089a4 <[^>]*> nop
++000089a8 <[^>]*> nop
++000089ac <[^>]*> nop
++000089b0 <[^>]*> nop
++000089b4 <[^>]*> nop
++000089b8 <[^>]*> nop
++000089bc <[^>]*> nop
++000089c0 <[^>]*> nop
++000089c4 <[^>]*> nop
++000089c8 <[^>]*> nop
++000089cc <[^>]*> nop
++000089d0 <[^>]*> nop
++000089d4 <[^>]*> nop
++000089d8 <[^>]*> nop
++000089dc <[^>]*> nop
++000089e0 <[^>]*> nop
++000089e4 <[^>]*> nop
++000089e8 <[^>]*> nop
++000089ec <[^>]*> nop
++000089f0 <[^>]*> nop
++000089f4 <[^>]*> nop
++000089f8 <[^>]*> nop
++000089fc <[^>]*> nop
++00008a00 <[^>]*> nop
++00008a04 <[^>]*> nop
++00008a08 <[^>]*> nop
++00008a0c <[^>]*> nop
++00008a10 <[^>]*> nop
++00008a14 <[^>]*> nop
++00008a18 <[^>]*> nop
++00008a1c <[^>]*> nop
++00008a20 <[^>]*> nop
++00008a24 <[^>]*> nop
++00008a28 <[^>]*> nop
++00008a2c <[^>]*> nop
++00008a30 <[^>]*> nop
++00008a34 <[^>]*> nop
++00008a38 <[^>]*> nop
++00008a3c <[^>]*> nop
++00008a40 <[^>]*> nop
++00008a44 <[^>]*> nop
++00008a48 <[^>]*> nop
++00008a4c <[^>]*> nop
++00008a50 <[^>]*> nop
++00008a54 <[^>]*> nop
++00008a58 <[^>]*> nop
++00008a5c <[^>]*> nop
++00008a60 <[^>]*> nop
++00008a64 <[^>]*> nop
++00008a68 <[^>]*> nop
++00008a6c <[^>]*> nop
++00008a70 <[^>]*> nop
++00008a74 <[^>]*> nop
++00008a78 <[^>]*> nop
++00008a7c <[^>]*> nop
++00008a80 <[^>]*> nop
++00008a84 <[^>]*> nop
++00008a88 <[^>]*> nop
++00008a8c <[^>]*> nop
++00008a90 <[^>]*> nop
++00008a94 <[^>]*> nop
++00008a98 <[^>]*> nop
++00008a9c <[^>]*> nop
++00008aa0 <[^>]*> nop
++00008aa4 <[^>]*> nop
++00008aa8 <[^>]*> nop
++00008aac <[^>]*> nop
++00008ab0 <[^>]*> nop
++00008ab4 <[^>]*> nop
++00008ab8 <[^>]*> nop
++00008abc <[^>]*> nop
++00008ac0 <[^>]*> nop
++00008ac4 <[^>]*> nop
++00008ac8 <[^>]*> nop
++00008acc <[^>]*> nop
++00008ad0 <[^>]*> nop
++00008ad4 <[^>]*> nop
++00008ad8 <[^>]*> nop
++00008adc <[^>]*> nop
++00008ae0 <[^>]*> nop
++00008ae4 <[^>]*> nop
++00008ae8 <[^>]*> nop
++00008aec <[^>]*> nop
++00008af0 <[^>]*> nop
++00008af4 <[^>]*> nop
++00008af8 <[^>]*> nop
++00008afc <[^>]*> nop
++00008b00 <[^>]*> nop
++00008b04 <[^>]*> nop
++00008b08 <[^>]*> nop
++00008b0c <[^>]*> nop
++00008b10 <[^>]*> nop
++00008b14 <[^>]*> nop
++00008b18 <[^>]*> nop
++00008b1c <[^>]*> nop
++00008b20 <[^>]*> nop
++00008b24 <[^>]*> nop
++00008b28 <[^>]*> nop
++00008b2c <[^>]*> nop
++00008b30 <[^>]*> nop
++00008b34 <[^>]*> nop
++00008b38 <[^>]*> nop
++00008b3c <[^>]*> nop
++00008b40 <[^>]*> nop
++00008b44 <[^>]*> nop
++00008b48 <[^>]*> nop
++00008b4c <[^>]*> nop
++00008b50 <[^>]*> nop
++00008b54 <[^>]*> nop
++00008b58 <[^>]*> nop
++00008b5c <[^>]*> nop
++00008b60 <[^>]*> nop
++00008b64 <[^>]*> nop
++00008b68 <[^>]*> nop
++00008b6c <[^>]*> nop
++00008b70 <[^>]*> nop
++00008b74 <[^>]*> nop
++00008b78 <[^>]*> nop
++00008b7c <[^>]*> nop
++00008b80 <[^>]*> nop
++00008b84 <[^>]*> nop
++00008b88 <[^>]*> nop
++00008b8c <[^>]*> nop
++00008b90 <[^>]*> nop
++00008b94 <[^>]*> nop
++00008b98 <[^>]*> nop
++00008b9c <[^>]*> nop
++00008ba0 <[^>]*> nop
++00008ba4 <[^>]*> nop
++00008ba8 <[^>]*> nop
++00008bac <[^>]*> nop
++00008bb0 <[^>]*> nop
++00008bb4 <[^>]*> nop
++00008bb8 <[^>]*> nop
++00008bbc <[^>]*> nop
++00008bc0 <[^>]*> nop
++00008bc4 <[^>]*> nop
++00008bc8 <[^>]*> nop
++00008bcc <[^>]*> nop
++00008bd0 <[^>]*> nop
++00008bd4 <[^>]*> nop
++00008bd8 <[^>]*> nop
++00008bdc <[^>]*> nop
++00008be0 <[^>]*> nop
++00008be4 <[^>]*> nop
++00008be8 <[^>]*> nop
++00008bec <[^>]*> nop
++00008bf0 <[^>]*> nop
++00008bf4 <[^>]*> nop
++00008bf8 <[^>]*> nop
++00008bfc <[^>]*> nop
++00008c00 <[^>]*> nop
++00008c04 <[^>]*> nop
++00008c08 <[^>]*> nop
++00008c0c <[^>]*> nop
++00008c10 <[^>]*> nop
++00008c14 <[^>]*> nop
++00008c18 <[^>]*> nop
++00008c1c <[^>]*> nop
++00008c20 <[^>]*> nop
++00008c24 <[^>]*> nop
++00008c28 <[^>]*> nop
++00008c2c <[^>]*> nop
++00008c30 <[^>]*> nop
++00008c34 <[^>]*> nop
++00008c38 <[^>]*> nop
++00008c3c <[^>]*> nop
++00008c40 <[^>]*> nop
++00008c44 <[^>]*> nop
++00008c48 <[^>]*> nop
++00008c4c <[^>]*> nop
++00008c50 <[^>]*> nop
++00008c54 <[^>]*> nop
++00008c58 <[^>]*> nop
++00008c5c <[^>]*> nop
++00008c60 <[^>]*> nop
++00008c64 <[^>]*> nop
++00008c68 <[^>]*> nop
++00008c6c <[^>]*> nop
++00008c70 <[^>]*> nop
++00008c74 <[^>]*> nop
++00008c78 <[^>]*> nop
++00008c7c <[^>]*> nop
++00008c80 <[^>]*> nop
++00008c84 <[^>]*> nop
++00008c88 <[^>]*> nop
++00008c8c <[^>]*> nop
++00008c90 <[^>]*> nop
++00008c94 <[^>]*> nop
++00008c98 <[^>]*> nop
++00008c9c <[^>]*> nop
++00008ca0 <[^>]*> nop
++00008ca4 <[^>]*> nop
++00008ca8 <[^>]*> nop
++00008cac <[^>]*> nop
++00008cb0 <[^>]*> nop
++00008cb4 <[^>]*> nop
++00008cb8 <[^>]*> nop
++00008cbc <[^>]*> nop
++00008cc0 <[^>]*> nop
++00008cc4 <[^>]*> nop
++00008cc8 <[^>]*> nop
++00008ccc <[^>]*> nop
++00008cd0 <[^>]*> nop
++00008cd4 <[^>]*> nop
++00008cd8 <[^>]*> nop
++00008cdc <[^>]*> nop
++00008ce0 <[^>]*> nop
++00008ce4 <[^>]*> nop
++00008ce8 <[^>]*> nop
++00008cec <[^>]*> nop
++00008cf0 <[^>]*> nop
++00008cf4 <[^>]*> nop
++00008cf8 <[^>]*> nop
++00008cfc <[^>]*> nop
++00008d00 <[^>]*> nop
++00008d04 <[^>]*> nop
++00008d08 <[^>]*> nop
++00008d0c <[^>]*> nop
++00008d10 <[^>]*> nop
++00008d14 <[^>]*> nop
++00008d18 <[^>]*> nop
++00008d1c <[^>]*> nop
++00008d20 <[^>]*> nop
++00008d24 <[^>]*> nop
++00008d28 <[^>]*> nop
++00008d2c <[^>]*> nop
++00008d30 <[^>]*> nop
++00008d34 <[^>]*> nop
++00008d38 <[^>]*> nop
++00008d3c <[^>]*> nop
++00008d40 <[^>]*> nop
++00008d44 <[^>]*> nop
++00008d48 <[^>]*> nop
++00008d4c <[^>]*> nop
++00008d50 <[^>]*> nop
++00008d54 <[^>]*> nop
++00008d58 <[^>]*> nop
++00008d5c <[^>]*> nop
++00008d60 <[^>]*> nop
++00008d64 <[^>]*> nop
++00008d68 <[^>]*> nop
++00008d6c <[^>]*> nop
++00008d70 <[^>]*> nop
++00008d74 <[^>]*> nop
++00008d78 <[^>]*> nop
++00008d7c <[^>]*> nop
++00008d80 <[^>]*> nop
++00008d84 <[^>]*> nop
++00008d88 <[^>]*> nop
++00008d8c <[^>]*> nop
++00008d90 <[^>]*> nop
++00008d94 <[^>]*> nop
++00008d98 <[^>]*> nop
++00008d9c <[^>]*> nop
++00008da0 <[^>]*> nop
++00008da4 <[^>]*> nop
++00008da8 <[^>]*> nop
++00008dac <[^>]*> nop
++00008db0 <[^>]*> nop
++00008db4 <[^>]*> nop
++00008db8 <[^>]*> nop
++00008dbc <[^>]*> nop
++00008dc0 <[^>]*> nop
++00008dc4 <[^>]*> nop
++00008dc8 <[^>]*> nop
++00008dcc <[^>]*> nop
++00008dd0 <[^>]*> nop
++00008dd4 <[^>]*> nop
++00008dd8 <[^>]*> nop
++00008ddc <[^>]*> nop
++00008de0 <[^>]*> nop
++00008de4 <[^>]*> nop
++00008de8 <[^>]*> nop
++00008dec <[^>]*> nop
++00008df0 <[^>]*> nop
++00008df4 <[^>]*> nop
++00008df8 <[^>]*> nop
++00008dfc <[^>]*> nop
++00008e00 <[^>]*> nop
++00008e04 <[^>]*> nop
++00008e08 <[^>]*> nop
++00008e0c <[^>]*> nop
++00008e10 <[^>]*> nop
++00008e14 <[^>]*> nop
++00008e18 <[^>]*> nop
++00008e1c <[^>]*> nop
++00008e20 <[^>]*> nop
++00008e24 <[^>]*> nop
++00008e28 <[^>]*> nop
++00008e2c <[^>]*> nop
++00008e30 <[^>]*> nop
++00008e34 <[^>]*> nop
++00008e38 <[^>]*> nop
++00008e3c <[^>]*> nop
++00008e40 <[^>]*> nop
++00008e44 <[^>]*> nop
++00008e48 <[^>]*> nop
++00008e4c <[^>]*> nop
++00008e50 <[^>]*> nop
++00008e54 <[^>]*> nop
++00008e58 <[^>]*> nop
++00008e5c <[^>]*> nop
++00008e60 <[^>]*> nop
++00008e64 <[^>]*> nop
++00008e68 <[^>]*> nop
++00008e6c <[^>]*> nop
++00008e70 <[^>]*> nop
++00008e74 <[^>]*> nop
++00008e78 <[^>]*> nop
++00008e7c <[^>]*> nop
++00008e80 <[^>]*> nop
++00008e84 <[^>]*> nop
++00008e88 <[^>]*> nop
++00008e8c <[^>]*> nop
++00008e90 <[^>]*> nop
++00008e94 <[^>]*> nop
++00008e98 <[^>]*> nop
++00008e9c <[^>]*> nop
++00008ea0 <[^>]*> nop
++00008ea4 <[^>]*> nop
++00008ea8 <[^>]*> nop
++00008eac <[^>]*> nop
++00008eb0 <[^>]*> nop
++00008eb4 <[^>]*> nop
++00008eb8 <[^>]*> nop
++00008ebc <[^>]*> nop
++00008ec0 <[^>]*> nop
++00008ec4 <[^>]*> nop
++00008ec8 <[^>]*> nop
++00008ecc <[^>]*> nop
++00008ed0 <[^>]*> nop
++00008ed4 <[^>]*> nop
++00008ed8 <[^>]*> nop
++00008edc <[^>]*> nop
++00008ee0 <[^>]*> nop
++00008ee4 <[^>]*> nop
++00008ee8 <[^>]*> nop
++00008eec <[^>]*> nop
++00008ef0 <[^>]*> nop
++00008ef4 <[^>]*> nop
++00008ef8 <[^>]*> nop
++00008efc <[^>]*> nop
++00008f00 <[^>]*> nop
++00008f04 <[^>]*> nop
++00008f08 <[^>]*> nop
++00008f0c <[^>]*> nop
++00008f10 <[^>]*> nop
++00008f14 <[^>]*> nop
++00008f18 <[^>]*> nop
++00008f1c <[^>]*> nop
++00008f20 <[^>]*> nop
++00008f24 <[^>]*> nop
++00008f28 <[^>]*> nop
++00008f2c <[^>]*> nop
++00008f30 <[^>]*> nop
++00008f34 <[^>]*> nop
++00008f38 <[^>]*> nop
++00008f3c <[^>]*> nop
++00008f40 <[^>]*> nop
++00008f44 <[^>]*> nop
++00008f48 <[^>]*> nop
++00008f4c <[^>]*> nop
++00008f50 <[^>]*> nop
++00008f54 <[^>]*> nop
++00008f58 <[^>]*> nop
++00008f5c <[^>]*> nop
++00008f60 <[^>]*> nop
++00008f64 <[^>]*> nop
++00008f68 <[^>]*> nop
++00008f6c <[^>]*> nop
++00008f70 <[^>]*> nop
++00008f74 <[^>]*> nop
++00008f78 <[^>]*> nop
++00008f7c <[^>]*> nop
++00008f80 <[^>]*> nop
++00008f84 <[^>]*> nop
++00008f88 <[^>]*> nop
++00008f8c <[^>]*> nop
++00008f90 <[^>]*> nop
++00008f94 <[^>]*> nop
++00008f98 <[^>]*> nop
++00008f9c <[^>]*> nop
++00008fa0 <[^>]*> nop
++00008fa4 <[^>]*> nop
++00008fa8 <[^>]*> nop
++00008fac <[^>]*> nop
++00008fb0 <[^>]*> nop
++00008fb4 <[^>]*> nop
++00008fb8 <[^>]*> nop
++00008fbc <[^>]*> nop
++00008fc0 <[^>]*> nop
++00008fc4 <[^>]*> nop
++00008fc8 <[^>]*> nop
++00008fcc <[^>]*> nop
++00008fd0 <[^>]*> nop
++00008fd4 <[^>]*> nop
++00008fd8 <[^>]*> nop
++00008fdc <[^>]*> nop
++00008fe0 <[^>]*> nop
++00008fe4 <[^>]*> nop
++00008fe8 <[^>]*> nop
++00008fec <[^>]*> nop
++00008ff0 <[^>]*> nop
++00008ff4 <[^>]*> nop
++00008ff8 <[^>]*> nop
++00008ffc <[^>]*> nop
++00009000 <[^>]*> nop
++00009004 <[^>]*> nop
++00009008 <[^>]*> nop
++0000900c <[^>]*> nop
++00009010 <[^>]*> nop
++00009014 <[^>]*> nop
++00009018 <[^>]*> nop
++0000901c <[^>]*> nop
++00009020 <[^>]*> nop
++00009024 <[^>]*> nop
++00009028 <[^>]*> nop
++0000902c <[^>]*> nop
++00009030 <[^>]*> nop
++00009034 <[^>]*> nop
++00009038 <[^>]*> nop
++0000903c <[^>]*> nop
++00009040 <[^>]*> nop
++00009044 <[^>]*> nop
++00009048 <[^>]*> nop
++0000904c <[^>]*> nop
++00009050 <[^>]*> nop
++00009054 <[^>]*> nop
++00009058 <[^>]*> nop
++0000905c <[^>]*> nop
++00009060 <[^>]*> nop
++00009064 <[^>]*> nop
++00009068 <[^>]*> nop
++0000906c <[^>]*> nop
++00009070 <[^>]*> nop
++00009074 <[^>]*> nop
++00009078 <[^>]*> nop
++0000907c <[^>]*> nop
++00009080 <[^>]*> nop
++00009084 <[^>]*> nop
++00009088 <[^>]*> nop
++0000908c <[^>]*> nop
++00009090 <[^>]*> nop
++00009094 <[^>]*> nop
++00009098 <[^>]*> nop
++0000909c <[^>]*> nop
++000090a0 <[^>]*> nop
++000090a4 <[^>]*> nop
++000090a8 <[^>]*> nop
++000090ac <[^>]*> nop
++000090b0 <[^>]*> nop
++000090b4 <[^>]*> nop
++000090b8 <[^>]*> nop
++000090bc <[^>]*> nop
++000090c0 <[^>]*> nop
++000090c4 <[^>]*> nop
++000090c8 <[^>]*> nop
++000090cc <[^>]*> nop
++000090d0 <[^>]*> nop
++000090d4 <[^>]*> nop
++000090d8 <[^>]*> nop
++000090dc <[^>]*> nop
++000090e0 <[^>]*> nop
++000090e4 <[^>]*> nop
++000090e8 <[^>]*> nop
++000090ec <[^>]*> nop
++000090f0 <[^>]*> nop
++000090f4 <[^>]*> nop
++000090f8 <[^>]*> nop
++000090fc <[^>]*> nop
++00009100 <[^>]*> nop
++00009104 <[^>]*> nop
++00009108 <[^>]*> nop
++0000910c <[^>]*> nop
++00009110 <[^>]*> nop
++00009114 <[^>]*> nop
++00009118 <[^>]*> nop
++0000911c <[^>]*> nop
++00009120 <[^>]*> nop
++00009124 <[^>]*> nop
++00009128 <[^>]*> nop
++0000912c <[^>]*> nop
++00009130 <[^>]*> nop
++00009134 <[^>]*> nop
++00009138 <[^>]*> nop
++0000913c <[^>]*> nop
++00009140 <[^>]*> nop
++00009144 <[^>]*> nop
++00009148 <[^>]*> nop
++0000914c <[^>]*> nop
++00009150 <[^>]*> nop
++00009154 <[^>]*> nop
++00009158 <[^>]*> nop
++0000915c <[^>]*> nop
++00009160 <[^>]*> nop
++00009164 <[^>]*> nop
++00009168 <[^>]*> nop
++0000916c <[^>]*> nop
++00009170 <[^>]*> nop
++00009174 <[^>]*> nop
++00009178 <[^>]*> nop
++0000917c <[^>]*> nop
++00009180 <[^>]*> nop
++00009184 <[^>]*> nop
++00009188 <[^>]*> nop
++0000918c <[^>]*> nop
++00009190 <[^>]*> nop
++00009194 <[^>]*> nop
++00009198 <[^>]*> nop
++0000919c <[^>]*> nop
++000091a0 <[^>]*> nop
++000091a4 <[^>]*> nop
++000091a8 <[^>]*> nop
++000091ac <[^>]*> nop
++000091b0 <[^>]*> nop
++000091b4 <[^>]*> nop
++000091b8 <[^>]*> nop
++000091bc <[^>]*> nop
++000091c0 <[^>]*> nop
++000091c4 <[^>]*> nop
++000091c8 <[^>]*> nop
++000091cc <[^>]*> nop
++000091d0 <[^>]*> nop
++000091d4 <[^>]*> nop
++000091d8 <[^>]*> nop
++000091dc <[^>]*> nop
++000091e0 <[^>]*> nop
++000091e4 <[^>]*> nop
++000091e8 <[^>]*> nop
++000091ec <[^>]*> nop
++000091f0 <[^>]*> nop
++000091f4 <[^>]*> nop
++000091f8 <[^>]*> nop
++000091fc <[^>]*> nop
++00009200 <[^>]*> nop
++00009204 <[^>]*> nop
++00009208 <[^>]*> nop
++0000920c <[^>]*> nop
++00009210 <[^>]*> nop
++00009214 <[^>]*> nop
++00009218 <[^>]*> nop
++0000921c <[^>]*> nop
++00009220 <[^>]*> nop
++00009224 <[^>]*> nop
++00009228 <[^>]*> nop
++0000922c <[^>]*> nop
++00009230 <[^>]*> nop
++00009234 <[^>]*> nop
++00009238 <[^>]*> nop
++0000923c <[^>]*> nop
++00009240 <[^>]*> nop
++00009244 <[^>]*> nop
++00009248 <[^>]*> nop
++0000924c <[^>]*> nop
++00009250 <[^>]*> nop
++00009254 <[^>]*> nop
++00009258 <[^>]*> nop
++0000925c <[^>]*> nop
++00009260 <[^>]*> nop
++00009264 <[^>]*> nop
++00009268 <[^>]*> nop
++0000926c <[^>]*> nop
++00009270 <[^>]*> nop
++00009274 <[^>]*> nop
++00009278 <[^>]*> nop
++0000927c <[^>]*> nop
++00009280 <[^>]*> nop
++00009284 <[^>]*> nop
++00009288 <[^>]*> nop
++0000928c <[^>]*> nop
++00009290 <[^>]*> nop
++00009294 <[^>]*> nop
++00009298 <[^>]*> nop
++0000929c <[^>]*> nop
++000092a0 <[^>]*> nop
++000092a4 <[^>]*> nop
++000092a8 <[^>]*> nop
++000092ac <[^>]*> nop
++000092b0 <[^>]*> nop
++000092b4 <[^>]*> nop
++000092b8 <[^>]*> nop
++000092bc <[^>]*> nop
++000092c0 <[^>]*> nop
++000092c4 <[^>]*> nop
++000092c8 <[^>]*> nop
++000092cc <[^>]*> nop
++000092d0 <[^>]*> nop
++000092d4 <[^>]*> nop
++000092d8 <[^>]*> nop
++000092dc <[^>]*> nop
++000092e0 <[^>]*> nop
++000092e4 <[^>]*> nop
++000092e8 <[^>]*> nop
++000092ec <[^>]*> nop
++000092f0 <[^>]*> nop
++000092f4 <[^>]*> nop
++000092f8 <[^>]*> nop
++000092fc <[^>]*> nop
++00009300 <[^>]*> nop
++00009304 <[^>]*> nop
++00009308 <[^>]*> nop
++0000930c <[^>]*> nop
++00009310 <[^>]*> nop
++00009314 <[^>]*> nop
++00009318 <[^>]*> nop
++0000931c <[^>]*> nop
++00009320 <[^>]*> nop
++00009324 <[^>]*> nop
++00009328 <[^>]*> nop
++0000932c <[^>]*> nop
++00009330 <[^>]*> nop
++00009334 <[^>]*> nop
++00009338 <[^>]*> nop
++0000933c <[^>]*> nop
++00009340 <[^>]*> nop
++00009344 <[^>]*> nop
++00009348 <[^>]*> nop
++0000934c <[^>]*> nop
++00009350 <[^>]*> nop
++00009354 <[^>]*> nop
++00009358 <[^>]*> nop
++0000935c <[^>]*> nop
++00009360 <[^>]*> nop
++00009364 <[^>]*> nop
++00009368 <[^>]*> nop
++0000936c <[^>]*> nop
++00009370 <[^>]*> nop
++00009374 <[^>]*> nop
++00009378 <[^>]*> nop
++0000937c <[^>]*> nop
++00009380 <[^>]*> nop
++00009384 <[^>]*> nop
++00009388 <[^>]*> nop
++0000938c <[^>]*> nop
++00009390 <[^>]*> nop
++00009394 <[^>]*> nop
++00009398 <[^>]*> nop
++0000939c <[^>]*> nop
++000093a0 <[^>]*> nop
++000093a4 <[^>]*> nop
++000093a8 <[^>]*> nop
++000093ac <[^>]*> nop
++000093b0 <[^>]*> nop
++000093b4 <[^>]*> nop
++000093b8 <[^>]*> nop
++000093bc <[^>]*> nop
++000093c0 <[^>]*> nop
++000093c4 <[^>]*> nop
++000093c8 <[^>]*> nop
++000093cc <[^>]*> nop
++000093d0 <[^>]*> nop
++000093d4 <[^>]*> nop
++000093d8 <[^>]*> nop
++000093dc <[^>]*> nop
++000093e0 <[^>]*> nop
++000093e4 <[^>]*> nop
++000093e8 <[^>]*> nop
++000093ec <[^>]*> nop
++000093f0 <[^>]*> nop
++000093f4 <[^>]*> nop
++000093f8 <[^>]*> nop
++000093fc <[^>]*> nop
++00009400 <[^>]*> nop
++00009404 <[^>]*> nop
++00009408 <[^>]*> nop
++0000940c <[^>]*> nop
++00009410 <[^>]*> nop
++00009414 <[^>]*> nop
++00009418 <[^>]*> nop
++0000941c <[^>]*> nop
++00009420 <[^>]*> nop
++00009424 <[^>]*> nop
++00009428 <[^>]*> nop
++0000942c <[^>]*> nop
++00009430 <[^>]*> nop
++00009434 <[^>]*> nop
++00009438 <[^>]*> nop
++0000943c <[^>]*> nop
++00009440 <[^>]*> nop
++00009444 <[^>]*> nop
++00009448 <[^>]*> nop
++0000944c <[^>]*> nop
++00009450 <[^>]*> nop
++00009454 <[^>]*> nop
++00009458 <[^>]*> nop
++0000945c <[^>]*> nop
++00009460 <[^>]*> nop
++00009464 <[^>]*> nop
++00009468 <[^>]*> nop
++0000946c <[^>]*> nop
++00009470 <[^>]*> nop
++00009474 <[^>]*> nop
++00009478 <[^>]*> nop
++0000947c <[^>]*> nop
++00009480 <[^>]*> nop
++00009484 <[^>]*> nop
++00009488 <[^>]*> nop
++0000948c <[^>]*> nop
++00009490 <[^>]*> nop
++00009494 <[^>]*> nop
++00009498 <[^>]*> nop
++0000949c <[^>]*> nop
++000094a0 <[^>]*> nop
++000094a4 <[^>]*> nop
++000094a8 <[^>]*> nop
++000094ac <[^>]*> nop
++000094b0 <[^>]*> nop
++000094b4 <[^>]*> nop
++000094b8 <[^>]*> nop
++000094bc <[^>]*> nop
++000094c0 <[^>]*> nop
++000094c4 <[^>]*> nop
++000094c8 <[^>]*> nop
++000094cc <[^>]*> nop
++000094d0 <[^>]*> nop
++000094d4 <[^>]*> nop
++000094d8 <[^>]*> nop
++000094dc <[^>]*> nop
++000094e0 <[^>]*> nop
++000094e4 <[^>]*> nop
++000094e8 <[^>]*> nop
++000094ec <[^>]*> nop
++000094f0 <[^>]*> nop
++000094f4 <[^>]*> nop
++000094f8 <[^>]*> nop
++000094fc <[^>]*> nop
++00009500 <[^>]*> nop
++00009504 <[^>]*> nop
++00009508 <[^>]*> nop
++0000950c <[^>]*> nop
++00009510 <[^>]*> nop
++00009514 <[^>]*> nop
++00009518 <[^>]*> nop
++0000951c <[^>]*> nop
++00009520 <[^>]*> nop
++00009524 <[^>]*> nop
++00009528 <[^>]*> nop
++0000952c <[^>]*> nop
++00009530 <[^>]*> nop
++00009534 <[^>]*> nop
++00009538 <[^>]*> nop
++0000953c <[^>]*> nop
++00009540 <[^>]*> nop
++00009544 <[^>]*> nop
++00009548 <[^>]*> nop
++0000954c <[^>]*> nop
++00009550 <[^>]*> nop
++00009554 <[^>]*> nop
++00009558 <[^>]*> nop
++0000955c <[^>]*> nop
++00009560 <[^>]*> nop
++00009564 <[^>]*> nop
++00009568 <[^>]*> nop
++0000956c <[^>]*> nop
++00009570 <[^>]*> nop
++00009574 <[^>]*> nop
++00009578 <[^>]*> nop
++0000957c <[^>]*> nop
++00009580 <[^>]*> nop
++00009584 <[^>]*> nop
++00009588 <[^>]*> nop
++0000958c <[^>]*> nop
++00009590 <[^>]*> nop
++00009594 <[^>]*> nop
++00009598 <[^>]*> nop
++0000959c <[^>]*> nop
++000095a0 <[^>]*> nop
++000095a4 <[^>]*> nop
++000095a8 <[^>]*> nop
++000095ac <[^>]*> nop
++000095b0 <[^>]*> nop
++000095b4 <[^>]*> nop
++000095b8 <[^>]*> nop
++000095bc <[^>]*> nop
++000095c0 <[^>]*> nop
++000095c4 <[^>]*> nop
++000095c8 <[^>]*> nop
++000095cc <[^>]*> nop
++000095d0 <[^>]*> nop
++000095d4 <[^>]*> nop
++000095d8 <[^>]*> nop
++000095dc <[^>]*> nop
++000095e0 <[^>]*> nop
++000095e4 <[^>]*> nop
++000095e8 <[^>]*> nop
++000095ec <[^>]*> nop
++000095f0 <[^>]*> nop
++000095f4 <[^>]*> nop
++000095f8 <[^>]*> nop
++000095fc <[^>]*> nop
++00009600 <[^>]*> nop
++00009604 <[^>]*> nop
++00009608 <[^>]*> nop
++0000960c <[^>]*> nop
++00009610 <[^>]*> nop
++00009614 <[^>]*> nop
++00009618 <[^>]*> nop
++0000961c <[^>]*> nop
++00009620 <[^>]*> nop
++00009624 <[^>]*> nop
++00009628 <[^>]*> nop
++0000962c <[^>]*> nop
++00009630 <[^>]*> nop
++00009634 <[^>]*> nop
++00009638 <[^>]*> nop
++0000963c <[^>]*> nop
++00009640 <[^>]*> nop
++00009644 <[^>]*> nop
++00009648 <[^>]*> nop
++0000964c <[^>]*> nop
++00009650 <[^>]*> nop
++00009654 <[^>]*> nop
++00009658 <[^>]*> nop
++0000965c <[^>]*> nop
++00009660 <[^>]*> nop
++00009664 <[^>]*> nop
++00009668 <[^>]*> nop
++0000966c <[^>]*> nop
++00009670 <[^>]*> nop
++00009674 <[^>]*> nop
++00009678 <[^>]*> nop
++0000967c <[^>]*> nop
++00009680 <[^>]*> nop
++00009684 <[^>]*> nop
++00009688 <[^>]*> nop
++0000968c <[^>]*> nop
++00009690 <[^>]*> nop
++00009694 <[^>]*> nop
++00009698 <[^>]*> nop
++0000969c <[^>]*> nop
++000096a0 <[^>]*> nop
++000096a4 <[^>]*> nop
++000096a8 <[^>]*> nop
++000096ac <[^>]*> nop
++000096b0 <[^>]*> nop
++000096b4 <[^>]*> nop
++000096b8 <[^>]*> nop
++000096bc <[^>]*> nop
++000096c0 <[^>]*> nop
++000096c4 <[^>]*> nop
++000096c8 <[^>]*> nop
++000096cc <[^>]*> nop
++000096d0 <[^>]*> nop
++000096d4 <[^>]*> nop
++000096d8 <[^>]*> nop
++000096dc <[^>]*> nop
++000096e0 <[^>]*> nop
++000096e4 <[^>]*> nop
++000096e8 <[^>]*> nop
++000096ec <[^>]*> nop
++000096f0 <[^>]*> nop
++000096f4 <[^>]*> nop
++000096f8 <[^>]*> nop
++000096fc <[^>]*> nop
++00009700 <[^>]*> nop
++00009704 <[^>]*> nop
++00009708 <[^>]*> nop
++0000970c <[^>]*> nop
++00009710 <[^>]*> nop
++00009714 <[^>]*> nop
++00009718 <[^>]*> nop
++0000971c <[^>]*> nop
++00009720 <[^>]*> nop
++00009724 <[^>]*> nop
++00009728 <[^>]*> nop
++0000972c <[^>]*> nop
++00009730 <[^>]*> nop
++00009734 <[^>]*> nop
++00009738 <[^>]*> nop
++0000973c <[^>]*> nop
++00009740 <[^>]*> nop
++00009744 <[^>]*> nop
++00009748 <[^>]*> nop
++0000974c <[^>]*> nop
++00009750 <[^>]*> nop
++00009754 <[^>]*> nop
++00009758 <[^>]*> nop
++0000975c <[^>]*> nop
++00009760 <[^>]*> nop
++00009764 <[^>]*> nop
++00009768 <[^>]*> nop
++0000976c <[^>]*> nop
++00009770 <[^>]*> nop
++00009774 <[^>]*> nop
++00009778 <[^>]*> nop
++0000977c <[^>]*> nop
++00009780 <[^>]*> nop
++00009784 <[^>]*> nop
++00009788 <[^>]*> nop
++0000978c <[^>]*> nop
++00009790 <[^>]*> nop
++00009794 <[^>]*> nop
++00009798 <[^>]*> nop
++0000979c <[^>]*> nop
++000097a0 <[^>]*> nop
++000097a4 <[^>]*> nop
++000097a8 <[^>]*> nop
++000097ac <[^>]*> nop
++000097b0 <[^>]*> nop
++000097b4 <[^>]*> nop
++000097b8 <[^>]*> nop
++000097bc <[^>]*> nop
++000097c0 <[^>]*> nop
++000097c4 <[^>]*> nop
++000097c8 <[^>]*> nop
++000097cc <[^>]*> nop
++000097d0 <[^>]*> nop
++000097d4 <[^>]*> nop
++000097d8 <[^>]*> nop
++000097dc <[^>]*> nop
++000097e0 <[^>]*> nop
++000097e4 <[^>]*> nop
++000097e8 <[^>]*> nop
++000097ec <[^>]*> nop
++000097f0 <[^>]*> nop
++000097f4 <[^>]*> nop
++000097f8 <[^>]*> nop
++000097fc <[^>]*> nop
++00009800 <[^>]*> nop
++00009804 <[^>]*> nop
++00009808 <[^>]*> nop
++0000980c <[^>]*> nop
++00009810 <[^>]*> nop
++00009814 <[^>]*> nop
++00009818 <[^>]*> nop
++0000981c <[^>]*> nop
++00009820 <[^>]*> nop
++00009824 <[^>]*> nop
++00009828 <[^>]*> nop
++0000982c <[^>]*> nop
++00009830 <[^>]*> nop
++00009834 <[^>]*> nop
++00009838 <[^>]*> nop
++0000983c <[^>]*> nop
++00009840 <[^>]*> nop
++00009844 <[^>]*> nop
++00009848 <[^>]*> nop
++0000984c <[^>]*> nop
++00009850 <[^>]*> nop
++00009854 <[^>]*> nop
++00009858 <[^>]*> nop
++0000985c <[^>]*> nop
++00009860 <[^>]*> nop
++00009864 <[^>]*> nop
++00009868 <[^>]*> nop
++0000986c <[^>]*> nop
++00009870 <[^>]*> nop
++00009874 <[^>]*> nop
++00009878 <[^>]*> nop
++0000987c <[^>]*> nop
++00009880 <[^>]*> nop
++00009884 <[^>]*> nop
++00009888 <[^>]*> nop
++0000988c <[^>]*> nop
++00009890 <[^>]*> nop
++00009894 <[^>]*> nop
++00009898 <[^>]*> nop
++0000989c <[^>]*> nop
++000098a0 <[^>]*> nop
++000098a4 <[^>]*> nop
++000098a8 <[^>]*> nop
++000098ac <[^>]*> nop
++000098b0 <[^>]*> nop
++000098b4 <[^>]*> nop
++000098b8 <[^>]*> nop
++000098bc <[^>]*> nop
++000098c0 <[^>]*> nop
++000098c4 <[^>]*> nop
++000098c8 <[^>]*> nop
++000098cc <[^>]*> nop
++000098d0 <[^>]*> nop
++000098d4 <[^>]*> nop
++000098d8 <[^>]*> nop
++000098dc <[^>]*> nop
++000098e0 <[^>]*> nop
++000098e4 <[^>]*> nop
++000098e8 <[^>]*> nop
++000098ec <[^>]*> nop
++000098f0 <[^>]*> nop
++000098f4 <[^>]*> nop
++000098f8 <[^>]*> nop
++000098fc <[^>]*> nop
++00009900 <[^>]*> nop
++00009904 <[^>]*> nop
++00009908 <[^>]*> nop
++0000990c <[^>]*> nop
++00009910 <[^>]*> nop
++00009914 <[^>]*> nop
++00009918 <[^>]*> nop
++0000991c <[^>]*> nop
++00009920 <[^>]*> nop
++00009924 <[^>]*> nop
++00009928 <[^>]*> nop
++0000992c <[^>]*> nop
++00009930 <[^>]*> nop
++00009934 <[^>]*> nop
++00009938 <[^>]*> nop
++0000993c <[^>]*> nop
++00009940 <[^>]*> nop
++00009944 <[^>]*> nop
++00009948 <[^>]*> nop
++0000994c <[^>]*> nop
++00009950 <[^>]*> nop
++00009954 <[^>]*> nop
++00009958 <[^>]*> nop
++0000995c <[^>]*> nop
++00009960 <[^>]*> nop
++00009964 <[^>]*> nop
++00009968 <[^>]*> nop
++0000996c <[^>]*> nop
++00009970 <[^>]*> nop
++00009974 <[^>]*> nop
++00009978 <[^>]*> nop
++0000997c <[^>]*> nop
++00009980 <[^>]*> nop
++00009984 <[^>]*> nop
++00009988 <[^>]*> nop
++0000998c <[^>]*> nop
++00009990 <[^>]*> nop
++00009994 <[^>]*> nop
++00009998 <[^>]*> nop
++0000999c <[^>]*> nop
++000099a0 <[^>]*> nop
++000099a4 <[^>]*> nop
++000099a8 <[^>]*> nop
++000099ac <[^>]*> nop
++000099b0 <[^>]*> nop
++000099b4 <[^>]*> nop
++000099b8 <[^>]*> nop
++000099bc <[^>]*> nop
++000099c0 <[^>]*> nop
++000099c4 <[^>]*> nop
++000099c8 <[^>]*> nop
++000099cc <[^>]*> nop
++000099d0 <[^>]*> nop
++000099d4 <[^>]*> nop
++000099d8 <[^>]*> nop
++000099dc <[^>]*> nop
++000099e0 <[^>]*> nop
++000099e4 <[^>]*> nop
++000099e8 <[^>]*> nop
++000099ec <[^>]*> nop
++000099f0 <[^>]*> nop
++000099f4 <[^>]*> nop
++000099f8 <[^>]*> nop
++000099fc <[^>]*> nop
++00009a00 <[^>]*> nop
++00009a04 <[^>]*> nop
++00009a08 <[^>]*> nop
++00009a0c <[^>]*> nop
++00009a10 <[^>]*> nop
++00009a14 <[^>]*> nop
++00009a18 <[^>]*> nop
++00009a1c <[^>]*> nop
++00009a20 <[^>]*> nop
++00009a24 <[^>]*> nop
++00009a28 <[^>]*> nop
++00009a2c <[^>]*> nop
++00009a30 <[^>]*> nop
++00009a34 <[^>]*> nop
++00009a38 <[^>]*> nop
++00009a3c <[^>]*> nop
++00009a40 <[^>]*> nop
++00009a44 <[^>]*> nop
++00009a48 <[^>]*> nop
++00009a4c <[^>]*> nop
++00009a50 <[^>]*> nop
++00009a54 <[^>]*> nop
++00009a58 <[^>]*> nop
++00009a5c <[^>]*> nop
++00009a60 <[^>]*> nop
++00009a64 <[^>]*> nop
++00009a68 <[^>]*> nop
++00009a6c <[^>]*> nop
++00009a70 <[^>]*> nop
++00009a74 <[^>]*> nop
++00009a78 <[^>]*> nop
++00009a7c <[^>]*> nop
++00009a80 <[^>]*> nop
++00009a84 <[^>]*> nop
++00009a88 <[^>]*> nop
++00009a8c <[^>]*> nop
++00009a90 <[^>]*> nop
++00009a94 <[^>]*> nop
++00009a98 <[^>]*> nop
++00009a9c <[^>]*> nop
++00009aa0 <[^>]*> nop
++00009aa4 <[^>]*> nop
++00009aa8 <[^>]*> nop
++00009aac <[^>]*> nop
++00009ab0 <[^>]*> nop
++00009ab4 <[^>]*> nop
++00009ab8 <[^>]*> nop
++00009abc <[^>]*> nop
++00009ac0 <[^>]*> nop
++00009ac4 <[^>]*> nop
++00009ac8 <[^>]*> nop
++00009acc <[^>]*> nop
++00009ad0 <[^>]*> nop
++00009ad4 <[^>]*> nop
++00009ad8 <[^>]*> nop
++00009adc <[^>]*> nop
++00009ae0 <[^>]*> nop
++00009ae4 <[^>]*> nop
++00009ae8 <[^>]*> nop
++00009aec <[^>]*> nop
++00009af0 <[^>]*> nop
++00009af4 <[^>]*> nop
++00009af8 <[^>]*> nop
++00009afc <[^>]*> nop
++00009b00 <[^>]*> nop
++00009b04 <[^>]*> nop
++00009b08 <[^>]*> nop
++00009b0c <[^>]*> nop
++00009b10 <[^>]*> nop
++00009b14 <[^>]*> nop
++00009b18 <[^>]*> nop
++00009b1c <[^>]*> nop
++00009b20 <[^>]*> nop
++00009b24 <[^>]*> nop
++00009b28 <[^>]*> nop
++00009b2c <[^>]*> nop
++00009b30 <[^>]*> nop
++00009b34 <[^>]*> nop
++00009b38 <[^>]*> nop
++00009b3c <[^>]*> nop
++00009b40 <[^>]*> nop
++00009b44 <[^>]*> nop
++00009b48 <[^>]*> nop
++00009b4c <[^>]*> nop
++00009b50 <[^>]*> nop
++00009b54 <[^>]*> nop
++00009b58 <[^>]*> nop
++00009b5c <[^>]*> nop
++00009b60 <[^>]*> nop
++00009b64 <[^>]*> nop
++00009b68 <[^>]*> nop
++00009b6c <[^>]*> nop
++00009b70 <[^>]*> nop
++00009b74 <[^>]*> nop
++00009b78 <[^>]*> nop
++00009b7c <[^>]*> nop
++00009b80 <[^>]*> nop
++00009b84 <[^>]*> nop
++00009b88 <[^>]*> nop
++00009b8c <[^>]*> nop
++00009b90 <[^>]*> nop
++00009b94 <[^>]*> nop
++00009b98 <[^>]*> nop
++00009b9c <[^>]*> nop
++00009ba0 <[^>]*> nop
++00009ba4 <[^>]*> nop
++00009ba8 <[^>]*> nop
++00009bac <[^>]*> nop
++00009bb0 <[^>]*> nop
++00009bb4 <[^>]*> nop
++00009bb8 <[^>]*> nop
++00009bbc <[^>]*> nop
++00009bc0 <[^>]*> nop
++00009bc4 <[^>]*> nop
++00009bc8 <[^>]*> nop
++00009bcc <[^>]*> nop
++00009bd0 <[^>]*> nop
++00009bd4 <[^>]*> nop
++00009bd8 <[^>]*> nop
++00009bdc <[^>]*> nop
++00009be0 <[^>]*> nop
++00009be4 <[^>]*> nop
++00009be8 <[^>]*> nop
++00009bec <[^>]*> nop
++00009bf0 <[^>]*> nop
++00009bf4 <[^>]*> nop
++00009bf8 <[^>]*> nop
++00009bfc <[^>]*> nop
++00009c00 <[^>]*> nop
++00009c04 <[^>]*> nop
++00009c08 <[^>]*> nop
++00009c0c <[^>]*> nop
++00009c10 <[^>]*> nop
++00009c14 <[^>]*> nop
++00009c18 <[^>]*> nop
++00009c1c <[^>]*> nop
++00009c20 <[^>]*> nop
++00009c24 <[^>]*> nop
++00009c28 <[^>]*> nop
++00009c2c <[^>]*> nop
++00009c30 <[^>]*> nop
++00009c34 <[^>]*> nop
++00009c38 <[^>]*> nop
++00009c3c <[^>]*> nop
++00009c40 <[^>]*> nop
++00009c44 <[^>]*> nop
++00009c48 <[^>]*> nop
++00009c4c <[^>]*> nop
++00009c50 <[^>]*> nop
++00009c54 <[^>]*> nop
++00009c58 <[^>]*> nop
++00009c5c <[^>]*> nop
++00009c60 <[^>]*> nop
++00009c64 <[^>]*> nop
++00009c68 <[^>]*> nop
++00009c6c <[^>]*> nop
++00009c70 <[^>]*> nop
++00009c74 <[^>]*> nop
++00009c78 <[^>]*> nop
++00009c7c <[^>]*> nop
++00009c80 <[^>]*> nop
++00009c84 <[^>]*> nop
++00009c88 <[^>]*> nop
++00009c8c <[^>]*> nop
++00009c90 <[^>]*> nop
++00009c94 <[^>]*> nop
++00009c98 <[^>]*> nop
++00009c9c <[^>]*> nop
++00009ca0 <[^>]*> nop
++00009ca4 <[^>]*> nop
++00009ca8 <[^>]*> nop
++00009cac <[^>]*> nop
++00009cb0 <[^>]*> nop
++00009cb4 <[^>]*> nop
++00009cb8 <[^>]*> nop
++00009cbc <[^>]*> nop
++00009cc0 <[^>]*> nop
++00009cc4 <[^>]*> nop
++00009cc8 <[^>]*> nop
++00009ccc <[^>]*> nop
++00009cd0 <[^>]*> nop
++00009cd4 <[^>]*> nop
++00009cd8 <[^>]*> nop
++00009cdc <[^>]*> nop
++00009ce0 <[^>]*> nop
++00009ce4 <[^>]*> nop
++00009ce8 <[^>]*> nop
++00009cec <[^>]*> nop
++00009cf0 <[^>]*> nop
++00009cf4 <[^>]*> nop
++00009cf8 <[^>]*> nop
++00009cfc <[^>]*> nop
++00009d00 <[^>]*> nop
++00009d04 <[^>]*> nop
++00009d08 <[^>]*> nop
++00009d0c <[^>]*> nop
++00009d10 <[^>]*> nop
++00009d14 <[^>]*> nop
++00009d18 <[^>]*> nop
++00009d1c <[^>]*> nop
++00009d20 <[^>]*> nop
++00009d24 <[^>]*> nop
++00009d28 <[^>]*> nop
++00009d2c <[^>]*> nop
++00009d30 <[^>]*> nop
++00009d34 <[^>]*> nop
++00009d38 <[^>]*> nop
++00009d3c <[^>]*> nop
++00009d40 <[^>]*> nop
++00009d44 <[^>]*> nop
++00009d48 <[^>]*> nop
++00009d4c <[^>]*> nop
++00009d50 <[^>]*> nop
++00009d54 <[^>]*> nop
++00009d58 <[^>]*> nop
++00009d5c <[^>]*> nop
++00009d60 <[^>]*> nop
++00009d64 <[^>]*> nop
++00009d68 <[^>]*> nop
++00009d6c <[^>]*> nop
++00009d70 <[^>]*> nop
++00009d74 <[^>]*> nop
++00009d78 <[^>]*> nop
++00009d7c <[^>]*> nop
++00009d80 <[^>]*> nop
++00009d84 <[^>]*> nop
++00009d88 <[^>]*> nop
++00009d8c <[^>]*> nop
++00009d90 <[^>]*> nop
++00009d94 <[^>]*> nop
++00009d98 <[^>]*> nop
++00009d9c <[^>]*> nop
++00009da0 <[^>]*> nop
++00009da4 <[^>]*> nop
++00009da8 <[^>]*> nop
++00009dac <[^>]*> nop
++00009db0 <[^>]*> nop
++00009db4 <[^>]*> nop
++00009db8 <[^>]*> nop
++00009dbc <[^>]*> nop
++00009dc0 <[^>]*> nop
++00009dc4 <[^>]*> nop
++00009dc8 <[^>]*> nop
++00009dcc <[^>]*> nop
++00009dd0 <[^>]*> nop
++00009dd4 <[^>]*> nop
++00009dd8 <[^>]*> nop
++00009ddc <[^>]*> nop
++00009de0 <[^>]*> nop
++00009de4 <[^>]*> nop
++00009de8 <[^>]*> nop
++00009dec <[^>]*> nop
++00009df0 <[^>]*> nop
++00009df4 <[^>]*> nop
++00009df8 <[^>]*> nop
++00009dfc <[^>]*> nop
++00009e00 <[^>]*> nop
++00009e04 <[^>]*> nop
++00009e08 <[^>]*> nop
++00009e0c <[^>]*> nop
++00009e10 <[^>]*> nop
++00009e14 <[^>]*> nop
++00009e18 <[^>]*> nop
++00009e1c <[^>]*> nop
++00009e20 <[^>]*> nop
++00009e24 <[^>]*> nop
++00009e28 <[^>]*> nop
++00009e2c <[^>]*> nop
++00009e30 <[^>]*> nop
++00009e34 <[^>]*> nop
++00009e38 <[^>]*> nop
++00009e3c <[^>]*> nop
++00009e40 <[^>]*> nop
++00009e44 <[^>]*> nop
++00009e48 <[^>]*> nop
++00009e4c <[^>]*> nop
++00009e50 <[^>]*> nop
++00009e54 <[^>]*> nop
++00009e58 <[^>]*> nop
++00009e5c <[^>]*> nop
++00009e60 <[^>]*> nop
++00009e64 <[^>]*> nop
++00009e68 <[^>]*> nop
++00009e6c <[^>]*> nop
++00009e70 <[^>]*> nop
++00009e74 <[^>]*> nop
++00009e78 <[^>]*> nop
++00009e7c <[^>]*> nop
++00009e80 <[^>]*> nop
++00009e84 <[^>]*> nop
++00009e88 <[^>]*> nop
++00009e8c <[^>]*> nop
++00009e90 <[^>]*> nop
++00009e94 <[^>]*> nop
++00009e98 <[^>]*> nop
++00009e9c <[^>]*> nop
++00009ea0 <[^>]*> nop
++00009ea4 <[^>]*> nop
++00009ea8 <[^>]*> nop
++00009eac <[^>]*> nop
++00009eb0 <[^>]*> nop
++00009eb4 <[^>]*> nop
++00009eb8 <[^>]*> nop
++00009ebc <[^>]*> nop
++00009ec0 <[^>]*> nop
++00009ec4 <[^>]*> nop
++00009ec8 <[^>]*> nop
++00009ecc <[^>]*> nop
++00009ed0 <[^>]*> nop
++00009ed4 <[^>]*> nop
++00009ed8 <[^>]*> nop
++00009edc <[^>]*> nop
++00009ee0 <[^>]*> nop
++00009ee4 <[^>]*> nop
++00009ee8 <[^>]*> nop
++00009eec <[^>]*> nop
++00009ef0 <[^>]*> nop
++00009ef4 <[^>]*> nop
++00009ef8 <[^>]*> nop
++00009efc <[^>]*> nop
++00009f00 <[^>]*> nop
++00009f04 <[^>]*> nop
++00009f08 <[^>]*> nop
++00009f0c <[^>]*> nop
++00009f10 <[^>]*> nop
++00009f14 <[^>]*> nop
++00009f18 <[^>]*> nop
++00009f1c <[^>]*> nop
++00009f20 <[^>]*> nop
++00009f24 <[^>]*> nop
++00009f28 <[^>]*> nop
++00009f2c <[^>]*> nop
++00009f30 <[^>]*> nop
++00009f34 <[^>]*> nop
++00009f38 <[^>]*> nop
++00009f3c <[^>]*> nop
++00009f40 <[^>]*> nop
++00009f44 <[^>]*> nop
++00009f48 <[^>]*> nop
++00009f4c <[^>]*> nop
++00009f50 <[^>]*> nop
++00009f54 <[^>]*> nop
++00009f58 <[^>]*> nop
++00009f5c <[^>]*> nop
++00009f60 <[^>]*> nop
++00009f64 <[^>]*> nop
++00009f68 <[^>]*> nop
++00009f6c <[^>]*> nop
++00009f70 <[^>]*> nop
++00009f74 <[^>]*> nop
++00009f78 <[^>]*> nop
++00009f7c <[^>]*> nop
++00009f80 <[^>]*> nop
++00009f84 <[^>]*> nop
++00009f88 <[^>]*> nop
++00009f8c <[^>]*> nop
++00009f90 <[^>]*> nop
++00009f94 <[^>]*> nop
++00009f98 <[^>]*> nop
++00009f9c <[^>]*> nop
++00009fa0 <[^>]*> nop
++00009fa4 <[^>]*> nop
++00009fa8 <[^>]*> nop
++00009fac <[^>]*> nop
++00009fb0 <[^>]*> nop
++00009fb4 <[^>]*> nop
++00009fb8 <[^>]*> nop
++00009fbc <[^>]*> nop
++00009fc0 <[^>]*> nop
++00009fc4 <[^>]*> nop
++00009fc8 <[^>]*> nop
++00009fcc <[^>]*> nop
++00009fd0 <[^>]*> nop
++00009fd4 <[^>]*> nop
++00009fd8 <[^>]*> nop
++00009fdc <[^>]*> nop
++00009fe0 <[^>]*> nop
++00009fe4 <[^>]*> nop
++00009fe8 <[^>]*> nop
++00009fec <[^>]*> nop
++00009ff0 <[^>]*> nop
++00009ff4 <[^>]*> nop
++00009ff8 <[^>]*> nop
++00009ffc <[^>]*> nop
++0000a000 <[^>]*> nop
++0000a004 <[^>]*> nop
++0000a008 <[^>]*> nop
++0000a00c <[^>]*> nop
++0000a010 <[^>]*> nop
++0000a014 <[^>]*> nop
++0000a018 <[^>]*> nop
++0000a01c <[^>]*> nop
++0000a020 <[^>]*> nop
++0000a024 <[^>]*> nop
++0000a028 <[^>]*> nop
++0000a02c <[^>]*> nop
++0000a030 <[^>]*> nop
++0000a034 <[^>]*> nop
++0000a038 <[^>]*> nop
++0000a03c <[^>]*> nop
++0000a040 <[^>]*> nop
++0000a044 <[^>]*> nop
++0000a048 <[^>]*> nop
++0000a04c <[^>]*> nop
++0000a050 <[^>]*> nop
++0000a054 <[^>]*> nop
++0000a058 <[^>]*> nop
++0000a05c <[^>]*> nop
++0000a060 <[^>]*> nop
++0000a064 <[^>]*> nop
++0000a068 <[^>]*> nop
++0000a06c <[^>]*> nop
++0000a070 <[^>]*> nop
++0000a074 <[^>]*> nop
++0000a078 <[^>]*> nop
++0000a07c <[^>]*> nop
++0000a080 <[^>]*> nop
++0000a084 <[^>]*> nop
++0000a088 <[^>]*> nop
++0000a08c <[^>]*> nop
++0000a090 <[^>]*> nop
++0000a094 <[^>]*> nop
++0000a098 <[^>]*> nop
++0000a09c <[^>]*> nop
++0000a0a0 <[^>]*> nop
++0000a0a4 <[^>]*> nop
++0000a0a8 <[^>]*> nop
++0000a0ac <[^>]*> nop
++0000a0b0 <[^>]*> nop
++0000a0b4 <[^>]*> nop
++0000a0b8 <[^>]*> nop
++0000a0bc <[^>]*> nop
++0000a0c0 <[^>]*> nop
++0000a0c4 <[^>]*> nop
++0000a0c8 <[^>]*> nop
++0000a0cc <[^>]*> nop
++0000a0d0 <[^>]*> nop
++0000a0d4 <[^>]*> nop
++0000a0d8 <[^>]*> nop
++0000a0dc <[^>]*> nop
++0000a0e0 <[^>]*> nop
++0000a0e4 <[^>]*> nop
++0000a0e8 <[^>]*> nop
++0000a0ec <[^>]*> nop
++0000a0f0 <[^>]*> nop
++0000a0f4 <[^>]*> nop
++0000a0f8 <[^>]*> nop
++0000a0fc <[^>]*> nop
++0000a100 <[^>]*> nop
++0000a104 <[^>]*> nop
++0000a108 <[^>]*> nop
++0000a10c <[^>]*> nop
++0000a110 <[^>]*> nop
++0000a114 <[^>]*> nop
++0000a118 <[^>]*> nop
++0000a11c <[^>]*> nop
++0000a120 <[^>]*> nop
++0000a124 <[^>]*> nop
++0000a128 <[^>]*> nop
++0000a12c <[^>]*> nop
++0000a130 <[^>]*> nop
++0000a134 <[^>]*> nop
++0000a138 <[^>]*> nop
++0000a13c <[^>]*> nop
++0000a140 <[^>]*> nop
++0000a144 <[^>]*> nop
++0000a148 <[^>]*> nop
++0000a14c <[^>]*> nop
++0000a150 <[^>]*> nop
++0000a154 <[^>]*> nop
++0000a158 <[^>]*> nop
++0000a15c <[^>]*> nop
++0000a160 <[^>]*> nop
++0000a164 <[^>]*> nop
++0000a168 <[^>]*> nop
++0000a16c <[^>]*> nop
++0000a170 <[^>]*> nop
++0000a174 <[^>]*> nop
++0000a178 <[^>]*> nop
++0000a17c <[^>]*> nop
++0000a180 <[^>]*> nop
++0000a184 <[^>]*> nop
++0000a188 <[^>]*> nop
++0000a18c <[^>]*> nop
++0000a190 <[^>]*> nop
++0000a194 <[^>]*> nop
++0000a198 <[^>]*> nop
++0000a19c <[^>]*> nop
++0000a1a0 <[^>]*> nop
++0000a1a4 <[^>]*> nop
++0000a1a8 <[^>]*> nop
++0000a1ac <[^>]*> nop
++0000a1b0 <[^>]*> nop
++0000a1b4 <[^>]*> nop
++0000a1b8 <[^>]*> nop
++0000a1bc <[^>]*> nop
++0000a1c0 <[^>]*> nop
++0000a1c4 <[^>]*> nop
++0000a1c8 <[^>]*> nop
++0000a1cc <[^>]*> nop
++0000a1d0 <[^>]*> nop
++0000a1d4 <[^>]*> nop
++0000a1d8 <[^>]*> nop
++0000a1dc <[^>]*> nop
++0000a1e0 <[^>]*> nop
++0000a1e4 <[^>]*> nop
++0000a1e8 <[^>]*> nop
++0000a1ec <[^>]*> nop
++0000a1f0 <[^>]*> nop
++0000a1f4 <[^>]*> nop
++0000a1f8 <[^>]*> nop
++0000a1fc <[^>]*> nop
++0000a200 <[^>]*> nop
++0000a204 <[^>]*> nop
++0000a208 <[^>]*> nop
++0000a20c <[^>]*> nop
++0000a210 <[^>]*> nop
++0000a214 <[^>]*> nop
++0000a218 <[^>]*> nop
++0000a21c <[^>]*> nop
++0000a220 <[^>]*> nop
++0000a224 <[^>]*> nop
++0000a228 <[^>]*> nop
++0000a22c <[^>]*> nop
++0000a230 <[^>]*> nop
++0000a234 <[^>]*> nop
++0000a238 <[^>]*> nop
++0000a23c <[^>]*> nop
++0000a240 <[^>]*> nop
++0000a244 <[^>]*> nop
++0000a248 <[^>]*> nop
++0000a24c <[^>]*> nop
++0000a250 <[^>]*> nop
++0000a254 <[^>]*> nop
++0000a258 <[^>]*> nop
++0000a25c <[^>]*> nop
++0000a260 <[^>]*> nop
++0000a264 <[^>]*> nop
++0000a268 <[^>]*> nop
++0000a26c <[^>]*> nop
++0000a270 <[^>]*> nop
++0000a274 <[^>]*> nop
++0000a278 <[^>]*> nop
++0000a27c <[^>]*> nop
++0000a280 <[^>]*> nop
++0000a284 <[^>]*> nop
++0000a288 <[^>]*> nop
++0000a28c <[^>]*> nop
++0000a290 <[^>]*> nop
++0000a294 <[^>]*> nop
++0000a298 <[^>]*> nop
++0000a29c <[^>]*> nop
++0000a2a0 <[^>]*> nop
++0000a2a4 <[^>]*> nop
++0000a2a8 <[^>]*> nop
++0000a2ac <[^>]*> nop
++0000a2b0 <[^>]*> nop
++0000a2b4 <[^>]*> nop
++0000a2b8 <[^>]*> nop
++0000a2bc <[^>]*> nop
++0000a2c0 <[^>]*> nop
++0000a2c4 <[^>]*> nop
++0000a2c8 <[^>]*> nop
++0000a2cc <[^>]*> nop
++0000a2d0 <[^>]*> nop
++0000a2d4 <[^>]*> nop
++0000a2d8 <[^>]*> nop
++0000a2dc <[^>]*> nop
++0000a2e0 <[^>]*> nop
++0000a2e4 <[^>]*> nop
++0000a2e8 <[^>]*> nop
++0000a2ec <[^>]*> nop
++0000a2f0 <[^>]*> nop
++0000a2f4 <[^>]*> nop
++0000a2f8 <[^>]*> nop
++0000a2fc <[^>]*> nop
++0000a300 <[^>]*> nop
++0000a304 <[^>]*> nop
++0000a308 <[^>]*> nop
++0000a30c <[^>]*> nop
++0000a310 <[^>]*> nop
++0000a314 <[^>]*> nop
++0000a318 <[^>]*> nop
++0000a31c <[^>]*> nop
++0000a320 <[^>]*> nop
++0000a324 <[^>]*> nop
++0000a328 <[^>]*> nop
++0000a32c <[^>]*> nop
++0000a330 <[^>]*> nop
++0000a334 <[^>]*> nop
++0000a338 <[^>]*> nop
++0000a33c <[^>]*> nop
++0000a340 <[^>]*> nop
++0000a344 <[^>]*> nop
++0000a348 <[^>]*> nop
++0000a34c <[^>]*> nop
++0000a350 <[^>]*> nop
++0000a354 <[^>]*> nop
++0000a358 <[^>]*> nop
++0000a35c <[^>]*> nop
++0000a360 <[^>]*> nop
++0000a364 <[^>]*> nop
++0000a368 <[^>]*> nop
++0000a36c <[^>]*> nop
++0000a370 <[^>]*> nop
++0000a374 <[^>]*> nop
++0000a378 <[^>]*> nop
++0000a37c <[^>]*> nop
++0000a380 <[^>]*> nop
++0000a384 <[^>]*> nop
++0000a388 <[^>]*> nop
++0000a38c <[^>]*> nop
++0000a390 <[^>]*> nop
++0000a394 <[^>]*> nop
++0000a398 <[^>]*> nop
++0000a39c <[^>]*> nop
++0000a3a0 <[^>]*> nop
++0000a3a4 <[^>]*> nop
++0000a3a8 <[^>]*> nop
++0000a3ac <[^>]*> nop
++0000a3b0 <[^>]*> nop
++0000a3b4 <[^>]*> nop
++0000a3b8 <[^>]*> nop
++0000a3bc <[^>]*> nop
++0000a3c0 <[^>]*> nop
++0000a3c4 <[^>]*> nop
++0000a3c8 <[^>]*> nop
++0000a3cc <[^>]*> nop
++0000a3d0 <[^>]*> nop
++0000a3d4 <[^>]*> nop
++0000a3d8 <[^>]*> nop
++0000a3dc <[^>]*> nop
++0000a3e0 <[^>]*> nop
++0000a3e4 <[^>]*> nop
++0000a3e8 <[^>]*> nop
++0000a3ec <[^>]*> nop
++0000a3f0 <[^>]*> nop
++0000a3f4 <[^>]*> nop
++0000a3f8 <[^>]*> nop
++0000a3fc <[^>]*> nop
++0000a400 <[^>]*> nop
++0000a404 <[^>]*> nop
++0000a408 <[^>]*> nop
++0000a40c <[^>]*> nop
++0000a410 <[^>]*> nop
++0000a414 <[^>]*> nop
++0000a418 <[^>]*> nop
++0000a41c <[^>]*> nop
++0000a420 <[^>]*> nop
++0000a424 <[^>]*> nop
++0000a428 <[^>]*> nop
++0000a42c <[^>]*> nop
++0000a430 <[^>]*> nop
++0000a434 <[^>]*> nop
++0000a438 <[^>]*> nop
++0000a43c <[^>]*> nop
++0000a440 <[^>]*> nop
++0000a444 <[^>]*> nop
++0000a448 <[^>]*> nop
++0000a44c <[^>]*> nop
++0000a450 <[^>]*> nop
++0000a454 <[^>]*> nop
++0000a458 <[^>]*> nop
++0000a45c <[^>]*> nop
++0000a460 <[^>]*> nop
++0000a464 <[^>]*> nop
++0000a468 <[^>]*> nop
++0000a46c <[^>]*> nop
++0000a470 <[^>]*> nop
++0000a474 <[^>]*> nop
++0000a478 <[^>]*> nop
++0000a47c <[^>]*> nop
++0000a480 <[^>]*> nop
++0000a484 <[^>]*> nop
++0000a488 <[^>]*> nop
++0000a48c <[^>]*> nop
++0000a490 <[^>]*> nop
++0000a494 <[^>]*> nop
++0000a498 <[^>]*> nop
++0000a49c <[^>]*> nop
++0000a4a0 <[^>]*> nop
++0000a4a4 <[^>]*> nop
++0000a4a8 <[^>]*> nop
++0000a4ac <[^>]*> nop
++0000a4b0 <[^>]*> nop
++0000a4b4 <[^>]*> nop
++0000a4b8 <[^>]*> nop
++0000a4bc <[^>]*> nop
++0000a4c0 <[^>]*> nop
++0000a4c4 <[^>]*> nop
++0000a4c8 <[^>]*> nop
++0000a4cc <[^>]*> nop
++0000a4d0 <[^>]*> nop
++0000a4d4 <[^>]*> nop
++0000a4d8 <[^>]*> nop
++0000a4dc <[^>]*> nop
++0000a4e0 <[^>]*> nop
++0000a4e4 <[^>]*> nop
++0000a4e8 <[^>]*> nop
++0000a4ec <[^>]*> nop
++0000a4f0 <[^>]*> nop
++0000a4f4 <[^>]*> nop
++0000a4f8 <[^>]*> nop
++0000a4fc <[^>]*> nop
++0000a500 <[^>]*> nop
++0000a504 <[^>]*> nop
++0000a508 <[^>]*> nop
++0000a50c <[^>]*> nop
++0000a510 <[^>]*> nop
++0000a514 <[^>]*> nop
++0000a518 <[^>]*> nop
++0000a51c <[^>]*> nop
++0000a520 <[^>]*> nop
++0000a524 <[^>]*> nop
++0000a528 <[^>]*> nop
++0000a52c <[^>]*> nop
++0000a530 <[^>]*> nop
++0000a534 <[^>]*> nop
++0000a538 <[^>]*> nop
++0000a53c <[^>]*> nop
++0000a540 <[^>]*> nop
++0000a544 <[^>]*> nop
++0000a548 <[^>]*> nop
++0000a54c <[^>]*> nop
++0000a550 <[^>]*> nop
++0000a554 <[^>]*> nop
++0000a558 <[^>]*> nop
++0000a55c <[^>]*> nop
++0000a560 <[^>]*> nop
++0000a564 <[^>]*> nop
++0000a568 <[^>]*> nop
++0000a56c <[^>]*> nop
++0000a570 <[^>]*> nop
++0000a574 <[^>]*> nop
++0000a578 <[^>]*> nop
++0000a57c <[^>]*> nop
++0000a580 <[^>]*> nop
++0000a584 <[^>]*> nop
++0000a588 <[^>]*> nop
++0000a58c <[^>]*> nop
++0000a590 <[^>]*> nop
++0000a594 <[^>]*> nop
++0000a598 <[^>]*> nop
++0000a59c <[^>]*> nop
++0000a5a0 <[^>]*> nop
++0000a5a4 <[^>]*> nop
++0000a5a8 <[^>]*> nop
++0000a5ac <[^>]*> nop
++0000a5b0 <[^>]*> nop
++0000a5b4 <[^>]*> nop
++0000a5b8 <[^>]*> nop
++0000a5bc <[^>]*> nop
++0000a5c0 <[^>]*> nop
++0000a5c4 <[^>]*> nop
++0000a5c8 <[^>]*> nop
++0000a5cc <[^>]*> nop
++0000a5d0 <[^>]*> nop
++0000a5d4 <[^>]*> nop
++0000a5d8 <[^>]*> nop
++0000a5dc <[^>]*> nop
++0000a5e0 <[^>]*> nop
++0000a5e4 <[^>]*> nop
++0000a5e8 <[^>]*> nop
++0000a5ec <[^>]*> nop
++0000a5f0 <[^>]*> nop
++0000a5f4 <[^>]*> nop
++0000a5f8 <[^>]*> nop
++0000a5fc <[^>]*> nop
++0000a600 <[^>]*> nop
++0000a604 <[^>]*> nop
++0000a608 <[^>]*> nop
++0000a60c <[^>]*> nop
++0000a610 <[^>]*> nop
++0000a614 <[^>]*> nop
++0000a618 <[^>]*> nop
++0000a61c <[^>]*> nop
++0000a620 <[^>]*> nop
++0000a624 <[^>]*> nop
++0000a628 <[^>]*> nop
++0000a62c <[^>]*> nop
++0000a630 <[^>]*> nop
++0000a634 <[^>]*> nop
++0000a638 <[^>]*> nop
++0000a63c <[^>]*> nop
++0000a640 <[^>]*> nop
++0000a644 <[^>]*> nop
++0000a648 <[^>]*> nop
++0000a64c <[^>]*> nop
++0000a650 <[^>]*> nop
++0000a654 <[^>]*> nop
++0000a658 <[^>]*> nop
++0000a65c <[^>]*> nop
++0000a660 <[^>]*> nop
++0000a664 <[^>]*> nop
++0000a668 <[^>]*> nop
++0000a66c <[^>]*> nop
++0000a670 <[^>]*> nop
++0000a674 <[^>]*> nop
++0000a678 <[^>]*> nop
++0000a67c <[^>]*> nop
++0000a680 <[^>]*> nop
++0000a684 <[^>]*> nop
++0000a688 <[^>]*> nop
++0000a68c <[^>]*> nop
++0000a690 <[^>]*> nop
++0000a694 <[^>]*> nop
++0000a698 <[^>]*> nop
++0000a69c <[^>]*> nop
++0000a6a0 <[^>]*> nop
++0000a6a4 <[^>]*> nop
++0000a6a8 <[^>]*> nop
++0000a6ac <[^>]*> nop
++0000a6b0 <[^>]*> nop
++0000a6b4 <[^>]*> nop
++0000a6b8 <[^>]*> nop
++0000a6bc <[^>]*> nop
++0000a6c0 <[^>]*> nop
++0000a6c4 <[^>]*> nop
++0000a6c8 <[^>]*> nop
++0000a6cc <[^>]*> nop
++0000a6d0 <[^>]*> nop
++0000a6d4 <[^>]*> nop
++0000a6d8 <[^>]*> nop
++0000a6dc <[^>]*> nop
++0000a6e0 <[^>]*> nop
++0000a6e4 <[^>]*> nop
++0000a6e8 <[^>]*> nop
++0000a6ec <[^>]*> nop
++0000a6f0 <[^>]*> nop
++0000a6f4 <[^>]*> nop
++0000a6f8 <[^>]*> nop
++0000a6fc <[^>]*> nop
++0000a700 <[^>]*> nop
++0000a704 <[^>]*> nop
++0000a708 <[^>]*> nop
++0000a70c <[^>]*> nop
++0000a710 <[^>]*> nop
++0000a714 <[^>]*> nop
++0000a718 <[^>]*> nop
++0000a71c <[^>]*> nop
++0000a720 <[^>]*> nop
++0000a724 <[^>]*> nop
++0000a728 <[^>]*> nop
++0000a72c <[^>]*> nop
++0000a730 <[^>]*> nop
++0000a734 <[^>]*> nop
++0000a738 <[^>]*> nop
++0000a73c <[^>]*> nop
++0000a740 <[^>]*> nop
++0000a744 <[^>]*> nop
++0000a748 <[^>]*> nop
++0000a74c <[^>]*> nop
++0000a750 <[^>]*> nop
++0000a754 <[^>]*> nop
++0000a758 <[^>]*> nop
++0000a75c <[^>]*> nop
++0000a760 <[^>]*> nop
++0000a764 <[^>]*> nop
++0000a768 <[^>]*> nop
++0000a76c <[^>]*> nop
++0000a770 <[^>]*> nop
++0000a774 <[^>]*> nop
++0000a778 <[^>]*> nop
++0000a77c <[^>]*> nop
++0000a780 <[^>]*> nop
++0000a784 <[^>]*> nop
++0000a788 <[^>]*> nop
++0000a78c <[^>]*> nop
++0000a790 <[^>]*> nop
++0000a794 <[^>]*> nop
++0000a798 <[^>]*> nop
++0000a79c <[^>]*> nop
++0000a7a0 <[^>]*> nop
++0000a7a4 <[^>]*> nop
++0000a7a8 <[^>]*> nop
++0000a7ac <[^>]*> nop
++0000a7b0 <[^>]*> nop
++0000a7b4 <[^>]*> nop
++0000a7b8 <[^>]*> nop
++0000a7bc <[^>]*> nop
++0000a7c0 <[^>]*> nop
++0000a7c4 <[^>]*> nop
++0000a7c8 <[^>]*> nop
++0000a7cc <[^>]*> nop
++0000a7d0 <[^>]*> nop
++0000a7d4 <[^>]*> nop
++0000a7d8 <[^>]*> nop
++0000a7dc <[^>]*> nop
++0000a7e0 <[^>]*> nop
++0000a7e4 <[^>]*> nop
++0000a7e8 <[^>]*> nop
++0000a7ec <[^>]*> nop
++0000a7f0 <[^>]*> nop
++0000a7f4 <[^>]*> nop
++0000a7f8 <[^>]*> nop
++0000a7fc <[^>]*> nop
++0000a800 <[^>]*> nop
++0000a804 <[^>]*> nop
++0000a808 <[^>]*> nop
++0000a80c <[^>]*> nop
++0000a810 <[^>]*> nop
++0000a814 <[^>]*> nop
++0000a818 <[^>]*> nop
++0000a81c <[^>]*> nop
++0000a820 <[^>]*> nop
++0000a824 <[^>]*> nop
++0000a828 <[^>]*> nop
++0000a82c <[^>]*> nop
++0000a830 <[^>]*> nop
++0000a834 <[^>]*> nop
++0000a838 <[^>]*> nop
++0000a83c <[^>]*> nop
++0000a840 <[^>]*> nop
++0000a844 <[^>]*> nop
++0000a848 <[^>]*> nop
++0000a84c <[^>]*> nop
++0000a850 <[^>]*> nop
++0000a854 <[^>]*> nop
++0000a858 <[^>]*> nop
++0000a85c <[^>]*> nop
++0000a860 <[^>]*> nop
++0000a864 <[^>]*> nop
++0000a868 <[^>]*> nop
++0000a86c <[^>]*> nop
++0000a870 <[^>]*> nop
++0000a874 <[^>]*> nop
++0000a878 <[^>]*> nop
++0000a87c <[^>]*> nop
++0000a880 <[^>]*> nop
++0000a884 <[^>]*> nop
++0000a888 <[^>]*> nop
++0000a88c <[^>]*> nop
++0000a890 <[^>]*> nop
++0000a894 <[^>]*> nop
++0000a898 <[^>]*> nop
++0000a89c <[^>]*> nop
++0000a8a0 <[^>]*> nop
++0000a8a4 <[^>]*> nop
++0000a8a8 <[^>]*> nop
++0000a8ac <[^>]*> nop
++0000a8b0 <[^>]*> nop
++0000a8b4 <[^>]*> nop
++0000a8b8 <[^>]*> nop
++0000a8bc <[^>]*> nop
++0000a8c0 <[^>]*> nop
++0000a8c4 <[^>]*> nop
++0000a8c8 <[^>]*> nop
++0000a8cc <[^>]*> nop
++0000a8d0 <[^>]*> nop
++0000a8d4 <[^>]*> nop
++0000a8d8 <[^>]*> nop
++0000a8dc <[^>]*> nop
++0000a8e0 <[^>]*> nop
++0000a8e4 <[^>]*> nop
++0000a8e8 <[^>]*> nop
++0000a8ec <[^>]*> nop
++0000a8f0 <[^>]*> nop
++0000a8f4 <[^>]*> nop
++0000a8f8 <[^>]*> nop
++0000a8fc <[^>]*> nop
++0000a900 <[^>]*> nop
++0000a904 <[^>]*> nop
++0000a908 <[^>]*> nop
++0000a90c <[^>]*> nop
++0000a910 <[^>]*> nop
++0000a914 <[^>]*> nop
++0000a918 <[^>]*> nop
++0000a91c <[^>]*> nop
++0000a920 <[^>]*> nop
++0000a924 <[^>]*> nop
++0000a928 <[^>]*> nop
++0000a92c <[^>]*> nop
++0000a930 <[^>]*> nop
++0000a934 <[^>]*> nop
++0000a938 <[^>]*> nop
++0000a93c <[^>]*> nop
++0000a940 <[^>]*> nop
++0000a944 <[^>]*> nop
++0000a948 <[^>]*> nop
++0000a94c <[^>]*> nop
++0000a950 <[^>]*> nop
++0000a954 <[^>]*> nop
++0000a958 <[^>]*> nop
++0000a95c <[^>]*> nop
++0000a960 <[^>]*> nop
++0000a964 <[^>]*> nop
++0000a968 <[^>]*> nop
++0000a96c <[^>]*> nop
++0000a970 <[^>]*> nop
++0000a974 <[^>]*> nop
++0000a978 <[^>]*> nop
++0000a97c <[^>]*> nop
++0000a980 <[^>]*> nop
++0000a984 <[^>]*> nop
++0000a988 <[^>]*> nop
++0000a98c <[^>]*> nop
++0000a990 <[^>]*> nop
++0000a994 <[^>]*> nop
++0000a998 <[^>]*> nop
++0000a99c <[^>]*> nop
++0000a9a0 <[^>]*> nop
++0000a9a4 <[^>]*> nop
++0000a9a8 <[^>]*> nop
++0000a9ac <[^>]*> nop
++0000a9b0 <[^>]*> nop
++0000a9b4 <[^>]*> nop
++0000a9b8 <[^>]*> nop
++0000a9bc <[^>]*> nop
++0000a9c0 <[^>]*> nop
++0000a9c4 <[^>]*> nop
++0000a9c8 <[^>]*> nop
++0000a9cc <[^>]*> nop
++0000a9d0 <[^>]*> nop
++0000a9d4 <[^>]*> nop
++0000a9d8 <[^>]*> nop
++0000a9dc <[^>]*> nop
++0000a9e0 <[^>]*> nop
++0000a9e4 <[^>]*> nop
++0000a9e8 <[^>]*> nop
++0000a9ec <[^>]*> nop
++0000a9f0 <[^>]*> nop
++0000a9f4 <[^>]*> nop
++0000a9f8 <[^>]*> nop
++0000a9fc <[^>]*> nop
++0000aa00 <[^>]*> nop
++0000aa04 <[^>]*> nop
++0000aa08 <[^>]*> nop
++0000aa0c <[^>]*> nop
++0000aa10 <[^>]*> nop
++0000aa14 <[^>]*> nop
++0000aa18 <[^>]*> nop
++0000aa1c <[^>]*> nop
++0000aa20 <[^>]*> nop
++0000aa24 <[^>]*> nop
++0000aa28 <[^>]*> nop
++0000aa2c <[^>]*> nop
++0000aa30 <[^>]*> nop
++0000aa34 <[^>]*> nop
++0000aa38 <[^>]*> nop
++0000aa3c <[^>]*> nop
++0000aa40 <[^>]*> nop
++0000aa44 <[^>]*> nop
++0000aa48 <[^>]*> nop
++0000aa4c <[^>]*> nop
++0000aa50 <[^>]*> nop
++0000aa54 <[^>]*> nop
++0000aa58 <[^>]*> nop
++0000aa5c <[^>]*> nop
++0000aa60 <[^>]*> nop
++0000aa64 <[^>]*> nop
++0000aa68 <[^>]*> nop
++0000aa6c <[^>]*> nop
++0000aa70 <[^>]*> nop
++0000aa74 <[^>]*> nop
++0000aa78 <[^>]*> nop
++0000aa7c <[^>]*> nop
++0000aa80 <[^>]*> nop
++0000aa84 <[^>]*> nop
++0000aa88 <[^>]*> nop
++0000aa8c <[^>]*> nop
++0000aa90 <[^>]*> nop
++0000aa94 <[^>]*> nop
++0000aa98 <[^>]*> nop
++0000aa9c <[^>]*> nop
++0000aaa0 <[^>]*> nop
++0000aaa4 <[^>]*> nop
++0000aaa8 <[^>]*> nop
++0000aaac <[^>]*> nop
++0000aab0 <[^>]*> nop
++0000aab4 <[^>]*> nop
++0000aab8 <[^>]*> nop
++0000aabc <[^>]*> nop
++0000aac0 <[^>]*> nop
++0000aac4 <[^>]*> nop
++0000aac8 <[^>]*> nop
++0000aacc <[^>]*> nop
++0000aad0 <[^>]*> nop
++0000aad4 <[^>]*> nop
++0000aad8 <[^>]*> nop
++0000aadc <[^>]*> nop
++0000aae0 <[^>]*> nop
++0000aae4 <[^>]*> nop
++0000aae8 <[^>]*> nop
++0000aaec <[^>]*> nop
++0000aaf0 <[^>]*> nop
++0000aaf4 <[^>]*> nop
++0000aaf8 <[^>]*> nop
++0000aafc <[^>]*> nop
++0000ab00 <[^>]*> nop
++0000ab04 <[^>]*> nop
++0000ab08 <[^>]*> nop
++0000ab0c <[^>]*> nop
++0000ab10 <[^>]*> nop
++0000ab14 <[^>]*> nop
++0000ab18 <[^>]*> nop
++0000ab1c <[^>]*> nop
++0000ab20 <[^>]*> nop
++0000ab24 <[^>]*> nop
++0000ab28 <[^>]*> nop
++0000ab2c <[^>]*> nop
++0000ab30 <[^>]*> nop
++0000ab34 <[^>]*> nop
++0000ab38 <[^>]*> nop
++0000ab3c <[^>]*> nop
++0000ab40 <[^>]*> nop
++0000ab44 <[^>]*> nop
++0000ab48 <[^>]*> nop
++0000ab4c <[^>]*> nop
++0000ab50 <[^>]*> nop
++0000ab54 <[^>]*> nop
++0000ab58 <[^>]*> nop
++0000ab5c <[^>]*> nop
++0000ab60 <[^>]*> nop
++0000ab64 <[^>]*> nop
++0000ab68 <[^>]*> nop
++0000ab6c <[^>]*> nop
++0000ab70 <[^>]*> nop
++0000ab74 <[^>]*> nop
++0000ab78 <[^>]*> nop
++0000ab7c <[^>]*> nop
++0000ab80 <[^>]*> nop
++0000ab84 <[^>]*> nop
++0000ab88 <[^>]*> nop
++0000ab8c <[^>]*> nop
++0000ab90 <[^>]*> nop
++0000ab94 <[^>]*> nop
++0000ab98 <[^>]*> nop
++0000ab9c <[^>]*> nop
++0000aba0 <[^>]*> nop
++0000aba4 <[^>]*> nop
++0000aba8 <[^>]*> nop
++0000abac <[^>]*> nop
++0000abb0 <[^>]*> nop
++0000abb4 <[^>]*> nop
++0000abb8 <[^>]*> nop
++0000abbc <[^>]*> nop
++0000abc0 <[^>]*> nop
++0000abc4 <[^>]*> nop
++0000abc8 <[^>]*> nop
++0000abcc <[^>]*> nop
++0000abd0 <[^>]*> nop
++0000abd4 <[^>]*> nop
++0000abd8 <[^>]*> nop
++0000abdc <[^>]*> nop
++0000abe0 <[^>]*> nop
++0000abe4 <[^>]*> nop
++0000abe8 <[^>]*> nop
++0000abec <[^>]*> nop
++0000abf0 <[^>]*> nop
++0000abf4 <[^>]*> nop
++0000abf8 <[^>]*> nop
++0000abfc <[^>]*> nop
++0000ac00 <[^>]*> nop
++0000ac04 <[^>]*> nop
++0000ac08 <[^>]*> nop
++0000ac0c <[^>]*> nop
++0000ac10 <[^>]*> nop
++0000ac14 <[^>]*> nop
++0000ac18 <[^>]*> nop
++0000ac1c <[^>]*> nop
++0000ac20 <[^>]*> nop
++0000ac24 <[^>]*> nop
++0000ac28 <[^>]*> nop
++0000ac2c <[^>]*> nop
++0000ac30 <[^>]*> nop
++0000ac34 <[^>]*> nop
++0000ac38 <[^>]*> nop
++0000ac3c <[^>]*> nop
++0000ac40 <[^>]*> nop
++0000ac44 <[^>]*> nop
++0000ac48 <[^>]*> nop
++0000ac4c <[^>]*> nop
++0000ac50 <[^>]*> nop
++0000ac54 <[^>]*> nop
++0000ac58 <[^>]*> nop
++0000ac5c <[^>]*> nop
++0000ac60 <[^>]*> nop
++0000ac64 <[^>]*> nop
++0000ac68 <[^>]*> nop
++0000ac6c <[^>]*> nop
++0000ac70 <[^>]*> nop
++0000ac74 <[^>]*> nop
++0000ac78 <[^>]*> nop
++0000ac7c <[^>]*> nop
++0000ac80 <[^>]*> nop
++0000ac84 <[^>]*> nop
++0000ac88 <[^>]*> nop
++0000ac8c <[^>]*> nop
++0000ac90 <[^>]*> nop
++0000ac94 <[^>]*> nop
++0000ac98 <[^>]*> nop
++0000ac9c <[^>]*> nop
++0000aca0 <[^>]*> nop
++0000aca4 <[^>]*> nop
++0000aca8 <[^>]*> nop
++0000acac <[^>]*> nop
++0000acb0 <[^>]*> nop
++0000acb4 <[^>]*> nop
++0000acb8 <[^>]*> nop
++0000acbc <[^>]*> nop
++0000acc0 <[^>]*> nop
++0000acc4 <[^>]*> nop
++0000acc8 <[^>]*> nop
++0000accc <[^>]*> nop
++0000acd0 <[^>]*> nop
++0000acd4 <[^>]*> nop
++0000acd8 <[^>]*> nop
++0000acdc <[^>]*> nop
++0000ace0 <[^>]*> nop
++0000ace4 <[^>]*> nop
++0000ace8 <[^>]*> nop
++0000acec <[^>]*> nop
++0000acf0 <[^>]*> nop
++0000acf4 <[^>]*> nop
++0000acf8 <[^>]*> nop
++0000acfc <[^>]*> nop
++0000ad00 <[^>]*> nop
++0000ad04 <[^>]*> nop
++0000ad08 <[^>]*> nop
++0000ad0c <[^>]*> nop
++0000ad10 <[^>]*> nop
++0000ad14 <[^>]*> nop
++0000ad18 <[^>]*> nop
++0000ad1c <[^>]*> nop
++0000ad20 <[^>]*> nop
++0000ad24 <[^>]*> nop
++0000ad28 <[^>]*> nop
++0000ad2c <[^>]*> nop
++0000ad30 <[^>]*> nop
++0000ad34 <[^>]*> nop
++0000ad38 <[^>]*> nop
++0000ad3c <[^>]*> nop
++0000ad40 <[^>]*> nop
++0000ad44 <[^>]*> nop
++0000ad48 <[^>]*> nop
++0000ad4c <[^>]*> nop
++0000ad50 <[^>]*> nop
++0000ad54 <[^>]*> nop
++0000ad58 <[^>]*> nop
++0000ad5c <[^>]*> nop
++0000ad60 <[^>]*> nop
++0000ad64 <[^>]*> nop
++0000ad68 <[^>]*> nop
++0000ad6c <[^>]*> nop
++0000ad70 <[^>]*> nop
++0000ad74 <[^>]*> nop
++0000ad78 <[^>]*> nop
++0000ad7c <[^>]*> nop
++0000ad80 <[^>]*> nop
++0000ad84 <[^>]*> nop
++0000ad88 <[^>]*> nop
++0000ad8c <[^>]*> nop
++0000ad90 <[^>]*> nop
++0000ad94 <[^>]*> nop
++0000ad98 <[^>]*> nop
++0000ad9c <[^>]*> nop
++0000ada0 <[^>]*> nop
++0000ada4 <[^>]*> nop
++0000ada8 <[^>]*> nop
++0000adac <[^>]*> nop
++0000adb0 <[^>]*> nop
++0000adb4 <[^>]*> nop
++0000adb8 <[^>]*> nop
++0000adbc <[^>]*> nop
++0000adc0 <[^>]*> nop
++0000adc4 <[^>]*> nop
++0000adc8 <[^>]*> nop
++0000adcc <[^>]*> nop
++0000add0 <[^>]*> nop
++0000add4 <[^>]*> nop
++0000add8 <[^>]*> nop
++0000addc <[^>]*> nop
++0000ade0 <[^>]*> nop
++0000ade4 <[^>]*> nop
++0000ade8 <[^>]*> nop
++0000adec <[^>]*> nop
++0000adf0 <[^>]*> nop
++0000adf4 <[^>]*> nop
++0000adf8 <[^>]*> nop
++0000adfc <[^>]*> nop
++0000ae00 <[^>]*> nop
++0000ae04 <[^>]*> nop
++0000ae08 <[^>]*> nop
++0000ae0c <[^>]*> nop
++0000ae10 <[^>]*> nop
++0000ae14 <[^>]*> nop
++0000ae18 <[^>]*> nop
++0000ae1c <[^>]*> nop
++0000ae20 <[^>]*> nop
++0000ae24 <[^>]*> nop
++0000ae28 <[^>]*> nop
++0000ae2c <[^>]*> nop
++0000ae30 <[^>]*> nop
++0000ae34 <[^>]*> nop
++0000ae38 <[^>]*> nop
++0000ae3c <[^>]*> nop
++0000ae40 <[^>]*> nop
++0000ae44 <[^>]*> nop
++0000ae48 <[^>]*> nop
++0000ae4c <[^>]*> nop
++0000ae50 <[^>]*> nop
++0000ae54 <[^>]*> nop
++0000ae58 <[^>]*> nop
++0000ae5c <[^>]*> nop
++0000ae60 <[^>]*> nop
++0000ae64 <[^>]*> nop
++0000ae68 <[^>]*> nop
++0000ae6c <[^>]*> nop
++0000ae70 <[^>]*> nop
++0000ae74 <[^>]*> nop
++0000ae78 <[^>]*> nop
++0000ae7c <[^>]*> nop
++0000ae80 <[^>]*> nop
++0000ae84 <[^>]*> nop
++0000ae88 <[^>]*> nop
++0000ae8c <[^>]*> nop
++0000ae90 <[^>]*> nop
++0000ae94 <[^>]*> nop
++0000ae98 <[^>]*> nop
++0000ae9c <[^>]*> nop
++0000aea0 <[^>]*> nop
++0000aea4 <[^>]*> nop
++0000aea8 <[^>]*> nop
++0000aeac <[^>]*> nop
++0000aeb0 <[^>]*> nop
++0000aeb4 <[^>]*> nop
++0000aeb8 <[^>]*> nop
++0000aebc <[^>]*> nop
++0000aec0 <[^>]*> nop
++0000aec4 <[^>]*> nop
++0000aec8 <[^>]*> nop
++0000aecc <[^>]*> nop
++0000aed0 <[^>]*> nop
++0000aed4 <[^>]*> nop
++0000aed8 <[^>]*> nop
++0000aedc <[^>]*> nop
++0000aee0 <[^>]*> nop
++0000aee4 <[^>]*> nop
++0000aee8 <[^>]*> nop
++0000aeec <[^>]*> nop
++0000aef0 <[^>]*> nop
++0000aef4 <[^>]*> nop
++0000aef8 <[^>]*> nop
++0000aefc <[^>]*> nop
++0000af00 <[^>]*> nop
++0000af04 <[^>]*> nop
++0000af08 <[^>]*> nop
++0000af0c <[^>]*> nop
++0000af10 <[^>]*> nop
++0000af14 <[^>]*> nop
++0000af18 <[^>]*> nop
++0000af1c <[^>]*> nop
++0000af20 <[^>]*> nop
++0000af24 <[^>]*> nop
++0000af28 <[^>]*> nop
++0000af2c <[^>]*> nop
++0000af30 <[^>]*> nop
++0000af34 <[^>]*> nop
++0000af38 <[^>]*> nop
++0000af3c <[^>]*> nop
++0000af40 <[^>]*> nop
++0000af44 <[^>]*> nop
++0000af48 <[^>]*> nop
++0000af4c <[^>]*> nop
++0000af50 <[^>]*> nop
++0000af54 <[^>]*> nop
++0000af58 <[^>]*> nop
++0000af5c <[^>]*> nop
++0000af60 <[^>]*> nop
++0000af64 <[^>]*> nop
++0000af68 <[^>]*> nop
++0000af6c <[^>]*> nop
++0000af70 <[^>]*> nop
++0000af74 <[^>]*> nop
++0000af78 <[^>]*> nop
++0000af7c <[^>]*> nop
++0000af80 <[^>]*> nop
++0000af84 <[^>]*> nop
++0000af88 <[^>]*> nop
++0000af8c <[^>]*> nop
++0000af90 <[^>]*> nop
++0000af94 <[^>]*> nop
++0000af98 <[^>]*> nop
++0000af9c <[^>]*> nop
++0000afa0 <[^>]*> nop
++0000afa4 <[^>]*> nop
++0000afa8 <[^>]*> nop
++0000afac <[^>]*> nop
++0000afb0 <[^>]*> nop
++0000afb4 <[^>]*> nop
++0000afb8 <[^>]*> nop
++0000afbc <[^>]*> nop
++0000afc0 <[^>]*> nop
++0000afc4 <[^>]*> nop
++0000afc8 <[^>]*> nop
++0000afcc <[^>]*> nop
++0000afd0 <[^>]*> nop
++0000afd4 <[^>]*> nop
++0000afd8 <[^>]*> nop
++0000afdc <[^>]*> nop
++0000afe0 <[^>]*> nop
++0000afe4 <[^>]*> nop
++0000afe8 <[^>]*> nop
++0000afec <[^>]*> nop
++0000aff0 <[^>]*> nop
++0000aff4 <[^>]*> nop
++0000aff8 <[^>]*> nop
++0000affc <[^>]*> nop
++0000b000 <[^>]*> nop
++0000b004 <[^>]*> nop
++0000b008 <[^>]*> nop
++0000b00c <[^>]*> nop
++0000b010 <[^>]*> nop
++0000b014 <[^>]*> nop
++0000b018 <[^>]*> nop
++0000b01c <[^>]*> nop
++0000b020 <[^>]*> nop
++0000b024 <[^>]*> nop
++0000b028 <[^>]*> nop
++0000b02c <[^>]*> nop
++0000b030 <[^>]*> nop
++0000b034 <[^>]*> nop
++0000b038 <[^>]*> nop
++0000b03c <[^>]*> nop
++0000b040 <[^>]*> nop
++0000b044 <[^>]*> nop
++0000b048 <[^>]*> nop
++0000b04c <[^>]*> nop
++0000b050 <[^>]*> nop
++0000b054 <[^>]*> nop
++0000b058 <[^>]*> nop
++0000b05c <[^>]*> nop
++0000b060 <[^>]*> nop
++0000b064 <[^>]*> nop
++0000b068 <[^>]*> nop
++0000b06c <[^>]*> nop
++0000b070 <[^>]*> nop
++0000b074 <[^>]*> nop
++0000b078 <[^>]*> nop
++0000b07c <[^>]*> nop
++0000b080 <[^>]*> nop
++0000b084 <[^>]*> nop
++0000b088 <[^>]*> nop
++0000b08c <[^>]*> nop
++0000b090 <[^>]*> nop
++0000b094 <[^>]*> nop
++0000b098 <[^>]*> nop
++0000b09c <[^>]*> nop
++0000b0a0 <[^>]*> nop
++0000b0a4 <[^>]*> nop
++0000b0a8 <[^>]*> nop
++0000b0ac <[^>]*> nop
++0000b0b0 <[^>]*> nop
++0000b0b4 <[^>]*> nop
++0000b0b8 <[^>]*> nop
++0000b0bc <[^>]*> nop
++0000b0c0 <[^>]*> nop
++0000b0c4 <[^>]*> nop
++0000b0c8 <[^>]*> nop
++0000b0cc <[^>]*> nop
++0000b0d0 <[^>]*> nop
++0000b0d4 <[^>]*> nop
++0000b0d8 <[^>]*> nop
++0000b0dc <[^>]*> nop
++0000b0e0 <[^>]*> nop
++0000b0e4 <[^>]*> nop
++0000b0e8 <[^>]*> nop
++0000b0ec <[^>]*> nop
++0000b0f0 <[^>]*> nop
++0000b0f4 <[^>]*> nop
++0000b0f8 <[^>]*> nop
++0000b0fc <[^>]*> nop
++0000b100 <[^>]*> nop
++0000b104 <[^>]*> nop
++0000b108 <[^>]*> nop
++0000b10c <[^>]*> nop
++0000b110 <[^>]*> nop
++0000b114 <[^>]*> nop
++0000b118 <[^>]*> nop
++0000b11c <[^>]*> nop
++0000b120 <[^>]*> nop
++0000b124 <[^>]*> nop
++0000b128 <[^>]*> nop
++0000b12c <[^>]*> nop
++0000b130 <[^>]*> nop
++0000b134 <[^>]*> nop
++0000b138 <[^>]*> nop
++0000b13c <[^>]*> nop
++0000b140 <[^>]*> nop
++0000b144 <[^>]*> nop
++0000b148 <[^>]*> nop
++0000b14c <[^>]*> nop
++0000b150 <[^>]*> nop
++0000b154 <[^>]*> nop
++0000b158 <[^>]*> nop
++0000b15c <[^>]*> nop
++0000b160 <[^>]*> nop
++0000b164 <[^>]*> nop
++0000b168 <[^>]*> nop
++0000b16c <[^>]*> nop
++0000b170 <[^>]*> nop
++0000b174 <[^>]*> nop
++0000b178 <[^>]*> nop
++0000b17c <[^>]*> nop
++0000b180 <[^>]*> nop
++0000b184 <[^>]*> nop
++0000b188 <[^>]*> nop
++0000b18c <[^>]*> nop
++0000b190 <[^>]*> nop
++0000b194 <[^>]*> nop
++0000b198 <[^>]*> nop
++0000b19c <[^>]*> nop
++0000b1a0 <[^>]*> nop
++0000b1a4 <[^>]*> nop
++0000b1a8 <[^>]*> nop
++0000b1ac <[^>]*> nop
++0000b1b0 <[^>]*> nop
++0000b1b4 <[^>]*> nop
++0000b1b8 <[^>]*> nop
++0000b1bc <[^>]*> nop
++0000b1c0 <[^>]*> nop
++0000b1c4 <[^>]*> nop
++0000b1c8 <[^>]*> nop
++0000b1cc <[^>]*> nop
++0000b1d0 <[^>]*> nop
++0000b1d4 <[^>]*> nop
++0000b1d8 <[^>]*> nop
++0000b1dc <[^>]*> nop
++0000b1e0 <[^>]*> nop
++0000b1e4 <[^>]*> nop
++0000b1e8 <[^>]*> nop
++0000b1ec <[^>]*> nop
++0000b1f0 <[^>]*> nop
++0000b1f4 <[^>]*> nop
++0000b1f8 <[^>]*> nop
++0000b1fc <[^>]*> nop
++0000b200 <[^>]*> nop
++0000b204 <[^>]*> nop
++0000b208 <[^>]*> nop
++0000b20c <[^>]*> nop
++0000b210 <[^>]*> nop
++0000b214 <[^>]*> nop
++0000b218 <[^>]*> nop
++0000b21c <[^>]*> nop
++0000b220 <[^>]*> nop
++0000b224 <[^>]*> nop
++0000b228 <[^>]*> nop
++0000b22c <[^>]*> nop
++0000b230 <[^>]*> nop
++0000b234 <[^>]*> nop
++0000b238 <[^>]*> nop
++0000b23c <[^>]*> nop
++0000b240 <[^>]*> nop
++0000b244 <[^>]*> nop
++0000b248 <[^>]*> nop
++0000b24c <[^>]*> nop
++0000b250 <[^>]*> nop
++0000b254 <[^>]*> nop
++0000b258 <[^>]*> nop
++0000b25c <[^>]*> nop
++0000b260 <[^>]*> nop
++0000b264 <[^>]*> nop
++0000b268 <[^>]*> nop
++0000b26c <[^>]*> nop
++0000b270 <[^>]*> nop
++0000b274 <[^>]*> nop
++0000b278 <[^>]*> nop
++0000b27c <[^>]*> nop
++0000b280 <[^>]*> nop
++0000b284 <[^>]*> nop
++0000b288 <[^>]*> nop
++0000b28c <[^>]*> nop
++0000b290 <[^>]*> nop
++0000b294 <[^>]*> nop
++0000b298 <[^>]*> nop
++0000b29c <[^>]*> nop
++0000b2a0 <[^>]*> nop
++0000b2a4 <[^>]*> nop
++0000b2a8 <[^>]*> nop
++0000b2ac <[^>]*> nop
++0000b2b0 <[^>]*> nop
++0000b2b4 <[^>]*> nop
++0000b2b8 <[^>]*> nop
++0000b2bc <[^>]*> nop
++0000b2c0 <[^>]*> nop
++0000b2c4 <[^>]*> nop
++0000b2c8 <[^>]*> nop
++0000b2cc <[^>]*> nop
++0000b2d0 <[^>]*> nop
++0000b2d4 <[^>]*> nop
++0000b2d8 <[^>]*> nop
++0000b2dc <[^>]*> nop
++0000b2e0 <[^>]*> nop
++0000b2e4 <[^>]*> nop
++0000b2e8 <[^>]*> nop
++0000b2ec <[^>]*> nop
++0000b2f0 <[^>]*> nop
++0000b2f4 <[^>]*> nop
++0000b2f8 <[^>]*> nop
++0000b2fc <[^>]*> nop
++0000b300 <[^>]*> nop
++0000b304 <[^>]*> nop
++0000b308 <[^>]*> nop
++0000b30c <[^>]*> nop
++0000b310 <[^>]*> nop
++0000b314 <[^>]*> nop
++0000b318 <[^>]*> nop
++0000b31c <[^>]*> nop
++0000b320 <[^>]*> nop
++0000b324 <[^>]*> nop
++0000b328 <[^>]*> nop
++0000b32c <[^>]*> nop
++0000b330 <[^>]*> nop
++0000b334 <[^>]*> nop
++0000b338 <[^>]*> nop
++0000b33c <[^>]*> nop
++0000b340 <[^>]*> nop
++0000b344 <[^>]*> nop
++0000b348 <[^>]*> nop
++0000b34c <[^>]*> nop
++0000b350 <[^>]*> nop
++0000b354 <[^>]*> nop
++0000b358 <[^>]*> nop
++0000b35c <[^>]*> nop
++0000b360 <[^>]*> nop
++0000b364 <[^>]*> nop
++0000b368 <[^>]*> nop
++0000b36c <[^>]*> nop
++0000b370 <[^>]*> nop
++0000b374 <[^>]*> nop
++0000b378 <[^>]*> nop
++0000b37c <[^>]*> nop
++0000b380 <[^>]*> nop
++0000b384 <[^>]*> nop
++0000b388 <[^>]*> nop
++0000b38c <[^>]*> nop
++0000b390 <[^>]*> nop
++0000b394 <[^>]*> nop
++0000b398 <[^>]*> nop
++0000b39c <[^>]*> nop
++0000b3a0 <[^>]*> nop
++0000b3a4 <[^>]*> nop
++0000b3a8 <[^>]*> nop
++0000b3ac <[^>]*> nop
++0000b3b0 <[^>]*> nop
++0000b3b4 <[^>]*> nop
++0000b3b8 <[^>]*> nop
++0000b3bc <[^>]*> nop
++0000b3c0 <[^>]*> nop
++0000b3c4 <[^>]*> nop
++0000b3c8 <[^>]*> nop
++0000b3cc <[^>]*> nop
++0000b3d0 <[^>]*> nop
++0000b3d4 <[^>]*> nop
++0000b3d8 <[^>]*> nop
++0000b3dc <[^>]*> nop
++0000b3e0 <[^>]*> nop
++0000b3e4 <[^>]*> nop
++0000b3e8 <[^>]*> nop
++0000b3ec <[^>]*> nop
++0000b3f0 <[^>]*> nop
++0000b3f4 <[^>]*> nop
++0000b3f8 <[^>]*> nop
++0000b3fc <[^>]*> nop
++0000b400 <[^>]*> nop
++0000b404 <[^>]*> nop
++0000b408 <[^>]*> nop
++0000b40c <[^>]*> nop
++0000b410 <[^>]*> nop
++0000b414 <[^>]*> nop
++0000b418 <[^>]*> nop
++0000b41c <[^>]*> nop
++0000b420 <[^>]*> nop
++0000b424 <[^>]*> nop
++0000b428 <[^>]*> nop
++0000b42c <[^>]*> nop
++0000b430 <[^>]*> nop
++0000b434 <[^>]*> nop
++0000b438 <[^>]*> nop
++0000b43c <[^>]*> nop
++0000b440 <[^>]*> nop
++0000b444 <[^>]*> nop
++0000b448 <[^>]*> nop
++0000b44c <[^>]*> nop
++0000b450 <[^>]*> nop
++0000b454 <[^>]*> nop
++0000b458 <[^>]*> nop
++0000b45c <[^>]*> nop
++0000b460 <[^>]*> nop
++0000b464 <[^>]*> nop
++0000b468 <[^>]*> nop
++0000b46c <[^>]*> nop
++0000b470 <[^>]*> nop
++0000b474 <[^>]*> nop
++0000b478 <[^>]*> nop
++0000b47c <[^>]*> nop
++0000b480 <[^>]*> nop
++0000b484 <[^>]*> nop
++0000b488 <[^>]*> nop
++0000b48c <[^>]*> nop
++0000b490 <[^>]*> nop
++0000b494 <[^>]*> nop
++0000b498 <[^>]*> nop
++0000b49c <[^>]*> nop
++0000b4a0 <[^>]*> nop
++0000b4a4 <[^>]*> nop
++0000b4a8 <[^>]*> nop
++0000b4ac <[^>]*> nop
++0000b4b0 <[^>]*> nop
++0000b4b4 <[^>]*> nop
++0000b4b8 <[^>]*> nop
++0000b4bc <[^>]*> nop
++0000b4c0 <[^>]*> nop
++0000b4c4 <[^>]*> nop
++0000b4c8 <[^>]*> nop
++0000b4cc <[^>]*> nop
++0000b4d0 <[^>]*> nop
++0000b4d4 <[^>]*> nop
++0000b4d8 <[^>]*> nop
++0000b4dc <[^>]*> nop
++0000b4e0 <[^>]*> nop
++0000b4e4 <[^>]*> nop
++0000b4e8 <[^>]*> nop
++0000b4ec <[^>]*> nop
++0000b4f0 <[^>]*> nop
++0000b4f4 <[^>]*> nop
++0000b4f8 <[^>]*> nop
++0000b4fc <[^>]*> nop
++0000b500 <[^>]*> nop
++0000b504 <[^>]*> nop
++0000b508 <[^>]*> nop
++0000b50c <[^>]*> nop
++0000b510 <[^>]*> nop
++0000b514 <[^>]*> nop
++0000b518 <[^>]*> nop
++0000b51c <[^>]*> nop
++0000b520 <[^>]*> nop
++0000b524 <[^>]*> nop
++0000b528 <[^>]*> nop
++0000b52c <[^>]*> nop
++0000b530 <[^>]*> nop
++0000b534 <[^>]*> nop
++0000b538 <[^>]*> nop
++0000b53c <[^>]*> nop
++0000b540 <[^>]*> nop
++0000b544 <[^>]*> nop
++0000b548 <[^>]*> nop
++0000b54c <[^>]*> nop
++0000b550 <[^>]*> nop
++0000b554 <[^>]*> nop
++0000b558 <[^>]*> nop
++0000b55c <[^>]*> nop
++0000b560 <[^>]*> nop
++0000b564 <[^>]*> nop
++0000b568 <[^>]*> nop
++0000b56c <[^>]*> nop
++0000b570 <[^>]*> nop
++0000b574 <[^>]*> nop
++0000b578 <[^>]*> nop
++0000b57c <[^>]*> nop
++0000b580 <[^>]*> nop
++0000b584 <[^>]*> nop
++0000b588 <[^>]*> nop
++0000b58c <[^>]*> nop
++0000b590 <[^>]*> nop
++0000b594 <[^>]*> nop
++0000b598 <[^>]*> nop
++0000b59c <[^>]*> nop
++0000b5a0 <[^>]*> nop
++0000b5a4 <[^>]*> nop
++0000b5a8 <[^>]*> nop
++0000b5ac <[^>]*> nop
++0000b5b0 <[^>]*> nop
++0000b5b4 <[^>]*> nop
++0000b5b8 <[^>]*> nop
++0000b5bc <[^>]*> nop
++0000b5c0 <[^>]*> nop
++0000b5c4 <[^>]*> nop
++0000b5c8 <[^>]*> nop
++0000b5cc <[^>]*> nop
++0000b5d0 <[^>]*> nop
++0000b5d4 <[^>]*> nop
++0000b5d8 <[^>]*> nop
++0000b5dc <[^>]*> nop
++0000b5e0 <[^>]*> nop
++0000b5e4 <[^>]*> nop
++0000b5e8 <[^>]*> nop
++0000b5ec <[^>]*> nop
++0000b5f0 <[^>]*> nop
++0000b5f4 <[^>]*> nop
++0000b5f8 <[^>]*> nop
++0000b5fc <[^>]*> nop
++0000b600 <[^>]*> nop
++0000b604 <[^>]*> nop
++0000b608 <[^>]*> nop
++0000b60c <[^>]*> nop
++0000b610 <[^>]*> nop
++0000b614 <[^>]*> nop
++0000b618 <[^>]*> nop
++0000b61c <[^>]*> nop
++0000b620 <[^>]*> nop
++0000b624 <[^>]*> nop
++0000b628 <[^>]*> nop
++0000b62c <[^>]*> nop
++0000b630 <[^>]*> nop
++0000b634 <[^>]*> nop
++0000b638 <[^>]*> nop
++0000b63c <[^>]*> nop
++0000b640 <[^>]*> nop
++0000b644 <[^>]*> nop
++0000b648 <[^>]*> nop
++0000b64c <[^>]*> nop
++0000b650 <[^>]*> nop
++0000b654 <[^>]*> nop
++0000b658 <[^>]*> nop
++0000b65c <[^>]*> nop
++0000b660 <[^>]*> nop
++0000b664 <[^>]*> nop
++0000b668 <[^>]*> nop
++0000b66c <[^>]*> nop
++0000b670 <[^>]*> nop
++0000b674 <[^>]*> nop
++0000b678 <[^>]*> nop
++0000b67c <[^>]*> nop
++0000b680 <[^>]*> nop
++0000b684 <[^>]*> nop
++0000b688 <[^>]*> nop
++0000b68c <[^>]*> nop
++0000b690 <[^>]*> nop
++0000b694 <[^>]*> nop
++0000b698 <[^>]*> nop
++0000b69c <[^>]*> nop
++0000b6a0 <[^>]*> nop
++0000b6a4 <[^>]*> nop
++0000b6a8 <[^>]*> nop
++0000b6ac <[^>]*> nop
++0000b6b0 <[^>]*> nop
++0000b6b4 <[^>]*> nop
++0000b6b8 <[^>]*> nop
++0000b6bc <[^>]*> nop
++0000b6c0 <[^>]*> nop
++0000b6c4 <[^>]*> nop
++0000b6c8 <[^>]*> nop
++0000b6cc <[^>]*> nop
++0000b6d0 <[^>]*> nop
++0000b6d4 <[^>]*> nop
++0000b6d8 <[^>]*> nop
++0000b6dc <[^>]*> nop
++0000b6e0 <[^>]*> nop
++0000b6e4 <[^>]*> nop
++0000b6e8 <[^>]*> nop
++0000b6ec <[^>]*> nop
++0000b6f0 <[^>]*> nop
++0000b6f4 <[^>]*> nop
++0000b6f8 <[^>]*> nop
++0000b6fc <[^>]*> nop
++0000b700 <[^>]*> nop
++0000b704 <[^>]*> nop
++0000b708 <[^>]*> nop
++0000b70c <[^>]*> nop
++0000b710 <[^>]*> nop
++0000b714 <[^>]*> nop
++0000b718 <[^>]*> nop
++0000b71c <[^>]*> nop
++0000b720 <[^>]*> nop
++0000b724 <[^>]*> nop
++0000b728 <[^>]*> nop
++0000b72c <[^>]*> nop
++0000b730 <[^>]*> nop
++0000b734 <[^>]*> nop
++0000b738 <[^>]*> nop
++0000b73c <[^>]*> nop
++0000b740 <[^>]*> nop
++0000b744 <[^>]*> nop
++0000b748 <[^>]*> nop
++0000b74c <[^>]*> nop
++0000b750 <[^>]*> nop
++0000b754 <[^>]*> nop
++0000b758 <[^>]*> nop
++0000b75c <[^>]*> nop
++0000b760 <[^>]*> nop
++0000b764 <[^>]*> nop
++0000b768 <[^>]*> nop
++0000b76c <[^>]*> nop
++0000b770 <[^>]*> nop
++0000b774 <[^>]*> nop
++0000b778 <[^>]*> nop
++0000b77c <[^>]*> nop
++0000b780 <[^>]*> nop
++0000b784 <[^>]*> nop
++0000b788 <[^>]*> nop
++0000b78c <[^>]*> nop
++0000b790 <[^>]*> nop
++0000b794 <[^>]*> nop
++0000b798 <[^>]*> nop
++0000b79c <[^>]*> nop
++0000b7a0 <[^>]*> nop
++0000b7a4 <[^>]*> nop
++0000b7a8 <[^>]*> nop
++0000b7ac <[^>]*> nop
++0000b7b0 <[^>]*> nop
++0000b7b4 <[^>]*> nop
++0000b7b8 <[^>]*> nop
++0000b7bc <[^>]*> nop
++0000b7c0 <[^>]*> nop
++0000b7c4 <[^>]*> nop
++0000b7c8 <[^>]*> nop
++0000b7cc <[^>]*> nop
++0000b7d0 <[^>]*> nop
++0000b7d4 <[^>]*> nop
++0000b7d8 <[^>]*> nop
++0000b7dc <[^>]*> nop
++0000b7e0 <[^>]*> nop
++0000b7e4 <[^>]*> nop
++0000b7e8 <[^>]*> nop
++0000b7ec <[^>]*> nop
++0000b7f0 <[^>]*> nop
++0000b7f4 <[^>]*> nop
++0000b7f8 <[^>]*> nop
++0000b7fc <[^>]*> nop
++0000b800 <[^>]*> nop
++0000b804 <[^>]*> nop
++0000b808 <[^>]*> nop
++0000b80c <[^>]*> nop
++0000b810 <[^>]*> nop
++0000b814 <[^>]*> nop
++0000b818 <[^>]*> nop
++0000b81c <[^>]*> nop
++0000b820 <[^>]*> nop
++0000b824 <[^>]*> nop
++0000b828 <[^>]*> nop
++0000b82c <[^>]*> nop
++0000b830 <[^>]*> nop
++0000b834 <[^>]*> nop
++0000b838 <[^>]*> nop
++0000b83c <[^>]*> nop
++0000b840 <[^>]*> nop
++0000b844 <[^>]*> nop
++0000b848 <[^>]*> nop
++0000b84c <[^>]*> nop
++0000b850 <[^>]*> nop
++0000b854 <[^>]*> nop
++0000b858 <[^>]*> nop
++0000b85c <[^>]*> nop
++0000b860 <[^>]*> nop
++0000b864 <[^>]*> nop
++0000b868 <[^>]*> nop
++0000b86c <[^>]*> nop
++0000b870 <[^>]*> nop
++0000b874 <[^>]*> nop
++0000b878 <[^>]*> nop
++0000b87c <[^>]*> nop
++0000b880 <[^>]*> nop
++0000b884 <[^>]*> nop
++0000b888 <[^>]*> nop
++0000b88c <[^>]*> nop
++0000b890 <[^>]*> nop
++0000b894 <[^>]*> nop
++0000b898 <[^>]*> nop
++0000b89c <[^>]*> nop
++0000b8a0 <[^>]*> nop
++0000b8a4 <[^>]*> nop
++0000b8a8 <[^>]*> nop
++0000b8ac <[^>]*> nop
++0000b8b0 <[^>]*> nop
++0000b8b4 <[^>]*> nop
++0000b8b8 <[^>]*> nop
++0000b8bc <[^>]*> nop
++0000b8c0 <[^>]*> nop
++0000b8c4 <[^>]*> nop
++0000b8c8 <[^>]*> nop
++0000b8cc <[^>]*> nop
++0000b8d0 <[^>]*> nop
++0000b8d4 <[^>]*> nop
++0000b8d8 <[^>]*> nop
++0000b8dc <[^>]*> nop
++0000b8e0 <[^>]*> nop
++0000b8e4 <[^>]*> nop
++0000b8e8 <[^>]*> nop
++0000b8ec <[^>]*> nop
++0000b8f0 <[^>]*> nop
++0000b8f4 <[^>]*> nop
++0000b8f8 <[^>]*> nop
++0000b8fc <[^>]*> nop
++0000b900 <[^>]*> nop
++0000b904 <[^>]*> nop
++0000b908 <[^>]*> nop
++0000b90c <[^>]*> nop
++0000b910 <[^>]*> nop
++0000b914 <[^>]*> nop
++0000b918 <[^>]*> nop
++0000b91c <[^>]*> nop
++0000b920 <[^>]*> nop
++0000b924 <[^>]*> nop
++0000b928 <[^>]*> nop
++0000b92c <[^>]*> nop
++0000b930 <[^>]*> nop
++0000b934 <[^>]*> nop
++0000b938 <[^>]*> nop
++0000b93c <[^>]*> nop
++0000b940 <[^>]*> nop
++0000b944 <[^>]*> nop
++0000b948 <[^>]*> nop
++0000b94c <[^>]*> nop
++0000b950 <[^>]*> nop
++0000b954 <[^>]*> nop
++0000b958 <[^>]*> nop
++0000b95c <[^>]*> nop
++0000b960 <[^>]*> nop
++0000b964 <[^>]*> nop
++0000b968 <[^>]*> nop
++0000b96c <[^>]*> nop
++0000b970 <[^>]*> nop
++0000b974 <[^>]*> nop
++0000b978 <[^>]*> nop
++0000b97c <[^>]*> nop
++0000b980 <[^>]*> nop
++0000b984 <[^>]*> nop
++0000b988 <[^>]*> nop
++0000b98c <[^>]*> nop
++0000b990 <[^>]*> nop
++0000b994 <[^>]*> nop
++0000b998 <[^>]*> nop
++0000b99c <[^>]*> nop
++0000b9a0 <[^>]*> nop
++0000b9a4 <[^>]*> nop
++0000b9a8 <[^>]*> nop
++0000b9ac <[^>]*> nop
++0000b9b0 <[^>]*> nop
++0000b9b4 <[^>]*> nop
++0000b9b8 <[^>]*> nop
++0000b9bc <[^>]*> nop
++0000b9c0 <[^>]*> nop
++0000b9c4 <[^>]*> nop
++0000b9c8 <[^>]*> nop
++0000b9cc <[^>]*> nop
++0000b9d0 <[^>]*> nop
++0000b9d4 <[^>]*> nop
++0000b9d8 <[^>]*> nop
++0000b9dc <[^>]*> nop
++0000b9e0 <[^>]*> nop
++0000b9e4 <[^>]*> nop
++0000b9e8 <[^>]*> nop
++0000b9ec <[^>]*> nop
++0000b9f0 <[^>]*> nop
++0000b9f4 <[^>]*> nop
++0000b9f8 <[^>]*> nop
++0000b9fc <[^>]*> nop
++0000ba00 <[^>]*> nop
++0000ba04 <[^>]*> nop
++0000ba08 <[^>]*> nop
++0000ba0c <[^>]*> nop
++0000ba10 <[^>]*> nop
++0000ba14 <[^>]*> nop
++0000ba18 <[^>]*> nop
++0000ba1c <[^>]*> nop
++0000ba20 <[^>]*> nop
++0000ba24 <[^>]*> nop
++0000ba28 <[^>]*> nop
++0000ba2c <[^>]*> nop
++0000ba30 <[^>]*> nop
++0000ba34 <[^>]*> nop
++0000ba38 <[^>]*> nop
++0000ba3c <[^>]*> nop
++0000ba40 <[^>]*> nop
++0000ba44 <[^>]*> nop
++0000ba48 <[^>]*> nop
++0000ba4c <[^>]*> nop
++0000ba50 <[^>]*> nop
++0000ba54 <[^>]*> nop
++0000ba58 <[^>]*> nop
++0000ba5c <[^>]*> nop
++0000ba60 <[^>]*> nop
++0000ba64 <[^>]*> nop
++0000ba68 <[^>]*> nop
++0000ba6c <[^>]*> nop
++0000ba70 <[^>]*> nop
++0000ba74 <[^>]*> nop
++0000ba78 <[^>]*> nop
++0000ba7c <[^>]*> nop
++0000ba80 <[^>]*> nop
++0000ba84 <[^>]*> nop
++0000ba88 <[^>]*> nop
++0000ba8c <[^>]*> nop
++0000ba90 <[^>]*> nop
++0000ba94 <[^>]*> nop
++0000ba98 <[^>]*> nop
++0000ba9c <[^>]*> nop
++0000baa0 <[^>]*> nop
++0000baa4 <[^>]*> nop
++0000baa8 <[^>]*> nop
++0000baac <[^>]*> nop
++0000bab0 <[^>]*> nop
++0000bab4 <[^>]*> nop
++0000bab8 <[^>]*> nop
++0000babc <[^>]*> nop
++0000bac0 <[^>]*> nop
++0000bac4 <[^>]*> nop
++0000bac8 <[^>]*> nop
++0000bacc <[^>]*> nop
++0000bad0 <[^>]*> nop
++0000bad4 <[^>]*> nop
++0000bad8 <[^>]*> nop
++0000badc <[^>]*> nop
++0000bae0 <[^>]*> nop
++0000bae4 <[^>]*> nop
++0000bae8 <[^>]*> nop
++0000baec <[^>]*> nop
++0000baf0 <[^>]*> nop
++0000baf4 <[^>]*> nop
++0000baf8 <[^>]*> nop
++0000bafc <[^>]*> nop
++0000bb00 <[^>]*> nop
++0000bb04 <[^>]*> nop
++0000bb08 <[^>]*> nop
++0000bb0c <[^>]*> nop
++0000bb10 <[^>]*> nop
++0000bb14 <[^>]*> nop
++0000bb18 <[^>]*> nop
++0000bb1c <[^>]*> nop
++0000bb20 <[^>]*> nop
++0000bb24 <[^>]*> nop
++0000bb28 <[^>]*> nop
++0000bb2c <[^>]*> nop
++0000bb30 <[^>]*> nop
++0000bb34 <[^>]*> nop
++0000bb38 <[^>]*> nop
++0000bb3c <[^>]*> nop
++0000bb40 <[^>]*> nop
++0000bb44 <[^>]*> nop
++0000bb48 <[^>]*> nop
++0000bb4c <[^>]*> nop
++0000bb50 <[^>]*> nop
++0000bb54 <[^>]*> nop
++0000bb58 <[^>]*> nop
++0000bb5c <[^>]*> nop
++0000bb60 <[^>]*> nop
++0000bb64 <[^>]*> nop
++0000bb68 <[^>]*> nop
++0000bb6c <[^>]*> nop
++0000bb70 <[^>]*> nop
++0000bb74 <[^>]*> nop
++0000bb78 <[^>]*> nop
++0000bb7c <[^>]*> nop
++0000bb80 <[^>]*> nop
++0000bb84 <[^>]*> nop
++0000bb88 <[^>]*> nop
++0000bb8c <[^>]*> nop
++0000bb90 <[^>]*> nop
++0000bb94 <[^>]*> nop
++0000bb98 <[^>]*> nop
++0000bb9c <[^>]*> nop
++0000bba0 <[^>]*> nop
++0000bba4 <[^>]*> nop
++0000bba8 <[^>]*> nop
++0000bbac <[^>]*> nop
++0000bbb0 <[^>]*> nop
++0000bbb4 <[^>]*> nop
++0000bbb8 <[^>]*> nop
++0000bbbc <[^>]*> nop
++0000bbc0 <[^>]*> nop
++0000bbc4 <[^>]*> nop
++0000bbc8 <[^>]*> nop
++0000bbcc <[^>]*> nop
++0000bbd0 <[^>]*> nop
++0000bbd4 <[^>]*> nop
++0000bbd8 <[^>]*> nop
++0000bbdc <[^>]*> nop
++0000bbe0 <[^>]*> nop
++0000bbe4 <[^>]*> nop
++0000bbe8 <[^>]*> nop
++0000bbec <[^>]*> nop
++0000bbf0 <[^>]*> nop
++0000bbf4 <[^>]*> nop
++0000bbf8 <[^>]*> nop
++0000bbfc <[^>]*> nop
++0000bc00 <[^>]*> nop
++0000bc04 <[^>]*> nop
++0000bc08 <[^>]*> nop
++0000bc0c <[^>]*> nop
++0000bc10 <[^>]*> nop
++0000bc14 <[^>]*> nop
++0000bc18 <[^>]*> nop
++0000bc1c <[^>]*> nop
++0000bc20 <[^>]*> nop
++0000bc24 <[^>]*> nop
++0000bc28 <[^>]*> nop
++0000bc2c <[^>]*> nop
++0000bc30 <[^>]*> nop
++0000bc34 <[^>]*> nop
++0000bc38 <[^>]*> nop
++0000bc3c <[^>]*> nop
++0000bc40 <[^>]*> nop
++0000bc44 <[^>]*> nop
++0000bc48 <[^>]*> nop
++0000bc4c <[^>]*> nop
++0000bc50 <[^>]*> nop
++0000bc54 <[^>]*> nop
++0000bc58 <[^>]*> nop
++0000bc5c <[^>]*> nop
++0000bc60 <[^>]*> nop
++0000bc64 <[^>]*> nop
++0000bc68 <[^>]*> nop
++0000bc6c <[^>]*> nop
++0000bc70 <[^>]*> nop
++0000bc74 <[^>]*> nop
++0000bc78 <[^>]*> nop
++0000bc7c <[^>]*> nop
++0000bc80 <[^>]*> nop
++0000bc84 <[^>]*> nop
++0000bc88 <[^>]*> nop
++0000bc8c <[^>]*> nop
++0000bc90 <[^>]*> nop
++0000bc94 <[^>]*> nop
++0000bc98 <[^>]*> nop
++0000bc9c <[^>]*> nop
++0000bca0 <[^>]*> nop
++0000bca4 <[^>]*> nop
++0000bca8 <[^>]*> nop
++0000bcac <[^>]*> nop
++0000bcb0 <[^>]*> nop
++0000bcb4 <[^>]*> nop
++0000bcb8 <[^>]*> nop
++0000bcbc <[^>]*> nop
++0000bcc0 <[^>]*> nop
++0000bcc4 <[^>]*> nop
++0000bcc8 <[^>]*> nop
++0000bccc <[^>]*> nop
++0000bcd0 <[^>]*> nop
++0000bcd4 <[^>]*> nop
++0000bcd8 <[^>]*> nop
++0000bcdc <[^>]*> nop
++0000bce0 <[^>]*> nop
++0000bce4 <[^>]*> nop
++0000bce8 <[^>]*> nop
++0000bcec <[^>]*> nop
++0000bcf0 <[^>]*> nop
++0000bcf4 <[^>]*> nop
++0000bcf8 <[^>]*> nop
++0000bcfc <[^>]*> nop
++0000bd00 <[^>]*> nop
++0000bd04 <[^>]*> nop
++0000bd08 <[^>]*> nop
++0000bd0c <[^>]*> nop
++0000bd10 <[^>]*> nop
++0000bd14 <[^>]*> nop
++0000bd18 <[^>]*> nop
++0000bd1c <[^>]*> nop
++0000bd20 <[^>]*> nop
++0000bd24 <[^>]*> nop
++0000bd28 <[^>]*> nop
++0000bd2c <[^>]*> nop
++0000bd30 <[^>]*> nop
++0000bd34 <[^>]*> nop
++0000bd38 <[^>]*> nop
++0000bd3c <[^>]*> nop
++0000bd40 <[^>]*> nop
++0000bd44 <[^>]*> nop
++0000bd48 <[^>]*> nop
++0000bd4c <[^>]*> nop
++0000bd50 <[^>]*> nop
++0000bd54 <[^>]*> nop
++0000bd58 <[^>]*> nop
++0000bd5c <[^>]*> nop
++0000bd60 <[^>]*> nop
++0000bd64 <[^>]*> nop
++0000bd68 <[^>]*> nop
++0000bd6c <[^>]*> nop
++0000bd70 <[^>]*> nop
++0000bd74 <[^>]*> nop
++0000bd78 <[^>]*> nop
++0000bd7c <[^>]*> nop
++0000bd80 <[^>]*> nop
++0000bd84 <[^>]*> nop
++0000bd88 <[^>]*> nop
++0000bd8c <[^>]*> nop
++0000bd90 <[^>]*> nop
++0000bd94 <[^>]*> nop
++0000bd98 <[^>]*> nop
++0000bd9c <[^>]*> nop
++0000bda0 <[^>]*> nop
++0000bda4 <[^>]*> nop
++0000bda8 <[^>]*> nop
++0000bdac <[^>]*> nop
++0000bdb0 <[^>]*> nop
++0000bdb4 <[^>]*> nop
++0000bdb8 <[^>]*> nop
++0000bdbc <[^>]*> nop
++0000bdc0 <[^>]*> nop
++0000bdc4 <[^>]*> nop
++0000bdc8 <[^>]*> nop
++0000bdcc <[^>]*> nop
++0000bdd0 <[^>]*> nop
++0000bdd4 <[^>]*> nop
++0000bdd8 <[^>]*> nop
++0000bddc <[^>]*> nop
++0000bde0 <[^>]*> nop
++0000bde4 <[^>]*> nop
++0000bde8 <[^>]*> nop
++0000bdec <[^>]*> nop
++0000bdf0 <[^>]*> nop
++0000bdf4 <[^>]*> nop
++0000bdf8 <[^>]*> nop
++0000bdfc <[^>]*> nop
++0000be00 <[^>]*> nop
++0000be04 <[^>]*> nop
++0000be08 <[^>]*> nop
++0000be0c <[^>]*> nop
++0000be10 <[^>]*> nop
++0000be14 <[^>]*> nop
++0000be18 <[^>]*> nop
++0000be1c <[^>]*> nop
++0000be20 <[^>]*> nop
++0000be24 <[^>]*> nop
++0000be28 <[^>]*> nop
++0000be2c <[^>]*> nop
++0000be30 <[^>]*> nop
++0000be34 <[^>]*> nop
++0000be38 <[^>]*> nop
++0000be3c <[^>]*> nop
++0000be40 <[^>]*> nop
++0000be44 <[^>]*> nop
++0000be48 <[^>]*> nop
++0000be4c <[^>]*> nop
++0000be50 <[^>]*> nop
++0000be54 <[^>]*> nop
++0000be58 <[^>]*> nop
++0000be5c <[^>]*> nop
++0000be60 <[^>]*> nop
++0000be64 <[^>]*> nop
++0000be68 <[^>]*> nop
++0000be6c <[^>]*> nop
++0000be70 <[^>]*> nop
++0000be74 <[^>]*> nop
++0000be78 <[^>]*> nop
++0000be7c <[^>]*> nop
++0000be80 <[^>]*> nop
++0000be84 <[^>]*> nop
++0000be88 <[^>]*> nop
++0000be8c <[^>]*> nop
++0000be90 <[^>]*> nop
++0000be94 <[^>]*> nop
++0000be98 <[^>]*> nop
++0000be9c <[^>]*> nop
++0000bea0 <[^>]*> nop
++0000bea4 <[^>]*> nop
++0000bea8 <[^>]*> nop
++0000beac <[^>]*> nop
++0000beb0 <[^>]*> nop
++0000beb4 <[^>]*> nop
++0000beb8 <[^>]*> nop
++0000bebc <[^>]*> nop
++0000bec0 <[^>]*> nop
++0000bec4 <[^>]*> nop
++0000bec8 <[^>]*> nop
++0000becc <[^>]*> nop
++0000bed0 <[^>]*> nop
++0000bed4 <[^>]*> nop
++0000bed8 <[^>]*> nop
++0000bedc <[^>]*> nop
++0000bee0 <[^>]*> nop
++0000bee4 <[^>]*> nop
++0000bee8 <[^>]*> nop
++0000beec <[^>]*> nop
++0000bef0 <[^>]*> nop
++0000bef4 <[^>]*> nop
++0000bef8 <[^>]*> nop
++0000befc <[^>]*> nop
++0000bf00 <[^>]*> nop
++0000bf04 <[^>]*> nop
++0000bf08 <[^>]*> nop
++0000bf0c <[^>]*> nop
++0000bf10 <[^>]*> nop
++0000bf14 <[^>]*> nop
++0000bf18 <[^>]*> nop
++0000bf1c <[^>]*> nop
++0000bf20 <[^>]*> nop
++0000bf24 <[^>]*> nop
++0000bf28 <[^>]*> nop
++0000bf2c <[^>]*> nop
++0000bf30 <[^>]*> nop
++0000bf34 <[^>]*> nop
++0000bf38 <[^>]*> nop
++0000bf3c <[^>]*> nop
++0000bf40 <[^>]*> nop
++0000bf44 <[^>]*> nop
++0000bf48 <[^>]*> nop
++0000bf4c <[^>]*> nop
++0000bf50 <[^>]*> nop
++0000bf54 <[^>]*> nop
++0000bf58 <[^>]*> nop
++0000bf5c <[^>]*> nop
++0000bf60 <[^>]*> nop
++0000bf64 <[^>]*> nop
++0000bf68 <[^>]*> nop
++0000bf6c <[^>]*> nop
++0000bf70 <[^>]*> nop
++0000bf74 <[^>]*> nop
++0000bf78 <[^>]*> nop
++0000bf7c <[^>]*> nop
++0000bf80 <[^>]*> nop
++0000bf84 <[^>]*> nop
++0000bf88 <[^>]*> nop
++0000bf8c <[^>]*> nop
++0000bf90 <[^>]*> nop
++0000bf94 <[^>]*> nop
++0000bf98 <[^>]*> nop
++0000bf9c <[^>]*> nop
++0000bfa0 <[^>]*> nop
++0000bfa4 <[^>]*> nop
++0000bfa8 <[^>]*> nop
++0000bfac <[^>]*> nop
++0000bfb0 <[^>]*> nop
++0000bfb4 <[^>]*> nop
++0000bfb8 <[^>]*> nop
++0000bfbc <[^>]*> nop
++0000bfc0 <[^>]*> nop
++0000bfc4 <[^>]*> nop
++0000bfc8 <[^>]*> nop
++0000bfcc <[^>]*> nop
++0000bfd0 <[^>]*> nop
++0000bfd4 <[^>]*> nop
++0000bfd8 <[^>]*> nop
++0000bfdc <[^>]*> nop
++0000bfe0 <[^>]*> nop
++0000bfe4 <[^>]*> nop
++0000bfe8 <[^>]*> nop
++0000bfec <[^>]*> nop
++0000bff0 <[^>]*> nop
++0000bff4 <[^>]*> nop
++0000bff8 <[^>]*> nop
++0000bffc <[^>]*> nop
++0000c000 <[^>]*> nop
++0000c004 <[^>]*> nop
++0000c008 <[^>]*> nop
++0000c00c <[^>]*> nop
++0000c010 <[^>]*> nop
++0000c014 <[^>]*> nop
++0000c018 <[^>]*> nop
++0000c01c <[^>]*> nop
++0000c020 <[^>]*> nop
++0000c024 <[^>]*> nop
++0000c028 <[^>]*> nop
++0000c02c <[^>]*> nop
++0000c030 <[^>]*> nop
++0000c034 <[^>]*> nop
++0000c038 <[^>]*> nop
++0000c03c <[^>]*> nop
++0000c040 <[^>]*> nop
++0000c044 <[^>]*> nop
++0000c048 <[^>]*> nop
++0000c04c <[^>]*> nop
++0000c050 <[^>]*> nop
++0000c054 <[^>]*> nop
++0000c058 <[^>]*> nop
++0000c05c <[^>]*> nop
++0000c060 <[^>]*> nop
++0000c064 <[^>]*> nop
++0000c068 <[^>]*> nop
++0000c06c <[^>]*> nop
++0000c070 <[^>]*> nop
++0000c074 <[^>]*> nop
++0000c078 <[^>]*> nop
++0000c07c <[^>]*> nop
++0000c080 <[^>]*> nop
++0000c084 <[^>]*> nop
++0000c088 <[^>]*> nop
++0000c08c <[^>]*> nop
++0000c090 <[^>]*> nop
++0000c094 <[^>]*> nop
++0000c098 <[^>]*> nop
++0000c09c <[^>]*> nop
++0000c0a0 <[^>]*> nop
++0000c0a4 <[^>]*> nop
++0000c0a8 <[^>]*> nop
++0000c0ac <[^>]*> nop
++0000c0b0 <[^>]*> nop
++0000c0b4 <[^>]*> nop
++0000c0b8 <[^>]*> nop
++0000c0bc <[^>]*> nop
++0000c0c0 <[^>]*> nop
++0000c0c4 <[^>]*> nop
++0000c0c8 <[^>]*> nop
++0000c0cc <[^>]*> nop
++0000c0d0 <[^>]*> nop
++0000c0d4 <[^>]*> nop
++0000c0d8 <[^>]*> nop
++0000c0dc <[^>]*> nop
++0000c0e0 <[^>]*> nop
++0000c0e4 <[^>]*> nop
++0000c0e8 <[^>]*> nop
++0000c0ec <[^>]*> nop
++0000c0f0 <[^>]*> nop
++0000c0f4 <[^>]*> nop
++0000c0f8 <[^>]*> nop
++0000c0fc <[^>]*> nop
++0000c100 <[^>]*> nop
++0000c104 <[^>]*> nop
++0000c108 <[^>]*> nop
++0000c10c <[^>]*> nop
++0000c110 <[^>]*> nop
++0000c114 <[^>]*> nop
++0000c118 <[^>]*> nop
++0000c11c <[^>]*> nop
++0000c120 <[^>]*> nop
++0000c124 <[^>]*> nop
++0000c128 <[^>]*> nop
++0000c12c <[^>]*> nop
++0000c130 <[^>]*> nop
++0000c134 <[^>]*> nop
++0000c138 <[^>]*> nop
++0000c13c <[^>]*> nop
++0000c140 <[^>]*> nop
++0000c144 <[^>]*> nop
++0000c148 <[^>]*> nop
++0000c14c <[^>]*> nop
++0000c150 <[^>]*> nop
++0000c154 <[^>]*> nop
++0000c158 <[^>]*> nop
++0000c15c <[^>]*> nop
++0000c160 <[^>]*> nop
++0000c164 <[^>]*> nop
++0000c168 <[^>]*> nop
++0000c16c <[^>]*> nop
++0000c170 <[^>]*> nop
++0000c174 <[^>]*> nop
++0000c178 <[^>]*> nop
++0000c17c <[^>]*> nop
++0000c180 <[^>]*> nop
++0000c184 <[^>]*> nop
++0000c188 <[^>]*> nop
++0000c18c <[^>]*> nop
++0000c190 <[^>]*> nop
++0000c194 <[^>]*> nop
++0000c198 <[^>]*> nop
++0000c19c <[^>]*> nop
++0000c1a0 <[^>]*> nop
++0000c1a4 <[^>]*> nop
++0000c1a8 <[^>]*> nop
++0000c1ac <[^>]*> nop
++0000c1b0 <[^>]*> nop
++0000c1b4 <[^>]*> nop
++0000c1b8 <[^>]*> nop
++0000c1bc <[^>]*> nop
++0000c1c0 <[^>]*> nop
++0000c1c4 <[^>]*> nop
++0000c1c8 <[^>]*> nop
++0000c1cc <[^>]*> nop
++0000c1d0 <[^>]*> nop
++0000c1d4 <[^>]*> nop
++0000c1d8 <[^>]*> nop
++0000c1dc <[^>]*> nop
++0000c1e0 <[^>]*> nop
++0000c1e4 <[^>]*> nop
++0000c1e8 <[^>]*> nop
++0000c1ec <[^>]*> nop
++0000c1f0 <[^>]*> nop
++0000c1f4 <[^>]*> nop
++0000c1f8 <[^>]*> nop
++0000c1fc <[^>]*> nop
++0000c200 <[^>]*> nop
++0000c204 <[^>]*> nop
++0000c208 <[^>]*> nop
++0000c20c <[^>]*> nop
++0000c210 <[^>]*> nop
++0000c214 <[^>]*> nop
++0000c218 <[^>]*> nop
++0000c21c <[^>]*> nop
++0000c220 <[^>]*> nop
++0000c224 <[^>]*> nop
++0000c228 <[^>]*> nop
++0000c22c <[^>]*> nop
++0000c230 <[^>]*> nop
++0000c234 <[^>]*> nop
++0000c238 <[^>]*> nop
++0000c23c <[^>]*> nop
++0000c240 <[^>]*> nop
++0000c244 <[^>]*> nop
++0000c248 <[^>]*> nop
++0000c24c <[^>]*> nop
++0000c250 <[^>]*> nop
++0000c254 <[^>]*> nop
++0000c258 <[^>]*> nop
++0000c25c <[^>]*> nop
++0000c260 <[^>]*> nop
++0000c264 <[^>]*> nop
++0000c268 <[^>]*> nop
++0000c26c <[^>]*> nop
++0000c270 <[^>]*> nop
++0000c274 <[^>]*> nop
++0000c278 <[^>]*> nop
++0000c27c <[^>]*> nop
++0000c280 <[^>]*> nop
++0000c284 <[^>]*> nop
++0000c288 <[^>]*> nop
++0000c28c <[^>]*> nop
++0000c290 <[^>]*> nop
++0000c294 <[^>]*> nop
++0000c298 <[^>]*> nop
++0000c29c <[^>]*> nop
++0000c2a0 <[^>]*> nop
++0000c2a4 <[^>]*> nop
++0000c2a8 <[^>]*> nop
++0000c2ac <[^>]*> nop
++0000c2b0 <[^>]*> nop
++0000c2b4 <[^>]*> nop
++0000c2b8 <[^>]*> nop
++0000c2bc <[^>]*> nop
++0000c2c0 <[^>]*> nop
++0000c2c4 <[^>]*> nop
++0000c2c8 <[^>]*> nop
++0000c2cc <[^>]*> nop
++0000c2d0 <[^>]*> nop
++0000c2d4 <[^>]*> nop
++0000c2d8 <[^>]*> nop
++0000c2dc <[^>]*> nop
++0000c2e0 <[^>]*> nop
++0000c2e4 <[^>]*> nop
++0000c2e8 <[^>]*> nop
++0000c2ec <[^>]*> nop
++0000c2f0 <[^>]*> nop
++0000c2f4 <[^>]*> nop
++0000c2f8 <[^>]*> nop
++0000c2fc <[^>]*> nop
++0000c300 <[^>]*> nop
++0000c304 <[^>]*> nop
++0000c308 <[^>]*> nop
++0000c30c <[^>]*> nop
++0000c310 <[^>]*> nop
++0000c314 <[^>]*> nop
++0000c318 <[^>]*> nop
++0000c31c <[^>]*> nop
++0000c320 <[^>]*> nop
++0000c324 <[^>]*> nop
++0000c328 <[^>]*> nop
++0000c32c <[^>]*> nop
++0000c330 <[^>]*> nop
++0000c334 <[^>]*> nop
++0000c338 <[^>]*> nop
++0000c33c <[^>]*> nop
++0000c340 <[^>]*> nop
++0000c344 <[^>]*> nop
++0000c348 <[^>]*> nop
++0000c34c <[^>]*> nop
++0000c350 <[^>]*> nop
++0000c354 <[^>]*> nop
++0000c358 <[^>]*> nop
++0000c35c <[^>]*> nop
++0000c360 <[^>]*> nop
++0000c364 <[^>]*> nop
++0000c368 <[^>]*> nop
++0000c36c <[^>]*> nop
++0000c370 <[^>]*> nop
++0000c374 <[^>]*> nop
++0000c378 <[^>]*> nop
++0000c37c <[^>]*> nop
++0000c380 <[^>]*> nop
++0000c384 <[^>]*> nop
++0000c388 <[^>]*> nop
++0000c38c <[^>]*> nop
++0000c390 <[^>]*> nop
++0000c394 <[^>]*> nop
++0000c398 <[^>]*> nop
++0000c39c <[^>]*> nop
++0000c3a0 <[^>]*> nop
++0000c3a4 <[^>]*> nop
++0000c3a8 <[^>]*> nop
++0000c3ac <[^>]*> nop
++0000c3b0 <[^>]*> nop
++0000c3b4 <[^>]*> nop
++0000c3b8 <[^>]*> nop
++0000c3bc <[^>]*> nop
++0000c3c0 <[^>]*> nop
++0000c3c4 <[^>]*> nop
++0000c3c8 <[^>]*> nop
++0000c3cc <[^>]*> nop
++0000c3d0 <[^>]*> nop
++0000c3d4 <[^>]*> nop
++0000c3d8 <[^>]*> nop
++0000c3dc <[^>]*> nop
++0000c3e0 <[^>]*> nop
++0000c3e4 <[^>]*> nop
++0000c3e8 <[^>]*> nop
++0000c3ec <[^>]*> nop
++0000c3f0 <[^>]*> nop
++0000c3f4 <[^>]*> nop
++0000c3f8 <[^>]*> nop
++0000c3fc <[^>]*> nop
++0000c400 <[^>]*> nop
++0000c404 <[^>]*> nop
++0000c408 <[^>]*> nop
++0000c40c <[^>]*> nop
++0000c410 <[^>]*> nop
++0000c414 <[^>]*> nop
++0000c418 <[^>]*> nop
++0000c41c <[^>]*> nop
++0000c420 <[^>]*> nop
++0000c424 <[^>]*> nop
++0000c428 <[^>]*> nop
++0000c42c <[^>]*> nop
++0000c430 <[^>]*> nop
++0000c434 <[^>]*> nop
++0000c438 <[^>]*> nop
++0000c43c <[^>]*> nop
++0000c440 <[^>]*> nop
++0000c444 <[^>]*> nop
++0000c448 <[^>]*> nop
++0000c44c <[^>]*> nop
++0000c450 <[^>]*> nop
++0000c454 <[^>]*> nop
++0000c458 <[^>]*> nop
++0000c45c <[^>]*> nop
++0000c460 <[^>]*> nop
++0000c464 <[^>]*> nop
++0000c468 <[^>]*> nop
++0000c46c <[^>]*> nop
++0000c470 <[^>]*> nop
++0000c474 <[^>]*> nop
++0000c478 <[^>]*> nop
++0000c47c <[^>]*> nop
++0000c480 <[^>]*> nop
++0000c484 <[^>]*> nop
++0000c488 <[^>]*> nop
++0000c48c <[^>]*> nop
++0000c490 <[^>]*> nop
++0000c494 <[^>]*> nop
++0000c498 <[^>]*> nop
++0000c49c <[^>]*> nop
++0000c4a0 <[^>]*> nop
++0000c4a4 <[^>]*> nop
++0000c4a8 <[^>]*> nop
++0000c4ac <[^>]*> nop
++0000c4b0 <[^>]*> nop
++0000c4b4 <[^>]*> nop
++0000c4b8 <[^>]*> nop
++0000c4bc <[^>]*> nop
++0000c4c0 <[^>]*> nop
++0000c4c4 <[^>]*> nop
++0000c4c8 <[^>]*> nop
++0000c4cc <[^>]*> nop
++0000c4d0 <[^>]*> nop
++0000c4d4 <[^>]*> nop
++0000c4d8 <[^>]*> nop
++0000c4dc <[^>]*> nop
++0000c4e0 <[^>]*> nop
++0000c4e4 <[^>]*> nop
++0000c4e8 <[^>]*> nop
++0000c4ec <[^>]*> nop
++0000c4f0 <[^>]*> nop
++0000c4f4 <[^>]*> nop
++0000c4f8 <[^>]*> nop
++0000c4fc <[^>]*> nop
++0000c500 <[^>]*> nop
++0000c504 <[^>]*> nop
++0000c508 <[^>]*> nop
++0000c50c <[^>]*> nop
++0000c510 <[^>]*> nop
++0000c514 <[^>]*> nop
++0000c518 <[^>]*> nop
++0000c51c <[^>]*> nop
++0000c520 <[^>]*> nop
++0000c524 <[^>]*> nop
++0000c528 <[^>]*> nop
++0000c52c <[^>]*> nop
++0000c530 <[^>]*> nop
++0000c534 <[^>]*> nop
++0000c538 <[^>]*> nop
++0000c53c <[^>]*> nop
++0000c540 <[^>]*> nop
++0000c544 <[^>]*> nop
++0000c548 <[^>]*> nop
++0000c54c <[^>]*> nop
++0000c550 <[^>]*> nop
++0000c554 <[^>]*> nop
++0000c558 <[^>]*> nop
++0000c55c <[^>]*> nop
++0000c560 <[^>]*> nop
++0000c564 <[^>]*> nop
++0000c568 <[^>]*> nop
++0000c56c <[^>]*> nop
++0000c570 <[^>]*> nop
++0000c574 <[^>]*> nop
++0000c578 <[^>]*> nop
++0000c57c <[^>]*> nop
++0000c580 <[^>]*> nop
++0000c584 <[^>]*> nop
++0000c588 <[^>]*> nop
++0000c58c <[^>]*> nop
++0000c590 <[^>]*> nop
++0000c594 <[^>]*> nop
++0000c598 <[^>]*> nop
++0000c59c <[^>]*> nop
++0000c5a0 <[^>]*> nop
++0000c5a4 <[^>]*> nop
++0000c5a8 <[^>]*> nop
++0000c5ac <[^>]*> nop
++0000c5b0 <[^>]*> nop
++0000c5b4 <[^>]*> nop
++0000c5b8 <[^>]*> nop
++0000c5bc <[^>]*> nop
++0000c5c0 <[^>]*> nop
++0000c5c4 <[^>]*> nop
++0000c5c8 <[^>]*> nop
++0000c5cc <[^>]*> nop
++0000c5d0 <[^>]*> nop
++0000c5d4 <[^>]*> nop
++0000c5d8 <[^>]*> nop
++0000c5dc <[^>]*> nop
++0000c5e0 <[^>]*> nop
++0000c5e4 <[^>]*> nop
++0000c5e8 <[^>]*> nop
++0000c5ec <[^>]*> nop
++0000c5f0 <[^>]*> nop
++0000c5f4 <[^>]*> nop
++0000c5f8 <[^>]*> nop
++0000c5fc <[^>]*> nop
++0000c600 <[^>]*> nop
++0000c604 <[^>]*> nop
++0000c608 <[^>]*> nop
++0000c60c <[^>]*> nop
++0000c610 <[^>]*> nop
++0000c614 <[^>]*> nop
++0000c618 <[^>]*> nop
++0000c61c <[^>]*> nop
++0000c620 <[^>]*> nop
++0000c624 <[^>]*> nop
++0000c628 <[^>]*> nop
++0000c62c <[^>]*> nop
++0000c630 <[^>]*> nop
++0000c634 <[^>]*> nop
++0000c638 <[^>]*> nop
++0000c63c <[^>]*> nop
++0000c640 <[^>]*> nop
++0000c644 <[^>]*> nop
++0000c648 <[^>]*> nop
++0000c64c <[^>]*> nop
++0000c650 <[^>]*> nop
++0000c654 <[^>]*> nop
++0000c658 <[^>]*> nop
++0000c65c <[^>]*> nop
++0000c660 <[^>]*> nop
++0000c664 <[^>]*> nop
++0000c668 <[^>]*> nop
++0000c66c <[^>]*> nop
++0000c670 <[^>]*> nop
++0000c674 <[^>]*> nop
++0000c678 <[^>]*> nop
++0000c67c <[^>]*> nop
++0000c680 <[^>]*> nop
++0000c684 <[^>]*> nop
++0000c688 <[^>]*> nop
++0000c68c <[^>]*> nop
++0000c690 <[^>]*> nop
++0000c694 <[^>]*> nop
++0000c698 <[^>]*> nop
++0000c69c <[^>]*> nop
++0000c6a0 <[^>]*> nop
++0000c6a4 <[^>]*> nop
++0000c6a8 <[^>]*> nop
++0000c6ac <[^>]*> nop
++0000c6b0 <[^>]*> nop
++0000c6b4 <[^>]*> nop
++0000c6b8 <[^>]*> nop
++0000c6bc <[^>]*> nop
++0000c6c0 <[^>]*> nop
++0000c6c4 <[^>]*> nop
++0000c6c8 <[^>]*> nop
++0000c6cc <[^>]*> nop
++0000c6d0 <[^>]*> nop
++0000c6d4 <[^>]*> nop
++0000c6d8 <[^>]*> nop
++0000c6dc <[^>]*> nop
++0000c6e0 <[^>]*> nop
++0000c6e4 <[^>]*> nop
++0000c6e8 <[^>]*> nop
++0000c6ec <[^>]*> nop
++0000c6f0 <[^>]*> nop
++0000c6f4 <[^>]*> nop
++0000c6f8 <[^>]*> nop
++0000c6fc <[^>]*> nop
++0000c700 <[^>]*> nop
++0000c704 <[^>]*> nop
++0000c708 <[^>]*> nop
++0000c70c <[^>]*> nop
++0000c710 <[^>]*> nop
++0000c714 <[^>]*> nop
++0000c718 <[^>]*> nop
++0000c71c <[^>]*> nop
++0000c720 <[^>]*> nop
++0000c724 <[^>]*> nop
++0000c728 <[^>]*> nop
++0000c72c <[^>]*> nop
++0000c730 <[^>]*> nop
++0000c734 <[^>]*> nop
++0000c738 <[^>]*> nop
++0000c73c <[^>]*> nop
++0000c740 <[^>]*> nop
++0000c744 <[^>]*> nop
++0000c748 <[^>]*> nop
++0000c74c <[^>]*> nop
++0000c750 <[^>]*> nop
++0000c754 <[^>]*> nop
++0000c758 <[^>]*> nop
++0000c75c <[^>]*> nop
++0000c760 <[^>]*> nop
++0000c764 <[^>]*> nop
++0000c768 <[^>]*> nop
++0000c76c <[^>]*> nop
++0000c770 <[^>]*> nop
++0000c774 <[^>]*> nop
++0000c778 <[^>]*> nop
++0000c77c <[^>]*> nop
++0000c780 <[^>]*> nop
++0000c784 <[^>]*> nop
++0000c788 <[^>]*> nop
++0000c78c <[^>]*> nop
++0000c790 <[^>]*> nop
++0000c794 <[^>]*> nop
++0000c798 <[^>]*> nop
++0000c79c <[^>]*> nop
++0000c7a0 <[^>]*> nop
++0000c7a4 <[^>]*> nop
++0000c7a8 <[^>]*> nop
++0000c7ac <[^>]*> nop
++0000c7b0 <[^>]*> nop
++0000c7b4 <[^>]*> nop
++0000c7b8 <[^>]*> nop
++0000c7bc <[^>]*> nop
++0000c7c0 <[^>]*> nop
++0000c7c4 <[^>]*> nop
++0000c7c8 <[^>]*> nop
++0000c7cc <[^>]*> nop
++0000c7d0 <[^>]*> nop
++0000c7d4 <[^>]*> nop
++0000c7d8 <[^>]*> nop
++0000c7dc <[^>]*> nop
++0000c7e0 <[^>]*> nop
++0000c7e4 <[^>]*> nop
++0000c7e8 <[^>]*> nop
++0000c7ec <[^>]*> nop
++0000c7f0 <[^>]*> nop
++0000c7f4 <[^>]*> nop
++0000c7f8 <[^>]*> nop
++0000c7fc <[^>]*> nop
++0000c800 <[^>]*> nop
++0000c804 <[^>]*> nop
++0000c808 <[^>]*> nop
++0000c80c <[^>]*> nop
++0000c810 <[^>]*> nop
++0000c814 <[^>]*> nop
++0000c818 <[^>]*> nop
++0000c81c <[^>]*> nop
++0000c820 <[^>]*> nop
++0000c824 <[^>]*> nop
++0000c828 <[^>]*> nop
++0000c82c <[^>]*> nop
++0000c830 <[^>]*> nop
++0000c834 <[^>]*> nop
++0000c838 <[^>]*> nop
++0000c83c <[^>]*> nop
++0000c840 <[^>]*> nop
++0000c844 <[^>]*> nop
++0000c848 <[^>]*> nop
++0000c84c <[^>]*> nop
++0000c850 <[^>]*> nop
++0000c854 <[^>]*> nop
++0000c858 <[^>]*> nop
++0000c85c <[^>]*> nop
++0000c860 <[^>]*> nop
++0000c864 <[^>]*> nop
++0000c868 <[^>]*> nop
++0000c86c <[^>]*> nop
++0000c870 <[^>]*> nop
++0000c874 <[^>]*> nop
++0000c878 <[^>]*> nop
++0000c87c <[^>]*> nop
++0000c880 <[^>]*> nop
++0000c884 <[^>]*> nop
++0000c888 <[^>]*> nop
++0000c88c <[^>]*> nop
++0000c890 <[^>]*> nop
++0000c894 <[^>]*> nop
++0000c898 <[^>]*> nop
++0000c89c <[^>]*> nop
++0000c8a0 <[^>]*> nop
++0000c8a4 <[^>]*> nop
++0000c8a8 <[^>]*> nop
++0000c8ac <[^>]*> nop
++0000c8b0 <[^>]*> nop
++0000c8b4 <[^>]*> nop
++0000c8b8 <[^>]*> nop
++0000c8bc <[^>]*> nop
++0000c8c0 <[^>]*> nop
++0000c8c4 <[^>]*> nop
++0000c8c8 <[^>]*> nop
++0000c8cc <[^>]*> nop
++0000c8d0 <[^>]*> nop
++0000c8d4 <[^>]*> nop
++0000c8d8 <[^>]*> nop
++0000c8dc <[^>]*> nop
++0000c8e0 <[^>]*> nop
++0000c8e4 <[^>]*> nop
++0000c8e8 <[^>]*> nop
++0000c8ec <[^>]*> nop
++0000c8f0 <[^>]*> nop
++0000c8f4 <[^>]*> nop
++0000c8f8 <[^>]*> nop
++0000c8fc <[^>]*> nop
++0000c900 <[^>]*> nop
++0000c904 <[^>]*> nop
++0000c908 <[^>]*> nop
++0000c90c <[^>]*> nop
++0000c910 <[^>]*> nop
++0000c914 <[^>]*> nop
++0000c918 <[^>]*> nop
++0000c91c <[^>]*> nop
++0000c920 <[^>]*> nop
++0000c924 <[^>]*> nop
++0000c928 <[^>]*> nop
++0000c92c <[^>]*> nop
++0000c930 <[^>]*> nop
++0000c934 <[^>]*> nop
++0000c938 <[^>]*> nop
++0000c93c <[^>]*> nop
++0000c940 <[^>]*> nop
++0000c944 <[^>]*> nop
++0000c948 <[^>]*> nop
++0000c94c <[^>]*> nop
++0000c950 <[^>]*> nop
++0000c954 <[^>]*> nop
++0000c958 <[^>]*> nop
++0000c95c <[^>]*> nop
++0000c960 <[^>]*> nop
++0000c964 <[^>]*> nop
++0000c968 <[^>]*> nop
++0000c96c <[^>]*> nop
++0000c970 <[^>]*> nop
++0000c974 <[^>]*> nop
++0000c978 <[^>]*> nop
++0000c97c <[^>]*> nop
++0000c980 <[^>]*> nop
++0000c984 <[^>]*> nop
++0000c988 <[^>]*> nop
++0000c98c <[^>]*> nop
++0000c990 <[^>]*> nop
++0000c994 <[^>]*> nop
++0000c998 <[^>]*> nop
++0000c99c <[^>]*> nop
++0000c9a0 <[^>]*> nop
++0000c9a4 <[^>]*> nop
++0000c9a8 <[^>]*> nop
++0000c9ac <[^>]*> nop
++0000c9b0 <[^>]*> nop
++0000c9b4 <[^>]*> nop
++0000c9b8 <[^>]*> nop
++0000c9bc <[^>]*> nop
++0000c9c0 <[^>]*> nop
++0000c9c4 <[^>]*> nop
++0000c9c8 <[^>]*> nop
++0000c9cc <[^>]*> nop
++0000c9d0 <[^>]*> nop
++0000c9d4 <[^>]*> nop
++0000c9d8 <[^>]*> nop
++0000c9dc <[^>]*> nop
++0000c9e0 <[^>]*> nop
++0000c9e4 <[^>]*> nop
++0000c9e8 <[^>]*> nop
++0000c9ec <[^>]*> nop
++0000c9f0 <[^>]*> nop
++0000c9f4 <[^>]*> nop
++0000c9f8 <[^>]*> nop
++0000c9fc <[^>]*> nop
++0000ca00 <[^>]*> nop
++0000ca04 <[^>]*> nop
++0000ca08 <[^>]*> nop
++0000ca0c <[^>]*> nop
++0000ca10 <[^>]*> nop
++0000ca14 <[^>]*> nop
++0000ca18 <[^>]*> nop
++0000ca1c <[^>]*> nop
++0000ca20 <[^>]*> nop
++0000ca24 <[^>]*> nop
++0000ca28 <[^>]*> nop
++0000ca2c <[^>]*> nop
++0000ca30 <[^>]*> nop
++0000ca34 <[^>]*> nop
++0000ca38 <[^>]*> nop
++0000ca3c <[^>]*> nop
++0000ca40 <[^>]*> nop
++0000ca44 <[^>]*> nop
++0000ca48 <[^>]*> nop
++0000ca4c <[^>]*> nop
++0000ca50 <[^>]*> nop
++0000ca54 <[^>]*> nop
++0000ca58 <[^>]*> nop
++0000ca5c <[^>]*> nop
++0000ca60 <[^>]*> nop
++0000ca64 <[^>]*> nop
++0000ca68 <[^>]*> nop
++0000ca6c <[^>]*> nop
++0000ca70 <[^>]*> nop
++0000ca74 <[^>]*> nop
++0000ca78 <[^>]*> nop
++0000ca7c <[^>]*> nop
++0000ca80 <[^>]*> nop
++0000ca84 <[^>]*> nop
++0000ca88 <[^>]*> nop
++0000ca8c <[^>]*> nop
++0000ca90 <[^>]*> nop
++0000ca94 <[^>]*> nop
++0000ca98 <[^>]*> nop
++0000ca9c <[^>]*> nop
++0000caa0 <[^>]*> nop
++0000caa4 <[^>]*> nop
++0000caa8 <[^>]*> nop
++0000caac <[^>]*> nop
++0000cab0 <[^>]*> nop
++0000cab4 <[^>]*> nop
++0000cab8 <[^>]*> nop
++0000cabc <[^>]*> nop
++0000cac0 <[^>]*> nop
++0000cac4 <[^>]*> nop
++0000cac8 <[^>]*> nop
++0000cacc <[^>]*> nop
++0000cad0 <[^>]*> nop
++0000cad4 <[^>]*> nop
++0000cad8 <[^>]*> nop
++0000cadc <[^>]*> nop
++0000cae0 <[^>]*> nop
++0000cae4 <[^>]*> nop
++0000cae8 <[^>]*> nop
++0000caec <[^>]*> nop
++0000caf0 <[^>]*> nop
++0000caf4 <[^>]*> nop
++0000caf8 <[^>]*> nop
++0000cafc <[^>]*> nop
++0000cb00 <[^>]*> nop
++0000cb04 <[^>]*> nop
++0000cb08 <[^>]*> nop
++0000cb0c <[^>]*> nop
++0000cb10 <[^>]*> nop
++0000cb14 <[^>]*> nop
++0000cb18 <[^>]*> nop
++0000cb1c <[^>]*> nop
++0000cb20 <[^>]*> nop
++0000cb24 <[^>]*> nop
++0000cb28 <[^>]*> nop
++0000cb2c <[^>]*> nop
++0000cb30 <[^>]*> nop
++0000cb34 <[^>]*> nop
++0000cb38 <[^>]*> nop
++0000cb3c <[^>]*> nop
++0000cb40 <[^>]*> nop
++0000cb44 <[^>]*> nop
++0000cb48 <[^>]*> nop
++0000cb4c <[^>]*> nop
++0000cb50 <[^>]*> nop
++0000cb54 <[^>]*> nop
++0000cb58 <[^>]*> nop
++0000cb5c <[^>]*> nop
++0000cb60 <[^>]*> nop
++0000cb64 <[^>]*> nop
++0000cb68 <[^>]*> nop
++0000cb6c <[^>]*> nop
++0000cb70 <[^>]*> nop
++0000cb74 <[^>]*> nop
++0000cb78 <[^>]*> nop
++0000cb7c <[^>]*> nop
++0000cb80 <[^>]*> nop
++0000cb84 <[^>]*> nop
++0000cb88 <[^>]*> nop
++0000cb8c <[^>]*> nop
++0000cb90 <[^>]*> nop
++0000cb94 <[^>]*> nop
++0000cb98 <[^>]*> nop
++0000cb9c <[^>]*> nop
++0000cba0 <[^>]*> nop
++0000cba4 <[^>]*> nop
++0000cba8 <[^>]*> nop
++0000cbac <[^>]*> nop
++0000cbb0 <[^>]*> nop
++0000cbb4 <[^>]*> nop
++0000cbb8 <[^>]*> nop
++0000cbbc <[^>]*> nop
++0000cbc0 <[^>]*> nop
++0000cbc4 <[^>]*> nop
++0000cbc8 <[^>]*> nop
++0000cbcc <[^>]*> nop
++0000cbd0 <[^>]*> nop
++0000cbd4 <[^>]*> nop
++0000cbd8 <[^>]*> nop
++0000cbdc <[^>]*> nop
++0000cbe0 <[^>]*> nop
++0000cbe4 <[^>]*> nop
++0000cbe8 <[^>]*> nop
++0000cbec <[^>]*> nop
++0000cbf0 <[^>]*> nop
++0000cbf4 <[^>]*> nop
++0000cbf8 <[^>]*> nop
++0000cbfc <[^>]*> nop
++0000cc00 <[^>]*> nop
++0000cc04 <[^>]*> nop
++0000cc08 <[^>]*> nop
++0000cc0c <[^>]*> nop
++0000cc10 <[^>]*> nop
++0000cc14 <[^>]*> nop
++0000cc18 <[^>]*> nop
++0000cc1c <[^>]*> nop
++0000cc20 <[^>]*> nop
++0000cc24 <[^>]*> nop
++0000cc28 <[^>]*> nop
++0000cc2c <[^>]*> nop
++0000cc30 <[^>]*> nop
++0000cc34 <[^>]*> nop
++0000cc38 <[^>]*> nop
++0000cc3c <[^>]*> nop
++0000cc40 <[^>]*> nop
++0000cc44 <[^>]*> nop
++0000cc48 <[^>]*> nop
++0000cc4c <[^>]*> nop
++0000cc50 <[^>]*> nop
++0000cc54 <[^>]*> nop
++0000cc58 <[^>]*> nop
++0000cc5c <[^>]*> nop
++0000cc60 <[^>]*> nop
++0000cc64 <[^>]*> nop
++0000cc68 <[^>]*> nop
++0000cc6c <[^>]*> nop
++0000cc70 <[^>]*> nop
++0000cc74 <[^>]*> nop
++0000cc78 <[^>]*> nop
++0000cc7c <[^>]*> nop
++0000cc80 <[^>]*> nop
++0000cc84 <[^>]*> nop
++0000cc88 <[^>]*> nop
++0000cc8c <[^>]*> nop
++0000cc90 <[^>]*> nop
++0000cc94 <[^>]*> nop
++0000cc98 <[^>]*> nop
++0000cc9c <[^>]*> nop
++0000cca0 <[^>]*> nop
++0000cca4 <[^>]*> nop
++0000cca8 <[^>]*> nop
++0000ccac <[^>]*> nop
++0000ccb0 <[^>]*> nop
++0000ccb4 <[^>]*> nop
++0000ccb8 <[^>]*> nop
++0000ccbc <[^>]*> nop
++0000ccc0 <[^>]*> nop
++0000ccc4 <[^>]*> nop
++0000ccc8 <[^>]*> nop
++0000cccc <[^>]*> nop
++0000ccd0 <[^>]*> nop
++0000ccd4 <[^>]*> nop
++0000ccd8 <[^>]*> nop
++0000ccdc <[^>]*> nop
++0000cce0 <[^>]*> nop
++0000cce4 <[^>]*> nop
++0000cce8 <[^>]*> nop
++0000ccec <[^>]*> nop
++0000ccf0 <[^>]*> nop
++0000ccf4 <[^>]*> nop
++0000ccf8 <[^>]*> nop
++0000ccfc <[^>]*> nop
++0000cd00 <[^>]*> nop
++0000cd04 <[^>]*> nop
++0000cd08 <[^>]*> nop
++0000cd0c <[^>]*> nop
++0000cd10 <[^>]*> nop
++0000cd14 <[^>]*> nop
++0000cd18 <[^>]*> nop
++0000cd1c <[^>]*> nop
++0000cd20 <[^>]*> nop
++0000cd24 <[^>]*> nop
++0000cd28 <[^>]*> nop
++0000cd2c <[^>]*> nop
++0000cd30 <[^>]*> nop
++0000cd34 <[^>]*> nop
++0000cd38 <[^>]*> nop
++0000cd3c <[^>]*> nop
++0000cd40 <[^>]*> nop
++0000cd44 <[^>]*> nop
++0000cd48 <[^>]*> nop
++0000cd4c <[^>]*> nop
++0000cd50 <[^>]*> nop
++0000cd54 <[^>]*> nop
++0000cd58 <[^>]*> nop
++0000cd5c <[^>]*> nop
++0000cd60 <[^>]*> nop
++0000cd64 <[^>]*> nop
++0000cd68 <[^>]*> nop
++0000cd6c <[^>]*> nop
++0000cd70 <[^>]*> nop
++0000cd74 <[^>]*> nop
++0000cd78 <[^>]*> nop
++0000cd7c <[^>]*> nop
++0000cd80 <[^>]*> nop
++0000cd84 <[^>]*> nop
++0000cd88 <[^>]*> nop
++0000cd8c <[^>]*> nop
++0000cd90 <[^>]*> nop
++0000cd94 <[^>]*> nop
++0000cd98 <[^>]*> nop
++0000cd9c <[^>]*> nop
++0000cda0 <[^>]*> nop
++0000cda4 <[^>]*> nop
++0000cda8 <[^>]*> nop
++0000cdac <[^>]*> nop
++0000cdb0 <[^>]*> nop
++0000cdb4 <[^>]*> nop
++0000cdb8 <[^>]*> nop
++0000cdbc <[^>]*> nop
++0000cdc0 <[^>]*> nop
++0000cdc4 <[^>]*> nop
++0000cdc8 <[^>]*> nop
++0000cdcc <[^>]*> nop
++0000cdd0 <[^>]*> nop
++0000cdd4 <[^>]*> nop
++0000cdd8 <[^>]*> nop
++0000cddc <[^>]*> nop
++0000cde0 <[^>]*> nop
++0000cde4 <[^>]*> nop
++0000cde8 <[^>]*> nop
++0000cdec <[^>]*> nop
++0000cdf0 <[^>]*> nop
++0000cdf4 <[^>]*> nop
++0000cdf8 <[^>]*> nop
++0000cdfc <[^>]*> nop
++0000ce00 <[^>]*> nop
++0000ce04 <[^>]*> nop
++0000ce08 <[^>]*> nop
++0000ce0c <[^>]*> nop
++0000ce10 <[^>]*> nop
++0000ce14 <[^>]*> nop
++0000ce18 <[^>]*> nop
++0000ce1c <[^>]*> nop
++0000ce20 <[^>]*> nop
++0000ce24 <[^>]*> nop
++0000ce28 <[^>]*> nop
++0000ce2c <[^>]*> nop
++0000ce30 <[^>]*> nop
++0000ce34 <[^>]*> nop
++0000ce38 <[^>]*> nop
++0000ce3c <[^>]*> nop
++0000ce40 <[^>]*> nop
++0000ce44 <[^>]*> nop
++0000ce48 <[^>]*> nop
++0000ce4c <[^>]*> nop
++0000ce50 <[^>]*> nop
++0000ce54 <[^>]*> nop
++0000ce58 <[^>]*> nop
++0000ce5c <[^>]*> nop
++0000ce60 <[^>]*> nop
++0000ce64 <[^>]*> nop
++0000ce68 <[^>]*> nop
++0000ce6c <[^>]*> nop
++0000ce70 <[^>]*> nop
++0000ce74 <[^>]*> nop
++0000ce78 <[^>]*> nop
++0000ce7c <[^>]*> nop
++0000ce80 <[^>]*> nop
++0000ce84 <[^>]*> nop
++0000ce88 <[^>]*> nop
++0000ce8c <[^>]*> nop
++0000ce90 <[^>]*> nop
++0000ce94 <[^>]*> nop
++0000ce98 <[^>]*> nop
++0000ce9c <[^>]*> nop
++0000cea0 <[^>]*> nop
++0000cea4 <[^>]*> nop
++0000cea8 <[^>]*> nop
++0000ceac <[^>]*> nop
++0000ceb0 <[^>]*> nop
++0000ceb4 <[^>]*> nop
++0000ceb8 <[^>]*> nop
++0000cebc <[^>]*> nop
++0000cec0 <[^>]*> nop
++0000cec4 <[^>]*> nop
++0000cec8 <[^>]*> nop
++0000cecc <[^>]*> nop
++0000ced0 <[^>]*> nop
++0000ced4 <[^>]*> nop
++0000ced8 <[^>]*> nop
++0000cedc <[^>]*> nop
++0000cee0 <[^>]*> nop
++0000cee4 <[^>]*> nop
++0000cee8 <[^>]*> nop
++0000ceec <[^>]*> nop
++0000cef0 <[^>]*> nop
++0000cef4 <[^>]*> nop
++0000cef8 <[^>]*> nop
++0000cefc <[^>]*> nop
++0000cf00 <[^>]*> nop
++0000cf04 <[^>]*> nop
++0000cf08 <[^>]*> nop
++0000cf0c <[^>]*> nop
++0000cf10 <[^>]*> nop
++0000cf14 <[^>]*> nop
++0000cf18 <[^>]*> nop
++0000cf1c <[^>]*> nop
++0000cf20 <[^>]*> nop
++0000cf24 <[^>]*> nop
++0000cf28 <[^>]*> nop
++0000cf2c <[^>]*> nop
++0000cf30 <[^>]*> nop
++0000cf34 <[^>]*> nop
++0000cf38 <[^>]*> nop
++0000cf3c <[^>]*> nop
++0000cf40 <[^>]*> nop
++0000cf44 <[^>]*> nop
++0000cf48 <[^>]*> nop
++0000cf4c <[^>]*> nop
++0000cf50 <[^>]*> nop
++0000cf54 <[^>]*> nop
++0000cf58 <[^>]*> nop
++0000cf5c <[^>]*> nop
++0000cf60 <[^>]*> nop
++0000cf64 <[^>]*> nop
++0000cf68 <[^>]*> nop
++0000cf6c <[^>]*> nop
++0000cf70 <[^>]*> nop
++0000cf74 <[^>]*> nop
++0000cf78 <[^>]*> nop
++0000cf7c <[^>]*> nop
++0000cf80 <[^>]*> nop
++0000cf84 <[^>]*> nop
++0000cf88 <[^>]*> nop
++0000cf8c <[^>]*> nop
++0000cf90 <[^>]*> nop
++0000cf94 <[^>]*> nop
++0000cf98 <[^>]*> nop
++0000cf9c <[^>]*> nop
++0000cfa0 <[^>]*> nop
++0000cfa4 <[^>]*> nop
++0000cfa8 <[^>]*> nop
++0000cfac <[^>]*> nop
++0000cfb0 <[^>]*> nop
++0000cfb4 <[^>]*> nop
++0000cfb8 <[^>]*> nop
++0000cfbc <[^>]*> nop
++0000cfc0 <[^>]*> nop
++0000cfc4 <[^>]*> nop
++0000cfc8 <[^>]*> nop
++0000cfcc <[^>]*> nop
++0000cfd0 <[^>]*> nop
++0000cfd4 <[^>]*> nop
++0000cfd8 <[^>]*> nop
++0000cfdc <[^>]*> nop
++0000cfe0 <[^>]*> nop
++0000cfe4 <[^>]*> nop
++0000cfe8 <[^>]*> nop
++0000cfec <[^>]*> nop
++0000cff0 <[^>]*> nop
++0000cff4 <[^>]*> nop
++0000cff8 <[^>]*> nop
++0000cffc <[^>]*> nop
++0000d000 <[^>]*> nop
++0000d004 <[^>]*> nop
++0000d008 <[^>]*> nop
++0000d00c <[^>]*> nop
++0000d010 <[^>]*> nop
++0000d014 <[^>]*> nop
++0000d018 <[^>]*> nop
++0000d01c <[^>]*> nop
++0000d020 <[^>]*> nop
++0000d024 <[^>]*> nop
++0000d028 <[^>]*> nop
++0000d02c <[^>]*> nop
++0000d030 <[^>]*> nop
++0000d034 <[^>]*> nop
++0000d038 <[^>]*> nop
++0000d03c <[^>]*> nop
++0000d040 <[^>]*> nop
++0000d044 <[^>]*> nop
++0000d048 <[^>]*> nop
++0000d04c <[^>]*> nop
++0000d050 <[^>]*> nop
++0000d054 <[^>]*> nop
++0000d058 <[^>]*> nop
++0000d05c <[^>]*> nop
++0000d060 <[^>]*> nop
++0000d064 <[^>]*> nop
++0000d068 <[^>]*> nop
++0000d06c <[^>]*> nop
++0000d070 <[^>]*> nop
++0000d074 <[^>]*> nop
++0000d078 <[^>]*> nop
++0000d07c <[^>]*> nop
++0000d080 <[^>]*> nop
++0000d084 <[^>]*> nop
++0000d088 <[^>]*> nop
++0000d08c <[^>]*> nop
++0000d090 <[^>]*> nop
++0000d094 <[^>]*> nop
++0000d098 <[^>]*> nop
++0000d09c <[^>]*> nop
++0000d0a0 <[^>]*> nop
++0000d0a4 <[^>]*> nop
++0000d0a8 <[^>]*> nop
++0000d0ac <[^>]*> nop
++0000d0b0 <[^>]*> nop
++0000d0b4 <[^>]*> nop
++0000d0b8 <[^>]*> nop
++0000d0bc <[^>]*> nop
++0000d0c0 <[^>]*> nop
++0000d0c4 <[^>]*> nop
++0000d0c8 <[^>]*> nop
++0000d0cc <[^>]*> nop
++0000d0d0 <[^>]*> nop
++0000d0d4 <[^>]*> nop
++0000d0d8 <[^>]*> nop
++0000d0dc <[^>]*> nop
++0000d0e0 <[^>]*> nop
++0000d0e4 <[^>]*> nop
++0000d0e8 <[^>]*> nop
++0000d0ec <[^>]*> nop
++0000d0f0 <[^>]*> nop
++0000d0f4 <[^>]*> nop
++0000d0f8 <[^>]*> nop
++0000d0fc <[^>]*> nop
++0000d100 <[^>]*> nop
++0000d104 <[^>]*> nop
++0000d108 <[^>]*> nop
++0000d10c <[^>]*> nop
++0000d110 <[^>]*> nop
++0000d114 <[^>]*> nop
++0000d118 <[^>]*> nop
++0000d11c <[^>]*> nop
++0000d120 <[^>]*> nop
++0000d124 <[^>]*> nop
++0000d128 <[^>]*> nop
++0000d12c <[^>]*> nop
++0000d130 <[^>]*> nop
++0000d134 <[^>]*> nop
++0000d138 <[^>]*> nop
++0000d13c <[^>]*> nop
++0000d140 <[^>]*> nop
++0000d144 <[^>]*> nop
++0000d148 <[^>]*> nop
++0000d14c <[^>]*> nop
++0000d150 <[^>]*> nop
++0000d154 <[^>]*> nop
++0000d158 <[^>]*> nop
++0000d15c <[^>]*> nop
++0000d160 <[^>]*> nop
++0000d164 <[^>]*> nop
++0000d168 <[^>]*> nop
++0000d16c <[^>]*> nop
++0000d170 <[^>]*> nop
++0000d174 <[^>]*> nop
++0000d178 <[^>]*> nop
++0000d17c <[^>]*> nop
++0000d180 <[^>]*> nop
++0000d184 <[^>]*> nop
++0000d188 <[^>]*> nop
++0000d18c <[^>]*> nop
++0000d190 <[^>]*> nop
++0000d194 <[^>]*> nop
++0000d198 <[^>]*> nop
++0000d19c <[^>]*> nop
++0000d1a0 <[^>]*> nop
++0000d1a4 <[^>]*> nop
++0000d1a8 <[^>]*> nop
++0000d1ac <[^>]*> nop
++0000d1b0 <[^>]*> nop
++0000d1b4 <[^>]*> nop
++0000d1b8 <[^>]*> nop
++0000d1bc <[^>]*> nop
++0000d1c0 <[^>]*> nop
++0000d1c4 <[^>]*> nop
++0000d1c8 <[^>]*> nop
++0000d1cc <[^>]*> nop
++0000d1d0 <[^>]*> nop
++0000d1d4 <[^>]*> nop
++0000d1d8 <[^>]*> nop
++0000d1dc <[^>]*> nop
++0000d1e0 <[^>]*> nop
++0000d1e4 <[^>]*> nop
++0000d1e8 <[^>]*> nop
++0000d1ec <[^>]*> nop
++0000d1f0 <[^>]*> nop
++0000d1f4 <[^>]*> nop
++0000d1f8 <[^>]*> nop
++0000d1fc <[^>]*> nop
++0000d200 <[^>]*> nop
++0000d204 <[^>]*> nop
++0000d208 <[^>]*> nop
++0000d20c <[^>]*> nop
++0000d210 <[^>]*> nop
++0000d214 <[^>]*> nop
++0000d218 <[^>]*> nop
++0000d21c <[^>]*> nop
++0000d220 <[^>]*> nop
++0000d224 <[^>]*> nop
++0000d228 <[^>]*> nop
++0000d22c <[^>]*> nop
++0000d230 <[^>]*> nop
++0000d234 <[^>]*> nop
++0000d238 <[^>]*> nop
++0000d23c <[^>]*> nop
++0000d240 <[^>]*> nop
++0000d244 <[^>]*> nop
++0000d248 <[^>]*> nop
++0000d24c <[^>]*> nop
++0000d250 <[^>]*> nop
++0000d254 <[^>]*> nop
++0000d258 <[^>]*> nop
++0000d25c <[^>]*> nop
++0000d260 <[^>]*> nop
++0000d264 <[^>]*> nop
++0000d268 <[^>]*> nop
++0000d26c <[^>]*> nop
++0000d270 <[^>]*> nop
++0000d274 <[^>]*> nop
++0000d278 <[^>]*> nop
++0000d27c <[^>]*> nop
++0000d280 <[^>]*> nop
++0000d284 <[^>]*> nop
++0000d288 <[^>]*> nop
++0000d28c <[^>]*> nop
++0000d290 <[^>]*> nop
++0000d294 <[^>]*> nop
++0000d298 <[^>]*> nop
++0000d29c <[^>]*> nop
++0000d2a0 <[^>]*> nop
++0000d2a4 <[^>]*> nop
++0000d2a8 <[^>]*> nop
++0000d2ac <[^>]*> nop
++0000d2b0 <[^>]*> nop
++0000d2b4 <[^>]*> nop
++0000d2b8 <[^>]*> nop
++0000d2bc <[^>]*> nop
++0000d2c0 <[^>]*> nop
++0000d2c4 <[^>]*> nop
++0000d2c8 <[^>]*> nop
++0000d2cc <[^>]*> nop
++0000d2d0 <[^>]*> nop
++0000d2d4 <[^>]*> nop
++0000d2d8 <[^>]*> nop
++0000d2dc <[^>]*> nop
++0000d2e0 <[^>]*> nop
++0000d2e4 <[^>]*> nop
++0000d2e8 <[^>]*> nop
++0000d2ec <[^>]*> nop
++0000d2f0 <[^>]*> nop
++0000d2f4 <[^>]*> nop
++0000d2f8 <[^>]*> nop
++0000d2fc <[^>]*> nop
++0000d300 <[^>]*> nop
++0000d304 <[^>]*> nop
++0000d308 <[^>]*> nop
++0000d30c <[^>]*> nop
++0000d310 <[^>]*> nop
++0000d314 <[^>]*> nop
++0000d318 <[^>]*> nop
++0000d31c <[^>]*> nop
++0000d320 <[^>]*> nop
++0000d324 <[^>]*> nop
++0000d328 <[^>]*> nop
++0000d32c <[^>]*> nop
++0000d330 <[^>]*> nop
++0000d334 <[^>]*> nop
++0000d338 <[^>]*> nop
++0000d33c <[^>]*> nop
++0000d340 <[^>]*> nop
++0000d344 <[^>]*> nop
++0000d348 <[^>]*> nop
++0000d34c <[^>]*> nop
++0000d350 <[^>]*> nop
++0000d354 <[^>]*> nop
++0000d358 <[^>]*> nop
++0000d35c <[^>]*> nop
++0000d360 <[^>]*> nop
++0000d364 <[^>]*> nop
++0000d368 <[^>]*> nop
++0000d36c <[^>]*> nop
++0000d370 <[^>]*> nop
++0000d374 <[^>]*> nop
++0000d378 <[^>]*> nop
++0000d37c <[^>]*> nop
++0000d380 <[^>]*> nop
++0000d384 <[^>]*> nop
++0000d388 <[^>]*> nop
++0000d38c <[^>]*> nop
++0000d390 <[^>]*> nop
++0000d394 <[^>]*> nop
++0000d398 <[^>]*> nop
++0000d39c <[^>]*> nop
++0000d3a0 <[^>]*> nop
++0000d3a4 <[^>]*> nop
++0000d3a8 <[^>]*> nop
++0000d3ac <[^>]*> nop
++0000d3b0 <[^>]*> nop
++0000d3b4 <[^>]*> nop
++0000d3b8 <[^>]*> nop
++0000d3bc <[^>]*> nop
++0000d3c0 <[^>]*> nop
++0000d3c4 <[^>]*> nop
++0000d3c8 <[^>]*> nop
++0000d3cc <[^>]*> nop
++0000d3d0 <[^>]*> nop
++0000d3d4 <[^>]*> nop
++0000d3d8 <[^>]*> nop
++0000d3dc <[^>]*> nop
++0000d3e0 <[^>]*> nop
++0000d3e4 <[^>]*> nop
++0000d3e8 <[^>]*> nop
++0000d3ec <[^>]*> nop
++0000d3f0 <[^>]*> nop
++0000d3f4 <[^>]*> nop
++0000d3f8 <[^>]*> nop
++0000d3fc <[^>]*> nop
++0000d400 <[^>]*> nop
++0000d404 <[^>]*> nop
++0000d408 <[^>]*> nop
++0000d40c <[^>]*> nop
++0000d410 <[^>]*> nop
++0000d414 <[^>]*> nop
++0000d418 <[^>]*> nop
++0000d41c <[^>]*> nop
++0000d420 <[^>]*> nop
++0000d424 <[^>]*> nop
++0000d428 <[^>]*> nop
++0000d42c <[^>]*> nop
++0000d430 <[^>]*> nop
++0000d434 <[^>]*> nop
++0000d438 <[^>]*> nop
++0000d43c <[^>]*> nop
++0000d440 <[^>]*> nop
++0000d444 <[^>]*> nop
++0000d448 <[^>]*> nop
++0000d44c <[^>]*> nop
++0000d450 <[^>]*> nop
++0000d454 <[^>]*> nop
++0000d458 <[^>]*> nop
++0000d45c <[^>]*> nop
++0000d460 <[^>]*> nop
++0000d464 <[^>]*> nop
++0000d468 <[^>]*> nop
++0000d46c <[^>]*> nop
++0000d470 <[^>]*> nop
++0000d474 <[^>]*> nop
++0000d478 <[^>]*> nop
++0000d47c <[^>]*> nop
++0000d480 <[^>]*> nop
++0000d484 <[^>]*> nop
++0000d488 <[^>]*> nop
++0000d48c <[^>]*> nop
++0000d490 <[^>]*> nop
++0000d494 <[^>]*> nop
++0000d498 <[^>]*> nop
++0000d49c <[^>]*> nop
++0000d4a0 <[^>]*> nop
++0000d4a4 <[^>]*> nop
++0000d4a8 <[^>]*> nop
++0000d4ac <[^>]*> nop
++0000d4b0 <[^>]*> nop
++0000d4b4 <[^>]*> nop
++0000d4b8 <[^>]*> nop
++0000d4bc <[^>]*> nop
++0000d4c0 <[^>]*> nop
++0000d4c4 <[^>]*> nop
++0000d4c8 <[^>]*> nop
++0000d4cc <[^>]*> nop
++0000d4d0 <[^>]*> nop
++0000d4d4 <[^>]*> nop
++0000d4d8 <[^>]*> nop
++0000d4dc <[^>]*> nop
++0000d4e0 <[^>]*> nop
++0000d4e4 <[^>]*> nop
++0000d4e8 <[^>]*> nop
++0000d4ec <[^>]*> nop
++0000d4f0 <[^>]*> nop
++0000d4f4 <[^>]*> nop
++0000d4f8 <[^>]*> nop
++0000d4fc <[^>]*> nop
++0000d500 <[^>]*> nop
++0000d504 <[^>]*> nop
++0000d508 <[^>]*> nop
++0000d50c <[^>]*> nop
++0000d510 <[^>]*> nop
++0000d514 <[^>]*> nop
++0000d518 <[^>]*> nop
++0000d51c <[^>]*> nop
++0000d520 <[^>]*> nop
++0000d524 <[^>]*> nop
++0000d528 <[^>]*> nop
++0000d52c <[^>]*> nop
++0000d530 <[^>]*> nop
++0000d534 <[^>]*> nop
++0000d538 <[^>]*> nop
++0000d53c <[^>]*> nop
++0000d540 <[^>]*> nop
++0000d544 <[^>]*> nop
++0000d548 <[^>]*> nop
++0000d54c <[^>]*> nop
++0000d550 <[^>]*> nop
++0000d554 <[^>]*> nop
++0000d558 <[^>]*> nop
++0000d55c <[^>]*> nop
++0000d560 <[^>]*> nop
++0000d564 <[^>]*> nop
++0000d568 <[^>]*> nop
++0000d56c <[^>]*> nop
++0000d570 <[^>]*> nop
++0000d574 <[^>]*> nop
++0000d578 <[^>]*> nop
++0000d57c <[^>]*> nop
++0000d580 <[^>]*> nop
++0000d584 <[^>]*> nop
++0000d588 <[^>]*> nop
++0000d58c <[^>]*> nop
++0000d590 <[^>]*> nop
++0000d594 <[^>]*> nop
++0000d598 <[^>]*> nop
++0000d59c <[^>]*> nop
++0000d5a0 <[^>]*> nop
++0000d5a4 <[^>]*> nop
++0000d5a8 <[^>]*> nop
++0000d5ac <[^>]*> nop
++0000d5b0 <[^>]*> nop
++0000d5b4 <[^>]*> nop
++0000d5b8 <[^>]*> nop
++0000d5bc <[^>]*> nop
++0000d5c0 <[^>]*> nop
++0000d5c4 <[^>]*> nop
++0000d5c8 <[^>]*> nop
++0000d5cc <[^>]*> nop
++0000d5d0 <[^>]*> nop
++0000d5d4 <[^>]*> nop
++0000d5d8 <[^>]*> nop
++0000d5dc <[^>]*> nop
++0000d5e0 <[^>]*> nop
++0000d5e4 <[^>]*> nop
++0000d5e8 <[^>]*> nop
++0000d5ec <[^>]*> nop
++0000d5f0 <[^>]*> nop
++0000d5f4 <[^>]*> nop
++0000d5f8 <[^>]*> nop
++0000d5fc <[^>]*> nop
++0000d600 <[^>]*> nop
++0000d604 <[^>]*> nop
++0000d608 <[^>]*> nop
++0000d60c <[^>]*> nop
++0000d610 <[^>]*> nop
++0000d614 <[^>]*> nop
++0000d618 <[^>]*> nop
++0000d61c <[^>]*> nop
++0000d620 <[^>]*> nop
++0000d624 <[^>]*> nop
++0000d628 <[^>]*> nop
++0000d62c <[^>]*> nop
++0000d630 <[^>]*> nop
++0000d634 <[^>]*> nop
++0000d638 <[^>]*> nop
++0000d63c <[^>]*> nop
++0000d640 <[^>]*> nop
++0000d644 <[^>]*> nop
++0000d648 <[^>]*> nop
++0000d64c <[^>]*> nop
++0000d650 <[^>]*> nop
++0000d654 <[^>]*> nop
++0000d658 <[^>]*> nop
++0000d65c <[^>]*> nop
++0000d660 <[^>]*> nop
++0000d664 <[^>]*> nop
++0000d668 <[^>]*> nop
++0000d66c <[^>]*> nop
++0000d670 <[^>]*> nop
++0000d674 <[^>]*> nop
++0000d678 <[^>]*> nop
++0000d67c <[^>]*> nop
++0000d680 <[^>]*> nop
++0000d684 <[^>]*> nop
++0000d688 <[^>]*> nop
++0000d68c <[^>]*> nop
++0000d690 <[^>]*> nop
++0000d694 <[^>]*> nop
++0000d698 <[^>]*> nop
++0000d69c <[^>]*> nop
++0000d6a0 <[^>]*> nop
++0000d6a4 <[^>]*> nop
++0000d6a8 <[^>]*> nop
++0000d6ac <[^>]*> nop
++0000d6b0 <[^>]*> nop
++0000d6b4 <[^>]*> nop
++0000d6b8 <[^>]*> nop
++0000d6bc <[^>]*> nop
++0000d6c0 <[^>]*> nop
++0000d6c4 <[^>]*> nop
++0000d6c8 <[^>]*> nop
++0000d6cc <[^>]*> nop
++0000d6d0 <[^>]*> nop
++0000d6d4 <[^>]*> nop
++0000d6d8 <[^>]*> nop
++0000d6dc <[^>]*> nop
++0000d6e0 <[^>]*> nop
++0000d6e4 <[^>]*> nop
++0000d6e8 <[^>]*> nop
++0000d6ec <[^>]*> nop
++0000d6f0 <[^>]*> nop
++0000d6f4 <[^>]*> nop
++0000d6f8 <[^>]*> nop
++0000d6fc <[^>]*> nop
++0000d700 <[^>]*> nop
++0000d704 <[^>]*> nop
++0000d708 <[^>]*> nop
++0000d70c <[^>]*> nop
++0000d710 <[^>]*> nop
++0000d714 <[^>]*> nop
++0000d718 <[^>]*> nop
++0000d71c <[^>]*> nop
++0000d720 <[^>]*> nop
++0000d724 <[^>]*> nop
++0000d728 <[^>]*> nop
++0000d72c <[^>]*> nop
++0000d730 <[^>]*> nop
++0000d734 <[^>]*> nop
++0000d738 <[^>]*> nop
++0000d73c <[^>]*> nop
++0000d740 <[^>]*> nop
++0000d744 <[^>]*> nop
++0000d748 <[^>]*> nop
++0000d74c <[^>]*> nop
++0000d750 <[^>]*> nop
++0000d754 <[^>]*> nop
++0000d758 <[^>]*> nop
++0000d75c <[^>]*> nop
++0000d760 <[^>]*> nop
++0000d764 <[^>]*> nop
++0000d768 <[^>]*> nop
++0000d76c <[^>]*> nop
++0000d770 <[^>]*> nop
++0000d774 <[^>]*> nop
++0000d778 <[^>]*> nop
++0000d77c <[^>]*> nop
++0000d780 <[^>]*> nop
++0000d784 <[^>]*> nop
++0000d788 <[^>]*> nop
++0000d78c <[^>]*> nop
++0000d790 <[^>]*> nop
++0000d794 <[^>]*> nop
++0000d798 <[^>]*> nop
++0000d79c <[^>]*> nop
++0000d7a0 <[^>]*> nop
++0000d7a4 <[^>]*> nop
++0000d7a8 <[^>]*> nop
++0000d7ac <[^>]*> nop
++0000d7b0 <[^>]*> nop
++0000d7b4 <[^>]*> nop
++0000d7b8 <[^>]*> nop
++0000d7bc <[^>]*> nop
++0000d7c0 <[^>]*> nop
++0000d7c4 <[^>]*> nop
++0000d7c8 <[^>]*> nop
++0000d7cc <[^>]*> nop
++0000d7d0 <[^>]*> nop
++0000d7d4 <[^>]*> nop
++0000d7d8 <[^>]*> nop
++0000d7dc <[^>]*> nop
++0000d7e0 <[^>]*> nop
++0000d7e4 <[^>]*> nop
++0000d7e8 <[^>]*> nop
++0000d7ec <[^>]*> nop
++0000d7f0 <[^>]*> nop
++0000d7f4 <[^>]*> nop
++0000d7f8 <[^>]*> nop
++0000d7fc <[^>]*> nop
++0000d800 <[^>]*> nop
++0000d804 <[^>]*> nop
++0000d808 <[^>]*> nop
++0000d80c <[^>]*> nop
++0000d810 <[^>]*> nop
++0000d814 <[^>]*> nop
++0000d818 <[^>]*> nop
++0000d81c <[^>]*> nop
++0000d820 <[^>]*> nop
++0000d824 <[^>]*> nop
++0000d828 <[^>]*> nop
++0000d82c <[^>]*> nop
++0000d830 <[^>]*> nop
++0000d834 <[^>]*> nop
++0000d838 <[^>]*> nop
++0000d83c <[^>]*> nop
++0000d840 <[^>]*> nop
++0000d844 <[^>]*> nop
++0000d848 <[^>]*> nop
++0000d84c <[^>]*> nop
++0000d850 <[^>]*> nop
++0000d854 <[^>]*> nop
++0000d858 <[^>]*> nop
++0000d85c <[^>]*> nop
++0000d860 <[^>]*> nop
++0000d864 <[^>]*> nop
++0000d868 <[^>]*> nop
++0000d86c <[^>]*> nop
++0000d870 <[^>]*> nop
++0000d874 <[^>]*> nop
++0000d878 <[^>]*> nop
++0000d87c <[^>]*> nop
++0000d880 <[^>]*> nop
++0000d884 <[^>]*> nop
++0000d888 <[^>]*> nop
++0000d88c <[^>]*> nop
++0000d890 <[^>]*> nop
++0000d894 <[^>]*> nop
++0000d898 <[^>]*> nop
++0000d89c <[^>]*> nop
++0000d8a0 <[^>]*> nop
++0000d8a4 <[^>]*> nop
++0000d8a8 <[^>]*> nop
++0000d8ac <[^>]*> nop
++0000d8b0 <[^>]*> nop
++0000d8b4 <[^>]*> nop
++0000d8b8 <[^>]*> nop
++0000d8bc <[^>]*> nop
++0000d8c0 <[^>]*> nop
++0000d8c4 <[^>]*> nop
++0000d8c8 <[^>]*> nop
++0000d8cc <[^>]*> nop
++0000d8d0 <[^>]*> nop
++0000d8d4 <[^>]*> nop
++0000d8d8 <[^>]*> nop
++0000d8dc <[^>]*> nop
++0000d8e0 <[^>]*> nop
++0000d8e4 <[^>]*> nop
++0000d8e8 <[^>]*> nop
++0000d8ec <[^>]*> nop
++0000d8f0 <[^>]*> nop
++0000d8f4 <[^>]*> nop
++0000d8f8 <[^>]*> nop
++0000d8fc <[^>]*> nop
++0000d900 <[^>]*> nop
++0000d904 <[^>]*> nop
++0000d908 <[^>]*> nop
++0000d90c <[^>]*> nop
++0000d910 <[^>]*> nop
++0000d914 <[^>]*> nop
++0000d918 <[^>]*> nop
++0000d91c <[^>]*> nop
++0000d920 <[^>]*> nop
++0000d924 <[^>]*> nop
++0000d928 <[^>]*> nop
++0000d92c <[^>]*> nop
++0000d930 <[^>]*> nop
++0000d934 <[^>]*> nop
++0000d938 <[^>]*> nop
++0000d93c <[^>]*> nop
++0000d940 <[^>]*> nop
++0000d944 <[^>]*> nop
++0000d948 <[^>]*> nop
++0000d94c <[^>]*> nop
++0000d950 <[^>]*> nop
++0000d954 <[^>]*> nop
++0000d958 <[^>]*> nop
++0000d95c <[^>]*> nop
++0000d960 <[^>]*> nop
++0000d964 <[^>]*> nop
++0000d968 <[^>]*> nop
++0000d96c <[^>]*> nop
++0000d970 <[^>]*> nop
++0000d974 <[^>]*> nop
++0000d978 <[^>]*> nop
++0000d97c <[^>]*> nop
++0000d980 <[^>]*> nop
++0000d984 <[^>]*> nop
++0000d988 <[^>]*> nop
++0000d98c <[^>]*> nop
++0000d990 <[^>]*> nop
++0000d994 <[^>]*> nop
++0000d998 <[^>]*> nop
++0000d99c <[^>]*> nop
++0000d9a0 <[^>]*> nop
++0000d9a4 <[^>]*> nop
++0000d9a8 <[^>]*> nop
++0000d9ac <[^>]*> nop
++0000d9b0 <[^>]*> nop
++0000d9b4 <[^>]*> nop
++0000d9b8 <[^>]*> nop
++0000d9bc <[^>]*> nop
++0000d9c0 <[^>]*> nop
++0000d9c4 <[^>]*> nop
++0000d9c8 <[^>]*> nop
++0000d9cc <[^>]*> nop
++0000d9d0 <[^>]*> nop
++0000d9d4 <[^>]*> nop
++0000d9d8 <[^>]*> nop
++0000d9dc <[^>]*> nop
++0000d9e0 <[^>]*> nop
++0000d9e4 <[^>]*> nop
++0000d9e8 <[^>]*> nop
++0000d9ec <[^>]*> nop
++0000d9f0 <[^>]*> nop
++0000d9f4 <[^>]*> nop
++0000d9f8 <[^>]*> nop
++0000d9fc <[^>]*> nop
++0000da00 <[^>]*> nop
++0000da04 <[^>]*> nop
++0000da08 <[^>]*> nop
++0000da0c <[^>]*> nop
++0000da10 <[^>]*> nop
++0000da14 <[^>]*> nop
++0000da18 <[^>]*> nop
++0000da1c <[^>]*> nop
++0000da20 <[^>]*> nop
++0000da24 <[^>]*> nop
++0000da28 <[^>]*> nop
++0000da2c <[^>]*> nop
++0000da30 <[^>]*> nop
++0000da34 <[^>]*> nop
++0000da38 <[^>]*> nop
++0000da3c <[^>]*> nop
++0000da40 <[^>]*> nop
++0000da44 <[^>]*> nop
++0000da48 <[^>]*> nop
++0000da4c <[^>]*> nop
++0000da50 <[^>]*> nop
++0000da54 <[^>]*> nop
++0000da58 <[^>]*> nop
++0000da5c <[^>]*> nop
++0000da60 <[^>]*> nop
++0000da64 <[^>]*> nop
++0000da68 <[^>]*> nop
++0000da6c <[^>]*> nop
++0000da70 <[^>]*> nop
++0000da74 <[^>]*> nop
++0000da78 <[^>]*> nop
++0000da7c <[^>]*> nop
++0000da80 <[^>]*> nop
++0000da84 <[^>]*> nop
++0000da88 <[^>]*> nop
++0000da8c <[^>]*> nop
++0000da90 <[^>]*> nop
++0000da94 <[^>]*> nop
++0000da98 <[^>]*> nop
++0000da9c <[^>]*> nop
++0000daa0 <[^>]*> nop
++0000daa4 <[^>]*> nop
++0000daa8 <[^>]*> nop
++0000daac <[^>]*> nop
++0000dab0 <[^>]*> nop
++0000dab4 <[^>]*> nop
++0000dab8 <[^>]*> nop
++0000dabc <[^>]*> nop
++0000dac0 <[^>]*> nop
++0000dac4 <[^>]*> nop
++0000dac8 <[^>]*> nop
++0000dacc <[^>]*> nop
++0000dad0 <[^>]*> nop
++0000dad4 <[^>]*> nop
++0000dad8 <[^>]*> nop
++0000dadc <[^>]*> nop
++0000dae0 <[^>]*> nop
++0000dae4 <[^>]*> nop
++0000dae8 <[^>]*> nop
++0000daec <[^>]*> nop
++0000daf0 <[^>]*> nop
++0000daf4 <[^>]*> nop
++0000daf8 <[^>]*> nop
++0000dafc <[^>]*> nop
++0000db00 <[^>]*> nop
++0000db04 <[^>]*> nop
++0000db08 <[^>]*> nop
++0000db0c <[^>]*> nop
++0000db10 <[^>]*> nop
++0000db14 <[^>]*> nop
++0000db18 <[^>]*> nop
++0000db1c <[^>]*> nop
++0000db20 <[^>]*> nop
++0000db24 <[^>]*> nop
++0000db28 <[^>]*> nop
++0000db2c <[^>]*> nop
++0000db30 <[^>]*> nop
++0000db34 <[^>]*> nop
++0000db38 <[^>]*> nop
++0000db3c <[^>]*> nop
++0000db40 <[^>]*> nop
++0000db44 <[^>]*> nop
++0000db48 <[^>]*> nop
++0000db4c <[^>]*> nop
++0000db50 <[^>]*> nop
++0000db54 <[^>]*> nop
++0000db58 <[^>]*> nop
++0000db5c <[^>]*> nop
++0000db60 <[^>]*> nop
++0000db64 <[^>]*> nop
++0000db68 <[^>]*> nop
++0000db6c <[^>]*> nop
++0000db70 <[^>]*> nop
++0000db74 <[^>]*> nop
++0000db78 <[^>]*> nop
++0000db7c <[^>]*> nop
++0000db80 <[^>]*> nop
++0000db84 <[^>]*> nop
++0000db88 <[^>]*> nop
++0000db8c <[^>]*> nop
++0000db90 <[^>]*> nop
++0000db94 <[^>]*> nop
++0000db98 <[^>]*> nop
++0000db9c <[^>]*> nop
++0000dba0 <[^>]*> nop
++0000dba4 <[^>]*> nop
++0000dba8 <[^>]*> nop
++0000dbac <[^>]*> nop
++0000dbb0 <[^>]*> nop
++0000dbb4 <[^>]*> nop
++0000dbb8 <[^>]*> nop
++0000dbbc <[^>]*> nop
++0000dbc0 <[^>]*> nop
++0000dbc4 <[^>]*> nop
++0000dbc8 <[^>]*> nop
++0000dbcc <[^>]*> nop
++0000dbd0 <[^>]*> nop
++0000dbd4 <[^>]*> nop
++0000dbd8 <[^>]*> nop
++0000dbdc <[^>]*> nop
++0000dbe0 <[^>]*> nop
++0000dbe4 <[^>]*> nop
++0000dbe8 <[^>]*> nop
++0000dbec <[^>]*> nop
++0000dbf0 <[^>]*> nop
++0000dbf4 <[^>]*> nop
++0000dbf8 <[^>]*> nop
++0000dbfc <[^>]*> nop
++0000dc00 <[^>]*> nop
++0000dc04 <[^>]*> nop
++0000dc08 <[^>]*> nop
++0000dc0c <[^>]*> nop
++0000dc10 <[^>]*> nop
++0000dc14 <[^>]*> nop
++0000dc18 <[^>]*> nop
++0000dc1c <[^>]*> nop
++0000dc20 <[^>]*> nop
++0000dc24 <[^>]*> nop
++0000dc28 <[^>]*> nop
++0000dc2c <[^>]*> nop
++0000dc30 <[^>]*> nop
++0000dc34 <[^>]*> nop
++0000dc38 <[^>]*> nop
++0000dc3c <[^>]*> nop
++0000dc40 <[^>]*> nop
++0000dc44 <[^>]*> nop
++0000dc48 <[^>]*> nop
++0000dc4c <[^>]*> nop
++0000dc50 <[^>]*> nop
++0000dc54 <[^>]*> nop
++0000dc58 <[^>]*> nop
++0000dc5c <[^>]*> nop
++0000dc60 <[^>]*> nop
++0000dc64 <[^>]*> nop
++0000dc68 <[^>]*> nop
++0000dc6c <[^>]*> nop
++0000dc70 <[^>]*> nop
++0000dc74 <[^>]*> nop
++0000dc78 <[^>]*> nop
++0000dc7c <[^>]*> nop
++0000dc80 <[^>]*> nop
++0000dc84 <[^>]*> nop
++0000dc88 <[^>]*> nop
++0000dc8c <[^>]*> nop
++0000dc90 <[^>]*> nop
++0000dc94 <[^>]*> nop
++0000dc98 <[^>]*> nop
++0000dc9c <[^>]*> nop
++0000dca0 <[^>]*> nop
++0000dca4 <[^>]*> nop
++0000dca8 <[^>]*> nop
++0000dcac <[^>]*> nop
++0000dcb0 <[^>]*> nop
++0000dcb4 <[^>]*> nop
++0000dcb8 <[^>]*> nop
++0000dcbc <[^>]*> nop
++0000dcc0 <[^>]*> nop
++0000dcc4 <[^>]*> nop
++0000dcc8 <[^>]*> nop
++0000dccc <[^>]*> nop
++0000dcd0 <[^>]*> nop
++0000dcd4 <[^>]*> nop
++0000dcd8 <[^>]*> nop
++0000dcdc <[^>]*> nop
++0000dce0 <[^>]*> nop
++0000dce4 <[^>]*> nop
++0000dce8 <[^>]*> nop
++0000dcec <[^>]*> nop
++0000dcf0 <[^>]*> nop
++0000dcf4 <[^>]*> nop
++0000dcf8 <[^>]*> nop
++0000dcfc <[^>]*> nop
++0000dd00 <[^>]*> nop
++0000dd04 <[^>]*> nop
++0000dd08 <[^>]*> nop
++0000dd0c <[^>]*> nop
++0000dd10 <[^>]*> nop
++0000dd14 <[^>]*> nop
++0000dd18 <[^>]*> nop
++0000dd1c <[^>]*> nop
++0000dd20 <[^>]*> nop
++0000dd24 <[^>]*> nop
++0000dd28 <[^>]*> nop
++0000dd2c <[^>]*> nop
++0000dd30 <[^>]*> nop
++0000dd34 <[^>]*> nop
++0000dd38 <[^>]*> nop
++0000dd3c <[^>]*> nop
++0000dd40 <[^>]*> nop
++0000dd44 <[^>]*> nop
++0000dd48 <[^>]*> nop
++0000dd4c <[^>]*> nop
++0000dd50 <[^>]*> nop
++0000dd54 <[^>]*> nop
++0000dd58 <[^>]*> nop
++0000dd5c <[^>]*> nop
++0000dd60 <[^>]*> nop
++0000dd64 <[^>]*> nop
++0000dd68 <[^>]*> nop
++0000dd6c <[^>]*> nop
++0000dd70 <[^>]*> nop
++0000dd74 <[^>]*> nop
++0000dd78 <[^>]*> nop
++0000dd7c <[^>]*> nop
++0000dd80 <[^>]*> nop
++0000dd84 <[^>]*> nop
++0000dd88 <[^>]*> nop
++0000dd8c <[^>]*> nop
++0000dd90 <[^>]*> nop
++0000dd94 <[^>]*> nop
++0000dd98 <[^>]*> nop
++0000dd9c <[^>]*> nop
++0000dda0 <[^>]*> nop
++0000dda4 <[^>]*> nop
++0000dda8 <[^>]*> nop
++0000ddac <[^>]*> nop
++0000ddb0 <[^>]*> nop
++0000ddb4 <[^>]*> nop
++0000ddb8 <[^>]*> nop
++0000ddbc <[^>]*> nop
++0000ddc0 <[^>]*> nop
++0000ddc4 <[^>]*> nop
++0000ddc8 <[^>]*> nop
++0000ddcc <[^>]*> nop
++0000ddd0 <[^>]*> nop
++0000ddd4 <[^>]*> nop
++0000ddd8 <[^>]*> nop
++0000dddc <[^>]*> nop
++0000dde0 <[^>]*> nop
++0000dde4 <[^>]*> nop
++0000dde8 <[^>]*> nop
++0000ddec <[^>]*> nop
++0000ddf0 <[^>]*> nop
++0000ddf4 <[^>]*> nop
++0000ddf8 <[^>]*> nop
++0000ddfc <[^>]*> nop
++0000de00 <[^>]*> nop
++0000de04 <[^>]*> nop
++0000de08 <[^>]*> nop
++0000de0c <[^>]*> nop
++0000de10 <[^>]*> nop
++0000de14 <[^>]*> nop
++0000de18 <[^>]*> nop
++0000de1c <[^>]*> nop
++0000de20 <[^>]*> nop
++0000de24 <[^>]*> nop
++0000de28 <[^>]*> nop
++0000de2c <[^>]*> nop
++0000de30 <[^>]*> nop
++0000de34 <[^>]*> nop
++0000de38 <[^>]*> nop
++0000de3c <[^>]*> nop
++0000de40 <[^>]*> nop
++0000de44 <[^>]*> nop
++0000de48 <[^>]*> nop
++0000de4c <[^>]*> nop
++0000de50 <[^>]*> nop
++0000de54 <[^>]*> nop
++0000de58 <[^>]*> nop
++0000de5c <[^>]*> nop
++0000de60 <[^>]*> nop
++0000de64 <[^>]*> nop
++0000de68 <[^>]*> nop
++0000de6c <[^>]*> nop
++0000de70 <[^>]*> nop
++0000de74 <[^>]*> nop
++0000de78 <[^>]*> nop
++0000de7c <[^>]*> nop
++0000de80 <[^>]*> nop
++0000de84 <[^>]*> nop
++0000de88 <[^>]*> nop
++0000de8c <[^>]*> nop
++0000de90 <[^>]*> nop
++0000de94 <[^>]*> nop
++0000de98 <[^>]*> nop
++0000de9c <[^>]*> nop
++0000dea0 <[^>]*> nop
++0000dea4 <[^>]*> nop
++0000dea8 <[^>]*> nop
++0000deac <[^>]*> nop
++0000deb0 <[^>]*> nop
++0000deb4 <[^>]*> nop
++0000deb8 <[^>]*> nop
++0000debc <[^>]*> nop
++0000dec0 <[^>]*> nop
++0000dec4 <[^>]*> nop
++0000dec8 <[^>]*> nop
++0000decc <[^>]*> nop
++0000ded0 <[^>]*> nop
++0000ded4 <[^>]*> nop
++0000ded8 <[^>]*> nop
++0000dedc <[^>]*> nop
++0000dee0 <[^>]*> nop
++0000dee4 <[^>]*> nop
++0000dee8 <[^>]*> nop
++0000deec <[^>]*> nop
++0000def0 <[^>]*> nop
++0000def4 <[^>]*> nop
++0000def8 <[^>]*> nop
++0000defc <[^>]*> nop
++0000df00 <[^>]*> nop
++0000df04 <[^>]*> nop
++0000df08 <[^>]*> nop
++0000df0c <[^>]*> nop
++0000df10 <[^>]*> nop
++0000df14 <[^>]*> nop
++0000df18 <[^>]*> nop
++0000df1c <[^>]*> nop
++0000df20 <[^>]*> nop
++0000df24 <[^>]*> nop
++0000df28 <[^>]*> nop
++0000df2c <[^>]*> nop
++0000df30 <[^>]*> nop
++0000df34 <[^>]*> nop
++0000df38 <[^>]*> nop
++0000df3c <[^>]*> nop
++0000df40 <[^>]*> nop
++0000df44 <[^>]*> nop
++0000df48 <[^>]*> nop
++0000df4c <[^>]*> nop
++0000df50 <[^>]*> nop
++0000df54 <[^>]*> nop
++0000df58 <[^>]*> nop
++0000df5c <[^>]*> nop
++0000df60 <[^>]*> nop
++0000df64 <[^>]*> nop
++0000df68 <[^>]*> nop
++0000df6c <[^>]*> nop
++0000df70 <[^>]*> nop
++0000df74 <[^>]*> nop
++0000df78 <[^>]*> nop
++0000df7c <[^>]*> nop
++0000df80 <[^>]*> nop
++0000df84 <[^>]*> nop
++0000df88 <[^>]*> nop
++0000df8c <[^>]*> nop
++0000df90 <[^>]*> nop
++0000df94 <[^>]*> nop
++0000df98 <[^>]*> nop
++0000df9c <[^>]*> nop
++0000dfa0 <[^>]*> nop
++0000dfa4 <[^>]*> nop
++0000dfa8 <[^>]*> nop
++0000dfac <[^>]*> nop
++0000dfb0 <[^>]*> nop
++0000dfb4 <[^>]*> nop
++0000dfb8 <[^>]*> nop
++0000dfbc <[^>]*> nop
++0000dfc0 <[^>]*> nop
++0000dfc4 <[^>]*> nop
++0000dfc8 <[^>]*> nop
++0000dfcc <[^>]*> nop
++0000dfd0 <[^>]*> nop
++0000dfd4 <[^>]*> nop
++0000dfd8 <[^>]*> nop
++0000dfdc <[^>]*> nop
++0000dfe0 <[^>]*> nop
++0000dfe4 <[^>]*> nop
++0000dfe8 <[^>]*> nop
++0000dfec <[^>]*> nop
++0000dff0 <[^>]*> nop
++0000dff4 <[^>]*> nop
++0000dff8 <[^>]*> nop
++0000dffc <[^>]*> nop
++0000e000 <[^>]*> nop
++0000e004 <[^>]*> nop
++0000e008 <[^>]*> nop
++0000e00c <[^>]*> nop
++0000e010 <[^>]*> nop
++0000e014 <[^>]*> nop
++0000e018 <[^>]*> nop
++0000e01c <[^>]*> nop
++0000e020 <[^>]*> nop
++0000e024 <[^>]*> nop
++0000e028 <[^>]*> nop
++0000e02c <[^>]*> nop
++0000e030 <[^>]*> nop
++0000e034 <[^>]*> nop
++0000e038 <[^>]*> nop
++0000e03c <[^>]*> nop
++0000e040 <[^>]*> nop
++0000e044 <[^>]*> nop
++0000e048 <[^>]*> nop
++0000e04c <[^>]*> nop
++0000e050 <[^>]*> nop
++0000e054 <[^>]*> nop
++0000e058 <[^>]*> nop
++0000e05c <[^>]*> nop
++0000e060 <[^>]*> nop
++0000e064 <[^>]*> nop
++0000e068 <[^>]*> nop
++0000e06c <[^>]*> nop
++0000e070 <[^>]*> nop
++0000e074 <[^>]*> nop
++0000e078 <[^>]*> nop
++0000e07c <[^>]*> nop
++0000e080 <[^>]*> nop
++0000e084 <[^>]*> nop
++0000e088 <[^>]*> nop
++0000e08c <[^>]*> nop
++0000e090 <[^>]*> nop
++0000e094 <[^>]*> nop
++0000e098 <[^>]*> nop
++0000e09c <[^>]*> nop
++0000e0a0 <[^>]*> nop
++0000e0a4 <[^>]*> nop
++0000e0a8 <[^>]*> nop
++0000e0ac <[^>]*> nop
++0000e0b0 <[^>]*> nop
++0000e0b4 <[^>]*> nop
++0000e0b8 <[^>]*> nop
++0000e0bc <[^>]*> nop
++0000e0c0 <[^>]*> nop
++0000e0c4 <[^>]*> nop
++0000e0c8 <[^>]*> nop
++0000e0cc <[^>]*> nop
++0000e0d0 <[^>]*> nop
++0000e0d4 <[^>]*> nop
++0000e0d8 <[^>]*> nop
++0000e0dc <[^>]*> nop
++0000e0e0 <[^>]*> nop
++0000e0e4 <[^>]*> nop
++0000e0e8 <[^>]*> nop
++0000e0ec <[^>]*> nop
++0000e0f0 <[^>]*> nop
++0000e0f4 <[^>]*> nop
++0000e0f8 <[^>]*> nop
++0000e0fc <[^>]*> nop
++0000e100 <[^>]*> nop
++0000e104 <[^>]*> nop
++0000e108 <[^>]*> nop
++0000e10c <[^>]*> nop
++0000e110 <[^>]*> nop
++0000e114 <[^>]*> nop
++0000e118 <[^>]*> nop
++0000e11c <[^>]*> nop
++0000e120 <[^>]*> nop
++0000e124 <[^>]*> nop
++0000e128 <[^>]*> nop
++0000e12c <[^>]*> nop
++0000e130 <[^>]*> nop
++0000e134 <[^>]*> nop
++0000e138 <[^>]*> nop
++0000e13c <[^>]*> nop
++0000e140 <[^>]*> nop
++0000e144 <[^>]*> nop
++0000e148 <[^>]*> nop
++0000e14c <[^>]*> nop
++0000e150 <[^>]*> nop
++0000e154 <[^>]*> nop
++0000e158 <[^>]*> nop
++0000e15c <[^>]*> nop
++0000e160 <[^>]*> nop
++0000e164 <[^>]*> nop
++0000e168 <[^>]*> nop
++0000e16c <[^>]*> nop
++0000e170 <[^>]*> nop
++0000e174 <[^>]*> nop
++0000e178 <[^>]*> nop
++0000e17c <[^>]*> nop
++0000e180 <[^>]*> nop
++0000e184 <[^>]*> nop
++0000e188 <[^>]*> nop
++0000e18c <[^>]*> nop
++0000e190 <[^>]*> nop
++0000e194 <[^>]*> nop
++0000e198 <[^>]*> nop
++0000e19c <[^>]*> nop
++0000e1a0 <[^>]*> nop
++0000e1a4 <[^>]*> nop
++0000e1a8 <[^>]*> nop
++0000e1ac <[^>]*> nop
++0000e1b0 <[^>]*> nop
++0000e1b4 <[^>]*> nop
++0000e1b8 <[^>]*> nop
++0000e1bc <[^>]*> nop
++0000e1c0 <[^>]*> nop
++0000e1c4 <[^>]*> nop
++0000e1c8 <[^>]*> nop
++0000e1cc <[^>]*> nop
++0000e1d0 <[^>]*> nop
++0000e1d4 <[^>]*> nop
++0000e1d8 <[^>]*> nop
++0000e1dc <[^>]*> nop
++0000e1e0 <[^>]*> nop
++0000e1e4 <[^>]*> nop
++0000e1e8 <[^>]*> nop
++0000e1ec <[^>]*> nop
++0000e1f0 <[^>]*> nop
++0000e1f4 <[^>]*> nop
++0000e1f8 <[^>]*> nop
++0000e1fc <[^>]*> nop
++0000e200 <[^>]*> nop
++0000e204 <[^>]*> nop
++0000e208 <[^>]*> nop
++0000e20c <[^>]*> nop
++0000e210 <[^>]*> nop
++0000e214 <[^>]*> nop
++0000e218 <[^>]*> nop
++0000e21c <[^>]*> nop
++0000e220 <[^>]*> nop
++0000e224 <[^>]*> nop
++0000e228 <[^>]*> nop
++0000e22c <[^>]*> nop
++0000e230 <[^>]*> nop
++0000e234 <[^>]*> nop
++0000e238 <[^>]*> nop
++0000e23c <[^>]*> nop
++0000e240 <[^>]*> nop
++0000e244 <[^>]*> nop
++0000e248 <[^>]*> nop
++0000e24c <[^>]*> nop
++0000e250 <[^>]*> nop
++0000e254 <[^>]*> nop
++0000e258 <[^>]*> nop
++0000e25c <[^>]*> nop
++0000e260 <[^>]*> nop
++0000e264 <[^>]*> nop
++0000e268 <[^>]*> nop
++0000e26c <[^>]*> nop
++0000e270 <[^>]*> nop
++0000e274 <[^>]*> nop
++0000e278 <[^>]*> nop
++0000e27c <[^>]*> nop
++0000e280 <[^>]*> nop
++0000e284 <[^>]*> nop
++0000e288 <[^>]*> nop
++0000e28c <[^>]*> nop
++0000e290 <[^>]*> nop
++0000e294 <[^>]*> nop
++0000e298 <[^>]*> nop
++0000e29c <[^>]*> nop
++0000e2a0 <[^>]*> nop
++0000e2a4 <[^>]*> nop
++0000e2a8 <[^>]*> nop
++0000e2ac <[^>]*> nop
++0000e2b0 <[^>]*> nop
++0000e2b4 <[^>]*> nop
++0000e2b8 <[^>]*> nop
++0000e2bc <[^>]*> nop
++0000e2c0 <[^>]*> nop
++0000e2c4 <[^>]*> nop
++0000e2c8 <[^>]*> nop
++0000e2cc <[^>]*> nop
++0000e2d0 <[^>]*> nop
++0000e2d4 <[^>]*> nop
++0000e2d8 <[^>]*> nop
++0000e2dc <[^>]*> nop
++0000e2e0 <[^>]*> nop
++0000e2e4 <[^>]*> nop
++0000e2e8 <[^>]*> nop
++0000e2ec <[^>]*> nop
++0000e2f0 <[^>]*> nop
++0000e2f4 <[^>]*> nop
++0000e2f8 <[^>]*> nop
++0000e2fc <[^>]*> nop
++0000e300 <[^>]*> nop
++0000e304 <[^>]*> nop
++0000e308 <[^>]*> nop
++0000e30c <[^>]*> nop
++0000e310 <[^>]*> nop
++0000e314 <[^>]*> nop
++0000e318 <[^>]*> nop
++0000e31c <[^>]*> nop
++0000e320 <[^>]*> nop
++0000e324 <[^>]*> nop
++0000e328 <[^>]*> nop
++0000e32c <[^>]*> nop
++0000e330 <[^>]*> nop
++0000e334 <[^>]*> nop
++0000e338 <[^>]*> nop
++0000e33c <[^>]*> nop
++0000e340 <[^>]*> nop
++0000e344 <[^>]*> nop
++0000e348 <[^>]*> nop
++0000e34c <[^>]*> nop
++0000e350 <[^>]*> nop
++0000e354 <[^>]*> nop
++0000e358 <[^>]*> nop
++0000e35c <[^>]*> nop
++0000e360 <[^>]*> nop
++0000e364 <[^>]*> nop
++0000e368 <[^>]*> nop
++0000e36c <[^>]*> nop
++0000e370 <[^>]*> nop
++0000e374 <[^>]*> nop
++0000e378 <[^>]*> nop
++0000e37c <[^>]*> nop
++0000e380 <[^>]*> nop
++0000e384 <[^>]*> nop
++0000e388 <[^>]*> nop
++0000e38c <[^>]*> nop
++0000e390 <[^>]*> nop
++0000e394 <[^>]*> nop
++0000e398 <[^>]*> nop
++0000e39c <[^>]*> nop
++0000e3a0 <[^>]*> nop
++0000e3a4 <[^>]*> nop
++0000e3a8 <[^>]*> nop
++0000e3ac <[^>]*> nop
++0000e3b0 <[^>]*> nop
++0000e3b4 <[^>]*> nop
++0000e3b8 <[^>]*> nop
++0000e3bc <[^>]*> nop
++0000e3c0 <[^>]*> nop
++0000e3c4 <[^>]*> nop
++0000e3c8 <[^>]*> nop
++0000e3cc <[^>]*> nop
++0000e3d0 <[^>]*> nop
++0000e3d4 <[^>]*> nop
++0000e3d8 <[^>]*> nop
++0000e3dc <[^>]*> nop
++0000e3e0 <[^>]*> nop
++0000e3e4 <[^>]*> nop
++0000e3e8 <[^>]*> nop
++0000e3ec <[^>]*> nop
++0000e3f0 <[^>]*> nop
++0000e3f4 <[^>]*> nop
++0000e3f8 <[^>]*> nop
++0000e3fc <[^>]*> nop
++0000e400 <[^>]*> nop
++0000e404 <[^>]*> nop
++0000e408 <[^>]*> nop
++0000e40c <[^>]*> nop
++0000e410 <[^>]*> nop
++0000e414 <[^>]*> nop
++0000e418 <[^>]*> nop
++0000e41c <[^>]*> nop
++0000e420 <[^>]*> nop
++0000e424 <[^>]*> nop
++0000e428 <[^>]*> nop
++0000e42c <[^>]*> nop
++0000e430 <[^>]*> nop
++0000e434 <[^>]*> nop
++0000e438 <[^>]*> nop
++0000e43c <[^>]*> nop
++0000e440 <[^>]*> nop
++0000e444 <[^>]*> nop
++0000e448 <[^>]*> nop
++0000e44c <[^>]*> nop
++0000e450 <[^>]*> nop
++0000e454 <[^>]*> nop
++0000e458 <[^>]*> nop
++0000e45c <[^>]*> nop
++0000e460 <[^>]*> nop
++0000e464 <[^>]*> nop
++0000e468 <[^>]*> nop
++0000e46c <[^>]*> nop
++0000e470 <[^>]*> nop
++0000e474 <[^>]*> nop
++0000e478 <[^>]*> nop
++0000e47c <[^>]*> nop
++0000e480 <[^>]*> nop
++0000e484 <[^>]*> nop
++0000e488 <[^>]*> nop
++0000e48c <[^>]*> nop
++0000e490 <[^>]*> nop
++0000e494 <[^>]*> nop
++0000e498 <[^>]*> nop
++0000e49c <[^>]*> nop
++0000e4a0 <[^>]*> nop
++0000e4a4 <[^>]*> nop
++0000e4a8 <[^>]*> nop
++0000e4ac <[^>]*> nop
++0000e4b0 <[^>]*> nop
++0000e4b4 <[^>]*> nop
++0000e4b8 <[^>]*> nop
++0000e4bc <[^>]*> nop
++0000e4c0 <[^>]*> nop
++0000e4c4 <[^>]*> nop
++0000e4c8 <[^>]*> nop
++0000e4cc <[^>]*> nop
++0000e4d0 <[^>]*> nop
++0000e4d4 <[^>]*> nop
++0000e4d8 <[^>]*> nop
++0000e4dc <[^>]*> nop
++0000e4e0 <[^>]*> nop
++0000e4e4 <[^>]*> nop
++0000e4e8 <[^>]*> nop
++0000e4ec <[^>]*> nop
++0000e4f0 <[^>]*> nop
++0000e4f4 <[^>]*> nop
++0000e4f8 <[^>]*> nop
++0000e4fc <[^>]*> nop
++0000e500 <[^>]*> nop
++0000e504 <[^>]*> nop
++0000e508 <[^>]*> nop
++0000e50c <[^>]*> nop
++0000e510 <[^>]*> nop
++0000e514 <[^>]*> nop
++0000e518 <[^>]*> nop
++0000e51c <[^>]*> nop
++0000e520 <[^>]*> nop
++0000e524 <[^>]*> nop
++0000e528 <[^>]*> nop
++0000e52c <[^>]*> nop
++0000e530 <[^>]*> nop
++0000e534 <[^>]*> nop
++0000e538 <[^>]*> nop
++0000e53c <[^>]*> nop
++0000e540 <[^>]*> nop
++0000e544 <[^>]*> nop
++0000e548 <[^>]*> nop
++0000e54c <[^>]*> nop
++0000e550 <[^>]*> nop
++0000e554 <[^>]*> nop
++0000e558 <[^>]*> nop
++0000e55c <[^>]*> nop
++0000e560 <[^>]*> nop
++0000e564 <[^>]*> nop
++0000e568 <[^>]*> nop
++0000e56c <[^>]*> nop
++0000e570 <[^>]*> nop
++0000e574 <[^>]*> nop
++0000e578 <[^>]*> nop
++0000e57c <[^>]*> nop
++0000e580 <[^>]*> nop
++0000e584 <[^>]*> nop
++0000e588 <[^>]*> nop
++0000e58c <[^>]*> nop
++0000e590 <[^>]*> nop
++0000e594 <[^>]*> nop
++0000e598 <[^>]*> nop
++0000e59c <[^>]*> nop
++0000e5a0 <[^>]*> nop
++0000e5a4 <[^>]*> nop
++0000e5a8 <[^>]*> nop
++0000e5ac <[^>]*> nop
++0000e5b0 <[^>]*> nop
++0000e5b4 <[^>]*> nop
++0000e5b8 <[^>]*> nop
++0000e5bc <[^>]*> nop
++0000e5c0 <[^>]*> nop
++0000e5c4 <[^>]*> nop
++0000e5c8 <[^>]*> nop
++0000e5cc <[^>]*> nop
++0000e5d0 <[^>]*> nop
++0000e5d4 <[^>]*> nop
++0000e5d8 <[^>]*> nop
++0000e5dc <[^>]*> nop
++0000e5e0 <[^>]*> nop
++0000e5e4 <[^>]*> nop
++0000e5e8 <[^>]*> nop
++0000e5ec <[^>]*> nop
++0000e5f0 <[^>]*> nop
++0000e5f4 <[^>]*> nop
++0000e5f8 <[^>]*> nop
++0000e5fc <[^>]*> nop
++0000e600 <[^>]*> nop
++0000e604 <[^>]*> nop
++0000e608 <[^>]*> nop
++0000e60c <[^>]*> nop
++0000e610 <[^>]*> nop
++0000e614 <[^>]*> nop
++0000e618 <[^>]*> nop
++0000e61c <[^>]*> nop
++0000e620 <[^>]*> nop
++0000e624 <[^>]*> nop
++0000e628 <[^>]*> nop
++0000e62c <[^>]*> nop
++0000e630 <[^>]*> nop
++0000e634 <[^>]*> nop
++0000e638 <[^>]*> nop
++0000e63c <[^>]*> nop
++0000e640 <[^>]*> nop
++0000e644 <[^>]*> nop
++0000e648 <[^>]*> nop
++0000e64c <[^>]*> nop
++0000e650 <[^>]*> nop
++0000e654 <[^>]*> nop
++0000e658 <[^>]*> nop
++0000e65c <[^>]*> nop
++0000e660 <[^>]*> nop
++0000e664 <[^>]*> nop
++0000e668 <[^>]*> nop
++0000e66c <[^>]*> nop
++0000e670 <[^>]*> nop
++0000e674 <[^>]*> nop
++0000e678 <[^>]*> nop
++0000e67c <[^>]*> nop
++0000e680 <[^>]*> nop
++0000e684 <[^>]*> nop
++0000e688 <[^>]*> nop
++0000e68c <[^>]*> nop
++0000e690 <[^>]*> nop
++0000e694 <[^>]*> nop
++0000e698 <[^>]*> nop
++0000e69c <[^>]*> nop
++0000e6a0 <[^>]*> nop
++0000e6a4 <[^>]*> nop
++0000e6a8 <[^>]*> nop
++0000e6ac <[^>]*> nop
++0000e6b0 <[^>]*> nop
++0000e6b4 <[^>]*> nop
++0000e6b8 <[^>]*> nop
++0000e6bc <[^>]*> nop
++0000e6c0 <[^>]*> nop
++0000e6c4 <[^>]*> nop
++0000e6c8 <[^>]*> nop
++0000e6cc <[^>]*> nop
++0000e6d0 <[^>]*> nop
++0000e6d4 <[^>]*> nop
++0000e6d8 <[^>]*> nop
++0000e6dc <[^>]*> nop
++0000e6e0 <[^>]*> nop
++0000e6e4 <[^>]*> nop
++0000e6e8 <[^>]*> nop
++0000e6ec <[^>]*> nop
++0000e6f0 <[^>]*> nop
++0000e6f4 <[^>]*> nop
++0000e6f8 <[^>]*> nop
++0000e6fc <[^>]*> nop
++0000e700 <[^>]*> nop
++0000e704 <[^>]*> nop
++0000e708 <[^>]*> nop
++0000e70c <[^>]*> nop
++0000e710 <[^>]*> nop
++0000e714 <[^>]*> nop
++0000e718 <[^>]*> nop
++0000e71c <[^>]*> nop
++0000e720 <[^>]*> nop
++0000e724 <[^>]*> nop
++0000e728 <[^>]*> nop
++0000e72c <[^>]*> nop
++0000e730 <[^>]*> nop
++0000e734 <[^>]*> nop
++0000e738 <[^>]*> nop
++0000e73c <[^>]*> nop
++0000e740 <[^>]*> nop
++0000e744 <[^>]*> nop
++0000e748 <[^>]*> nop
++0000e74c <[^>]*> nop
++0000e750 <[^>]*> nop
++0000e754 <[^>]*> nop
++0000e758 <[^>]*> nop
++0000e75c <[^>]*> nop
++0000e760 <[^>]*> nop
++0000e764 <[^>]*> nop
++0000e768 <[^>]*> nop
++0000e76c <[^>]*> nop
++0000e770 <[^>]*> nop
++0000e774 <[^>]*> nop
++0000e778 <[^>]*> nop
++0000e77c <[^>]*> nop
++0000e780 <[^>]*> nop
++0000e784 <[^>]*> nop
++0000e788 <[^>]*> nop
++0000e78c <[^>]*> nop
++0000e790 <[^>]*> nop
++0000e794 <[^>]*> nop
++0000e798 <[^>]*> nop
++0000e79c <[^>]*> nop
++0000e7a0 <[^>]*> nop
++0000e7a4 <[^>]*> nop
++0000e7a8 <[^>]*> nop
++0000e7ac <[^>]*> nop
++0000e7b0 <[^>]*> nop
++0000e7b4 <[^>]*> nop
++0000e7b8 <[^>]*> nop
++0000e7bc <[^>]*> nop
++0000e7c0 <[^>]*> nop
++0000e7c4 <[^>]*> nop
++0000e7c8 <[^>]*> nop
++0000e7cc <[^>]*> nop
++0000e7d0 <[^>]*> nop
++0000e7d4 <[^>]*> nop
++0000e7d8 <[^>]*> nop
++0000e7dc <[^>]*> nop
++0000e7e0 <[^>]*> nop
++0000e7e4 <[^>]*> nop
++0000e7e8 <[^>]*> nop
++0000e7ec <[^>]*> nop
++0000e7f0 <[^>]*> nop
++0000e7f4 <[^>]*> nop
++0000e7f8 <[^>]*> nop
++0000e7fc <[^>]*> nop
++0000e800 <[^>]*> nop
++0000e804 <[^>]*> nop
++0000e808 <[^>]*> nop
++0000e80c <[^>]*> nop
++0000e810 <[^>]*> nop
++0000e814 <[^>]*> nop
++0000e818 <[^>]*> nop
++0000e81c <[^>]*> nop
++0000e820 <[^>]*> nop
++0000e824 <[^>]*> nop
++0000e828 <[^>]*> nop
++0000e82c <[^>]*> nop
++0000e830 <[^>]*> nop
++0000e834 <[^>]*> nop
++0000e838 <[^>]*> nop
++0000e83c <[^>]*> nop
++0000e840 <[^>]*> nop
++0000e844 <[^>]*> nop
++0000e848 <[^>]*> nop
++0000e84c <[^>]*> nop
++0000e850 <[^>]*> nop
++0000e854 <[^>]*> nop
++0000e858 <[^>]*> nop
++0000e85c <[^>]*> nop
++0000e860 <[^>]*> nop
++0000e864 <[^>]*> nop
++0000e868 <[^>]*> nop
++0000e86c <[^>]*> nop
++0000e870 <[^>]*> nop
++0000e874 <[^>]*> nop
++0000e878 <[^>]*> nop
++0000e87c <[^>]*> nop
++0000e880 <[^>]*> nop
++0000e884 <[^>]*> nop
++0000e888 <[^>]*> nop
++0000e88c <[^>]*> nop
++0000e890 <[^>]*> nop
++0000e894 <[^>]*> nop
++0000e898 <[^>]*> nop
++0000e89c <[^>]*> nop
++0000e8a0 <[^>]*> nop
++0000e8a4 <[^>]*> nop
++0000e8a8 <[^>]*> nop
++0000e8ac <[^>]*> nop
++0000e8b0 <[^>]*> nop
++0000e8b4 <[^>]*> nop
++0000e8b8 <[^>]*> nop
++0000e8bc <[^>]*> nop
++0000e8c0 <[^>]*> nop
++0000e8c4 <[^>]*> nop
++0000e8c8 <[^>]*> nop
++0000e8cc <[^>]*> nop
++0000e8d0 <[^>]*> nop
++0000e8d4 <[^>]*> nop
++0000e8d8 <[^>]*> nop
++0000e8dc <[^>]*> nop
++0000e8e0 <[^>]*> nop
++0000e8e4 <[^>]*> nop
++0000e8e8 <[^>]*> nop
++0000e8ec <[^>]*> nop
++0000e8f0 <[^>]*> nop
++0000e8f4 <[^>]*> nop
++0000e8f8 <[^>]*> nop
++0000e8fc <[^>]*> nop
++0000e900 <[^>]*> nop
++0000e904 <[^>]*> nop
++0000e908 <[^>]*> nop
++0000e90c <[^>]*> nop
++0000e910 <[^>]*> nop
++0000e914 <[^>]*> nop
++0000e918 <[^>]*> nop
++0000e91c <[^>]*> nop
++0000e920 <[^>]*> nop
++0000e924 <[^>]*> nop
++0000e928 <[^>]*> nop
++0000e92c <[^>]*> nop
++0000e930 <[^>]*> nop
++0000e934 <[^>]*> nop
++0000e938 <[^>]*> nop
++0000e93c <[^>]*> nop
++0000e940 <[^>]*> nop
++0000e944 <[^>]*> nop
++0000e948 <[^>]*> nop
++0000e94c <[^>]*> nop
++0000e950 <[^>]*> nop
++0000e954 <[^>]*> nop
++0000e958 <[^>]*> nop
++0000e95c <[^>]*> nop
++0000e960 <[^>]*> nop
++0000e964 <[^>]*> nop
++0000e968 <[^>]*> nop
++0000e96c <[^>]*> nop
++0000e970 <[^>]*> nop
++0000e974 <[^>]*> nop
++0000e978 <[^>]*> nop
++0000e97c <[^>]*> nop
++0000e980 <[^>]*> nop
++0000e984 <[^>]*> nop
++0000e988 <[^>]*> nop
++0000e98c <[^>]*> nop
++0000e990 <[^>]*> nop
++0000e994 <[^>]*> nop
++0000e998 <[^>]*> nop
++0000e99c <[^>]*> nop
++0000e9a0 <[^>]*> nop
++0000e9a4 <[^>]*> nop
++0000e9a8 <[^>]*> nop
++0000e9ac <[^>]*> nop
++0000e9b0 <[^>]*> nop
++0000e9b4 <[^>]*> nop
++0000e9b8 <[^>]*> nop
++0000e9bc <[^>]*> nop
++0000e9c0 <[^>]*> nop
++0000e9c4 <[^>]*> nop
++0000e9c8 <[^>]*> nop
++0000e9cc <[^>]*> nop
++0000e9d0 <[^>]*> nop
++0000e9d4 <[^>]*> nop
++0000e9d8 <[^>]*> nop
++0000e9dc <[^>]*> nop
++0000e9e0 <[^>]*> nop
++0000e9e4 <[^>]*> nop
++0000e9e8 <[^>]*> nop
++0000e9ec <[^>]*> nop
++0000e9f0 <[^>]*> nop
++0000e9f4 <[^>]*> nop
++0000e9f8 <[^>]*> nop
++0000e9fc <[^>]*> nop
++0000ea00 <[^>]*> nop
++0000ea04 <[^>]*> nop
++0000ea08 <[^>]*> nop
++0000ea0c <[^>]*> nop
++0000ea10 <[^>]*> nop
++0000ea14 <[^>]*> nop
++0000ea18 <[^>]*> nop
++0000ea1c <[^>]*> nop
++0000ea20 <[^>]*> nop
++0000ea24 <[^>]*> nop
++0000ea28 <[^>]*> nop
++0000ea2c <[^>]*> nop
++0000ea30 <[^>]*> nop
++0000ea34 <[^>]*> nop
++0000ea38 <[^>]*> nop
++0000ea3c <[^>]*> nop
++0000ea40 <[^>]*> nop
++0000ea44 <[^>]*> nop
++0000ea48 <[^>]*> nop
++0000ea4c <[^>]*> nop
++0000ea50 <[^>]*> nop
++0000ea54 <[^>]*> nop
++0000ea58 <[^>]*> nop
++0000ea5c <[^>]*> nop
++0000ea60 <[^>]*> nop
++0000ea64 <[^>]*> nop
++0000ea68 <[^>]*> nop
++0000ea6c <[^>]*> nop
++0000ea70 <[^>]*> nop
++0000ea74 <[^>]*> nop
++0000ea78 <[^>]*> nop
++0000ea7c <[^>]*> nop
++0000ea80 <[^>]*> nop
++0000ea84 <[^>]*> nop
++0000ea88 <[^>]*> nop
++0000ea8c <[^>]*> nop
++0000ea90 <[^>]*> nop
++0000ea94 <[^>]*> nop
++0000ea98 <[^>]*> nop
++0000ea9c <[^>]*> nop
++0000eaa0 <[^>]*> nop
++0000eaa4 <[^>]*> nop
++0000eaa8 <[^>]*> nop
++0000eaac <[^>]*> nop
++0000eab0 <[^>]*> nop
++0000eab4 <[^>]*> nop
++0000eab8 <[^>]*> nop
++0000eabc <[^>]*> nop
++0000eac0 <[^>]*> nop
++0000eac4 <[^>]*> nop
++0000eac8 <[^>]*> nop
++0000eacc <[^>]*> nop
++0000ead0 <[^>]*> nop
++0000ead4 <[^>]*> nop
++0000ead8 <[^>]*> nop
++0000eadc <[^>]*> nop
++0000eae0 <[^>]*> nop
++0000eae4 <[^>]*> nop
++0000eae8 <[^>]*> nop
++0000eaec <[^>]*> nop
++0000eaf0 <[^>]*> nop
++0000eaf4 <[^>]*> nop
++0000eaf8 <[^>]*> nop
++0000eafc <[^>]*> nop
++0000eb00 <[^>]*> nop
++0000eb04 <[^>]*> nop
++0000eb08 <[^>]*> nop
++0000eb0c <[^>]*> nop
++0000eb10 <[^>]*> nop
++0000eb14 <[^>]*> nop
++0000eb18 <[^>]*> nop
++0000eb1c <[^>]*> nop
++0000eb20 <[^>]*> nop
++0000eb24 <[^>]*> nop
++0000eb28 <[^>]*> nop
++0000eb2c <[^>]*> nop
++0000eb30 <[^>]*> nop
++0000eb34 <[^>]*> nop
++0000eb38 <[^>]*> nop
++0000eb3c <[^>]*> nop
++0000eb40 <[^>]*> nop
++0000eb44 <[^>]*> nop
++0000eb48 <[^>]*> nop
++0000eb4c <[^>]*> nop
++0000eb50 <[^>]*> nop
++0000eb54 <[^>]*> nop
++0000eb58 <[^>]*> nop
++0000eb5c <[^>]*> nop
++0000eb60 <[^>]*> nop
++0000eb64 <[^>]*> nop
++0000eb68 <[^>]*> nop
++0000eb6c <[^>]*> nop
++0000eb70 <[^>]*> nop
++0000eb74 <[^>]*> nop
++0000eb78 <[^>]*> nop
++0000eb7c <[^>]*> nop
++0000eb80 <[^>]*> nop
++0000eb84 <[^>]*> nop
++0000eb88 <[^>]*> nop
++0000eb8c <[^>]*> nop
++0000eb90 <[^>]*> nop
++0000eb94 <[^>]*> nop
++0000eb98 <[^>]*> nop
++0000eb9c <[^>]*> nop
++0000eba0 <[^>]*> nop
++0000eba4 <[^>]*> nop
++0000eba8 <[^>]*> nop
++0000ebac <[^>]*> nop
++0000ebb0 <[^>]*> nop
++0000ebb4 <[^>]*> nop
++0000ebb8 <[^>]*> nop
++0000ebbc <[^>]*> nop
++0000ebc0 <[^>]*> nop
++0000ebc4 <[^>]*> nop
++0000ebc8 <[^>]*> nop
++0000ebcc <[^>]*> nop
++0000ebd0 <[^>]*> nop
++0000ebd4 <[^>]*> nop
++0000ebd8 <[^>]*> nop
++0000ebdc <[^>]*> nop
++0000ebe0 <[^>]*> nop
++0000ebe4 <[^>]*> nop
++0000ebe8 <[^>]*> nop
++0000ebec <[^>]*> nop
++0000ebf0 <[^>]*> nop
++0000ebf4 <[^>]*> nop
++0000ebf8 <[^>]*> nop
++0000ebfc <[^>]*> nop
++0000ec00 <[^>]*> nop
++0000ec04 <[^>]*> nop
++0000ec08 <[^>]*> nop
++0000ec0c <[^>]*> nop
++0000ec10 <[^>]*> nop
++0000ec14 <[^>]*> nop
++0000ec18 <[^>]*> nop
++0000ec1c <[^>]*> nop
++0000ec20 <[^>]*> nop
++0000ec24 <[^>]*> nop
++0000ec28 <[^>]*> nop
++0000ec2c <[^>]*> nop
++0000ec30 <[^>]*> nop
++0000ec34 <[^>]*> nop
++0000ec38 <[^>]*> nop
++0000ec3c <[^>]*> nop
++0000ec40 <[^>]*> nop
++0000ec44 <[^>]*> nop
++0000ec48 <[^>]*> nop
++0000ec4c <[^>]*> nop
++0000ec50 <[^>]*> nop
++0000ec54 <[^>]*> nop
++0000ec58 <[^>]*> nop
++0000ec5c <[^>]*> nop
++0000ec60 <[^>]*> nop
++0000ec64 <[^>]*> nop
++0000ec68 <[^>]*> nop
++0000ec6c <[^>]*> nop
++0000ec70 <[^>]*> nop
++0000ec74 <[^>]*> nop
++0000ec78 <[^>]*> nop
++0000ec7c <[^>]*> nop
++0000ec80 <[^>]*> nop
++0000ec84 <[^>]*> nop
++0000ec88 <[^>]*> nop
++0000ec8c <[^>]*> nop
++0000ec90 <[^>]*> nop
++0000ec94 <[^>]*> nop
++0000ec98 <[^>]*> nop
++0000ec9c <[^>]*> nop
++0000eca0 <[^>]*> nop
++0000eca4 <[^>]*> nop
++0000eca8 <[^>]*> nop
++0000ecac <[^>]*> nop
++0000ecb0 <[^>]*> nop
++0000ecb4 <[^>]*> nop
++0000ecb8 <[^>]*> nop
++0000ecbc <[^>]*> nop
++0000ecc0 <[^>]*> nop
++0000ecc4 <[^>]*> nop
++0000ecc8 <[^>]*> nop
++0000eccc <[^>]*> nop
++0000ecd0 <[^>]*> nop
++0000ecd4 <[^>]*> nop
++0000ecd8 <[^>]*> nop
++0000ecdc <[^>]*> nop
++0000ece0 <[^>]*> nop
++0000ece4 <[^>]*> nop
++0000ece8 <[^>]*> nop
++0000ecec <[^>]*> nop
++0000ecf0 <[^>]*> nop
++0000ecf4 <[^>]*> nop
++0000ecf8 <[^>]*> nop
++0000ecfc <[^>]*> nop
++0000ed00 <[^>]*> nop
++0000ed04 <[^>]*> nop
++0000ed08 <[^>]*> nop
++0000ed0c <[^>]*> nop
++0000ed10 <[^>]*> nop
++0000ed14 <[^>]*> nop
++0000ed18 <[^>]*> nop
++0000ed1c <[^>]*> nop
++0000ed20 <[^>]*> nop
++0000ed24 <[^>]*> nop
++0000ed28 <[^>]*> nop
++0000ed2c <[^>]*> nop
++0000ed30 <[^>]*> nop
++0000ed34 <[^>]*> nop
++0000ed38 <[^>]*> nop
++0000ed3c <[^>]*> nop
++0000ed40 <[^>]*> nop
++0000ed44 <[^>]*> nop
++0000ed48 <[^>]*> nop
++0000ed4c <[^>]*> nop
++0000ed50 <[^>]*> nop
++0000ed54 <[^>]*> nop
++0000ed58 <[^>]*> nop
++0000ed5c <[^>]*> nop
++0000ed60 <[^>]*> nop
++0000ed64 <[^>]*> nop
++0000ed68 <[^>]*> nop
++0000ed6c <[^>]*> nop
++0000ed70 <[^>]*> nop
++0000ed74 <[^>]*> nop
++0000ed78 <[^>]*> nop
++0000ed7c <[^>]*> nop
++0000ed80 <[^>]*> nop
++0000ed84 <[^>]*> nop
++0000ed88 <[^>]*> nop
++0000ed8c <[^>]*> nop
++0000ed90 <[^>]*> nop
++0000ed94 <[^>]*> nop
++0000ed98 <[^>]*> nop
++0000ed9c <[^>]*> nop
++0000eda0 <[^>]*> nop
++0000eda4 <[^>]*> nop
++0000eda8 <[^>]*> nop
++0000edac <[^>]*> nop
++0000edb0 <[^>]*> nop
++0000edb4 <[^>]*> nop
++0000edb8 <[^>]*> nop
++0000edbc <[^>]*> nop
++0000edc0 <[^>]*> nop
++0000edc4 <[^>]*> nop
++0000edc8 <[^>]*> nop
++0000edcc <[^>]*> nop
++0000edd0 <[^>]*> nop
++0000edd4 <[^>]*> nop
++0000edd8 <[^>]*> nop
++0000eddc <[^>]*> nop
++0000ede0 <[^>]*> nop
++0000ede4 <[^>]*> nop
++0000ede8 <[^>]*> nop
++0000edec <[^>]*> nop
++0000edf0 <[^>]*> nop
++0000edf4 <[^>]*> nop
++0000edf8 <[^>]*> nop
++0000edfc <[^>]*> nop
++0000ee00 <[^>]*> nop
++0000ee04 <[^>]*> nop
++0000ee08 <[^>]*> nop
++0000ee0c <[^>]*> nop
++0000ee10 <[^>]*> nop
++0000ee14 <[^>]*> nop
++0000ee18 <[^>]*> nop
++0000ee1c <[^>]*> nop
++0000ee20 <[^>]*> nop
++0000ee24 <[^>]*> nop
++0000ee28 <[^>]*> nop
++0000ee2c <[^>]*> nop
++0000ee30 <[^>]*> nop
++0000ee34 <[^>]*> nop
++0000ee38 <[^>]*> nop
++0000ee3c <[^>]*> nop
++0000ee40 <[^>]*> nop
++0000ee44 <[^>]*> nop
++0000ee48 <[^>]*> nop
++0000ee4c <[^>]*> nop
++0000ee50 <[^>]*> nop
++0000ee54 <[^>]*> nop
++0000ee58 <[^>]*> nop
++0000ee5c <[^>]*> nop
++0000ee60 <[^>]*> nop
++0000ee64 <[^>]*> nop
++0000ee68 <[^>]*> nop
++0000ee6c <[^>]*> nop
++0000ee70 <[^>]*> nop
++0000ee74 <[^>]*> nop
++0000ee78 <[^>]*> nop
++0000ee7c <[^>]*> nop
++0000ee80 <[^>]*> nop
++0000ee84 <[^>]*> nop
++0000ee88 <[^>]*> nop
++0000ee8c <[^>]*> nop
++0000ee90 <[^>]*> nop
++0000ee94 <[^>]*> nop
++0000ee98 <[^>]*> nop
++0000ee9c <[^>]*> nop
++0000eea0 <[^>]*> nop
++0000eea4 <[^>]*> nop
++0000eea8 <[^>]*> nop
++0000eeac <[^>]*> nop
++0000eeb0 <[^>]*> nop
++0000eeb4 <[^>]*> nop
++0000eeb8 <[^>]*> nop
++0000eebc <[^>]*> nop
++0000eec0 <[^>]*> nop
++0000eec4 <[^>]*> nop
++0000eec8 <[^>]*> nop
++0000eecc <[^>]*> nop
++0000eed0 <[^>]*> nop
++0000eed4 <[^>]*> nop
++0000eed8 <[^>]*> nop
++0000eedc <[^>]*> nop
++0000eee0 <[^>]*> nop
++0000eee4 <[^>]*> nop
++0000eee8 <[^>]*> nop
++0000eeec <[^>]*> nop
++0000eef0 <[^>]*> nop
++0000eef4 <[^>]*> nop
++0000eef8 <[^>]*> nop
++0000eefc <[^>]*> nop
++0000ef00 <[^>]*> nop
++0000ef04 <[^>]*> nop
++0000ef08 <[^>]*> nop
++0000ef0c <[^>]*> nop
++0000ef10 <[^>]*> nop
++0000ef14 <[^>]*> nop
++0000ef18 <[^>]*> nop
++0000ef1c <[^>]*> nop
++0000ef20 <[^>]*> nop
++0000ef24 <[^>]*> nop
++0000ef28 <[^>]*> nop
++0000ef2c <[^>]*> nop
++0000ef30 <[^>]*> nop
++0000ef34 <[^>]*> nop
++0000ef38 <[^>]*> nop
++0000ef3c <[^>]*> nop
++0000ef40 <[^>]*> nop
++0000ef44 <[^>]*> nop
++0000ef48 <[^>]*> nop
++0000ef4c <[^>]*> nop
++0000ef50 <[^>]*> nop
++0000ef54 <[^>]*> nop
++0000ef58 <[^>]*> nop
++0000ef5c <[^>]*> nop
++0000ef60 <[^>]*> nop
++0000ef64 <[^>]*> nop
++0000ef68 <[^>]*> nop
++0000ef6c <[^>]*> nop
++0000ef70 <[^>]*> nop
++0000ef74 <[^>]*> nop
++0000ef78 <[^>]*> nop
++0000ef7c <[^>]*> nop
++0000ef80 <[^>]*> nop
++0000ef84 <[^>]*> nop
++0000ef88 <[^>]*> nop
++0000ef8c <[^>]*> nop
++0000ef90 <[^>]*> nop
++0000ef94 <[^>]*> nop
++0000ef98 <[^>]*> nop
++0000ef9c <[^>]*> nop
++0000efa0 <[^>]*> nop
++0000efa4 <[^>]*> nop
++0000efa8 <[^>]*> nop
++0000efac <[^>]*> nop
++0000efb0 <[^>]*> nop
++0000efb4 <[^>]*> nop
++0000efb8 <[^>]*> nop
++0000efbc <[^>]*> nop
++0000efc0 <[^>]*> nop
++0000efc4 <[^>]*> nop
++0000efc8 <[^>]*> nop
++0000efcc <[^>]*> nop
++0000efd0 <[^>]*> nop
++0000efd4 <[^>]*> nop
++0000efd8 <[^>]*> nop
++0000efdc <[^>]*> nop
++0000efe0 <[^>]*> nop
++0000efe4 <[^>]*> nop
++0000efe8 <[^>]*> nop
++0000efec <[^>]*> nop
++0000eff0 <[^>]*> nop
++0000eff4 <[^>]*> nop
++0000eff8 <[^>]*> nop
++0000effc <[^>]*> nop
++0000f000 <[^>]*> nop
++0000f004 <[^>]*> nop
++0000f008 <[^>]*> nop
++0000f00c <[^>]*> nop
++0000f010 <[^>]*> nop
++0000f014 <[^>]*> nop
++0000f018 <[^>]*> nop
++0000f01c <[^>]*> nop
++0000f020 <[^>]*> nop
++0000f024 <[^>]*> nop
++0000f028 <[^>]*> nop
++0000f02c <[^>]*> nop
++0000f030 <[^>]*> nop
++0000f034 <[^>]*> nop
++0000f038 <[^>]*> nop
++0000f03c <[^>]*> nop
++0000f040 <[^>]*> nop
++0000f044 <[^>]*> nop
++0000f048 <[^>]*> nop
++0000f04c <[^>]*> nop
++0000f050 <[^>]*> nop
++0000f054 <[^>]*> nop
++0000f058 <[^>]*> nop
++0000f05c <[^>]*> nop
++0000f060 <[^>]*> nop
++0000f064 <[^>]*> nop
++0000f068 <[^>]*> nop
++0000f06c <[^>]*> nop
++0000f070 <[^>]*> nop
++0000f074 <[^>]*> nop
++0000f078 <[^>]*> nop
++0000f07c <[^>]*> nop
++0000f080 <[^>]*> nop
++0000f084 <[^>]*> nop
++0000f088 <[^>]*> nop
++0000f08c <[^>]*> nop
++0000f090 <[^>]*> nop
++0000f094 <[^>]*> nop
++0000f098 <[^>]*> nop
++0000f09c <[^>]*> nop
++0000f0a0 <[^>]*> nop
++0000f0a4 <[^>]*> nop
++0000f0a8 <[^>]*> nop
++0000f0ac <[^>]*> nop
++0000f0b0 <[^>]*> nop
++0000f0b4 <[^>]*> nop
++0000f0b8 <[^>]*> nop
++0000f0bc <[^>]*> nop
++0000f0c0 <[^>]*> nop
++0000f0c4 <[^>]*> nop
++0000f0c8 <[^>]*> nop
++0000f0cc <[^>]*> nop
++0000f0d0 <[^>]*> nop
++0000f0d4 <[^>]*> nop
++0000f0d8 <[^>]*> nop
++0000f0dc <[^>]*> nop
++0000f0e0 <[^>]*> nop
++0000f0e4 <[^>]*> nop
++0000f0e8 <[^>]*> nop
++0000f0ec <[^>]*> nop
++0000f0f0 <[^>]*> nop
++0000f0f4 <[^>]*> nop
++0000f0f8 <[^>]*> nop
++0000f0fc <[^>]*> nop
++0000f100 <[^>]*> nop
++0000f104 <[^>]*> nop
++0000f108 <[^>]*> nop
++0000f10c <[^>]*> nop
++0000f110 <[^>]*> nop
++0000f114 <[^>]*> nop
++0000f118 <[^>]*> nop
++0000f11c <[^>]*> nop
++0000f120 <[^>]*> nop
++0000f124 <[^>]*> nop
++0000f128 <[^>]*> nop
++0000f12c <[^>]*> nop
++0000f130 <[^>]*> nop
++0000f134 <[^>]*> nop
++0000f138 <[^>]*> nop
++0000f13c <[^>]*> nop
++0000f140 <[^>]*> nop
++0000f144 <[^>]*> nop
++0000f148 <[^>]*> nop
++0000f14c <[^>]*> nop
++0000f150 <[^>]*> nop
++0000f154 <[^>]*> nop
++0000f158 <[^>]*> nop
++0000f15c <[^>]*> nop
++0000f160 <[^>]*> nop
++0000f164 <[^>]*> nop
++0000f168 <[^>]*> nop
++0000f16c <[^>]*> nop
++0000f170 <[^>]*> nop
++0000f174 <[^>]*> nop
++0000f178 <[^>]*> nop
++0000f17c <[^>]*> nop
++0000f180 <[^>]*> nop
++0000f184 <[^>]*> nop
++0000f188 <[^>]*> nop
++0000f18c <[^>]*> nop
++0000f190 <[^>]*> nop
++0000f194 <[^>]*> nop
++0000f198 <[^>]*> nop
++0000f19c <[^>]*> nop
++0000f1a0 <[^>]*> nop
++0000f1a4 <[^>]*> nop
++0000f1a8 <[^>]*> nop
++0000f1ac <[^>]*> nop
++0000f1b0 <[^>]*> nop
++0000f1b4 <[^>]*> nop
++0000f1b8 <[^>]*> nop
++0000f1bc <[^>]*> nop
++0000f1c0 <[^>]*> nop
++0000f1c4 <[^>]*> nop
++0000f1c8 <[^>]*> nop
++0000f1cc <[^>]*> nop
++0000f1d0 <[^>]*> nop
++0000f1d4 <[^>]*> nop
++0000f1d8 <[^>]*> nop
++0000f1dc <[^>]*> nop
++0000f1e0 <[^>]*> nop
++0000f1e4 <[^>]*> nop
++0000f1e8 <[^>]*> nop
++0000f1ec <[^>]*> nop
++0000f1f0 <[^>]*> nop
++0000f1f4 <[^>]*> nop
++0000f1f8 <[^>]*> nop
++0000f1fc <[^>]*> nop
++0000f200 <[^>]*> nop
++0000f204 <[^>]*> nop
++0000f208 <[^>]*> nop
++0000f20c <[^>]*> nop
++0000f210 <[^>]*> nop
++0000f214 <[^>]*> nop
++0000f218 <[^>]*> nop
++0000f21c <[^>]*> nop
++0000f220 <[^>]*> nop
++0000f224 <[^>]*> nop
++0000f228 <[^>]*> nop
++0000f22c <[^>]*> nop
++0000f230 <[^>]*> nop
++0000f234 <[^>]*> nop
++0000f238 <[^>]*> nop
++0000f23c <[^>]*> nop
++0000f240 <[^>]*> nop
++0000f244 <[^>]*> nop
++0000f248 <[^>]*> nop
++0000f24c <[^>]*> nop
++0000f250 <[^>]*> nop
++0000f254 <[^>]*> nop
++0000f258 <[^>]*> nop
++0000f25c <[^>]*> nop
++0000f260 <[^>]*> nop
++0000f264 <[^>]*> nop
++0000f268 <[^>]*> nop
++0000f26c <[^>]*> nop
++0000f270 <[^>]*> nop
++0000f274 <[^>]*> nop
++0000f278 <[^>]*> nop
++0000f27c <[^>]*> nop
++0000f280 <[^>]*> nop
++0000f284 <[^>]*> nop
++0000f288 <[^>]*> nop
++0000f28c <[^>]*> nop
++0000f290 <[^>]*> nop
++0000f294 <[^>]*> nop
++0000f298 <[^>]*> nop
++0000f29c <[^>]*> nop
++0000f2a0 <[^>]*> nop
++0000f2a4 <[^>]*> nop
++0000f2a8 <[^>]*> nop
++0000f2ac <[^>]*> nop
++0000f2b0 <[^>]*> nop
++0000f2b4 <[^>]*> nop
++0000f2b8 <[^>]*> nop
++0000f2bc <[^>]*> nop
++0000f2c0 <[^>]*> nop
++0000f2c4 <[^>]*> nop
++0000f2c8 <[^>]*> nop
++0000f2cc <[^>]*> nop
++0000f2d0 <[^>]*> nop
++0000f2d4 <[^>]*> nop
++0000f2d8 <[^>]*> nop
++0000f2dc <[^>]*> nop
++0000f2e0 <[^>]*> nop
++0000f2e4 <[^>]*> nop
++0000f2e8 <[^>]*> nop
++0000f2ec <[^>]*> nop
++0000f2f0 <[^>]*> nop
++0000f2f4 <[^>]*> nop
++0000f2f8 <[^>]*> nop
++0000f2fc <[^>]*> nop
++0000f300 <[^>]*> nop
++0000f304 <[^>]*> nop
++0000f308 <[^>]*> nop
++0000f30c <[^>]*> nop
++0000f310 <[^>]*> nop
++0000f314 <[^>]*> nop
++0000f318 <[^>]*> nop
++0000f31c <[^>]*> nop
++0000f320 <[^>]*> nop
++0000f324 <[^>]*> nop
++0000f328 <[^>]*> nop
++0000f32c <[^>]*> nop
++0000f330 <[^>]*> nop
++0000f334 <[^>]*> nop
++0000f338 <[^>]*> nop
++0000f33c <[^>]*> nop
++0000f340 <[^>]*> nop
++0000f344 <[^>]*> nop
++0000f348 <[^>]*> nop
++0000f34c <[^>]*> nop
++0000f350 <[^>]*> nop
++0000f354 <[^>]*> nop
++0000f358 <[^>]*> nop
++0000f35c <[^>]*> nop
++0000f360 <[^>]*> nop
++0000f364 <[^>]*> nop
++0000f368 <[^>]*> nop
++0000f36c <[^>]*> nop
++0000f370 <[^>]*> nop
++0000f374 <[^>]*> nop
++0000f378 <[^>]*> nop
++0000f37c <[^>]*> nop
++0000f380 <[^>]*> nop
++0000f384 <[^>]*> nop
++0000f388 <[^>]*> nop
++0000f38c <[^>]*> nop
++0000f390 <[^>]*> nop
++0000f394 <[^>]*> nop
++0000f398 <[^>]*> nop
++0000f39c <[^>]*> nop
++0000f3a0 <[^>]*> nop
++0000f3a4 <[^>]*> nop
++0000f3a8 <[^>]*> nop
++0000f3ac <[^>]*> nop
++0000f3b0 <[^>]*> nop
++0000f3b4 <[^>]*> nop
++0000f3b8 <[^>]*> nop
++0000f3bc <[^>]*> nop
++0000f3c0 <[^>]*> nop
++0000f3c4 <[^>]*> nop
++0000f3c8 <[^>]*> nop
++0000f3cc <[^>]*> nop
++0000f3d0 <[^>]*> nop
++0000f3d4 <[^>]*> nop
++0000f3d8 <[^>]*> nop
++0000f3dc <[^>]*> nop
++0000f3e0 <[^>]*> nop
++0000f3e4 <[^>]*> nop
++0000f3e8 <[^>]*> nop
++0000f3ec <[^>]*> nop
++0000f3f0 <[^>]*> nop
++0000f3f4 <[^>]*> nop
++0000f3f8 <[^>]*> nop
++0000f3fc <[^>]*> nop
++0000f400 <[^>]*> nop
++0000f404 <[^>]*> nop
++0000f408 <[^>]*> nop
++0000f40c <[^>]*> nop
++0000f410 <[^>]*> nop
++0000f414 <[^>]*> nop
++0000f418 <[^>]*> nop
++0000f41c <[^>]*> nop
++0000f420 <[^>]*> nop
++0000f424 <[^>]*> nop
++0000f428 <[^>]*> nop
++0000f42c <[^>]*> nop
++0000f430 <[^>]*> nop
++0000f434 <[^>]*> nop
++0000f438 <[^>]*> nop
++0000f43c <[^>]*> nop
++0000f440 <[^>]*> nop
++0000f444 <[^>]*> nop
++0000f448 <[^>]*> nop
++0000f44c <[^>]*> nop
++0000f450 <[^>]*> nop
++0000f454 <[^>]*> nop
++0000f458 <[^>]*> nop
++0000f45c <[^>]*> nop
++0000f460 <[^>]*> nop
++0000f464 <[^>]*> nop
++0000f468 <[^>]*> nop
++0000f46c <[^>]*> nop
++0000f470 <[^>]*> nop
++0000f474 <[^>]*> nop
++0000f478 <[^>]*> nop
++0000f47c <[^>]*> nop
++0000f480 <[^>]*> nop
++0000f484 <[^>]*> nop
++0000f488 <[^>]*> nop
++0000f48c <[^>]*> nop
++0000f490 <[^>]*> nop
++0000f494 <[^>]*> nop
++0000f498 <[^>]*> nop
++0000f49c <[^>]*> nop
++0000f4a0 <[^>]*> nop
++0000f4a4 <[^>]*> nop
++0000f4a8 <[^>]*> nop
++0000f4ac <[^>]*> nop
++0000f4b0 <[^>]*> nop
++0000f4b4 <[^>]*> nop
++0000f4b8 <[^>]*> nop
++0000f4bc <[^>]*> nop
++0000f4c0 <[^>]*> nop
++0000f4c4 <[^>]*> nop
++0000f4c8 <[^>]*> nop
++0000f4cc <[^>]*> nop
++0000f4d0 <[^>]*> nop
++0000f4d4 <[^>]*> nop
++0000f4d8 <[^>]*> nop
++0000f4dc <[^>]*> nop
++0000f4e0 <[^>]*> nop
++0000f4e4 <[^>]*> nop
++0000f4e8 <[^>]*> nop
++0000f4ec <[^>]*> nop
++0000f4f0 <[^>]*> nop
++0000f4f4 <[^>]*> nop
++0000f4f8 <[^>]*> nop
++0000f4fc <[^>]*> nop
++0000f500 <[^>]*> nop
++0000f504 <[^>]*> nop
++0000f508 <[^>]*> nop
++0000f50c <[^>]*> nop
++0000f510 <[^>]*> nop
++0000f514 <[^>]*> nop
++0000f518 <[^>]*> nop
++0000f51c <[^>]*> nop
++0000f520 <[^>]*> nop
++0000f524 <[^>]*> nop
++0000f528 <[^>]*> nop
++0000f52c <[^>]*> nop
++0000f530 <[^>]*> nop
++0000f534 <[^>]*> nop
++0000f538 <[^>]*> nop
++0000f53c <[^>]*> nop
++0000f540 <[^>]*> nop
++0000f544 <[^>]*> nop
++0000f548 <[^>]*> nop
++0000f54c <[^>]*> nop
++0000f550 <[^>]*> nop
++0000f554 <[^>]*> nop
++0000f558 <[^>]*> nop
++0000f55c <[^>]*> nop
++0000f560 <[^>]*> nop
++0000f564 <[^>]*> nop
++0000f568 <[^>]*> nop
++0000f56c <[^>]*> nop
++0000f570 <[^>]*> nop
++0000f574 <[^>]*> nop
++0000f578 <[^>]*> nop
++0000f57c <[^>]*> nop
++0000f580 <[^>]*> nop
++0000f584 <[^>]*> nop
++0000f588 <[^>]*> nop
++0000f58c <[^>]*> nop
++0000f590 <[^>]*> nop
++0000f594 <[^>]*> nop
++0000f598 <[^>]*> nop
++0000f59c <[^>]*> nop
++0000f5a0 <[^>]*> nop
++0000f5a4 <[^>]*> nop
++0000f5a8 <[^>]*> nop
++0000f5ac <[^>]*> nop
++0000f5b0 <[^>]*> nop
++0000f5b4 <[^>]*> nop
++0000f5b8 <[^>]*> nop
++0000f5bc <[^>]*> nop
++0000f5c0 <[^>]*> nop
++0000f5c4 <[^>]*> nop
++0000f5c8 <[^>]*> nop
++0000f5cc <[^>]*> nop
++0000f5d0 <[^>]*> nop
++0000f5d4 <[^>]*> nop
++0000f5d8 <[^>]*> nop
++0000f5dc <[^>]*> nop
++0000f5e0 <[^>]*> nop
++0000f5e4 <[^>]*> nop
++0000f5e8 <[^>]*> nop
++0000f5ec <[^>]*> nop
++0000f5f0 <[^>]*> nop
++0000f5f4 <[^>]*> nop
++0000f5f8 <[^>]*> nop
++0000f5fc <[^>]*> nop
++0000f600 <[^>]*> nop
++0000f604 <[^>]*> nop
++0000f608 <[^>]*> nop
++0000f60c <[^>]*> nop
++0000f610 <[^>]*> nop
++0000f614 <[^>]*> nop
++0000f618 <[^>]*> nop
++0000f61c <[^>]*> nop
++0000f620 <[^>]*> nop
++0000f624 <[^>]*> nop
++0000f628 <[^>]*> nop
++0000f62c <[^>]*> nop
++0000f630 <[^>]*> nop
++0000f634 <[^>]*> nop
++0000f638 <[^>]*> nop
++0000f63c <[^>]*> nop
++0000f640 <[^>]*> nop
++0000f644 <[^>]*> nop
++0000f648 <[^>]*> nop
++0000f64c <[^>]*> nop
++0000f650 <[^>]*> nop
++0000f654 <[^>]*> nop
++0000f658 <[^>]*> nop
++0000f65c <[^>]*> nop
++0000f660 <[^>]*> nop
++0000f664 <[^>]*> nop
++0000f668 <[^>]*> nop
++0000f66c <[^>]*> nop
++0000f670 <[^>]*> nop
++0000f674 <[^>]*> nop
++0000f678 <[^>]*> nop
++0000f67c <[^>]*> nop
++0000f680 <[^>]*> nop
++0000f684 <[^>]*> nop
++0000f688 <[^>]*> nop
++0000f68c <[^>]*> nop
++0000f690 <[^>]*> nop
++0000f694 <[^>]*> nop
++0000f698 <[^>]*> nop
++0000f69c <[^>]*> nop
++0000f6a0 <[^>]*> nop
++0000f6a4 <[^>]*> nop
++0000f6a8 <[^>]*> nop
++0000f6ac <[^>]*> nop
++0000f6b0 <[^>]*> nop
++0000f6b4 <[^>]*> nop
++0000f6b8 <[^>]*> nop
++0000f6bc <[^>]*> nop
++0000f6c0 <[^>]*> nop
++0000f6c4 <[^>]*> nop
++0000f6c8 <[^>]*> nop
++0000f6cc <[^>]*> nop
++0000f6d0 <[^>]*> nop
++0000f6d4 <[^>]*> nop
++0000f6d8 <[^>]*> nop
++0000f6dc <[^>]*> nop
++0000f6e0 <[^>]*> nop
++0000f6e4 <[^>]*> nop
++0000f6e8 <[^>]*> nop
++0000f6ec <[^>]*> nop
++0000f6f0 <[^>]*> nop
++0000f6f4 <[^>]*> nop
++0000f6f8 <[^>]*> nop
++0000f6fc <[^>]*> nop
++0000f700 <[^>]*> nop
++0000f704 <[^>]*> nop
++0000f708 <[^>]*> nop
++0000f70c <[^>]*> nop
++0000f710 <[^>]*> nop
++0000f714 <[^>]*> nop
++0000f718 <[^>]*> nop
++0000f71c <[^>]*> nop
++0000f720 <[^>]*> nop
++0000f724 <[^>]*> nop
++0000f728 <[^>]*> nop
++0000f72c <[^>]*> nop
++0000f730 <[^>]*> nop
++0000f734 <[^>]*> nop
++0000f738 <[^>]*> nop
++0000f73c <[^>]*> nop
++0000f740 <[^>]*> nop
++0000f744 <[^>]*> nop
++0000f748 <[^>]*> nop
++0000f74c <[^>]*> nop
++0000f750 <[^>]*> nop
++0000f754 <[^>]*> nop
++0000f758 <[^>]*> nop
++0000f75c <[^>]*> nop
++0000f760 <[^>]*> nop
++0000f764 <[^>]*> nop
++0000f768 <[^>]*> nop
++0000f76c <[^>]*> nop
++0000f770 <[^>]*> nop
++0000f774 <[^>]*> nop
++0000f778 <[^>]*> nop
++0000f77c <[^>]*> nop
++0000f780 <[^>]*> nop
++0000f784 <[^>]*> nop
++0000f788 <[^>]*> nop
++0000f78c <[^>]*> nop
++0000f790 <[^>]*> nop
++0000f794 <[^>]*> nop
++0000f798 <[^>]*> nop
++0000f79c <[^>]*> nop
++0000f7a0 <[^>]*> nop
++0000f7a4 <[^>]*> nop
++0000f7a8 <[^>]*> nop
++0000f7ac <[^>]*> nop
++0000f7b0 <[^>]*> nop
++0000f7b4 <[^>]*> nop
++0000f7b8 <[^>]*> nop
++0000f7bc <[^>]*> nop
++0000f7c0 <[^>]*> nop
++0000f7c4 <[^>]*> nop
++0000f7c8 <[^>]*> nop
++0000f7cc <[^>]*> nop
++0000f7d0 <[^>]*> nop
++0000f7d4 <[^>]*> nop
++0000f7d8 <[^>]*> nop
++0000f7dc <[^>]*> nop
++0000f7e0 <[^>]*> nop
++0000f7e4 <[^>]*> nop
++0000f7e8 <[^>]*> nop
++0000f7ec <[^>]*> nop
++0000f7f0 <[^>]*> nop
++0000f7f4 <[^>]*> nop
++0000f7f8 <[^>]*> nop
++0000f7fc <[^>]*> nop
++0000f800 <[^>]*> nop
++0000f804 <[^>]*> nop
++0000f808 <[^>]*> nop
++0000f80c <[^>]*> nop
++0000f810 <[^>]*> nop
++0000f814 <[^>]*> nop
++0000f818 <[^>]*> nop
++0000f81c <[^>]*> nop
++0000f820 <[^>]*> nop
++0000f824 <[^>]*> nop
++0000f828 <[^>]*> nop
++0000f82c <[^>]*> nop
++0000f830 <[^>]*> nop
++0000f834 <[^>]*> nop
++0000f838 <[^>